[OS] 3장 - Process
3장 - Process
프로세스는 실행중인 프로그램이다.
-
프로세스의 문맥(Context)
- Context란 특정 시점을 잘라놓고 봤을 때 현재 시점을 규명하기 위한 상태를 의미한다
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 Register
- 프로그램의 주소 공간
- code, data, stack
- 프로세스 관련 커널 자료 구조
- PCB(Process Control Block)
- 운영체제 역할 중 하나가 프로세스를 관리하는 것인데, 프로세스가 생길 때 관리하기 위한 데이터 영역
- Kernel stack
- 각 프로세스가 운영체제에 대신 요청한 일을 kernel stack에서 실행 함
- 커널 스택은 프로세스마다 별도로 가지고 있음
- PCB(Process Control Block)
현대의 컴퓨터 시스템은 Time sharing, Multi tasking이므로 프로세스의 내용을 백업해놓지 않으면 다음 process가 실행 될 때 다음 시점의 instruction을 실행할 수 없기 때문
프로세스의 상태(Process State)
- Running
- CPU를 잡고 instruction을 수행중인 상태
- Ready
- CPU를 기다리는 상태
- 모든 준비가 끝나있고 CPU만 얻으면 되는 상태
- 보통은 Ready에 있는 Process가 번갈아 실행되는 형태
- Blocked(wait, sleep)
- CPU를 줘도 instrcution을 실행 못하는 상태
- code가 메모리에 올라와 있지 않고 디스크에 있을 경우
번외로 New, Terminated가 있음
프로세스의 상태
-
공유데이터를 여러 프로세스가 접근하면 일관성이 깨질 수 있음
-
오래 기다리는 작업이 필요하면 blocked
-
놀이동산에 가서 줄 기다리는 것과 비슷함
-
CPU는 타는 것은 짧지만 기다리는 것은 긴 롤러코스터와 비슷
-
Queue라는 것은 커널에 Data영역에 만들어 놓은 자료구조다
Process Control Block
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- 구성 요소(구조체로 가짐)
- OS가 관리상 사용하는 정보
- Process State, Process ID
- CPU 수행 관련 하드웨어 값
- Program Counter, Registers
- 메모리 관련
- Code, Data, Stack의 위치정보
- 파일 관련
- Open file descriptors
- OS가 관리상 사용하는 정보
문맥 교환(Context Switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음 과정을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장(save)
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴(load)
- System call이나 interrupt가 발생했을 때 반드시 context switch가 일어나는 것은 아님
- 사용자 Process에서 OS Process로 넘어가는 것은 context switch가 아님
- A process에서 B process로 넘어가야 context switch가 발생했다고 하는 것
- timer interrupt는 보통 다른 프로세스로 넘길 때 사용하는 것
- (1)의 경우에도 context의 일부를 PCB에 저장하지만, (2)의 경우 그 부담이 더 큼(cache memory flush 등), A → B로 넘어갈 때 cache memory를 비워야 함
Queue의 종류
- Job Queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready Queue와 Device Queue를 포함함
- Ready Queue
- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device Queue
- I/O device의 처리를 기다리는 프로세스의 집합
- Interrupt가 발생할 때 ready queue에서 기다리는 것처럼 표현 되었지만 사실은 ready queue에 들어가지는 않음(뒷 장에 나옴)
스케쥴러(Scheduler)
- Long-term scheduler
- 프로세스가 생성되었을 때 memory에 올릴지 말지 결정하는 스케줄러
- 프로세스에 memory를 주는 문제
- time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)
- 100개 실행시키면 100개다 켜짐
- medium-term scheduler를 사용함
- degree of Multi-Programming을 제어(메모리에 프로그램이 몇 개 올라가 있는가)
- Short-term scheduler(CPU scheduler)
- ms 단위
- 어떤 프로세스를 다음번에 실행할지 결정
- Medium-term scheduler(Swapper)
- 메모리에 너무 많은 프로그램이 올라가 있으면 메모리에서 쫓아냄
- 프로세스에게서 memory를 뺏는 문제
- degree of Multiprogramming을 제어
- Swapper때문에 Suspended라는 상태가 생김
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out됨
Blocked : 자신이 요청한 event가 만족되면 Ready
Suspended : 외부에서 Resume해 주어야 Active
동기식 입출력과 비동기식 입출력
- 어떤 프로세스가 입출력 OS에 요청 입출력이 끝날 때까지 아무것도 안하면 동기식 입출력
- 입출력 요청을하고 다른 일을 하면 비동기식 입출력
Thread
- 쓰레드는 프로스세 내부의 CPU 수행 단위
- thread마다 PC와 register, stack이 존재 함
- PC를 통해 각 thread는 어떤 명령어를 처리하고 있는지 알 수 있음
- 공유 하는 부분 code section, data section, OS resources
Thread의 장점
- 응답성 : thread 하나가 blocked(waiting) 상태일 때 다른 thread가 실행(running)하여 응답속도를 높일 수 있음
- 동일한 일을 수행하는 다중 thread가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있음
- 병렬성을 높일 수 있음
- 자원 공유
- 경제성 : 생성/CPU switching의 경우 overhead가 줄어듬(생성 30배, switching 5배)
- Multi Processor일때 유용성
구현 방법
- Kernel에서 지원하는 방법
- 커널의 지원을 받음
- Library에서 제공하는 방법
- 커널이 모름
- POSIX
참고 자료
반효경 교수님의 운영체제 강의를 참고하였습니다. (https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f)