컴퓨터(Computer Science)/운영체제(Operation System)

CPU Scheduling 스케줄링, 기본 개념 [운영체제]

게임이 더 좋아 2020. 6. 2. 01:56
반응형
728x170

CPU 스케줄링은 다중 프로그램 운영체제의 기본이 된다.

 

정말 중요하고, 앞으로도 중요하고 언제나 중요할 것이다.

 

가보자

 


 

프로세스를 전 글에서 소개한 적이 있는데

 

운영체제는 실질적으로는

프로세스가 아니라 커널 수준의 스레드를 스케줄하는 것이다.

 

프로세스 스케줄링과 스레드 스케줄링은 구분이 거의 무의미하게 되었다. 

 

그렇지만 배울 때는 따로 언급할 것이니 참고하고 가자

 

 


진짜 기본부터 가자

 

코어가 하나인 시스템에서는 한 순간에 하나의 프로세스만 실행가능하다고 했다. 

나머지 프로세스는 대기한다고 말했다.

 

그런데 우리는 다중 프로그래밍을 활용해 CPU의 이용률을 높이려고 시도한다고 했다.

다시 말하자면 CPU의 사용을 항상 바쁘게 하는 개념은 시스템의 모든 처리 코어로 확장된다.

 

**스케줄링은 운영체제의 기본적인 기능으로 거의 모든 컴퓨터 자원들은 사용되기 전에 스케줄 된다.

 

**CPU 스케줄링은 운영체제 설계의 핵심이다.

 

 


 

 

1, CPU–I/O Burst Cycle / CPU 버스트 사이클

 

• CPU–I/O Burst Cycle – Process execution consists of a cycle of CPU execution and I/O wait
• CPU burst followed by I/O burst
• CPU burst distribution is of main concern

 

CPU 스메줄링의 성공은 프로세스들의 다음과 같은 관찰된 성질에 의해 좌우된다.

프로세스 실행은 CPU 실행과 I/O 대기의 사이클로 구성된다.

 

프로세스 실행은 CPU burst로 시작된다. 뒤이어 I/O burst가 발생하고 뒤이어 따른 CPU burst가 발생하고 이러한 과정이 반복되어 일어난다. 그렇지만 마지막 CPU burst 는  I/O burst 대신에 실행을 종료하기 위한 시스템 요청과 함께 끝난다.

 

짧게만 알고 지나가자

 

 


2. CPU Scheduler 스케줄러

CPU가 유휴 상태가 될 때마다, 준비 큐 (wait queue)에 있는 프로세스 중에서 하나를 선택해 실행한다.

선택은 CPU 스케줄러가 한다. 

 

스케줄러는 실행 준비가 되어있는 메모리 내의 프로세스 중에서 선택해서 CPU를 할당해준다.

// 스케줄러를 통해 CPU를 효율적 사용

 

**큐에 있는 레코드들은 일반적으로 프로세스들의 프로세스 제어블록들이다.

 

++ CPU 스케줄러를 short term scheduler라고도 부름

 

Short-term scheduler selects from among the processes in ready queue, and allocates the CPU to one of them
 Queue may be ordered in various ways
 CPU scheduling decisions may take place when a process:
1. Switches from running to waiting state
2. Switches from running to ready state
3. Switches from waiting to ready
4. Terminates

 


 

3. 선점 및 비선점 스케줄링, Preemptive and Nonpreemptive Scheduling

 

우선 CPU 스케줄링 결정은 4가지 상황에서 발생가능한데

 

1. 한 프로세스가 실행 상태에서 대기 상태로 전환될 때( ex. I/O requirement, 또는 자식 프로세스가 종료되기를 기다리기 위해 wait() 호출)

2. 프로세스가 실행 상태에서 준비 완료 상태로 전환될 때(인터럽트)

3. 프로세스가 대기 상태에서 준비 완료 상태로 전환될 때( I/O 종료)

4. 프로세스가 종료할 때

 

 

1번과 4번의 경우에는 

스케줄링은 별다를게 없다. 실행을 위해 새로운 프로세스가 반드시 선택되어야 한다.

그렇지만 2번 3번은 선택의 여지가 조금은 있다.

 

우선 1,4에서만 스케줄링을 한다면

우리는 비선점 또는 협조적이라고 한다. (nonpreemptive) ,(cooperative)

 

그 외의 경우는 선점이라고 한다. (preemptive)

 

++비선점 스케줄링에서는 CPU가 한 프로세스에 할당되면 프로세스가 종료하든지, 또는 대기 상태로 전환되든지 CPU의 이용을 그만둘 때 까지 점유한다.

 

**그렇지만 최신 운영체제에서는 선점 스케줄링 알고리즘을 사용한다.

 

 

왜 선점을 쓰는지 모르겠다고??? 

그게 효율적이니까 쓴다.

 

그렇지만 선점에서는 데이터가 다수의 프로세스에 의해 공유될 때 경쟁 조건(data race)가 또 나오는 것이다.

선점은 또한 운영체제 커널 설계에 영향을 준다. 

 

++나중에 더 잘 알아보자.. 여기서 짧게 다룰 것은 아니라서??

 

 

++비선점형 커널은 문맥 교환을 하기 전에 시스템 콜이 완료되거나 입출력의 완료를 기다리며 프로세스가 봉쇄되기를 기다린다.

 

 

**인터럽트는 어느 시점에서건 일어날 수 있고, 커널에 의해서 항상 무시될 수는 없기에, 인터럽트에 영향을 받는 코드 부분은 반드시 동시 사용으로부터 보호되어야 한다.

 

 


 

 

4. 디스패처 Dispatcher

 

뭔가 디스패치랑 비슷하다고 느꼈으면 맞지 ㅎㅎ 스펠링도 같은데

 

CPU 스케줄링 기능 중에 하나는 디스패처라고 하는데

 

디스패처란 CPU 코어의 제어를 CPU 스케줄러가 선택한 프로세스에 주는 모듈을 말하고

 

그 모듈은

3가지 정도의 역할을 한다.

 

1. 한 프로세스에서 다른 프로세스로 문맥을 교환하는 일

2. 사용자 모드로 전환하는 일

3. 프로그램을 다시 시작하기 위해 사용자 프로그램의 적절한 위치로 이동(jump)하는 일

 

디스패처는 모든 프로세스의 문맥 교환 시 호출되므로, 가장 빨리 수행되면 좋다.

 

디스패처가 하나의 프로세스를 정지하고 다른 프로세스의 수행을 시작하는 데까지 걸리는 시간을 디스패치 지연(dispatch latency)이라고 한다.

 

** 문맥 교환이 얼마나 발생하길래..? 그럴까 싶지? 

 

디스패처의 그림이다.

 

 

 

 

 

Dispatcher
• Dispatcher module gives control of the CPU to the process selected by the short-term scheduler; this involves:
1. switching context
2. switching to user mode
3. jumping to the proper location in the user program to restart that program

 

• Dispatch latency – time it takes for the dispatcher to stop one process and start another running

 

 

 

728x90
반응형
그리드형