운영체제, 프로세스, 스레드, 스케줄링
운영체제 학습 절입니다.
4장 2절에서는 CPU가 명령어를 실행하는 방식을 배웠습니다.
CPU
레지스터
명령어 사이클
캐시
RAM
가상기억장치이제 질문이 바뀝니다.
프로그램이 여러 개 동시에 실행되면 CPU는 누구에게 먼저 일을 시킬까?
메모리는 누가 나누어 줄까요?
파일과 장치는 누가 관리할까요?이것을 담당하는 것이 운영체제입니다.
이번 절의 핵심은 다음과 같습니다.
운영체제 = 컴퓨터 자원을 관리하는 관리자
프로세스 = 실행 중인 프로그램
스레드 = 프로세스 안에서 실행되는 작업 흐름
스케줄링 = CPU를 어떤 프로세스에게 줄지 결정하는 것이번 절 내용은 운영체제 출제범위의 운영체제 개요, 컴퓨터 시스템 개요, 프로세스 개념과 상태, 프로세스 제어, 스레드, 스케줄링, FCFS, SJF, SRT, 라운드 로빈, 우선순위, HRN, FSS, 다단계 피드백 큐 스케줄링에 해당합니다.
이번 절의 큰 그림
이번 절에서 배울 순서는 다음과 같습니다.
운영체제란 무엇인가
→ 운영체제가 관리하는 자원
→ 프로그램과 프로세스의 차이
→ 프로세스 상태
→ PCB와 문맥 교환
→ 스레드
→ 프로세스와 스레드 비교
→ CPU 스케줄링
→ FCFS, SJF, SRT, RR, 우선순위, HRN
→ 평균 반환시간과 대기시간 계산5장 1절은 운영체제의 핵심입니다.
컴퓨터 자원을 공정하고 효율적으로 나눠주는 관리자입니다.
운영체제 기본
운영체제란?
운영체제, OS는 컴퓨터 하드웨어와 사용자 프로그램 사이에서 자원을 관리하는 시스템 소프트웨어입니다.
Windows
Linux
macOS
Android
iOS
UNIX운영체제가 없으면 사용자는 하드웨어를 직접 다뤄야 합니다.
예를 들어 파일 하나를 저장하려면 직접 이러한 내용을 알아야 할 수도 있습니다.
디스크의 어느 위치에 저장할지
메모리 어디에 올릴지
CPU를 언제 사용할지
키보드 입력을 어떻게 받을지
모니터에 어떻게 출력할지운영체제는 이런 복잡한 일을 대신 처리합니다.
운영체제는 사용자와 하드웨어 사이에서 컴퓨터 자원을 관리하고 프로그램 실행 환경을 제공합니다.
운영체제 범위에도 운영체제의 개요, 구성요소, 종류, 발전과정이 포함되어 있습니다.
운영체제가 관리하는 자원
컴퓨터의 주요 자원은 다음과 같습니다.
| 자원 | 운영체제가 하는 일 |
|---|---|
| CPU | 어떤 프로세스를 실행할지 결정 |
| 메모리 | 각 프로그램에게 메모리 공간 할당 |
| 파일 | 파일 생성, 삭제, 읽기, 쓰기 관리 |
| 입출력장치 | 키보드, 마우스, 프린터, 디스크 관리 |
| 프로세스 | 실행 중인 프로그램 생성, 종료, 상태 관리 |
| 네트워크 | 통신 자원 관리 |
| 보안 | 사용자 권한과 접근 제어 |
운영체제 = CPU, 메모리, 파일, 장치, 프로세스 관리자운영체제의 주요 목적
운영체제의 목적은 크게 네 가지입니다.
| 목적 | 설명 |
|---|---|
| 편리성 | 사용자가 컴퓨터를 쉽게 사용하게 함 |
| 효율성 | CPU, 메모리, 장치를 낭비 없이 사용 |
| 공정성 | 여러 프로그램이 자원을 공평하게 사용 |
| 보호성 | 프로그램과 사용자를 서로 보호 |
예를 들어 사용자가 동시에 이런 프로그램을 실행한다고 가정하겠습니다.
크롬
카카오톡
게임
음악 플레이어
문서 편집기CPU는 실제로 한순간에 제한된 일만 할 수 있습니다. 그런데 사용자는 여러 프로그램이 동시에 돌아가는 것처럼 느낍니다.
이것은 운영체제가 아주 빠르게 CPU를 나눠주기 때문입니다.
운영체제의 발전 흐름
운영체제는 컴퓨터 사용 방식이 발전하면서 같이 발전했습니다.
간단히 보면 다음과 같습니다.
| 방식 | 핵심 |
|---|---|
| 일괄 처리 시스템 | 작업을 모아서 한 번에 처리 |
| 다중 프로그래밍 | 여러 프로그램을 메모리에 올려 CPU 활용 증가 |
| 시분할 시스템 | CPU 시간을 잘게 나눠 여러 사용자가 동시에 사용하는 것처럼 보이것이 함 |
| 실시간 시스템 | 정해진 시간 안에 반드시 처리 |
| 분산 시스템 | 여러 컴퓨터가 협력 |
| 모바일/임베디드 OS | 스마트폰, 기기 중심 운영체제 |
여기서 중요한 것은 다중 프로그래밍과 시분할입니다.
다중 프로그래밍 = CPU가 놀지 않게 여러 프로그램을 준비시킴
시분할 = CPU 시간을 잘게 쪼개 여러 작업에 나눠줌프로세스
프로그램과 프로세스
이제 운영체제에서 가장 중요한 개념으로 갑니다.
프로그램
프로세스둘은 다릅니다.
| 구분 | 의미 |
|---|---|
| 프로그램 | 저장장치에 있는 실행 파일 |
| 프로세스 | 메모리에 올라와 실행 중인 프로그램 |
예를 들어 바탕화면에 있는 크롬 아이콘은 프로그램입니다.
chrome.exe이것을 더블클릭해서 실행하면 메모리에 올라가고 CPU가 실행합니다.
그때는 프로세스입니다.
프로세스 = 실행 중인 프로그램운영체제 범위에서도 프로세스 관리의 첫 항목으로 프로세스 개념, 프로세스 상태, 프로세스 기술, 프로세스 제어가 포함되어 있습니다.
프로세스에는 무엇이 들어 있을까요?
프로세스는 단순히 코드만 있는 것이 아닙니다.
프로세스는 실행에 필요한 여러 정보를 가집니다.
| 구성 | 설명 |
|---|---|
| 코드 영역 | 실행할 명령어 |
| 데이터 영역 | 전역변수, 정적변수 |
| 힙 영역 | 동적 메모리 |
| 스택 영역 | 함수 호출, 지역변수 |
| 레지스터 정보 | 현재 CPU 실행 상태 |
| 파일 정보 | 열어 둔 파일 |
| 자원 정보 | 메모리, 장치 등 |
C언어로 생각하면 쉽습니다.
int global = 10; // 데이터 영역
int main(void) {
int local = 5; // 스택 영역
int *p = malloc(sizeof(int)); // 힙 영역
}프로그램이 실행되면 이런 정보들이 프로세스의 일부가 됩니다.
프로세스 상태
프로세스는 항상 실행 중인 것만은 아닙니다.
상황에 따라 상태가 바뀝니다.
대표 상태는 다음과 같습니다.
생성
준비
실행
대기
종료| 상태 | 의미 |
|---|---|
| 생성, New | 프로세스가 만들어지는 중 |
| 준비, Ready | CPU만 받으면 실행 가능 |
| 실행, Running | CPU를 받아 실제 실행 중 |
| 대기, Waiting/Blocked | 입출력 등 어떤 사건을 기다림 |
| 종료, Terminated | 실행이 끝남 |
준비
실행
대기입니다.
프로세스 상태 변화
프로세스는 이렇게 이동합니다.
생성 → 준비 → 실행 → 종료하지만 실행 중에 입출력을 요청하면 대기로 갑니다.
실행 → 대기입출력이 끝나면 다시 준비 상태로 갑니다.
대기 → 준비CPU를 빼앗기면 실행 상태에서 준비 상태로 돌아갑니다.
실행 → 준비생성
↓
준비 ⇄ 실행 → 종료
↑ ↓
└── 대기준비 상태: CPU 줄 서는 중
실행 상태: CPU 사용 중
대기 상태: 입출력 같은 사건 기다리는 중준비 상태와 대기 상태 차이
이 둘을 많이 헷갈리기 쉽습니다.
준비 상태
CPU만 있으면 바로 실행 가능합니다.
“나 할 일 다 준비됐어. CPU만 줘.”계산할 준비가 끝난 프로세스대기 상태
CPU를 줘도 지금은 실행할 수 없습니다.
왜냐하면 어떤 사건을 기다리고 있기 때문입니다.
“디스크 읽기가 끝나야 계속할 수 있어.”파일 읽기 완료 대기
키보드 입력 대기
네트워크 응답 대기정리하면 다음과 같습니다.
| 상태 | CPU를 받으면 바로 실행 가능? |
|---|---|
| 준비 | 가능 |
| 대기 | 불가능 |
PCB, 프로세스 제어 블록
운영체제는 각 프로세스를 관리하기 위해 정보를 기록해 둡니다.
그 정보 덩어리를 PCB, Process Control Block이라고 합니다.
PCB에는 이런 정보가 들어 있습니다.
| 정보 | 설명 |
|---|---|
| 프로세스 ID | 프로세스를 구분하는 번호 |
| 프로세스 상태 | 준비, 실행, 대기 등 |
| PC 값 | 다음 실행할 명령어 주소 |
| 레지스터 값 | CPU 레지스터 상태 |
| 스케줄링 정보 | 우선순위 등 |
| 메모리 정보 | 프로세스 메모리 위치 |
| 파일 정보 | 열려 있는 파일 |
| 입출력 상태 | 사용 중인 장치 정보 |
PCB = 운영체제가 프로세스를 관리하기 위한 기록 카드프로세스가 잠시 멈췄다가 다시 실행되려면, CPU 상태를 저장해 두어야 합니다. 그 정보가 PCB에 들어갑니다.
문맥, Context
문맥은 프로세스가 실행되던 상태 정보입니다.
예를 들어 프로세스 A가 실행 중이었다고 가정하겠습니다.
CPU 안에는 이런 정보가 있습니다.
PC 값
레지스터 값
스택 포인터
상태 레지스터이 정보들이 있어야 A가 나중에 이어서 실행될 수 있습니다.
이 실행 상태 정보를 문맥이라고 합니다.
문맥 = 프로세스의 현재 실행 상태문맥 교환, Context Switching
CPU가 프로세스 A를 실행하다가 프로세스 B로 바꿔 실행해야 할 때가 있습니다.
이때 해야 할 일이 있습니다.
1. A의 현재 상태를 저장합니다.
2. B의 이전 상태를 불러옵니다.
3. CPU가 B를 실행합니다.이 과정을 문맥 교환이라고 합니다.
프로세스 A 실행 중
→ A 상태를 PCB에 저장
→ 프로세스 B의 PCB에서 상태 복원
→ B 실행문맥 교환은 꼭 필요하지만 비용이 듭니다.
왜냐하면 실제 일을 하는 시간이 아니라 상태를 저장하고 복원하는 시간이기 때문입니다.
문맥 교환이 너무 자주 일어나면 오버헤드가 커집니다.프로세스 제어
운영체제는 프로세스에 대해 여러 작업을 합니다.
| 작업 | 설명 |
|---|---|
| 생성 | 새 프로세스 만들기 |
| 종료 | 프로세스 끝내기 |
| 중지 | 잠시 멈추기 |
| 재개 | 다시 실행하기 |
| 스케줄링 | CPU 배정하기 |
| 동기화 | 여러 프로세스의 실행 순서 조정 |
| 통신 | 프로세스끼리 정보 교환 |
프로세스끼리 통신하는 방법을 IPC, Inter-Process Communication이라고 합니다.
공유 메모리
메시지 전달
파이프
소켓동기화와 통신은 5장 2절에서 더 자세히 다룹니다.
스레드
스레드란?
이제 스레드로 넘어갑니다.
스레드는 프로세스 안에서 실행되는 작업 흐름입니다.
프로세스를 “작업 공간”이라고 하면, 스레드는 그 안에서 실제로 일을 하는 “실행 흐름”입니다.
예를 들어 웹 브라우저를 생각하자.
브라우저 하나의 프로세스 안에서 여러 일이 동시에 일어납니다.
화면 그리기
파일 다운로드
사용자 입력 처리
동영상 재생
네트워크 통신이런 작업 흐름을 여러 스레드로 나눌 수 있습니다.
운영체제 범위에도 스레드 단원으로 프로세스와 스레드, 스레드의 유형이 포함되어 있습니다.
프로세스와 스레드의 관계
프로세스는 자원을 가집니다.
메모리 공간
파일
코드
데이터스레드는 그 프로세스 안에서 실행됩니다.
스레드들은 같은 프로세스 안의 자원을 공유합니다.
프로세스
├─ 스레드 1
├─ 스레드 2
└─ 스레드 3코드 영역
데이터 영역
힙 영역
열린 파일스택
PC
레지스터프로세스 = 자원 소유 단위
스레드 = CPU 실행 단위이 문장은 매우 중요합니다.
프로세스와 스레드 비교
| 구분 | 프로세스 | 스레드 |
|---|---|---|
| 의미 | 실행 중인 프로그램 | 프로세스 안의 실행 흐름 |
| 자원 | 독립된 자원 가짐 | 같은 프로세스 자원 공유 |
| 메모리 공간 | 독립적 | 공유 |
| 생성 비용 | 상대적으로 큼 | 상대적으로 작음 |
| 문맥 교환 비용 | 큼 | 작음 |
| 통신 | IPC 필요 | 공유 메모리로 쉬움 |
| 안정성 | 한 프로세스 오류가 다른 프로세스에 덜 영향 | 한 스레드 오류가 같은 프로세스에 영향 가능 |
프로세스 = 독립 실행 단위
스레드 = 프로세스 안의 가벼운 실행 단위단일 스레드와 다중 스레드
단일 스레드
프로세스 안에 실행 흐름이 하나만 있는 경우입니다.
프로세스
└─ 스레드 1작업을 하나씩 처리합니다.
다중 스레드
프로세스 안에 여러 스레드가 있는 경우입니다.
프로세스
├─ 스레드 1
├─ 스레드 2
└─ 스레드 3여러 작업을 동시에 또는 번갈아 처리할 수 있습니다.
한 스레드는 화면 표시
한 스레드는 파일 다운로드
한 스레드는 사용자 입력 처리스레드의 장점
스레드를 쓰는 이유는 다음과 같습니다.
| 장점 | 설명 |
|---|---|
| 응답성 향상 | 한 작업이 막혀도 다른 작업이 계속 가능 |
| 자원 공유 쉬움 | 같은 프로세스 메모리 공유 |
| 생성 비용 감소 | 프로세스보다 가볍습니다 |
| 문맥 교환 비용 감소 | 프로세스 전환보다 빠릅니다 |
| 병렬 처리 가능 | 멀티코어에서 여러 스레드 동시 실행 가능 |
예를 들어 다운로드 중에도 브라우저 화면이 멈추지 않는 것은 다중 스레드 덕분일 수 있습니다.
스레드의 단점
스레드는 자원을 공유하기 때문에 문제도 생깁니다.
| 단점 | 설명 |
|---|---|
| 동기화 문제 | 여러 스레드가 같은 데이터를 동시에 수정하면 오류 가능 |
| 디버깅 어려움 | 실행 순서가 복잡함 |
| 안정성 문제 | 한 스레드 오류가 전체 프로세스에 영향 가능 |
| 경쟁 상태 | 공유 데이터 접근 순서에 따라 결과가 달라짐 |
동기화 문제는 5장 2절에서 세마포어, 임계영역과 함께 자세히 다룹니다.
이번 절에서는 이렇게만 기억하자.
스레드는 빠르고 효율적이지만, 공유 데이터 관리가 어렵습니다.사용자 수준 스레드와 커널 수준 스레드
스레드는 관리 주체에 따라 나눌 수 있습니다.
사용자 수준 스레드
커널 수준 스레드사용자 수준 스레드
사용자 영역의 라이브러리가 스레드를 관리합니다.
생성·전환이 빠릅니다.
운영체제 커널 개입이 적습니다.한 스레드가 블록되면 전체 프로세스가 영향을 받을 수 있습니다.
커널이 개별 스레드를 모를 수 있습니다.커널 수준 스레드
운영체제 커널이 스레드를 직접 관리합니다.
커널이 스레드를 각각 스케줄링 가능합니다.
멀티코어 활용이 좋습니다.생성·전환 비용이 상대적으로 큽니다.정리하면 다음과 같습니다.
| 구분 | 사용자 수준 스레드 | 커널 수준 스레드 |
|---|---|---|
| 관리 주체 | 사용자 라이브러리 | 운영체제 커널 |
| 속도 | 빠른 편 | 상대적으로 느림 |
| 커널 인식 | 제한적 | 직접 인식 |
| 멀티코어 활용 | 제한 가능 | 유리 |
CPU 스케줄링
CPU 스케줄링이란?
이제 이번 절의 가장 중요한 주제, 스케줄링입니다.
CPU는 한정된 자원입니다.
여러 프로세스가 동시에 CPU를 쓰고 싶어 합니다.
프로세스 A: CPU 쓰고 싶습니다.
프로세스 B: CPU 쓰고 싶습니다.
프로세스 C: CPU 쓰고 싶습니다.이때 운영체제가 결정해야 합니다.
누구에게 CPU를 줄까요?
얼마나 오래 줄까요?
다음에는 누구를 실행할까요?이 결정 과정이 CPU 스케줄링입니다.
운영체제 출제범위에는 단일처리기 스케줄링, 멀티프로세서 스케줄링, 그리고 FCFS, SJF, SRT, 라운드 로빈, 우선순위, HRN, FSS, 다단계 피드백 큐 같은 알고리즘이 포함됩니다.
스케줄러
스케줄러는 어떤 프로세스를 실행할지 선택하는 운영체제 구성요소입니다.
대표적으로 세 종류가 있습니다.
| 스케줄러 | 역할 |
|---|---|
| 장기 스케줄러 | 어떤 작업을 시스템에 받아들일지 결정 |
| 단기 스케줄러 | 준비 큐에서 누구에게 CPU를 줄지 결정 |
| 중기 스케줄러 | 일부 프로세스를 메모리에서 내보내거나 다시 올림 |
이번 절 가장 중요한 것은 단기 스케줄러입니다.
단기 스케줄러 = 다음에 CPU를 쓸 프로세스를 고르는 스케줄러준비 큐
CPU를 기다리는 프로세스들은 준비 상태에 있습니다.
운영체제는 이들을 보통 큐 형태로 관리합니다.
준비 큐
P1 → P2 → P3 → P43장 2절에서 큐를 배웠습니다.
큐 = 먼저 들어온 것이 먼저 나가는 구조FCFS 스케줄링은 준비 큐에 먼저 온 프로세스부터 실행합니다.
하지만 모든 스케줄링이 단순 큐만 쓰는 것은 아닙니다.
우선순위 큐, 다단계 큐 등 다양한 방식이 있습니다.
선점형과 비선점형 스케줄링
스케줄링은 크게 두 종류로 나눌 수 있습니다.
비선점형
선점형비선점형 스케줄링
한 프로세스가 CPU를 받으면 스스로 끝내거나 대기 상태로 갈 때까지 CPU를 빼앗지 않습니다.
한번 CPU를 주면 강제로 빼앗지 않음FCFS
비선점 SJF
HRN선점형 스케줄링
운영체제가 실행 중인 프로세스에게서 CPU를 강제로 빼앗을 수 있습니다.
시간이 다 됐거나 더 중요한 프로세스가 오면 CPU 회수 가능Round Robin
SRT
선점 우선순위
다단계 피드백 큐정리하면 다음과 같습니다.
| 구분 | 비선점형 | 선점형 |
|---|---|---|
| CPU 강제 회수 | 안 함 | 가능 |
| 구현 | 비교적 단순 | 복잡 |
| 응답성 | 낮을 수 있음 | 좋을 수 있음 |
| 문맥 교환 | 적음 | 많을 수 있음 |
스케줄링 성능 기준
좋은 스케줄링인지 판단하는 기준이 있습니다.
| 기준 | 의미 | 목표 |
|---|---|---|
| CPU 이용률 | CPU가 놀지 않고 일하는 비율 | 높게 |
| 처리량 | 단위 시간당 완료한 작업 수 | 높게 |
| 반환시간 | 도착부터 완료까지 걸린 시간 | 짧게 |
| 대기시간 | 준비 큐에서 기다린 시간 | 짧게 |
| 응답시간 | 요청 후 첫 응답까지 시간 | 짧게 |
| 공정성 | 특정 프로세스가 굶지 않게 함 | 보장 |
시험 계산에서는 보통 반환시간과 대기시간이 중요합니다.
반환시간 = 완료시간 - 도착시간
대기시간 = 반환시간 - 실행시간반환시간 = 완료시간
대기시간 = 완료시간 - 실행시간스케줄링 알고리즘
FCFS 스케줄링
FCFS는 First Come First Served다.
먼저 온 작업을 먼저 처리합니다.줄서기 방식입니다.
P1 → P2 → P3이면 P1, P2, P3 순서로 실행합니다.
특징은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 방식 | 도착 순서대로 처리 |
| 유형 | 비선점형 |
| 장점 | 단순하고 공평해 보임 |
| 단점 | 긴 작업이 앞에 오면 뒤 작업들이 오래 기다림 |
긴 작업 때문에 짧은 작업들이 줄줄이 기다리는 현상을 호위 효과, convoy effect라고 합니다.
FCFS 예제 1
세 작업이 동시에 도착했다고 가정하겠습니다.
| 작업 | 실행 시간 |
|---|---|
| P1 | 2 |
| P2 | 2 |
| P3 | 2 |
P1 → P2 → P30 2 4 6
| P1 | P2 | P3 |완료시간은 다음과 같습니다.
| 작업 | 완료시간 |
|---|---|
| P1 | 2 |
| P2 | 4 |
| P3 | 6 |
도착시간이 모두 0이면 반환시간은 완료시간입니다.
| 작업 | 반환시간 |
|---|---|
| P1 | 2 |
| P2 | 4 |
| P3 | 6 |
(2 + 4 + 6) / 3 = 4운영체제 예시문제에도 실행 시간이 두 시간씩 소요되는 세 작업이 동시에 주어질 때 FCFS 평균 작업 시간을 묻는 문제가 나오고, 계산은 (2+4+6)/3 = 4시간입니다.
FCFS 예제 2: 긴 작업이 먼저 오면
| 작업 | 실행 시간 |
|---|---|
| P1 | 10 |
| P2 | 1 |
| P3 | 1 |
P1 → P2 → P30 10 11 12
| P1 |P2|P3|완료시간은 다음과 같습니다.
| 작업 | 완료시간 |
|---|---|
| P1 | 10 |
| P2 | 11 |
| P3 | 12 |
(10 + 11 + 12) / 3 = 11짧은 P2, P3가 오래 기다립니다.
이것이 FCFS의 단점입니다.
SJF 스케줄링
SJF는 Shortest Job First다.
실행 시간이 가장 짧은 작업을 먼저 처리합니다.특징은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 방식 | 실행 시간이 짧은 프로세스 우선 |
| 유형 | 보통 비선점형으로 설명 |
| 장점 | 평균 대기시간을 줄이는 데 유리 |
| 단점 | 긴 작업이 계속 밀릴 수 있음 |
| 문제 | 실행 시간을 미리 알아야 함 |
긴 작업이 계속 기다리는 문제를 기아, starvation라고 합니다.
짧은 작업이 계속 들어오면 긴 작업이 계속 밀림SJF 예제
모두 동시에 도착했다고 가정하겠습니다.
| 작업 | 실행 시간 |
|---|---|
| P1 | 6 |
| P2 | 2 |
| P3 | 8 |
| P4 | 3 |
SJF는 짧은 순서로 실행합니다.
P2 → P4 → P1 → P30 2 5 11 19
|P2| P4 | P1 | P3 |완료시간은 다음과 같습니다.
| 작업 | 완료시간 |
|---|---|
| P2 | 2 |
| P4 | 5 |
| P1 | 11 |
| P3 | 19 |
(2 + 5 + 11 + 19) / 4 = 37 / 4 = 9.25FCFS보다 평균 시간이 줄어들 수 있습니다.
SRT 스케줄링
SRT는 Shortest Remaining Time입니다.
남은 실행 시간이 가장 짧은 프로세스를 먼저 실행합니다.SJF의 선점형 버전이라고 보면 됩니다.
새 프로세스가 도착했을 때, 현재 실행 중인 프로세스보다 남은 시간이 더 짧으면 CPU를 빼앗을 수 있습니다.
특징은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 방식 | 남은 시간이 가장 짧은 작업 우선 |
| 유형 | 선점형 |
| 장점 | 평균 대기시간 감소 가능 |
| 단점 | 문맥 교환이 잦을 수 있음 |
| 문제 | 긴 작업 기아 가능 |
SJF = 처음부터 짧은 작업
SRT = 실행 중에도 남은 시간이 더 짧은 작업으로 교체 가능라운드 로빈 스케줄링
라운드 로빈, RR은 시분할 시스템에서 중요합니다.
핵심은 시간 할당량, time quantum입니다.
각 프로세스에게 일정 시간만 CPU를 줍니다.
시간이 끝나면 다음 프로세스에게 CPU를 줍니다.시간 할당량 = 2
준비 큐: P1, P2, P3P1 2초 실행
P2 2초 실행
P3 2초 실행
다시 P1특징은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 방식 | 일정 시간씩 번갈아 실행 |
| 유형 | 선점형 |
| 장점 | 응답시간이 좋음 |
| 단점 | 시간 할당량 설정이 중요 |
| 문제 | 너무 작으면 문맥 교환이 많음, 너무 크면 FCFS와 비슷 |
라운드 로빈 예제
| 작업 | 실행 시간 |
|---|---|
| P1 | 5 |
| P2 | 3 |
| P3 | 1 |
q = 2P1, P2, P3P1 2 실행 → 남은 3
P2 2 실행 → 남은 1
P3 1 실행 → 완료
P1 2 실행 → 남은 1
P2 1 실행 → 완료
P1 1 실행 → 완료0 2 4 5 7 8 9
|P1|P2|P3|P1|P2|P1|완료시간은 다음과 같습니다.
| 작업 | 완료시간 |
|---|---|
| P1 | 9 |
| P2 | 8 |
| P3 | 5 |
도착시간이 모두 0이면 반환시간도 같습니다.
(9 + 8 + 5) / 3 = 22 / 3 ≈ 7.33시간 할당량이 너무 작으면?
라운드 로빈에서 시간 할당량이 너무 작으면 문제가 생깁니다.
q = 1ms프로세스가 너무 자주 바뀝니다.
P1 → P2 → P3 → P1 → P2 → P3 ...문맥 교환이 많아집니다.
문맥 교환은 실제 작업이 아니라 상태 저장과 복원입니다.
그래서 오버헤드가 커집니다.
시간 할당량 너무 작음 → 문맥 교환 많음 → 오버헤드 증가시간 할당량이 너무 크면?
반대로 시간 할당량이 너무 크면 라운드 로빈의 장점이 줄어듭니다.
q = 매우 큼그러면 한 프로세스가 거의 끝날 때까지 CPU를 잡고 있을 수 있습니다.
이러면 FCFS와 비슷해집니다.
시간 할당량 너무 큼 → FCFS처럼 동작따라서 라운드 로빈은 시간 할당량을 적절히 정하는 것이 중요합니다.
우선순위 스케줄링
우선순위 스케줄링은 각 프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스부터 실행하는 방식입니다.
예는 다음과 같습니다.
| 작업 | 실행 시간 | 우선순위 |
|---|---|---|
| P1 | 5 | 3 |
| P2 | 2 | 1 |
| P3 | 4 | 2 |
P2 → P3 → P1특징은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 방식 | 우선순위 높은 작업 먼저 |
| 유형 | 선점형 또는 비선점형 가능 |
| 장점 | 중요한 작업을 먼저 처리 가능 |
| 단점 | 낮은 우선순위 작업이 계속 밀릴 수 있음 |
낮은 우선순위 작업이 계속 실행되지 못하는 문제도 기아라고 합니다.
기아와 에이징
우선순위 스케줄링에서 낮은 우선순위 프로세스가 계속 기다릴 수 있습니다.
이것이 기아입니다.
기아 = 특정 프로세스가 CPU를 오래 받지 못하는 현상이를 해결하는 대표 방법이 에이징, aging입니다.
에이징은 기다리는 시간이 길어질수록 우선순위를 점점 높여주는 방식입니다.
오래 기다림 → 우선순위 증가 → 언젠가 실행됨에이징 = 기아 방지 기법HRN 스케줄링
HRN은 Highest Response-ratio Next다.
응답률이 가장 높은 작업을 먼저 처리합니다.응답률 = (대기시간 + 실행시간) / 실행시간응답률 = 1 + (대기시간 / 실행시간)HRN은 SJF의 단점인 긴 작업의 기아를 완화합니다.
왜냐하면 오래 기다린 작업은 대기시간이 커져서 응답률이 올라가기 때문입니다.
특징은 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| 방식 | 응답률이 높은 작업 우선 |
| 유형 | 비선점형 |
| 장점 | 짧은 작업과 오래 기다린 작업을 함께 고려 |
| 공식 | (대기시간 + 실행시간) / 실행시간 |
HRN 예제
현재 시각에 준비 큐에 세 작업이 있다고 가정하겠습니다.
| 작업 | 대기시간 | 실행시간 |
|---|---|---|
| P1 | 6 | 3 |
| P2 | 4 | 2 |
| P3 | 8 | 8 |
응답률 계산은 다음과 같습니다.
P1
(6 + 3) / 3 = 9 / 3 = 3P2
(4 + 2) / 2 = 6 / 2 = 3P3
(8 + 8) / 8 = 16 / 8 = 2P1과 P2가 응답률 3으로 가장 높습니다.
동률이면 보통 문제 조건에 따라 도착순, 짧은 작업 등으로 결정합니다.
핵심은 공식입니다.
HRN 응답률 = (대기시간 + 실행시간) / 실행시간기한부 스케줄링
기한부 스케줄링은 작업의 마감시간, deadline을 고려하는 방식입니다.
P1은 10초 안에 끝나야 함
P2는 5초 안에 끝나야 함마감시간이 중요한 시스템에서 사용됩니다.
실시간 시스템
공장 제어
항공 제어
의료 장비운영체제 출제범위에도 스케줄링 알고리즘으로 기한부 스케줄링이 포함되어 있습니다.
FSS 스케줄링
FSS는 Fair Share Scheduling입니다.
뜻은 공정 공유 스케줄링입니다.
일반 스케줄링은 프로세스 단위로 CPU를 나누는 데 집중합니다.
FSS는 사용자나 그룹 단위의 공정성도 고려합니다.
사용자 A가 프로세스 10개 실행
사용자 B가 프로세스 1개 실행단순히 프로세스 단위로 공평하게 나누면 A가 CPU를 훨씬 많이 가져갈 수 있습니다.
FSS는 사용자 단위로도 공평하게 자원을 나누려고 합니다.
FSS = 사용자나 그룹 단위의 공정한 CPU 분배다단계 큐 스케줄링
다단계 큐는 프로세스를 여러 큐로 나누어 관리하는 방식입니다.
시스템 프로세스 큐
대화형 프로세스 큐
배치 프로세스 큐각 큐는 서로 다른 우선순위와 스케줄링 방식을 가질 수 있습니다.
예는 다음과 같습니다.
| 큐 | 우선순위 | 스케줄링 |
|---|---|---|
| 시스템 큐 | 높음 | 우선순위 |
| 대화형 큐 | 중간 | 라운드 로빈 |
| 배치 큐 | 낮음 | FCFS |
단점은 낮은 우선순위 큐가 오래 기다릴 수 있다는 것입니다.
다단계 피드백 큐 스케줄링
다단계 피드백 큐는 다단계 큐보다 유연합니다.
프로세스가 큐 사이를 이동할 수 있습니다.
CPU를 오래 쓰는 작업은 낮은 우선순위 큐로 내려갑니다.
짧거나 대화형 작업은 높은 우선순위에서 빠르게 처리됩니다.
오래 기다린 작업은 다시 우선순위를 올릴 수 있습니다.Q0: 높은 우선순위, 짧은 시간 할당량
Q1: 중간 우선순위, 중간 시간 할당량
Q2: 낮은 우선순위, FCFS처음 들어온 프로세스는 Q0에서 시작합니다. 시간 안에 끝나지 않으면 Q1로 내려갑니다. 또 오래 걸리면 Q2로 내려갑니다.
운영체제 출제범위에도 다단계 피드백 큐 스케줄링이 포함되어 있습니다.
스케줄링 알고리즘 비교표
| 알고리즘 | 선점 여부 | 핵심 | 장점 | 단점 |
|---|---|---|---|---|
| FCFS | 비선점 | 먼저 온 순서 | 단순 | 긴 작업이 앞에 오면 불리 |
| SJF | 비선점 | 실행시간 짧은 순서 | 평균 대기시간 감소 | 실행시간 예측 필요, 기아 가능 |
| SRT | 선점 | 남은 시간 짧은 순서 | 더 짧은 작업 즉시 반영 | 문맥 교환 증가, 기아 가능 |
| RR | 선점 | 시간 할당량만큼 순환 | 응답성 좋음 | 시간 할당량 설정 중요 |
| Priority | 둘 다 가능 | 우선순위 높은 순서 | 중요 작업 우선 | 낮은 우선순위 기아 가능 |
| HRN | 비선점 | 응답률 높은 순서 | 기아 완화 | 계산 필요 |
| FSS | 보통 시스템 정책 | 사용자/그룹 공정성 | 자원 공정 분배 | 구현 복잡 |
| MLFQ | 선점 | 큐 이동 가능 | 현실적, 유연 | 규칙 복잡 |
스케줄링 계산
평균 반환시간과 평균 대기시간
시험 계산 문제에서는 이 두 개가 중요합니다.
반환시간
반환시간 = 완료시간 - 도착시간작업이 시스템에 들어온 순간부터 끝날 때까지 걸린 시간입니다.
대기시간
대기시간 = 반환시간 - 실행시간CPU를 실제로 사용하지 못하고 기다린 시간입니다.
도착시간 = 0
실행시간 = 4
완료시간 = 1010 - 0 = 1010 - 4 = 6계산 예제: FCFS
| 작업 | 도착시간 | 실행시간 |
|---|---|---|
| P1 | 0 | 4 |
| P2 | 0 | 3 |
| P3 | 0 | 2 |
P1 → P2 → P30 4 7 9
| P1 | P2 | P3 |완료시간은 다음과 같습니다.
| 작업 | 완료시간 |
|---|---|
| P1 | 4 |
| P2 | 7 |
| P3 | 9 |
도착시간이 모두 0이므로 완료시간과 같음| 작업 | 반환시간 |
|---|---|
| P1 | 4 |
| P2 | 7 |
| P3 | 9 |
(4 + 7 + 9) / 3 = 20 / 3 ≈ 6.67대기시간은 다음과 같습니다.
| 작업 | 계산 | 대기시간 |
|---|---|---|
| P1 | 4 - 4 | 0 |
| P2 | 7 - 3 | 4 |
| P3 | 9 - 2 | 7 |
(0 + 4 + 7) / 3 = 11 / 3 ≈ 3.67계산 예제: SJF
같은 작업을 SJF로 해 보겠습니다.
| 작업 | 실행시간 |
|---|---|
| P1 | 4 |
| P2 | 3 |
| P3 | 2 |
P3 → P2 → P10 2 5 9
|P3| P2 | P1 |완료시간은 다음과 같습니다.
| 작업 | 완료시간 |
|---|---|
| P3 | 2 |
| P2 | 5 |
| P1 | 9 |
반환시간은 다음과 같습니다.
| 작업 | 반환시간 |
|---|---|
| P1 | 9 |
| P2 | 5 |
| P3 | 2 |
(9 + 5 + 2) / 3 = 16 / 3 ≈ 5.33대기시간은 다음과 같습니다.
| 작업 | 계산 | 대기시간 |
|---|---|---|
| P1 | 9 - 4 | 5 |
| P2 | 5 - 3 | 2 |
| P3 | 2 - 2 | 0 |
(5 + 2 + 0) / 3 = 7 / 3 ≈ 2.33SJF가 FCFS보다 평균 대기시간이 줄었습니다.
스케줄링 문제 푸는 순서
스케줄링 계산 문제는 이렇게 풀어라.
1. 도착시간과 실행시간을 표로 정리합니다.
2. 어떤 스케줄링 알고리즘인지 확인합니다.
3. 선점형인지 비선점형인지 확인합니다.
4. 실행 순서를 간트 차트로 그립니다.
5. 각 작업의 완료시간을 구합니다.
6. 반환시간 = 완료시간 - 도착시간
7. 대기시간 = 반환시간 - 실행시간
8. 평균을 구합니다.특히 라운드 로빈은 직접 간트 차트를 그리는 것이 가장 안전합니다.
자주 혼동되는 출제 포인트
혼동 포인트 1. 프로그램과 프로세스는 다릅니다
프로그램 = 저장된 파일
프로세스 = 실행 중인 프로그램혼동 포인트 2. 준비 상태와 대기 상태를 구분해야 합니다
준비 = CPU만 받으면 실행 가능
대기 = 입출력 등 사건을 기다려야 해서 CPU를 받아도 실행 불가혼동 포인트 3. PCB는 프로세스 관리 정보입니다
PCB = 운영체제가 프로세스를 관리하기 위한 정보 블록혼동 포인트 4. 문맥 교환은 비용이 듭니다
프로세스를 바꾸는 동안은 실제 작업이 아니라 상태 저장과 복원이 일어납니다.
혼동 포인트 5. 프로세스와 스레드 비교
프로세스 = 자원 소유 단위
스레드 = CPU 실행 단위혼동 포인트 6. 스레드는 자원을 공유합니다
같은 프로세스의 스레드들은 코드, 데이터, 힙 등을 공유합니다. 그래서 통신은 쉽지만 동기화 문제가 생깁니다.
혼동 포인트 7. FCFS는 먼저 온 순서
단순하지만 긴 작업이 앞에 오면 평균 대기시간이 커질 수 있습니다.
혼동 포인트 8. SJF는 짧은 작업 우선
평균 대기시간에 유리하지만 실행시간 예측이 필요하고 긴 작업 기아 문제가 생길 수 있습니다.
혼동 포인트 9. SRT는 SJF의 선점형
새로 온 작업의 남은 시간이 더 짧으면 CPU를 빼앗을 수 있습니다.
혼동 포인트 10. RR은 시간 할당량이 핵심
시간 할당량 너무 작음 → 문맥 교환 많음
시간 할당량 너무 큼 → FCFS와 비슷혼동 포인트 11. HRN 공식
응답률 = (대기시간 + 실행시간) / 실행시간오래 기다린 작업의 우선순위가 올라가는 효과가 있습니다.
혼동 포인트 12. 평균 작업 시간 계산
FCFS에서 실행 시간이 2시간인 작업 3개가 동시에 주어지면 완료시간은 2, 4, 6이므로 평균은 (2+4+6)/3 = 4시간입니다. 운영체제 예시문제에도 이 계산이 나옵니다.
이번 절의 핵심 정리
운영체제
컴퓨터 자원을 관리하고 프로그램 실행 환경을 제공하는 시스템 소프트웨어운영체제 관리 대상
CPU
메모리
파일
입출력장치
프로세스프로그램과 프로세스
프로그램 = 저장된 실행 파일
프로세스 = 실행 중인 프로그램프로세스 상태
생성
준비
실행
대기
종료준비와 대기
준비 = CPU만 받으면 실행 가능
대기 = 어떤 사건을 기다리는 중PCB
프로세스 상태, PC, 레지스터, 메모리 정보 등을 저장하는 관리 정보문맥 교환
실행 중인 프로세스의 상태를 저장하고 다른 프로세스의 상태를 복원하는 과정스레드
프로세스 안의 실행 흐름프로세스와 스레드
프로세스 = 자원 소유 단위
스레드 = 실행 단위스케줄링
준비 상태의 프로세스 중 누구에게 CPU를 줄지 결정하는 것선점형과 비선점형
비선점형 = CPU를 강제로 빼앗지 않음
선점형 = CPU를 강제로 빼앗을 수 있음주요 스케줄링
FCFS = 먼저 온 순서
SJF = 실행시간 짧은 순서
SRT = 남은 시간 짧은 순서
RR = 시간 할당량 순환
Priority = 우선순위
HRN = 응답률 기준계산 공식
반환시간 = 완료시간 - 도착시간
대기시간 = 반환시간 - 실행시간
HRN 응답률 = (대기시간 + 실행시간) / 실행시간핵심 한 문장
이번 절의 핵심을 한 문장으로 정리하면 다음과 같습니다.
운영체제는 CPU와 메모리 같은 자원을 관리하며, 실행 중인 프로그램인 프로세스를 상태별로 관리하고, 프로세스 안의 스레드들을 실행 흐름으로 다루며, 스케줄링 알고리즘을 통해 어떤 작업에게 CPU를 줄지 결정합니다.
운영체제 = 관리자
프로세스 = 실행 중인 프로그램
스레드 = 프로세스 안의 실행 흐름
스케줄링 = CPU 배정 규칙확인 문제
문제 1
운영체제의 역할로 가장 알맞은 것은?
① HTML 태그를 꾸밉니다 ② 컴퓨터 자원을 관리하고 프로그램 실행 환경을 제공합니다 ③ 이진수를 십진수로만 바꿉니다 ④ 데이터베이스 테이블만 만듭니다
문제 2
실행 중인 프로그램을 무엇이라고 하는가?
① 파일 ② 프로세스 ③ 태그 ④ 버스
문제 3
프로세스가 CPU만 받으면 바로 실행 가능한 상태는?
① 준비 상태 ② 대기 상태 ③ 종료 상태 ④ 보류 상태
문제 4
프로세스가 입출력 완료 같은 사건을 기다리는 상태는?
① 실행 상태 ② 준비 상태 ③ 대기 상태 ④ 생성 상태
문제 5
운영체제가 프로세스를 관리하기 위해 유지하는 정보 블록은?
① PCB ② HTML ③ ALU ④ DOM
문제 6
현재 실행 중인 프로세스의 상태를 저장하고 다른 프로세스의 상태를 복원하는 과정은?
① 문맥 교환 ② 전위순회 ③ 해싱 ④ 캐시 히트
문제 7
프로세스 안에서 실행되는 작업 흐름은?
① 스레드 ② 섹터 ③ 페이지 테이블 ④ 주소버스
문제 8
프로세스와 스레드의 설명으로 알맞은 것은?
① 프로세스는 자원 소유 단위, 스레드는 실행 단위입니다 ② 스레드는 항상 독립된 메모리 공간을 가집니다 ③ 프로세스는 CPU를 사용할 수 없습니다 ④ 스레드는 운영체제와 무관합니다
문제 9
CPU 스케줄링의 의미로 알맞은 것은?
① 어떤 프로세스에게 CPU를 줄지 결정하는 것 ② 파일 이름을 바꾸는 것 ③ 웹페이지 색을 정하는 것 ④ 메모리 주소를 16진수로 출력하는 것
문제 10
비선점형 스케줄링의 특징은?
① 운영체제가 언제든 CPU를 강제로 빼앗습니다 ② 한 번 CPU를 받은 프로세스를 강제로 빼앗지 않습니다 ③ 반드시 큐를 사용할 수 없습니다 ④ 스레드를 만들 수 없습니다
문제 11
선점형 스케줄링의 특징은?
① 실행 중인 프로세스에게서 CPU를 강제로 회수할 수 있습니다 ② 프로세스 상태가 존재하지 않습니다 ③ 입출력장치를 사용할 수 없습니다 ④ 항상 한 작업만 존재합니다
문제 12
FCFS 스케줄링의 핵심은?
① 실행 시간이 짧은 작업 먼저 ② 먼저 온 작업 먼저 ③ 우선순위 낮은 작업 먼저 ④ 남은 시간이 짧은 작업 먼저
문제 13
SJF 스케줄링의 핵심은?
① 먼저 온 작업 먼저 ② 실행 시간이 가장 짧은 작업 먼저 ③ 시간 할당량만큼 순환 ④ 사용자 그룹별 공평 분배
문제 14
SRT 스케줄링의 핵심은?
① 남은 실행 시간이 가장 짧은 작업 우선 ② 무조건 도착 순서 우선 ③ 항상 가장 긴 작업 우선 ④ 파일 크기 순서 우선
문제 15
라운드 로빈 스케줄링에서 가장 중요한 개념은?
① 시간 할당량 ② 구조체 포인터 ③ 트리 높이 ④ 해시 함수
문제 16
우선순위가 낮은 프로세스가 계속 CPU를 받지 못하는 현상은?
① 기아 ② 캐시 히트 ③ 페이지 적중 ④ 전치
문제 17
기아를 완화하기 위해 오래 기다린 프로세스의 우선순위를 높이는 기법은?
① 에이징 ② 버블링 ③ 파이프라이닝 ④ 디코딩
문제 18
HRN 스케줄링의 응답률 공식은?
① 실행시간 / 대기시간
② (대기시간 + 실행시간) / 실행시간
③ 대기시간 - 실행시간
④ 완료시간 + 도착시간
문제 19
반환시간을 구하는 공식은?
① 완료시간 - 도착시간
② 실행시간 - 대기시간
③ 도착시간 + 우선순위
④ 대기시간 / 실행시간
문제 20
대기시간을 구하는 공식은?
① 반환시간 - 실행시간
② 실행시간 + 반환시간
③ 완료시간 + 도착시간
④ 우선순위 - 실행시간
정답과 해설은 절별 확인문제 정답해설에서 확인합니다.
다음 5장 2절은 동기화, 세마포어, 교착상태, 메모리 관리입니다. 5장 1절이 “누구에게 CPU를 줄 것인가”였다면, 5장 2절은 “여러 프로세스가 동시에 자원을 쓸 때 충돌과 교착상태를 어떻게 막을 것인가, 그리고 메모리는 어떻게 나눠줄 것인가”를 배웁니다.