본문 바로가기
Program

[Program] (윈도우 시스템 프로그래밍) 프로세스의 스케줄링 / 컨텍스트 스위칭

by snwo 2020. 12. 11.

프로세스

-> 메인 메모리에 이동하여 실행중인 프로그램 (일반적인 정의)

범위 는 메모리구조 + 레지스터 이다.

메모리 구조

[Code영역][Data영역][Heap영역 ~ Stack영역] 이렇게 낮은주소~높은주소 순서로 되어있다.

  • code : 명령어집합
  • data : 전역변수, static변수
  • heap : 동적으로 프로그래머가 할당
  • stack : 지역변수, 함수인자

운영체제별로 다른데, 가상메모리를 4gb 정도 할당받는다. 4gb 가 메모리에 다 올라가는 것이 아니라, 페이징기법으로 사용하는 공간만 올라간다고 한다.

Context switching

A, B 프로세스가 동시에 실행될 때 A가 먼저 우선순위를 B 에게 건네줄 때, context switching 이 일어난다. 레지스터셋을 저장해놨다가 (메모리) B에게 양보해야한다. 이때 B 는 READY -> RUNNING, A 는 RUNNING -> READY 상태로 바뀐다. context switching 은 고속으로, 한자리수 넘게 일어난다. CPU 성능에 따라.

 

성능을 향상시키기 위해 프로세스마다 각각의 레지스터셋을 할당하는 방법도 있다고 한다.

프로세스 스케줄러

-> 둘 이상의 프로세스가 적절히 실행되도록 컨트롤해준다.

프로세스 스케줄러는 SoftWare 이다. 프로세스 스케줄러도 프로세스로 실행되므로, 스케줄링을 원하는대로 하면서 스케줄러를 적게 실행시키는 OS 가 좋은 OS 라고 할 수 있다.

방법

알고리즘에 따라 다양하다.
대충


이렇게. core 수 넘게 프로세스가 실행되면(2라고 가정), 스케줄러에서 스케줄링알고리즘 대로 context switching 을 해준다. 이렇게 A,B,C 프로세스가 같이 실행될 수 있는 것이다. 요즘은 CPU 성능이 거의 다 좋아서, 동시에 실행되는 것처럼 보인다.

 

작업표시줄 빈공간을 우클릭 하고 작업관리자 - 자세히보기 를 눌러보자. 목록에 있는게 전부 프로세스이다.

얼마나 많은 context switching 이 일어나는지 짐작할 수 있을것이다.

프로세스의 상태

CPU 에 의존적인 ALU 연산과 그렇지 않은 I/O 연산 (그래픽,파일,네트워크 등) 은 분리해서 실행이 가능하다


프로세스 여러개가 실행되면서(START) READY, RUNNING 상태를 스케줄러에 의해 넘나들게 된다.

CPU 에 의존적인 ALU 연산을 하다가, I/O 연산을 할 때에는 RUNNING -> BLOCKED -> (I/O 연산 끝) -> READY 이 순서로 진행이 된다. 이 때 다른 프로세스가 RUNNING 상태가 되고.

 

#윤성우 윈도우 시스템 프로그래밍 기반으로 제작되었습니다.