컴퓨터사이언스 부트캠프 with 파이썬 책을 공부하며 정리한 포스팅입니다.
개인 공부후 정리용으로 남기는 포스팅으로 내용상에 오류가 있을수 있습니다.
예제 코드는 Computer-Science 를 통해 실습하고 있습니다.
핵심개념
- 프로세스
- 스케줄링
- 컨텍스트 스위칭
프로세스
- 더블클릭으로 프로그램을 실행한 상태.
- 즉, 하드디스크에서 메인 메모리로 코드와 데이터를 가져와 현재 실행되고 있는 상태
- 동시에 여러개가 존재할수 있음.
- 프로그램 - 하드디스크에 저장된 실행 파일. 같은 경로에 같은 이름으로 동시에 존재할수 없음
프로세스 상태
- 생성(Created)
- 프로그램을 더블클릭했을 때 프로세스가 생성되면서 실행 가능 상태가 된다.
- 곧바로 실행 상태가 되는게 아니라 실행 가능 상태에서 실행중인 프로세스와 우선순위를 비교한 다음
- 우선순위가 높으면 실행하고 아니면 순서를 기다리는 식
- 실행 가능(Waiting)
- 운영체제는 인터럽트가 발생했을 때 실행 가능 상태의 프로세스 중 다음으로 CPU를 할당받아
- 실행될 프로세스를 결정한 후 실행 중인 프로세스와 교체한다.
- 디스패치(dispatch) - 실행될 프로세스에 CPU를 할당하는 것.
- 프리엠션(preemption) - 실행 중이던 프로세스에서 CPU를 해제하는 것.
- 실행(Running)
- 프로세스가 운영체제로부터 CPU를 할당받아 실행되고 있는 상태
- 보류(Blocked)
- 프로세스가 I/O(입출력) 작업을 하면 CPU를 해제하고 보류 상태로 변경된다.
- I/O 작업이 끝나면 실행 가능 상태로 변경됨(실행 상태로 변경되는게 아니다!!)
- 소멸(Terminated)
- 프로세스 실행이 완료되어 메인 메모리에서 사라진다.
스케줄링(Scheduling)
- 운영체제가 여러 프로세스의 CPU 할당 순서를 결정하는 것.
- 이러한 일을 하는 프로그램을 스케줄러 라고 한다.
- 선점형 스케줄링(preemptive scheduling)과 비선점형 스케줄링(non-preemptive scheduling)으로 나뉨
- 선점형 스케줄링에서는 어떤 프로세스가 실행중에 있어도 스케줄러가 강제로 실행을 중지하고 다른 프로세스에 CPU를 할당할수 있다.
- 비선점형 스케줄링에서는 프로세스가 종료되거나 I/O작업에 들어가거나 명시적으로 CPU를 반환하기 전까지 계속해서 실행된다.
- 최근의 운영체제는 멀티태스킹을 위해 선점형 스케줄링을 함.
스케줄링의 알고리즘
매우 다양하지만 대표적으로 4가지만 알아보자.
- 우선순위(Priority) 알고리즘
- 프로세스에 우선순위를 매겨 우선순위가 높은 프로세스를 먼저 실행.
- 단점 - 기아 상태(starvation)발생
- 우선순위가 낮은 프로세스는 계속 CPU를 할당받지 못하는 현상
- 위와 같은 문제를 해결하기 위해 만든 방법 - 에이징(aging)
- 우선순위가 낮은 프로세스가 일정 시간 CPU를 할당받지 못하면 우선순위를 높여 실행
- 라운드 로빈(Round-Robin) 알고리즘
- 실행 가능 상태에 있는 프로세스들을 순서대로 가져와 일정 시간동안 CPU를 할당하는 방식
- 타임 슬라이스(time slice) 혹은 퀀텀(quantum) - 프로세스에 부여된 일정 시간
- 대표적인 선점형 스케줄링
- 단점
- 너무 짧으면 컨텍스트 스위칭이 자주 일어나 시스템에 부담이 됨
- 너무 길면 멀티태스킹을 구현하는데 문제가 발생
- FCFS(First Come First Served)
- 실행 가능 상태에 먼저 들어온 프로세스를 먼저 실행
- 비선점형 스케줄링
- SJF(Shortest Job First)
- 평균 대기 시간을 최소화하기 위해 CPU 할당 시간이 가장 짧은 프로세스를 먼저 실행
- 단점
- 할당 시간이 긴 프로세스는 계속해서 실행이 되지 않는 기아 상태에 빠질수 있다.
- CPU의 실제 할당 시간을 알 수 없으므로 예측에 의존해야 하는 단점도 있다.
컨텍스트 스위칭
- 실행 중인 프로세스의 CPU 상태 정보를 그 프로세스의 PCB에 저장하고 곧 실행될 프로세스의 PCB에서 이전 CPU 상태 정보를 CPU로 가져오는 것
- CPU 상태를 컨텍스트 라고 부르는데 말 그대로 현재 CPU의 레지스터 값들을 ‘전환(switching)’하는 것.
- PCB(Process Control Block, 프로세스 제어 블록)
- 프로세스의 CPU 상태와 프로세스의 상태를 저장해 둔 메모리 블록
Comments