컨텍스트 스위칭
CPU 할당 시간을 얻게 되는 프로세스가 메인 메모리로 올라가고, 이전에 실행되던 프로세스는 메모리에서 내려와야 한다.
CPU 할당 시간을 얻게 되는 프로세스가 변경되는 시점에서 거쳐야 하는 몇몇 과정이 있다.



Thread가 스위칭되는 시점은 다음과 같은 경우가 있습니다.

1. I/O function이 호출되어 해당 I/O의 응답을 기다려야 할 때
HDD, Network등에서 I/O 작업을 만났을 경우입니다. fopen, fread, fwrite는 해당 디바이스가 명령의 처리를 완료하는 시점이 되어야 다음 코드로 넘어 가기 때문에 이러한 function에서 Thread 스위칭이 일어 납니다.

2. OS에서 제공하는 Thread 관련 API를 호출할 때
Sleep, WaitForSingleObject, WaitForMultipleObjects, EnterCriticalSection 등 OS에서 제공하는 (엄밀히 말해서 CPU가 제공해 주는 atomic한 기능을 OS에서 wrapping한) API를 호출할 경우에도 Thread 스위칭이 일어나 수 있습니다.

3. 메모리 사용에 있어서 Memory Page Fault 가 났을 때
메인 메모리가 부족한 경우 HDD를 메모리의 대체제로 사용하죠. 이 경우 특정 메모리를 접근하게 될 경우 만약 Memory Page Fault가 나는 영역이라면 OS는 Memory-HDD 간의 swapping을 해줘야 합니다. 코드상으로는 메모리를 접근하는 것이겠지만, 실제로는 HDD를 access하는 것이죠. 이 경우에도 Thread 스위칭이 일어 납니다.

4. 해당 Thread의 Time Slice가 다 했을 때
while (true) ; 와 같이 무한 루프라 하더라도 OS가 해당 Thread에게 할당해 준 임의의 시간을 경과해서 계속해서 CPU을 점유하게 되면, OS가 알아서 실행 권한을 뺏어 옵니다. 이 경우에도 Thread 스위칭이 일어날 수 있습니다.

통상적으로 1~2번은 Thread의 스위칭 여부를 코드상으로 알아낼 수는 있지만, 3~4번은 코드로 판별하기가 어렵습니다.


출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=821991&ref=821991&page=2

'Education > Operating System' 카테고리의 다른 글

운영체제  (2) 2011.03.11
이벤트 드리븐  (0) 2010.06.28
geekos  (3) 2010.06.27
chapter 7. Memory  (2) 2009.12.11
명령어 수행  (2) 2009.10.22
Posted by 초상큼발랄
l