[운영체제-양희재 교수님]6강 프로세스 관리
프로세스
- 참고) 멀티프로그래밍 시스템에서 CPU는 메모리의 프로세스에 CPU 시간을 나눠준다. 즉 일정 시간 프로세스를 실행하고 다음 프로세스로 넘어간다.
프로세스 vs. 프로그램
- 프로세스 = program in execution, 실행 중인 프로그램 = task = job
- 프로그램 ⇒ 디스크 안에서 아무것도 하지 않는다.
- 프로그램이 메인 메모리로 올라오면
- 메모리에 code(text), data, stack이 생성된다.
- pc(program counter), sp(stack pointer), 레지스터가 바뀌기 시작한다.
- 디스크 내의 프로그램은 이런 작업을 하지 못한다.
프로세스 상태
- new
- 하드 디스크의 프로그램이 메인 메모리로 올라온 상태
- ready
- 메모리로 올라와 초기화가 끝나고 실행을 위한 모든 준비가 끝난 상태
- 입출력작업 등을 끝내고 다시 CPU를 기다리는 상태
- Time sharing system의 경우) running 상태에서 IO를 만나지 않아도 일정 시간 후에 강제로 스위칭하므로 일정 시간 뒤 ready 상태가 된다(time expired).
- running
- CPU에 의해 실행되는 상태
- waiting
- 입출력작업 등을 하기 위해 CPU를 사용하지 않는 상태
- terminated
- 종료된 상태
PCB(Process Control Block)
- Task Control Block(TCB)이라고도 함
- 하나의 프로세스에 하나의 PCB가 할당됨
- 프로세스에 대한 모든 정보를 가지고 있음
- 저장하는 정보
- 프로세스 상태 정보, process state(running, ready, waiting 등)
- PC(현재 실행 중인 메모리 번지 정보)
- registers
- MMU info(base, limit)
- CPU time(프로세스가 CPU를 사용한 기간)
- process id, list of open files(사용 중인 파일 목록) 등
- PCB에 프로세스에 대한 정보를 가지고 있어야 CPU가 프로세스 작업을 다시 진행할 때 직전의 상태로 복구할 수 있다.
- 저장하는 정보
- PCB는 OS 내부의 프로세스 관리 영역 안에 저장
Queues
- Job Queue
- 하드 디스크의 수많은 job은 메인 메모리에 들어가기 위해 job queue에서 대기
- Job scheduler(Long-term scheduler)
- Job queue에 줄 선 job 중 어떤 job을 먼저 메인 메모리로 올릴지 결정
- OS 코드의 일부
- 프로세스가 종료되어야 메인 메모리의 공간이 비기 때문에 long-term(분 단위) 필요
- Ready Queue
- Job이 메인 메모리에 올라와도 CPU가 올 때까지 ready queue에서 대기
- CPU scheduler(Short-term scheduler)
- ready queue에 줄 선 프로세스 중 어떤 프로세스를 먼저 서비스할지 결정
- 1초에 수십, 수백 번씩 일어나는 작업
- scheduler 중 가장 중요
- Device Queue
- 프린터 등의 device를 사용하기 위해 device queue에서 대기
- Device scheduler
- device queue에 줄 선 프로세스 중 어떤 프로세스를 먼저 서비스할지 결정
- 디바이스마다 scheduler 존재
- terminate는 줄 서지 않아도 된다.
- OS 내부의 프로세스 관리 영역 안에 queue와 scheduler가 포함된다.
Multiprogramming
- Multiprogramming: 메인 메모리에 여러 프로그램을 올리는 것
- 현대 대부분의 운영체제
- Degree of multiprogramming: 메인 메모리에 올라간 프로세스 개수
IO-bound vs. CPU-bound process
- 입출력을 많이 하는 프로세스 ⇒ i/o-bound process
- 예) 워드
- 계산을 많이 하는 프로세스 ⇒ CPU-bound process
- 예) 슈퍼컴퓨터를 사용하는 일기예보
- Job scheduler는 두 프로세스를 골고루 메인 메모리에 올려서 I/O 또는 CPU 작업이 한쪽으로 몰리지 않게 한다.
Medium-term scheduler
- OS가 메인 메모리를 보며 swap device로 프로그램을 내보낼지 결정하는 작업
- Backing store에 있는 프로세스 중 어느 것을 메인 메모리로 들여올지 결정하는 작업
- short-term보다는 덜 일어나고 long-term보다는 자주 일어난다.
Swapping
- Swap out
- 메인 메모리에 올라간 프로그램이 활동하지 않고 있다면 메모리가 낭비 → 프로그램을 Swap device에 보내서 메모리를 재활용
- Swap device(Backing store)
- Swap out 된 프로세스를 저장할 용도의 디스크
- Swap in
- Swap device의 프로그램을 다시 메인 메모리로 불러오는 것
- Swap out 될 때의 메모리 공간으로 다시 돌아간다는 보장은 없음
Context switching(문맥 전환)
- Context switching: CPU가 작업할 프로세스를 바꾸는 작업
- Scheduler
- Ready Queue의 작업 중 CPU가 실행할 프로세스를 결정하는 작업을 하는 프로그램
- 문맥 전환 발생
- Dispatcher
- Scheduler가 선택한 프로세스를 실행하기 위해 필요한 작업을 하는 프로그램
- 프로세스의 상태, MMU의 base와 limit 정보 등을 PCB에 저장
- 다음에 실행할 프로세스의 상태를 restore
- Scheduler가 선택한 프로세스를 실행하기 위해 필요한 작업을 하는 프로그램
- Context switching overhead
- 문맥 전환은 부담되는 작업이므로 자주 하지 않는 게 좋다.
- Scheduler와 Dispatcher는 context switching overhead를 줄이기 위해 어셈블리어로 짠다.
This post is licensed under CC BY 4.0 by the author.