Windows_/Windows32_API

Windows :: 프로세스와 스케쥴러 동작

sosal 2014. 7. 24. 10:02
반응형

/*

 * http://sosal.kr/

 * made by so_Sal

 */




프로그래밍을 직접 해보기에 앞서서
프로세스와 스케쥴러에 대해서 공부하겠습니다.

프로세스란?
:: 메인 메로리로 이동하여 실행중인 프로그램

프로세스의 범위
메모리구조 + 레지스터 set
프로세스 별 독립적인 대상은 프로세스의 범주에 포함시킬 수 있다.

램보다 더 큰 공간을 할당받았다고 가정하였을때,
메인메모리에 다 들어갈 수 없으므로 하드디스크까지
그 영역을 확장시키게 됩니다. (Virtual Memory 사용)
메인메모리 뿐만 아니라 더 넓은 범위까지 포함합니다.

프로세스의 실행
프로그램을 실행시킨다는것에서 CPU를 가장 먼저 떠올리는데,


 

<Register Set>


이는 ALU가 있기 때문이죠. (기본 연산장치)
이보다 더 중요한것은 register set입니다.
CPU에 있는 register set을 보면 현재 실행중인 프로그램의
정보들로 가득 채워지게 되어있습니다.
프로세스가 A와 B가 있다고 가정할때,
이 레지스터 셋에 A에 필요한 명령어와 자원들이 저장되고,
스케쥴링에 의해 현재 register set은 따로 저장되고

 

다시 B에 필요한 명령어와 자원들이 register들에 load가 되는것을

컨텍스트 스위칭 (Context switching)이라고 합니다.
우선순위가 같은 프로세스 2개가 엄청나게 빠른 속도로
스위칭 되기 때문에 두 프로세스가 동시에 실행하는것 처럼 보입니다.



프로세스 스케쥴러라는것은 소프트웨어적인 장치입니다.
CPU는 하나, 하지만 우리는 여러개의 프로세스를 실행시킵니다.
CPU는 하나의 프로세스만 실행시 킬 수 있기때문에,
스케쥴러는 CPU에 프로세스의 우선순위를 정하여
둘 이상의 프로세스가 적절히 실행되도록 (동시에 보이는것처럼)
컨트롤 해주는 장치입니다. (소프트웨어도 장치가 될 수 있습니다.)

스케쥴러가 동작하는 과정에서는 프로세스가 작동하지 못합니다.
(스케쥴러도 프로세스입니다.)
따라서 스케쥴러가 자주 간섭하게 되면, 우리의 진짜 목적인
프로세스 실행에 대해 좀더 느려지게 되겠죠.
스케쥴러를 가급적이면 적게 움직일 수 있도록 할 수 있다면
더 좋은 운영체제가 되겠습니다.


 



준비 : ready (running을 준비하는 상태. 스케쥴러가 선택해주기를 기다리는 상태)
실행 : running : 실제 메인메모리에 탑재되어 실행되는 상태
대기 : block
CPU에 의존적이지 않은 프로그램들은 실행에 있을 이유가 없습니다.
(가장 대표적인 예라면 I/O 입출력 상태와 Sleep() 함수 호출에 의한 block 상태가 있습니다.)
만약 이상태에서 ready 상태로 간다면, 다시 스케쥴러에 의해 선택되므로,
block 이라는 상태를 만들어, CPU에 의존적이지 않는 상태가 끝날때 까지 기다리게 합니다.

결론 :: 준비 <-> 실행 의 반복 과정 속에서,
CPU가 필요하지 않는 일을 계속 하게 될때에, block 상태로 내보내어
실행(running) 상태가 되지 않도록 한다.

컨텍스트 스위칭 (Context switching)
CPU에 종속적인 프로세스는 하나의 셋트로 존재합니다.
ALU의 Register Set에 올려지는 프로세스 정보는
하나의 묶음으로 존재하게 되는데, 여러 프로세스의
묶음이 스케쥴러에 의해 올라가게 됩니다.
이를 컨텍스트 스위칭이라고 합니다.
아래 그림을 보시면 더욱 쉽게 이해하실 수 있습니다.




중요한 사실은 컨텍스트 스위칭 작업을 해야하는 대상이
많으면 많을수록 이는 부담스러운 작업입니다.

참고도서 : 윈도우즈 시스템 프로그래밍 | 윤성우 저 | 한빛미디어