https://www.inflearn.com/course/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B3%B5%EB%A3%A1%EC%B1%85-%EC%A0%84%EA%B3%B5%EA%B0%95%EC%9D%98/dashboard
https://codetravel.tistory.com/31
위 자료를 참고했다.
3.1 Process concpet
프로세스란?
- 실행중인 프로그램
- 운영체제에서의 작업의 단위
- 프로세스는 다음의 resource들을 필요로 한다.
- CPU time
- memory
- files
- I/O devices

그림으로 보면 위 상태에 있는 게 프로세스
프로세스의 Memory layout
- Text section
- Data section
- Heap section
- 동적으로 할당되는 메모리 관련 (malloc 등..)
- Stack section
- 함수 호출 시 해당 영역에 쌓임
- function parameter, return address, local variables...


프로세스 state 종류
- New
- Running
- Waiting
- 대기상태. I/O completion / signal reception 등을 기다리고 있는 경우
- Ready
- Terminated
- execution을 마친 경우

어떤 상황에서 각 state로 변환되는지에 주목
프로세스 관리는 어떻게 할 것인가?
PCB(Process Control Block). TCB(Task Control Block)
- 구조체 하나에 프로세스가 가져야 하는 모든 정보 다 저장하자
PCB가 갖는 정보
- Process state (new, running...)
- Program Counter
- 메모리 상의 어느 instruction을 fetch해올 것인가

요런 느낌. 시소때 배웠던 JUMP 명령어 등 참고
- CPU registers (PC 포함) -> context라 통칭
- CPU-scheduling information
- Memory-management information
- Accounting information
- I/O status information

이런 식으로 구조체로 관리
Process concpet
- single thread의 경우, 한 번에 한 task만 처리 가능
- 요즘 운영체제의 경우, 프로세스가 여러 개의 스레드를 수행할 수 있도록 함
- multi-threading
- 즉, 한 번에 여러 개의 task를 수행할 수 있는 것
- 요즘은 multi-processing이 아닌, multi-threading이 주류
3.2 Process Scheduling
Multi programming / Multi processing의 목적
- "동시에" 여러 프로세스를 구동하는 것 (Parallel x)
- CPU 사용 효율을 최대화하자
Time sharing의 목적
- CPU core를 프로세스 간 자주 switching해 각 프로그램이 "동시에 돌고 있는 것 처럼"하자.
Scheduling Queue
Ready Queue
- Linked list로 구현 가능
- ready상태의 프로세스들의 대기열
Waiting Queue
- I/O completion 등을 기다리는 경우
- waiting 상태가 끝나면 ready queue로 이동

맨 윗 줄이 ready queue, 아래가 waiting queue
Queueing Diagram

어떤 상황에 어떻게 되는가에 유의
Context Switch
- OS가 수행
- context란, PCB에 저장된 프로세스의 상태
- interrupt가 발생했을 때, running process의 현재 context(PC 등..)를 저장하고, 다른 프로세스의 context정보를 restore하는 것
- CPU core를 다른 프로세스에 넘기는 것

3.3 Operations on Processes
자세한 건 다음 시간 실습 참고
fork() system call 관련

이걸 잘 이해해야 함!!!!!
Process termination 관련
- 주로 마지막 statement를 실행했을 때 (함수의 경우, return)
- 강제로 끝내고 싶은 경우, exit() system call 존재
- 할당된 메모리, 열린 파일, I/O buffer정리
Zombie process
- 자식 프로세스가 종료되었지만 부모 프로세스가 자식 프로세스의 종료 상태를 회수하지 않았을 경우에 자식 프로세스
Orphan process
- 부모 프로세스가 자식 프로세스보다 먼저 종료된 경우에서의 자식 프로세스
Zombie process, Orphan process는 daemon process를 만들 때, 즉 background process를 만들 때 많이 사용