1. 연속할당(contiguos allocation) 물리적 메모리를 다수의 분할로 나누어 하나의 분할에 하나의 프로세스를 적재하도록 하는 방식
고정분할(fixed partition allocation) 방식 : 메모리를 고정된 크기로 미리 나누어 놓은 방식
융통성 떨어짐 : 프로그램의 크기보다 작을 수도 클수도 있으므로
외부조각(external fragmentation) : 프로그램의 크기가 미리 나누어둔 분할 보다 커서 적재를 못하여 발생하는 메모리 고간
내부조각(internal fragmentation) : 반대 상황, 프로그램 크기가 작아서 발생하는 남는 메모리 공간
가변분할 (variable partition allocation) 방식 : 프로그램의 크기에 따라 동적으로 변하는 방식
한번 할당한 메모리공간에 다른 프로그램이 적재 될시 해당 프로그램이 그 공간보다 크면 외부조각 발생
해결방안 (새로운 프로그램의 크기가 n)
최초적합(first-fit) 방법 :크기가 n 이상인 가용공간들 중 가장 먼저 찾는 곳에 적재
최적합(best-fit) 방법 : 크기가 n 이상인 가용공간들 중 가장 작은 공간에 적재
최악적합(worst-fit) 방법: 크기가 가장 큰 곳에 적재
그래도 외부조각이 발생시 해결방법
컴팩션(compaction) : 실행시간 바인딩 방식이 지원되는 환경에서만 가능
사용 중인 공간을 다 앞으로 모으로 안쓰는 공간을 다 모아서 하나의 공간으로 만드는 방법
2. 불연속할당 (noncontiguos allocation) 하나의 프로세스가 물리적 메모리의 여러 위치에 분산하여 적재하는 방식 - 페이징 기법 : 동일한 크기로 나누어 메모리에 올리는 기법 - 세그멘테이션 기법 : 크기는 일정하지 않지만 의미있는 단위(코드 ,데이터, 스택등)로 나누어서 메모리에 올리는 기법
프로그램 카운터(program counter, PC)라는 레지스터리가 현재의 CPU에서 수행할 코드의 메모리 주소값을 가지고 있다.
메모리 주소값의 기계어 명령을 하나씩 CPU가 실행
기계어 명령의 종류
사용자 프로그램이 사용가능한 일반 명령
CPU내에서 수행되는 명령 : Add
메모리 접근을 필요로 하는 명령: Load, Store
커널영역에서만 수행하는 특권명령
입출력을 동반하는 명령: Disk I/O
CPU 버스트와 I/O 버스트
CPU 버스트 : I/O을 수행한 후 다음 I/O이 수행 전 까지 CPU를 가지고 수행하는 작업
디스크 쓰기/읽기 명령, store 명령, Add 명령, Load 명령
I/O 버스트 : I/O 작업이 요청을 수행하고 나서 CPU 버스트를 수행하기 전까지의 작업
CPU 바운드 프로세스 와 I/O 바운드 프로세스
CPU 바운드 프로세스 : I/O 요청이 거의 일어나지 않아 CPU 버스트가 길게 나타는 현상
계산위주의 프로그램
I/O 바운드 프로세스 : I/O 요청이 빈번하여 CPU 버스트가 짧게 나타나는 현상
대화형 프로그램(interactive program)
CPU 스케쥴링이 필요한 이유
CPU 버스트의 길이가 프로세스마다 다르므로 효율적인 CPU 할당 필요
대화형 작업(CPU버스트가 짧음)에서는 사용자에 대한 빠른 응답 중요 -> 우선적으로 할당
I/O 바운드 프로세스가 우선순위 -> CPU를 잠깐만 사용한 후 반환
1. CPU 스케줄러 (운영체제 코드)
CPU 스케줄링이 필요한 경우
실행 상태에 있던 프로세스가 I/O요청 등에 의해 봉쇄(blocked) 상태로 바뀌는 경우
실행 상태에 있던 프로세스가 타이머 인터럽트 발생에 의해 준비 상태로 바뀌는 경우
I/O 요청에 의해 봉쇄상태에 있던 프로세스의 I/O 작업이 완료되어 인터럽트가 발생하고 그 결과 이 프로세스의 상태가 준비상태로 바뀌는 경우
CPU에서 실행 상태에 있는 프로세스가 종료되는 경우
CPU 스케줄링 방식
선점형(preemptive): CPU를 계속 사용하길 원하더라고 강제로 빼앗는 방식
경우 2 와 3
비선점형 (nonpreemptive) : CPU를 사용하는 프로세스가 스스로 반납하기 전까지 기다리는 방식
경우 1 와 4
2.디스패처 (운영체제 코드)
CPU 스케줄러가 어떤 프로세스에게 CPU를 할당해야 할지 결정하고 나면
디스패처(dispatcher)가 프로세스에게 CPU를 이양하는 작업을 한다.
방식
수행 중(CPU를 사용 중)인 프로세스에 타이머 인터랩트 발생
디스패치 작업 수행
수행 중인던 프로세스의 문맥을 그 프로세스의 PCB(프로세서 제어 블록)에 저장
새롭게 선택된 프로세스의 문맥을 해당 PCB로 부터 복원
새로운 프로세스에게 CPU를 넘기는 작업을 수행
디스패치 지연시간 ( dispatch latency)?
디스패처가 하나의 프로세스를 중지 시키고 다른 프로세서에게 CPU를 이양하는데 걸리는 시간
대부분은 문맥교환 오버헤드에 해당
이유
문맥을 교환하는 동안에는 유용한 작업을 수행할 수 없기 때문에, 일종의 오버헤드에 해당
문맥을 교환에 따른 추가적인 시간소비와 시스템 자원(메모리) 사용이 발생하므로 오버헤드에 해당
문맥교환 오버헤드??
- 컴퓨터 시스템에서 발생하는 작업 전환이나 문맥 전환에 따른 추가적인 시스템 자원 및 시간 소비를 의미
오버헤드 : 함수 호출 또는 다른 처리를 수행하기 위해 필요한 간접적인 처리 시간 및 메모리 소비를 말함
오버헤드 발생 이유 (주로 운영체제에서 관리)
문맥교환 시간
프로세스 전환이 필요할 때, 현재 실행 중인 작업의 상태를 저장하고 다음 작업의 상태를 복원-> 이때 발생하는 시간 소요가 문맥 교환 시간으로 오버헤드가 발생
시스템 활용 불가능 시간
문맥 교환 동안 시스템은 유용한 작업을 수행 못함 -> 이 시간 동안 시스템 자원이 소멸
오버헤드 해결 방안
다중 프로그래밍 수준을 낮추어 문맥 교환 발생 빈도를 감소
스레드를 이용하여 문맥 교환 부하를 최소화
3. 스케쥴링의 성능 평가
시스템관점
CPU 이용률 전체 시간 중 CPU가 일을 한 시간의 비율 -> CPU가 휴면(idle)상태에 머무르는 시간을 최대한 줄이는 것이 목표
처리량(thorughout) 주어진 시간동안에 준비 큐에 있는 프로세스 중 몇개를 처리하였는가, 즉 CPU 버스트를 완료한 프로세스 갯수
사용자관점
대기 시간 - CPU 버스트 기간 중 프로세스가 준비큐에서 CPU를 얻기위해 기다린 시간 - 준비 큐에 들어온 시간 직후 부터 이번 CPU 버스트가 끝날 때까지 준비 큐에서 기다린 시간의 합
한번의 CPU 버스트가 한번에 완료되지 않고 여러번에 걸쳐서 완료될 수도 있음 - 시분할 시스템 때문
소요 시간(turnaround time) - 준비 큐에서 기다린 시간 + CPU를 사용한 시간(반납) -> 하나의 CPU 버스트가 완료될 때까지 소요된 시간 - 대기 시간 + CPU를 사용한 시간
응답 시간 - 프로세스가 준비 큐에 들어온 직후 부터 첫 번째 CPU를 획득하기까지 기다린 시간 - 대화형 프로그램/시스템에 적합한 성능 척도
4. 스케줄링 알고리즘
1)선입선출 스케줄링 (first-come first-served: FCFS)
먼저 기다리는 프로세스에게 먼저 CPU를 할당하는 방식
일상 생활 : 은행, 공항, 화장실 등
단점 : CPU 버스트가 긴 프로세스가 먼저 온 경우 나머지 프로세스가 기다려야한다.
프로세스
CPU 버스트 시간
P1
12
P2
3
P3
3
FCFS 방식의 예
예 1) P1 -> P2 -> P3
대기시간: P1 =0, P2 = 12, P3 = 15
평균 대기시간 : 9
예 2) P2 -> P3 -> P1
대기시간 : P2 =0, P3 = 3, P1 = 6
평균 대기시간: 3
예 1) 에서 콘보이 현상 발생 ( Convoy effect) : CPU 버스트가 짧은 프로세스 (P2)가 CPU 버스트가 긴 프로세스(P1)보다 늦게 도착하여 기다려야하는 상황
2) 최단작업 우선 스케줄링 (Shortest-job First: SJF)
- 평균 대기시간을 제일 짧게하는 알고리즘 - 시스템에서 평균 대기시간을 줄이는 것이 항상 좋은 방식은 아님
종류
비선점형
먼제 실행 중인 프로세스가 마칠때 까지 기다리는 방식
선점형
다른 프로세스가 실행 중이여도 새로운 프로세스의 CPU 버스트가 더 짧으면 중단하고 새로운 프로세스에 CPU 할당
작업이 끝나거나 새로운 프로세스가 들어오면 CPU 버스트 시간을 비교
단점: CPU 버스트가 긴 프로세스는 준비 큐에서 무한정 기다려야하는 문제 -> 기아현상(starvation)
현실적으로 어려운 부분은 프로세스의 CPU 버스트 시간을 미리 알 수 없다는 점
3) 우서순위 스케줄링 (Priority scheduling)
- 준비 큐에서 기다리는 프로세스들 중 우선순위가 가장 높은 프로세스에게 제일 먼저 CPU 할당
종류 : 비선점형, 선점형 방식
단점
기아현상: 계속해서 우선순위가 높은 프로세스가 오면 우선순위가 낮은 프로세스는 무한정 기다려야하는 문제점
해결방법
노화(aging)기법 : 기다리는 시간이 길어지면 점점 우선순위를 올려주는 기법
4) 라운드 로빈 스케줄링( Round Robin Scheduling)
- 시분할 시스템의 성질을 가장 잘 활용한 방식 - 각 프로세스마다 CPU를 사용할 수 있는 할당시간(time quantum) 존재
CPU를 연속으로 사용할 수 있는 할당시간이 지나면 준비 큐에서 제일 뒤에서 대기
준비 큐에서 다음 순서의 프로세스에 CPU를 할당
단점 : 할당시간이 너무 짧으면 문맥교환의 오버헤드가 발생
장점 : 대화형 프로세스의 빠른 응답시간을 보장 가능
작동원리
할당시간이 만료 -> 타이머 인터럽트사용하여 CPU 회수
할당시간 만료전에 완료 -> CPU 자진 반납
SJF 와 비교
평균 대기시간 측면 => SJF win
응답 시간 => 라운드 로빈 스케줄링 win
소요 시간 => 할당시간에 따라 변경
효율성 => SJF win
형편성 => 라운드 로빈 스케줄링 win
FCFS 와 비교
예) 같은 시각에 CPU 버스트 시간이 10인 프로세스가 10개 도착
평균 대기시간, 평균 소요시간 => FCFS
(이유) 라운드 로빈 스케줄링은 마지막에 모든 프로세스가 마치므로 비효율적
평균 응답시간 => 라운드 로빈 스케줄링
CPU 버스트 시간이 다 같지 않다면
라운드 로빈 스케줄링 : CPU 버스트 시간이 짧은 프로세스들은 빠르게 완료, 시간이 긴 프로세스는 오래 대기
FCFS : 모든 포로세스의 소요되는 시간 편차가 매우 큼
라운드 로빈 스케줄링이 합리적
5) 멀티레벨 큐
- 준비 큐를 여러 개로 분할해 관리하는 스케줄링 방식 - 성격이 다른 프로세스를 별도로 관리 -> 성격에 맞는 스케줄링을 적용하기 위해 준비 큐를 별도로 준비
예시 : 대화형 작업 과 그렇지 않는 작업
전위 큐(라운드 로빈) : 대화형 작업 담기 - 응답시간을 빠르게 하기 위해 라운드 로빈 사용
후위 큐(FCFS) : 계산 위주의 작업 - 응답시간이 중요하지 않으므로 FCFS이용하여 오버헤드 줄이는 방식
- 큐 자체에 대한 스케줄링도 필요: 어느 큐에 먼저 CPU를 할당할 것인가?
고정 우선순위 방식 : 우선 순위가 높은 큐에 먼저 CPU 할당, 낮은 큐는 우선순위가 높은 큐가 비어있을 때 할당
타임 슬라이스 방식 : 기아현상을 해소하는 방법, 각 큐에 CPU를 적절한 비율로 할당
6) 멀티레벨 피드백 큐
- 멀티레벨 큐와 동일 : 프로세스를 여러 큐에 줄 세운다는 점 - 차이점 : 프로세스가 하나의 큐에서 다른큐로 이동가능
상위에 있는 큐 일수록 우선순위가 높으며 상위 2개의 큐는 각각 할당시간이 5 와 10 인 라운드 로빈 스케줄링을 사용한다.
=> CPU 사용시간이 짧은 대화형 프로세스들은 우선순위가 높은 큐( 라운드 로빈) 에서 빨리 서비스받고 작업을 완료.
이때, CPU 버스트 시간이 길어서 5만큼의 시간동안에 완료를 못하는 경우면 10에서 대기를 한다. 10만큼의 시간동안에 작업을 완료 못하면 -> 계산 위주의 프로세스로 간주 -> FCFS에서 대기
7) 다중처리기 스케줄링
- CPU가 여러 개인 개인 시스템 = 다중처리기 시스템 (multi-precessor system) - 프로세스를 준비큐에 한 줄로 세워서 각 CPU가 알아서 다음 프로세스를 꺼내어가도록하는 시스템 - (예) 공항에서 체크인을 위해 기다리는 줄
문제점 : 반드시 특정 CPU에서 수행되어야하는 프로세스가 많은 경우 -> 특정 CPU에 작업량이 편중
해결책 : 부하균형(load balancing) 메커니즘- CPU별 부하가 적절히 분산되도록 하는 메커니즘
스케줄링 방식
- 대칭형 다중처리(symmetric multi-precessing) : CPU가 각자 알아서 스케줄링을 결정하는 방식 - 비대칭형 다중처리(asymmetric multi-precessing) : 하나의 CPU가 다른 모든 CPU의 스케줄링 및 데이터 접근을 책임지고 나머지는 따라 움직는 방식
8) 실시간 스케줄링
- 각 작업마다 주어진 데드라인 안에 반드시 작업을 처리해야 함 - 데드라인이 얼마 남지 않은 요청을 먼저 처리 (EDF : Earlist Deadline First)
종류
경성 실시간 시스템 (hard real-time system) : 반드시 시간(데드라인) 을 정확하게 지켜야 하는 시스템,(ex) 미사일 발사 시스템
연성 실시간 시스템 (soft real-time system) : 데드라인이 존재하지만 넘겨도 위험한 상황 X (ex) 멀티미디어 스트리밍 시스템