출처 : SNUON / 운영체제의 기초: 쉽게 배우는 운영체제 원리 / 서울대 홍성수 교수님

Process scheduling
- 각 프로세스가 CPU를 잘 공유할 수 있도록 다음에 수행할 process를 선택하는 일
- 제약 조건: fair scheduling, protection
Fair scheduling
- fairness는 상대적인 개념
- 예를 들어, 원자력 발전소에서는 일반 프로세스보다 원자력 관련 프로세스가 우선
- 하지만, 우리가 다루는 OS는 일반적인 목적의 OS → 각 프로세스가 언젠가 수행할 기회를 얻는다
Protection
- 한 프로세스가 다른 프로세스에 문제를 일으켜서는 안된다

비유
- 자동차를 운전해서 부산에 갈 수 있는 방법은 많다
- 상황에 따라 영동 고속도로를 타야할 수도 있고 경부 고속도로를 타야할 수도 있다
- 하지만 핸들을 왼쪽으로 꺾으면 왼쪽으로 가고, 오른쪽으로 꺾으면 오른쪽으로 꺾는 매커니즘은 동일해야 한다
Separation of policy and mechanism
- policy : 다음에 고를 프로세스를 선택하는 기준
- dispatcher mechanism : CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 매커니즘
- 예를 들어, 원자력 발전소 OS의 policy는 원자력 관련 프로세스에 우선순위를 주게 된다
- 하지만, 원자력 발전소 OS나 일반 OS나 CPU를 넘겨주는 매커니즘은 동일하다


dispatcher도 프로그램이기 때문에 CPU를 차지해야 한다
CPU가 하나 밖에 없기 때문에 이렇게 커널에서 무한 루프를 돈다면 다른 프로그램을 실행할 수가 없다
유저 프로세스에서 커널 함수인 dispatcher에게 CPU를 넘겨주는 HW적인 매커니즘이 필요하다
Interrupt mechanism을 사용하면 된다!

유저 프로그램이 dispatcher에게 CPU를 넘기는 상황은 비자발적인 상황과 자발적인 상황이 있다

흔히들 커널이 굉장히 능동적이라고 오해하는데 커널은 커널 함수와 ISR로 구성된 일종의 라이브러리로서 수동적으로 동작한다

인터럽트가 들어오면 HW적으로 mode bit가 1로 바뀐다
→ ISR이 커널 함수인 dispatcher를 호출한다

Non-preemtive scheduling
- 프로세스가 CPU를 자발적으로 반납하는 스케줄링
- Trap에 의해 촉발
- ex) system call
Preemtive scheduling
- OS가 프로세스로부터 강제로 CPU를 빼앗는 스케줄링
- HW interrupt에 의해 촉발
- ex) timer interrupt, I/O completion

노트
1.
- 커널 모드일 떄 PID 얻어오면 유저 프로그램의 ID 나온다
- 현재 수행중인 프로세스는 system call을 호출한 유저 프로세스이고 단지 커널 모드에서 수행중일 뿐!
2.
- 스택은 프로세스의 수행 이력을 나타낸다. 즉, run-time context를 의미한다.
- 유저 모드일 때는 user mode stack을 사용. 즉, 유저 프로그램 메모리에 존재하는 스택을 사용.
- 커널 모드일 때는 kernel mode stack을 사용. 즉, 커널 메모리에 존재하는 스택을 사용.
- 모드가 바뀔 때 PID는 같지만 run-time context는 변화한다.

System call vs function call
- 공통점 : 한 루틴에서 다른 루틴으로 control이 넘어간다.
- 차이점 : func call은 mode change 발생 X
'CS > 운영체제' 카테고리의 다른 글
[ETL] Process Creation and Termination (0) | 2022.05.22 |
---|---|
[ETL] Context Switching (0) | 2022.05.22 |
[ETL] Processes and Threads - Process Concept (0) | 2022.05.16 |
[ETL] Computer Hardware (0) | 2022.05.14 |
[ETL] Functions of OS (0) | 2022.05.14 |