Chapter 3 프로세스
본 설명은 책 “Operating System Concepts (공룡책)”를 읽으며 제 나름대로 해석하고 정리해 보았습니다.😉
3.2 프로세스 스케줄링
일괄 처리 시스템과 다르게 다중 프로그래밍 시스템은 CPU 이용률을 최대화 하기 위해 어떤 프로세스가 실행 되도록 하는 것이 목적이다. 이 목적을 달성하기 위해서는 프로세스 스케줄러가 실행할 하나의 프로세스를 잘 선택해야 한다. 참고로 단일 CPU 코어의 경우는 하나의 프로세스만 실행할 수 있는 반면, 다중 코어는 2개 이상의 프로세스를 실행할 수 있다. 이렇게 다중프로그래밍 시스템에서 프로세스 실행을 균형있게 유지하기 위해서는 프로세스의 일반적인 동작을 고려해야한다.
그러면 지금 부터 어떠한 동작으로 프로세스 스케줄링이 진행되는지 살펴보자.
3.2.1 스케줄링 큐
프로세스가 시스템에 들어가면 준비 큐(ready queue)에 들어가서 CPU 코어에서 실행되기를 기다린다. 이 큐는 일반적으로 연결 리스트로 저장이 된다. 때문에 준비큐 헤더에는 리스트의 첫 번째 PCB에 대한 포인터가 저장되고 각 PCB에는 준비 큐의 다음 PCB를 가리키는 포인터 필드를 포함하고 있다. 이 준비 큐(ready queue) 이외에도 시스템에는 다른 큐가 존재한다. 프로세스가 실행중에 디스크와 같은 장치에 I/O 요청을 하거나 혹은 특정 이벤트가 발생할 경우 프로세스는 요청에 대한 응답을 받을 때 까지 실행 중인 것이아니라 대기 큐(wait queue)에 삽입된다. ( 프로세스 상태에 대해 조금 더 자세히 알고싶다면
를 참고하자)
그렇게 프로세스가 대기큐에 삽입될동안 디스패치 될 때까지 기다린다.
- 프로세스가 I/O 요청을 보낸 뒤 I/O 대기 큐에 놓일 수 있다.
- 프로세스는 새 자식 프로세스를 만든 다음 자식의 종료를 기다리는 동안 대기 큐에 놓일 수 있따.
- 인터럽트 또는 타임 슬라이스가 만료되어 프로세스 코어에서 강제로 제거되어 준비 큐로 돌아갈 수 도 있다.
처음 두 경우는 프로세스가 대기 상태에서 준비 상태로 전환된 다음 준비 큐에 다시 들어간다. 프로세스는 종료될 때 까지 이 주기를 계속하고 종료 시점에서 모든 큐에서 제거되고 PCB 및 자원을 반환한다.
3.2.2 CPU 스케줄링
CPU 스케줄러의 역할은 준비 큐에 있는 프로세스 중에서 선택된 하나의 프로세스에 CPU 코어를 할당하는 것이다. 때문에 CPU 스케줄러는 CPU를 할당하기 위한 새로운 프로세스를 자주 선택해야 한다. 일반적으로 훨씬 더 자주 실행되지만 적어도 100밀리초마다 한 번씩 실행된다. 일부 운영체제는 스와핑으로 알려진 중간 형태의 스케줄링을 갖고 있는데 스와핑에 대해 설명하자면, 프로세스를 메모리에서 디스크로 “스왑 아웃”하고 현재 상태를 저장한 뒤 디스크에서 메모리로 “스왑인”하여 상태를 복원하는 방법이다. 스와핑은 일반적으로 메모리가 초과 사용되어 가용 공간을 확보해야 할 때만 필요하다.