프로세스(Process) 🐣
- 이화여대 반효경 교수님의 운영체제 강의를 듣고 작성하였습니다. 🙂
프로세스란?
“Process is a program in execution”
프로세스는 실행중인 프로그램이다.
프로세스의 문맥(context)
프로그램이 실행부터 종료될 때까지 중에서 현재 프로그램이 어떤 상태에 있는지 나타내기 위해 사용되는 개념.
🐣 프로세스 실행 ~ 종료 과정
프로세스가 실행되면 독자적인 주소공간(code, data, stack) 이 생긴다.
프로세스가 CPU에 올라가게 되면 PC(Program Counter)가 code를 하나씩 읽어 Register에 값을 넣어 ALU에서 연산 후 결과를 Register에 저장하거나 data 에 저장한다.
문맥을 나타내기 위해서는 PC가 code의 어느 부분까지 실행 하였는지, 프로세스의 메모리에 어떤 내용이 담겨 있는지, Register에 무슨 값을 넣었는지, 어떤 instruction 까지 실행했는지 등의 정보가 필요하다.
🐣 프로세스 문맥을 나타내기 위해 필요한 정보
✔ CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 Register
✔ 프로세스의 주소 공간
- code, data, stack
✔ 프로세스 관련 커널 자료 구조
- PCB(Process Control Block)
- Kernel Stack - (각 Process가 함수호출을 하다 System call을 해야 할 경우 Process 별로 스택에 쌓인다.)
프로세스의 상태 (Process State)
❗ 프로세스는 상태가 변경되며 수행된다.
✔ Running
- CPU를 잡고 instruction을 수행중인 상태
✔ Ready
- CPU를 기다리는 상태 (메모리 등 다른 조건을 모두 만족한 채로)
✔ Blocked (wait, sleep)
-
CPU를 주어도 당장 instruction을 수행할 수 없는 상태
-
Process 자신이 요청한 event(ex. I/O)가 즉시 만족되지 않아 이를 기다리는 상태
ex. 디스크에서 file을 읽어와야 하는 경우
✔ Suspended
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out 된다.
✔ New
- 프로세스가 생성중인 상태
✔ Terminated
- 수행이 끝난 상태
PCB (Process Control Block)
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
아래의 그림과 같은 구조체를 가진다.
문맥 교환 (Context switch)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
CPU가 다른 프로세스에게 넘어갈 때 OS는 아래의 과정을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
❗ System call이나 Interrupt 발생시 반드시 문맥 교환이 일어나는 것은 아니다.
(1) 사용자 프로세스 A —–> kernel mode —–> 사용자 프로세스 A (문맥 교환 ❌)
(2) 사용자 프로세스 A —–> kernel mode —–> 사용자 프로세스 B (문맥 교환 ⭕)
🐣 (1) 의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 저장해야 하지만 (2)의 경우 그 부담히 훨씬 크다.
스케줄러 (Scheduler)
-
Long-term scheduler (job scheduler)
-
시작 프로세스중 어떤 것들을 ready queue로 보낼지 결정
-
프로세스에 memory(및 각종 자원)를 주는 문제
-
degree of Multiprogramming을 제어
-
time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)
-
-
Short-term scheduler (CPU scheduler)
-
어떤 프로세스를 다음번에 running 시킬지 결정
-
프로세스에 CPU를 주는 문제
-
millisecond 단위로 충분히 빨라야 함
-
-
Medium-term scheduler (Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에게서 memory를 뺏는 문제
- degree of Multiprogramming을 제어