기존프로그래밍
- CPU가 프로세스를 실행하다가 프로세스가 긴시간의 입출력을 요구하는 동안에는 CPU가 idle상태가 된다.
다중프로그래밍
- CPU의 이용률을 극대화 하기위해 항상 하나 이상의 프로세스를 실행하게 한다
- 프로세스가 긴시간의 입출력을 요구하여 CPU가 놓여지면 다른 프로세스를 실행한다 이러한 패턴을 반복한다
( 파일로부터 입출력을 해야하는 등의 물리적인 움직임이 필요하여 긴시간동안 CPU가 쉬는등의 경우)
시분할
- 각각의 사용자들이 상호작용 할 수 있도록 CPU를 빈번하게 교체하여 할당하는 것
프로세스 스케줄링이란
- 비다중프로그래밍 환경에서는 입출력과 같은 상황이 발생하게 되면 CPU는 긴 시간동안 유휴상태가 된다 반면에
다중프로그래밍 환경에서는 하나의 프로세스가 수행을 하다가 입출력을 해야한다면 다른 대기중인 프로세스를 실행하게 된다
이렇게 실행과 문맥교환을 반복하다보면 결국에는 처음 입출력을 요청했던 프로세스의 입출력이 끝나고 다음 실행을 요구한다
이렇게 된다면 다른 실행해야할 프로세스가 대기하고 있는 한 CPU는 유휴상태가 되지 않는다 결국 중요한 문제는
메모리에서 대기중인 다른 프로세스들중에 실행할 프로세스를 선택해야 하는데 이것이 바로 프로세스 스케줄링이다.
- 메모리에 상주시킬 프로세스를 결정하는 작업
프로세스 스케줄링이 발생하는 경우
1. 프로세스가 실행중 입출력 요청 또는 자식프로세스의 종료를 기다리기 위해 대기 상태로 가는 경우
2. 프로세스가 실행상태에서 인터럽트가 발생하여 준비완료 상태로 가는 경우
3. 프로세스가 대기상태에서 입출력이 종료되거나 자식프로세스가 종료되어 준비 완료 상태로 가는 경우
4. 프로세스가 종료되는 경우
*사각형 - 큐
*원 - 큐를 서비스하는 자원
과정
1. 새로운 프로세스들이 ready queue에 놓인다 CPU가 할당될 때 까지 ready queue에서 대기한다.
2. 프로세스에 CPU가 할당되어 프로세스가 실행된다
3. 아래의 사건들중 하나가 발생한다
1) I/O 가 요청되어 I/O queue에 프로세스가 놓인다
2) 프로세스가 자식프로세스를 생성하고 자식프로세스의 종료를 기다린다
3) 인터럽트가 발생하여 CPU를 뺏겨 다시 ready queue에 놓인다
4) 할당된 time slice를 모두 사용하여 ready queue에 놓인다
스케줄러
*잡큐
- 시스템안의 모든 프로세스들로 구성되고
- 디스크상에 존재한다
- 디스크상에서 메인메모리에 적재되길 기다리는 프로그램이 존재하는 곳
*준비완료 큐
- 메인메모리상에 존재한다
- 실행을 대기하는 프로세스들이 존재하는 곳이다.
*장치큐
- 프로세스가 입출력을 필요로 할 때 시스템내에는 여러 프로세스들이 존재하므로 입출력을 하기위해 대기해야할 수도 있다
이때 프로세스가 대기하는 큐를 장치큐라고 한다.
- 각 장치들은 자신의 장치 큐를 가진다.
1. Long Term 스케쥴러 (Job 스케쥴러)
- 아래의 그림과 같은 상황에서 Long Term 스케줄러가 동작
- 디스크에서 프로세스들을 선택하여 실행하기 위해 메모리로 적재한다.
- 다중 프로그램의 정도를 제어한다. (메모리에 있는 프로세스들의 수)
=> 입출력 중심 프로세스와 연산중심의 프로세스들을 적절히 선택하여 프로세스의 이탈률과 생성률을 균힐하게 유지한다
즉, 프로세스가 너무 적어 CPU이용률이 낮아지거나 메모리가 너무 많이차서 가상메모리를 사용하지 않도록 한다.
**모든 프로세스들이 입출력중심
- 준비완료큐가 비게 되고 단기 스케줄러가 할일이 없어지며 CPU가 유휴상태에 놓인다
**모든 프로세스들이 연산중심
- 입출력큐가 비게되고 장치들이 유휴상태에 놓이게된다
2. Short Term 스케쥴러(CPU 스케쥴러)
- 아래의 그림과 같은 상황에서 Short Term 스케쥴러가 동작
- 단기 스케쥴러는 메인메모리에 실행 준비가 완료되어 있는 프로세스들(ready queue) 중에서 선택하여 CPU를 할당한다.
- 메인메모리에 존재하는 준비완료큐에서 적절한 프로세스를 선택하여 CPU를 할당
3. Mid Term 스케쥴러
- 메모리를 효율적으로 사용하기위해 사용된다.
- 아래의 그림과 같은 상황에서 Mid Term 스케쥴러가 동작
- ready queue에서 cpu할당을 받지 못하고 메모리만 차지하고 있는 경우 swap out을 통해 ready queue공간을 확보
(나중에 필요시 다시 swap in)
- wait 상태에서 ready 상태로 가지 못하고 메모리만 차지하고 있는 경우
문맥교환 (Context Switch)
- CPU가 할당된 프로세스를 다른 프로세스로 교환하는 작업
(이전 프로세스의 문맥을 PCB에 저장하고 실행할 새로운 프로세스의 문맥을 복구한다)
- 인터럽트는 운영체제가 CPU를 현재 작업에서 빼앗아 커널루틴을 수행할 수 있게 한다.
이러한 연산은 범용 시스템에서는 자주 발생한다. 시스템은 인터럽트가 발생한다면 인터럽트가 끝난뒤 원래의
문맥* 을 복구할 수 있도록 현재 실행중인 프로세스의 현재 문맥을 저장할 필요가 있다
PCB(프로세스 제어블록)
- 운영체제에서 각 프로세스를 표현하는 것
- 다음의 것들을 포함한다
1) 프로세스 상태
2) 프로그램카운터(PC)
3) CPU레지스터
4) CPU스케줄링정보
5) 메모리관리정보
6) 회계정보
7) 입출력 상태정보
문맥
- 프로세스의 PCB에 표현된다
- CPU레지스터값 , 프로세스상태 , 메모리관리 정보등을 포함
디스패처
- CPU의 제어를 단기 스케줄러가 선택한 프로세스로 넘겨주는 일을하는 것
'CS(Computer Science) > 운영체제' 카테고리의 다른 글
프로세스간 통신(IPC) - 수정중 (0) | 2018.11.18 |
---|---|
스레드 개요 (0) | 2018.10.06 |
프로세스 개요 (0) | 2018.09.11 |
메모리관리(메모리 낭비 방지) (0) | 2018.09.06 |
멀티프로그래밍 , 멀티프로세싱 (0) | 2018.09.06 |