반효경 교수님 [운영체제] 강의 듣기
- 3-2 : 프로세스 스케줄링 큐
- 3-3 : 스레드
- 4-1 : 프로세스 생성, 종료
- 4-2 : CPU burst, I/O burst
03. Process
1) Process
Process : 실행중인 Program
Process의 Context
- 현재 이 process가 어디까지 실행되었는지 (PC)
- 현재 memory에 어떤 데이터를 담아뒀는지 (stack/data/code)
- 현재 os가 process를 관리하고 있는 상태 (PCB)
Process의 State (<- cpu 입장에서 본 process의 상태)
- running : cpu 잡고 있음
- cpu를 잡고 있는 process는 언제나 하나 (single core의 경우)
- ready : cpu만 얻으면 바로 동작 가능 (in memory)
(ex. disk에서 읽어올 내용 physical memory에 올려뒀다) - blocked : cpu 받아도 못 동작
(ex. I/O 작업 완료 기다리는 중)
(ex. 필요한 physical memory에 없어서 disk에서 읽어와야 할 때) - suspended : (외부적인 이유로) memory 뺏긴 상태
cf) CPU 입장에서는 떠난거지만, Process 입장에서는 cpu 일하느냐, I/O 일하느냐 여튼 일하는 것
2) Context Switch
Context Switch : CPU를 한 process에서 다른 process로 넘겨주는 과정 (process A -> process B)
1. CPU를 내어주는 process의 상태를 그 process의 PCB에 저장 (process A의 PCB 저장)
2. CPU를 새롭게 얻는 process의 상태를 PCB에서 읽어옴 (process B의 PCB 읽기)
3) Scheduler
- Short-term scheduler (CPU scheduler)
- 어떤 process에게 cpu 줄지
- Long-term scheduler (job scheduler)
- 어떤 process에게 memory 줄지
- process가 시작될 때(new -> ready) memory를 얻어야 함
- multiprogramming : memory에 여러 program이 동시에 올라감
- degree of multiprogramming : memory에 올라간 program 수
너무 적으면 -> cpu 논다
너무 많으면 -> 필요한 부분이 memory에 안 올라와 있어서 I/O 빈번
=> 적절히 제어해야함
- degree of multiprogramming : memory에 올라간 program 수
- 보통 얘 없음 (무조건 ready)
=> 대신 Medium-term scheduler로 degree of multiprogramming 조절
- Medium-term scheduler (Swapper)
- process에게서 memory 뺏음
- 여유 공간 마련을 위해 process를 통째로 memory에서 disk로 쫓아냄
- degree of multiprogramming 제어
4) Thread
Thread : CPU의 실행 단위
- 하나의 Process (+하나의 PCB)
- Memory 공간 자체는 공유
- Stack 공간 별도
- PC랑 Registers 각각
장점
- 빠른 응답성
(ex. 브라우저 작동에서 한 스레드가 이미지 불러올 동안 다른 스레드가 이미 받은 응답 디스플레이) - 메모리 절약
- thread는 process의 memory를 공유한다
- 같은 일 하는 process 여러개 띄우면 memory 낭비
(ex. 브라우저 여러개, 한글 여러개)
- 경제성
- process 하나 만드는 것이 thread 하나 만드는 것보다 overhead 큼
- process context switching이 thread context swithcing 보다 overhead 큼
- (cpu 여러개일 때) 병렬성 높임
Thread 종류
- kernel thread : kernel이 관리하는 thread
- 논리적 core와 매핑되는, 시스템의 실제 thread
- kernel이 thread의 존재를 안다
- kernel이 각 thread를 개별적으로 관리
- process 내 thread들이 병렬 수행 가능 (cpu 여러개일 경우)
- 하나의 thread가 blocked 되어도 다른 thread는 계속 작업 가능
- user thread : user 영역의 library로 구현된 thread
- kernel이 thread의 존재를 모른다
- user threads can be created more quickly and are simpler to control
- 유저 process에서 thread 관리
- 하나의 유저 레벨 thread가 block되면, 해당 스레드를 생성한 유저 process 전체가 block
- 그 실행을 유지하기 위해 유저 프로세스 전체가 필요하므로, 한 스레드가 block되면 전체 프로세스가 block
- kernel은 process 단위로 자원을 할당하기 때문에
thread Block -> Process Block -> Process 내 다른 thread도 Block