멀티태스크에 대한 궁금증.

puaxx의 이미지

제가 알고 있는 최대한의 지식을 가지고 궁금증에 대한 것을 적어 보겠습니다..

요즘 어셈블리어를 학습하고 있습니다..

컴퓨터에 CPU가 있고,CPU에는 EAX,EBX등등 레지스터들이 딸려 있다는 것은 이미 알고 있었던 것들이지요..

근데...CPU에 EAX,EBX등등의 레지스터가 각각하나씩 있다면...그럼 멀티태스크 환경은 어떻게 구현이 될까하는 생각이 들었습니다..

운영체제가 제어하는것인가요? 그럼 프로세스들마다 아주 빠른속도로 CPU를 점유하고 다른 프로세스로 넘기고 그러는것인가요? 이런경우라면 중간에 어느 프로세스가 CPU를 독점하고 있다면 운영체제가 멈추는 현상이 발생할텐데..-_-;;

만약에 동시에 레지스터를 액세스 한다면 -_-;;분명히 컴퓨터는 동작을 멈출겁니다.(꼬여서...)

-_-;;궁금합니다..CPU와 레지스터는 각각 하나씩만 있는데 어떻게 이 많은 프로세스들이 동시다발적으로 서로 독립된 주체로 동작할 수 있는지가 궁금합니다..

plasticbox의 이미지

저도 요즘 학교에서 어셈을 배우고 있습니다...
얼마전 시험을 봤는데... =_=;;;; 점수는... 크흠;;;

일단 제가 알고 있기에는 puaxx님이 생각하신 것이 맞습니다.

운영체제가 각각 프로그램마다 일정 시간마다 여러차례 돌려가면서 실행을 시켜서 실제로는 조금씩 순차적으로 실행되는거지만 워낙 속도가 빨라서 사람이 보기에는 동시에 실행되는것 처럼 보이는 것이라고 합니다.

잠시 실행된 후 정보는 레지스터나 메모리에 저장되고 잠시 딴일하고 다시 불러와서 처리하고 저장하고 딴일하고... 이런 식으로 진행되는것으로 알고 있습니다.

또한.. CPU가 일을하는데 여러 단계가 있는데.. fetch, decode, excute,기타등등..
예전의 CPU등은 하나의 일이 fetch되면 excute로 마무리 될때까지 자원이 남아도 아무런 일도 못했는데..
486부터인가? pipelining이 되어서 첫번째 일이 fetch가 되고 decode가 될때 두번째 일은 fetch가 되고 이런식으로 실행되는것이 가능해졌고...
Pentium부터는 superscalar라고 좀더 발전된 형식의 기능이 있다고 합니다.

얼마전 시험보고... 내용이 다 포맷되서.. 정확한건지는... 쿨럭;;;;;;

Enjoy Life~!

#################
Enjoy Life~!

cinsk의 이미지

> 운영체제가 제어하는것인가요?
물론입니다.

> 그럼 프로세스들마다 아주 빠른속도로 CPU를 점유하고
> 다른 프로세스로 넘기고 그러는것인가요?
예.

> 이런경우라면 중간에 어느 프로세스가 CPU를 독점하고 있다면
> 운영체제가 멈추는 현상이 발생할텐데..-_-;;
당연히 그런 상황이라면 멈추겠죠. 하지만 제대로 된 OS라면 그런 일이 없을 겁니다.
주체가 프로세스여서 시간을 놔주는 형태가 아니라, 주체인 OS가 프로세스에게
시간을 할당해 주는 꼴이기 때문입니다.

> 만약에 동시에 레지스터를 액세스 한다면 -_-;;
> 분명히 컴퓨터는 동작을 멈출겁니다.(꼬여서...)
당연합니다. 하지만 제대로 된 OS라면 그럴 일이 없습니다.

나중에 OS에 대해 배워 보시면 더욱 자세한 것을 알 수 있을 겁니다. 보통 각 프로세스에
대한 정보가 유지되는데, 이 정보에 register 정보들까지 다 들어 있습니다.
process control block (PCB)라고 부르기도 합니다.

따라서 A, B 프로세스가 있다면, A 프로세스가 주어진 시간을 다 쓴 경우, OS는 현재
레지스터 관련된 setting을 전부 A의 PCB에 기록합니다. 그리고 B의 PCB에서
레지스터 관련 setting을 다시 CPU register로 로딩해서 사용하는 것입니다.

여러 개의 CPU가 있지 않은 한 (hyperthreading 등도 여러개의 CPU로 간주해서.),
실제로 동시에 돌아가는 것이 아닙니다. 우선 순위가 높은 프로세스부터 조금씩 실행 시간을 할당 받아 동작하고, 다음 프로세스에게 OS가 그 제어권을 넘겨주는 형식으로 동작하는데, 이 것이 빨리 진행되기 때문에 동시에 동작하는 것처럼 보이는 것입니다.

물론 현재 OS와 Hardware는 많이 발전했기 때문에, DMA라든가, dual core(한 개 이상의 CPU) 등으로, 실제 동시에 돌아가는 작업이 전혀 없다고 말하기는 힘듭니다. 하지만 기본 개념은 위와 같습니다.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

puaxx의 이미지

역시 그렇군요...:-) 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.