이번에 알아볼 내용은 바로 Process에 관한 내용입니다. 사실상 운영체제에 대한 공부가 본격적으로 시작되는 시점입니다.
1. Process란?
Process는 "실행되고 있는 프로그램(A program in execution)"이며, 경우에 따라서는 job, task 등으로 바꿔 부르기도 합니다. Process는 프로그램의 실행에 대한 하나의 작업 단위로 볼 수 있고, 하나의 프로그램을 여러 번 실행시키면 여러 개의 process가 실행되게 됩니다. Process는 program code, execution state (thread info.), process state, process ID 등의 정보를 담고 있습니다. 각각의 Process는 자신의 virtual memory를 가지며, 이 virtual memory는 stack area, heap area, data segment, text segment로 구성되어 있습니다.
가상 메모리에 대해서는 뒤에서 더 자세하게 공부하게 됩니다.
2. Process State
Process는 반드시 다음의 다섯 가지 중 하나의 상태를 가지게 됩니다.
New: fork() 함수 등에 의해 Process가 만들어졌으나 아직 메모리가 할당되지 않은 상태.
Ready: CPU가 할당되기를 기다리고 있는 상태. Ready Queue에서 순서를 기다리고, CPU만 할당되면 바로 실행이 가능.
Running: CPU에서 실행이 되고 있는 상태. 하나의 processor (core)에서는 하나의 process만 실행이 가능.
Waiting: sleep()함수 등의 이유로 특정 event가 발생할 때까지 대기하고 있는 상태. Wait Queue에서 대기하고 있으며, event가 발생하고 나면 ready 상태로 돌아가게 됨.
Terminated: 실행이 완료된 상태.
3. Process Control Block (PCB)
PCB는 각 process마다 따로따로 존재하며, 해당 process에 대한 정보를 담고 있는 자료 구조입니다. PCB들은 Kernel 내부에 보관되며, 다음과 같은 정보들을 포함하고 있습니다.
- Process State: 바로 위에서 공부한 그 process state입니다.
- Program Counter: Process가 다음에 실행해야 하는 instruction의 위치를 가리키는 주소 값을 저장하고 있습니다.
- CPU registers
- CPU scheduling info: Process들의 실행 우선 순위등에 대한 내용인데 뒤에서 다 자세히 다룰 예정입니다.
- Memory management info: Page table, segment table 등에 관한 정보를 저장하고 있습니다.
- Accounting info: CPU 사용시간이나 Process의 number (PID)에 관한 정보를 가지고 있습니다.
- I/O status info: 현재 열려있는 파일들이나 process에 할당된 I/O 장치들의 리스트를 저장하고 있습니다.
이러한 PCB에 저장되어있는 process들의 상태를 Context라고 부릅니다. CPU에서는 process를 실행할 때 register set에 이 PCB들을 불러와서 사용하게 됩니다. 그리고, CPU에서 실행하는 process를 바꿀 때 (기존에 실행되던 process가 Running 상태에서 Ready 상태나 Terminated 상태로 옮겨가고 Ready 상태에 있던 새로운 process가 Running 상태로 들어갈 때) 원래의 process의 context를 저장하고 새로운 process의 context를 불러오게 되는데 이를 Context Switch라고 부릅니다.
PCB들이 Kernel 내부에 존재하기 때문에 새로운 PCB를 불러오기 위해서는 System call을 사용해야 하고, 이는 성능적으로 큰 overhead를 야기합니다. 즉 Context Switch가 자주 발생할수록 프로그램이 느려질 수 있다는 뜻입니다. 실제로 CPU가 add 같은 단순 연산을 실행하는 데 1 정도의 힘이 든다고 가정한다면, Context Switch에는 1만에서 10만 정도의 힘이 들게 됩니다. 그래서 최대한 Context Switch를 줄이는 것이 프로그램의 성능에 큰 역할을 하게 됩니다.
오늘은 Process의 정의와 process state, 그리고 PCB에 대해 알아보았습니다. 이 개념들은 뒤에서도 계속 활용이 되는 중요한 개념들이니 잘 숙지하고 넘어가면 운영 체제를 공부하는데 있어서 큰 도움이 될 것이라고 생각합니다. 읽어주셔서 감사합니다.
'전공공부 > 운영체제 (Operating System)' 카테고리의 다른 글
[운영체제] Thread (1) - Definition, Implementation, and Multicore (1) | 2020.12.18 |
---|---|
[운영체제] Processes (3) - Interprocess Communication (IPC) (0) | 2020.12.17 |
[운영체제] Processes (2) - Process Creation & Termination (0) | 2020.12.17 |
[운영체제] Interrupt (2) | 2020.12.16 |
[운영체제] Introduction & Operating System Structure (2) | 2020.12.16 |