kocw 반효경 교수님의 운영체제 강의를 수강 후 작성한 글입니다.
1. 프로세스의 개념
"Process is a program in execution"
프로세스의 문맥(context)
- CPU의 수행 상태를 나타내는 하드웨어 문맥
- Program Counter(현재 수행 중인 코드의 instruction을 가리킴)
- 각종 register
- 프로세스의 주소 공간
- code, data, stack
- 프로세스 관련 커널 자료 구조
- PCB
- Kernel stack
2. 프로세스의 상태
- Running : CPU를 잡고 instruction을 수행 중인 상태
- Ready : CPU를 기다리는 상태
- Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태. Process가 자신이 요청한 event가 만족되지 않아 이를 기다리고 있는 상태.
- 공유 데이터를 사용해야 하거나 I/O 요청에 의해 Blocked 상태가 되면, 각자 상황에 맞게 Resource queue, Disk I/O queue 등의 큐에서 처리를 기다린다. 처리가 완료되면 다시 Ready queue에 들어가 CPU를 할당받기를 기다리는 상태가 된다.
- New : 프로세스가 생성 중인 상태
- Terminated : 수행이 끝난 상태

3. Process Control Black (PCB)
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보로 kernel address space의 data 영역에 존재한다.
구조체로 유지하며, 다음의 구성요소를 가진다.
- (1) OS가 관리상 사용하는 정보
- Process state, Process ID
- scheduling information, priority(우선순위)
- (2) CPU 수행 관련 하드웨어 값
- PC, registers
- (3) 메모리 관련
- Code, data, stack의 위치 정보
- (4) 파일 관련 ex) Open file descriptors
4. 문맥 교환 (Context Switch)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
(1) CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장한다. (save)
(2) CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어와 CPU에 복원한다. (load)
※ System call이나 Interrupt 발생 시 반드시 context switch가 일어나는 것은 아니다.

Interrupt나 system call에 의해 A process가 user mode -> kernel mode 로 바뀌어 실행 후, 다시 user mode로 실행한다면 CPU context 등 일부 문맥은 PCB에 저장을 해야하지만 문맥 교환이 일어나는 것은 아니다.
하지만 A process가 user mode -> kernel mode 실행 후 문맥 교환이 일어나 B process가 user mode 수행 시 문맥 교환으로 인한 오버헤드가 상당히 크다. (eg. cache memory flush)
5. 프로세스를 스케줄링하기 위한 큐
- Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device queue : I/O Device의 처리를 기다리는 프로세스의 집합

각 PCB에 있는 pointer를 통해 연결된다.
6. 스케줄러 (Scheduler)
- Long-term scheduler(장기 스케줄러 or job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼 지 결정
- 프로세스에 memory를 주는 문제
- degree of multiprogramming(매모리에 올라가는 program의 수) 을 제어 -> 성능을 결정하는 중요한 이슈
- time sharing system에서는 보통 장기 스케줄러가 사용되지 않음 (무조건 메모리를 줘서 ready 임)
- Short-term scheduler(단기 스케줄러 or CPU scheduler)
- 어떤 프로세스를 다음번에 running 시킬지 결정 (priority에 따라서)
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야 함 (millisecond 단위)
- Medium-term scheduler(중기 스케줄러 or Swapper)
- 프로세스에게서 memory를 뺏는 문제
- 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 장기 스케줄러를 사용하지 않기 때문에, 중기 스케줄러에서 degree of multiprogramming을 제어
7. 프로세스의 상태 (Suspended 추가)

- Suspended(stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out 됨 (중기 스케줄러에 의해 메모리를 통째로 빼앗김)
- ex) 사용자가 프로그램을 일시 정지시킨 경우, 시스템이 여러 이유로 프로세스를 잠시 중단시킨 경우(메모리에 너무 많은 프로세스가 올라와 있을 때)
Blocked : I/O 등의 event를 스스로 기다리는 상태로써, 자신이 요청한 event가 만족되면 Ready
Suspended : 외부에서 resume해 주어야 active
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 4. Process Management (0) | 2022.11.22 |
---|---|
[운영체제] 3. Process (2) (0) | 2022.11.17 |
[운영체제] 2. System Structure & Program Execution (2) (0) | 2022.11.10 |
[운영체제] 2. System Structrue & Program Execution (1) (0) | 2022.11.09 |
[운영체제] 1. Introduction to Operating Systems (0) | 2022.11.06 |