22018, 1/1101 회원가입  로그인  
   W.H.
   해쿨.JPG (0 Byte), Download : 455     [오른쪽 버튼 눌러 다운 받기]
   그림이 질게에 않올라가서.. 레지스터 질문

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=20097 [복사]



그림 일단 보시고...


시분할 시스템은 여러 프로그램을 단계별로 빠르게 실행시켜서 동시에 실행하는것처럼 보이게 하는거잖아요...

그런데 프로그램 A에서 B로 전환될때 프로그램 A에 있던 레지스터는 어디에 저장이 되죠??

제가 알기론 CPU에는 EAX같은 레지가 하나씩밖에 없는걸로 아는데 말이죠..

아는 분들의 답변 부탁합니다~

  Hit : 8794     Date : 2011/03/03 05:02



    
별빛을담아 으음 살짝 틀린부분 지적하고 갈게요
시분할 시스템의 정의는 정해진 시간에 CPU를 잘게 쪼개서 동시에 여러 사용자가 쓸 수 있게 해주는 겁니다.

즉 단위시간당 동시에 할 수 있는 일이지요. 저도 아직 찾아보지 않은 상태라 잘 모르지만...
꽤나 아구가 들어맞는 매력적인 한가지 가설를 들어보죠. 뭔가 걸리는게 있지만요...

VM웨어의 가상컴퓨터를 게스트, 실질적인 OS가 설치된 쪽을 호스트라고 할때...
양 쪽은 OS가 다름에도 불구하고 동시에 작업을 할 수 있습니다.

VM웨어의 경우 게스트에 램,하드디스크를 할당해 준다는 점을 생각해 볼 때...
레지스터 값을 기억장치에 저장한다고 본다면 VM웨어가 레지스터값도 영향받지 않으면서
동시에 VM웨어의 속도가 느리다는 점 또한 설명할 수 있죠.

단지 게스트의 램이나 하드디스크의 번지수를 VM웨어에서 쓸 수 있겠끔
가상의 주소로 다시 맵핑해주어야 하겠지만요. 맵핑을 안해준다면
호스트의 데이터량 겹칠 수 있으니까요
2011/03/03  
asdwho 글세요.. 제 생각에는 vm웨어와는 다른 개념이라고 생각합니다 vm웨어를 사용하면 논리적으로 cpu는 두개라고 할 수 있으니까 eax가 두개라도 상관이 없는거거든요. 물론 속도는 달라지겠지만.

대학교 운영체제 시간에 프로세스 A 에서 프로세스 B로 넘어갈 때 바로 전환 되는것이 아니라 문맥교환시간이란게 있다고 들었습니다(context switching time).

아마 그 문맥교환할 때 레지스터가 스택에 저장이 된다거나 하지 않을까요?;;
2011/03/03  
ggabu420 정확히 우리는 "컨텍스트 스위칭" 이라는 것에 대해 알고 있으면 됩니다.
위엣 분이 잠깐 언급하셨지만, 여기서 말하는 "context" 라는 것은 한국말로 하면
직역해서 "문맥" 이지만 사실 의미하는 것은 "현재의 상태값" 정도입니다.

즉 지금 현재 이 순간(현재 프로세스 또는 쓰레드)에서 모든 레지스터의 값이나
기타 등등의 상태들을 모두 통칭하여 컨텍스트라고 칭합니다.

그렇다면 말할 것도 없지만 Context Swithcing 이라는 작업이 바로 이 컨텍스트를
다른 프로세스 또는 쓰레드의 컨텍스트로 전환시켜주는 작업입니다.

이 때 컨텍스트가 저장되는 공간은 TCB라고 불리는 태스크 컨트롤 블럭이라는 곳에
저장이 된다고 보통 말하는데, 사실 이건 운영체제마다 자유롭게 처리할 수 있습니다.
가령 해당 프로세스의 특정 공간(스택이라던지)에 저장할 수도 있는 것이고
TCB처럼 커널이 아예 따로 관리할 수도 있는 것입니다.

따라서 딱히 컨텍스트가 어디 저장한다고 규정 해놓았다거나 그런 건 아닙니다.
어차피 커널 입장에선 컨텍스트 스위칭도 매우 소프트웨어적인 일입니다.
커널 소스 코드를 보면 이것을 처리하는 코드가 있습니다.



p.s 그리고 시분할 시스템의 정의는 다양합니다. 별빛을담아님이 알고 계신 것은
다중 사용자가 접속하여 각자 따로 일을 하는 것으로, 이것은 원래 글쓴분이
의도한 시분할 시스템보다 더 상위 레벨에서 일어나는 시분할입니다.
(왜냐하면 실제로 다중 사용자 접속은 결국 ssh 나 telnet 등의 원격 쉘 프로토콜을
지원하는 프로그램에서 처리하는 것으로, 결국 프로세스 레벨의 시분할보다 상위 개념입니다.)

그리고 VMware 내의 OS에서의 레지스터 값과 실제 호스트OS의 레지스터 값은
별 관계가 없습니다. VMware 프로세스 내부에서 레지스터를 메모리에 대응시켜 처리하든
뭘 하든 그것은 프로세스 내의 일이라 커널 레벨에서는 별 상관이 없는 일입니다.
2011/03/03  
별빛을담아 허얼.... 장문의 댓글이 3개나 달렸네... 덕분에 저도 배우고 갑니다 ㅋ 2011/03/03  
W.H. 답변 감사합니다

아무래도 시간내서 공룡책을 다시 읽어봐야겟네요... 에구
2011/03/04  
$Zero 오오 .. TCP/IP 소켓프로그래밍에서 컨텍스트스위칭 개념은 배웠었는데 .. ggabu420님 덕분에 몇개 더 알아가네요 ~~ 2011/03/04