안동민 개발노트 아이콘

안동민 개발노트

5장 : 운영체제

운영체제, 프로세스, 스레드, 스케줄링

운영체제 학습 절입니다.

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프로세스가 만들어지는 중
준비, ReadyCPU만 받으면 실행 가능
실행, RunningCPU를 받아 실제 실행 중
대기, 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 → P4

3장 2절에서 큐를 배웠습니다.

큐 = 먼저 들어온 것이 먼저 나가는 구조

FCFS 스케줄링은 준비 큐에 먼저 온 프로세스부터 실행합니다.

하지만 모든 스케줄링이 단순 큐만 쓰는 것은 아닙니다.

우선순위 큐, 다단계 큐 등 다양한 방식이 있습니다.


선점형과 비선점형 스케줄링

스케줄링은 크게 두 종류로 나눌 수 있습니다.

비선점형
선점형

비선점형 스케줄링

한 프로세스가 CPU를 받으면 스스로 끝내거나 대기 상태로 갈 때까지 CPU를 빼앗지 않습니다.

한번 CPU를 주면 강제로 빼앗지 않음
FCFS
비선점 SJF
HRN

선점형 스케줄링

운영체제가 실행 중인 프로세스에게서 CPU를 강제로 빼앗을 수 있습니다.

시간이 다 됐거나 더 중요한 프로세스가 오면 CPU 회수 가능
Round Robin
SRT
선점 우선순위
다단계 피드백 큐

정리하면 다음과 같습니다.

구분비선점형선점형
CPU 강제 회수안 함가능
구현비교적 단순복잡
응답성낮을 수 있음좋을 수 있음
문맥 교환적음많을 수 있음

스케줄링 성능 기준

좋은 스케줄링인지 판단하는 기준이 있습니다.

기준의미목표
CPU 이용률CPU가 놀지 않고 일하는 비율높게
처리량단위 시간당 완료한 작업 수높게
반환시간도착부터 완료까지 걸린 시간짧게
대기시간준비 큐에서 기다린 시간짧게
응답시간요청 후 첫 응답까지 시간짧게
공정성특정 프로세스가 굶지 않게 함보장

시험 계산에서는 보통 반환시간대기시간이 중요합니다.

반환시간 = 완료시간 - 도착시간
대기시간 = 반환시간 - 실행시간
도착시간이 모두 0이면
반환시간 = 완료시간
대기시간 = 완료시간 - 실행시간

스케줄링 알고리즘

FCFS 스케줄링

FCFS는 First Come First Served다.

먼저 온 작업을 먼저 처리합니다.

줄서기 방식입니다.

P1 → P2 → P3

이면 P1, P2, P3 순서로 실행합니다.

특징은 다음과 같습니다.

항목설명
방식도착 순서대로 처리
유형비선점형
장점단순하고 공평해 보임
단점긴 작업이 앞에 오면 뒤 작업들이 오래 기다림

긴 작업 때문에 짧은 작업들이 줄줄이 기다리는 현상을 호위 효과, convoy effect라고 합니다.


FCFS 예제 1

세 작업이 동시에 도착했다고 가정하겠습니다.

작업실행 시간
P12
P22
P32
FCFS 순서
P1 → P2 → P3
간트 차트
0    2    4    6
| P1 | P2 | P3 |

완료시간은 다음과 같습니다.

작업완료시간
P12
P24
P36

도착시간이 모두 0이면 반환시간은 완료시간입니다.

작업반환시간
P12
P24
P36
평균 반환시간
(2 + 4 + 6) / 3 = 4

운영체제 예시문제에도 실행 시간이 두 시간씩 소요되는 세 작업이 동시에 주어질 때 FCFS 평균 작업 시간을 묻는 문제가 나오고, 계산은 (2+4+6)/3 = 4시간입니다.


FCFS 예제 2: 긴 작업이 먼저 오면

작업실행 시간
P110
P21
P31
FCFS 순서
P1 → P2 → P3
간트 차트
0          10 11 12
|    P1    |P2|P3|

완료시간은 다음과 같습니다.

작업완료시간
P110
P211
P312
평균 반환시간
(10 + 11 + 12) / 3 = 11

짧은 P2, P3가 오래 기다립니다.

이것이 FCFS의 단점입니다.


SJF 스케줄링

SJF는 Shortest Job First다.

실행 시간이 가장 짧은 작업을 먼저 처리합니다.

특징은 다음과 같습니다.

항목설명
방식실행 시간이 짧은 프로세스 우선
유형보통 비선점형으로 설명
장점평균 대기시간을 줄이는 데 유리
단점긴 작업이 계속 밀릴 수 있음
문제실행 시간을 미리 알아야 함

긴 작업이 계속 기다리는 문제를 기아, starvation라고 합니다.

짧은 작업이 계속 들어오면 긴 작업이 계속 밀림

SJF 예제

모두 동시에 도착했다고 가정하겠습니다.

작업실행 시간
P16
P22
P38
P43

SJF는 짧은 순서로 실행합니다.

P2 → P4 → P1 → P3
간트 차트
0   2    5      11        19
|P2| P4 |  P1  |    P3    |

완료시간은 다음과 같습니다.

작업완료시간
P22
P45
P111
P319
평균 반환시간
(2 + 5 + 11 + 19) / 4 = 37 / 4 = 9.25

FCFS보다 평균 시간이 줄어들 수 있습니다.


SRT 스케줄링

SRT는 Shortest Remaining Time입니다.

남은 실행 시간이 가장 짧은 프로세스를 먼저 실행합니다.

SJF의 선점형 버전이라고 보면 됩니다.

새 프로세스가 도착했을 때, 현재 실행 중인 프로세스보다 남은 시간이 더 짧으면 CPU를 빼앗을 수 있습니다.

특징은 다음과 같습니다.

항목설명
방식남은 시간이 가장 짧은 작업 우선
유형선점형
장점평균 대기시간 감소 가능
단점문맥 교환이 잦을 수 있음
문제긴 작업 기아 가능
짧게
SJF = 처음부터 짧은 작업
SRT = 실행 중에도 남은 시간이 더 짧은 작업으로 교체 가능

라운드 로빈 스케줄링

라운드 로빈, RR은 시분할 시스템에서 중요합니다.

핵심은 시간 할당량, time quantum입니다.

각 프로세스에게 일정 시간만 CPU를 줍니다.
시간이 끝나면 다음 프로세스에게 CPU를 줍니다.
시간 할당량 = 2
준비 큐: P1, P2, P3
실행
P1 2초 실행
P2 2초 실행
P3 2초 실행
다시 P1

특징은 다음과 같습니다.

항목설명
방식일정 시간씩 번갈아 실행
유형선점형
장점응답시간이 좋음
단점시간 할당량 설정이 중요
문제너무 작으면 문맥 교환이 많음, 너무 크면 FCFS와 비슷

라운드 로빈 예제

작업실행 시간
P15
P23
P31
시간 할당량
q = 2
초기 준비 큐
P1, P2, P3
실행 흐름
P1 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|

완료시간은 다음과 같습니다.

작업완료시간
P19
P28
P35

도착시간이 모두 0이면 반환시간도 같습니다.

평균 반환시간
(9 + 8 + 5) / 3 = 22 / 3 ≈ 7.33

시간 할당량이 너무 작으면?

라운드 로빈에서 시간 할당량이 너무 작으면 문제가 생깁니다.

q = 1ms

프로세스가 너무 자주 바뀝니다.

P1 → P2 → P3 → P1 → P2 → P3 ...

문맥 교환이 많아집니다.

문맥 교환은 실제 작업이 아니라 상태 저장과 복원입니다.

그래서 오버헤드가 커집니다.

시간 할당량 너무 작음 → 문맥 교환 많음 → 오버헤드 증가

시간 할당량이 너무 크면?

반대로 시간 할당량이 너무 크면 라운드 로빈의 장점이 줄어듭니다.

q = 매우 큼

그러면 한 프로세스가 거의 끝날 때까지 CPU를 잡고 있을 수 있습니다.

이러면 FCFS와 비슷해집니다.

시간 할당량 너무 큼 → FCFS처럼 동작

따라서 라운드 로빈은 시간 할당량을 적절히 정하는 것이 중요합니다.


우선순위 스케줄링

우선순위 스케줄링은 각 프로세스에 우선순위를 부여하고, 우선순위가 높은 프로세스부터 실행하는 방식입니다.

예는 다음과 같습니다.

작업실행 시간우선순위
P153
P221
P342
우선순위 숫자가 작을수록 높다고 가정하면 실행 순서는
P2 → P3 → P1

특징은 다음과 같습니다.

항목설명
방식우선순위 높은 작업 먼저
유형선점형 또는 비선점형 가능
장점중요한 작업을 먼저 처리 가능
단점낮은 우선순위 작업이 계속 밀릴 수 있음

낮은 우선순위 작업이 계속 실행되지 못하는 문제도 기아라고 합니다.


기아와 에이징

우선순위 스케줄링에서 낮은 우선순위 프로세스가 계속 기다릴 수 있습니다.

이것이 기아입니다.

기아 = 특정 프로세스가 CPU를 오래 받지 못하는 현상

이를 해결하는 대표 방법이 에이징, aging입니다.

에이징은 기다리는 시간이 길어질수록 우선순위를 점점 높여주는 방식입니다.

오래 기다림 → 우선순위 증가 → 언젠가 실행됨
에이징 = 기아 방지 기법

HRN 스케줄링

HRN은 Highest Response-ratio Next다.

응답률이 가장 높은 작업을 먼저 처리합니다.
공식
응답률 = (대기시간 + 실행시간) / 실행시간
다르게 쓰면
응답률 = 1 + (대기시간 / 실행시간)

HRN은 SJF의 단점인 긴 작업의 기아를 완화합니다.

왜냐하면 오래 기다린 작업은 대기시간이 커져서 응답률이 올라가기 때문입니다.

특징은 다음과 같습니다.

항목설명
방식응답률이 높은 작업 우선
유형비선점형
장점짧은 작업과 오래 기다린 작업을 함께 고려
공식(대기시간 + 실행시간) / 실행시간

HRN 예제

현재 시각에 준비 큐에 세 작업이 있다고 가정하겠습니다.

작업대기시간실행시간
P163
P242
P388

응답률 계산은 다음과 같습니다.

P1

(6 + 3) / 3 = 9 / 3 = 3

P2

(4 + 2) / 2 = 6 / 2 = 3

P3

(8 + 8) / 8 = 16 / 8 = 2

P1과 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
완료시간 = 10
반환시간
10 - 0 = 10
대기시간
10 - 4 = 6

계산 예제: FCFS

작업도착시간실행시간
P104
P203
P302
FCFS 순서
P1 → P2 → P3
간트 차트
0    4    7    9
| P1 | P2 | P3 |

완료시간은 다음과 같습니다.

작업완료시간
P14
P27
P39
반환시간
도착시간이 모두 0이므로 완료시간과 같음
작업반환시간
P14
P27
P39
평균 반환시간
(4 + 7 + 9) / 3 = 20 / 3 ≈ 6.67

대기시간은 다음과 같습니다.

작업계산대기시간
P14 - 40
P27 - 34
P39 - 27
평균 대기시간
(0 + 4 + 7) / 3 = 11 / 3 ≈ 3.67

계산 예제: SJF

같은 작업을 SJF로 해 보겠습니다.

작업실행시간
P14
P23
P32
SJF 순서
P3 → P2 → P1
간트 차트
0   2    5    9
|P3| P2 | P1 |

완료시간은 다음과 같습니다.

작업완료시간
P32
P25
P19

반환시간은 다음과 같습니다.

작업반환시간
P19
P25
P32
평균 반환시간
(9 + 5 + 2) / 3 = 16 / 3 ≈ 5.33

대기시간은 다음과 같습니다.

작업계산대기시간
P19 - 45
P25 - 32
P32 - 20
평균 대기시간
(5 + 2 + 0) / 3 = 7 / 3 ≈ 2.33

SJF가 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절은 “여러 프로세스가 동시에 자원을 쓸 때 충돌과 교착상태를 어떻게 막을 것인가, 그리고 메모리는 어떻게 나눠줄 것인가”를 배웁니다.

목차

이번 절의 큰 그림
운영체제 기본
운영체제란?
운영체제가 관리하는 자원
운영체제의 주요 목적
운영체제의 발전 흐름
프로세스
프로그램과 프로세스
프로세스에는 무엇이 들어 있을까요?
프로세스 상태
프로세스 상태 변화
준비 상태와 대기 상태 차이
준비 상태
대기 상태
PCB, 프로세스 제어 블록
문맥, Context
문맥 교환, Context Switching
프로세스 제어
스레드
스레드란?
프로세스와 스레드의 관계
프로세스와 스레드 비교
단일 스레드와 다중 스레드
단일 스레드
다중 스레드
스레드의 장점
스레드의 단점
사용자 수준 스레드와 커널 수준 스레드
사용자 수준 스레드
커널 수준 스레드
CPU 스케줄링
CPU 스케줄링이란?
스케줄러
준비 큐
선점형과 비선점형 스케줄링
비선점형 스케줄링
선점형 스케줄링
스케줄링 성능 기준
스케줄링 알고리즘
FCFS 스케줄링
FCFS 예제 1
FCFS 예제 2: 긴 작업이 먼저 오면
SJF 스케줄링
SJF 예제
SRT 스케줄링
라운드 로빈 스케줄링
라운드 로빈 예제
시간 할당량이 너무 작으면?
시간 할당량이 너무 크면?
우선순위 스케줄링
기아와 에이징
HRN 스케줄링
HRN 예제
P1
P2
P3
기한부 스케줄링
FSS 스케줄링
다단계 큐 스케줄링
다단계 피드백 큐 스케줄링
스케줄링 알고리즘 비교표
스케줄링 계산
평균 반환시간과 평균 대기시간
반환시간
대기시간
계산 예제: FCFS
계산 예제: SJF
스케줄링 문제 푸는 순서
자주 혼동되는 출제 포인트
혼동 포인트 1. 프로그램과 프로세스는 다릅니다
혼동 포인트 2. 준비 상태와 대기 상태를 구분해야 합니다
혼동 포인트 3. PCB는 프로세스 관리 정보입니다
혼동 포인트 4. 문맥 교환은 비용이 듭니다
혼동 포인트 5. 프로세스와 스레드 비교
혼동 포인트 6. 스레드는 자원을 공유합니다
혼동 포인트 7. FCFS는 먼저 온 순서
혼동 포인트 8. SJF는 짧은 작업 우선
혼동 포인트 9. SRT는 SJF의 선점형
혼동 포인트 10. RR은 시간 할당량이 핵심
혼동 포인트 11. HRN 공식
혼동 포인트 12. 평균 작업 시간 계산
이번 절의 핵심 정리
운영체제
운영체제 관리 대상
프로그램과 프로세스
프로세스 상태
준비와 대기
PCB
문맥 교환
스레드
프로세스와 스레드
스케줄링
선점형과 비선점형
주요 스케줄링
계산 공식
핵심 한 문장
확인 문제
문제 1
문제 2
문제 3
문제 4
문제 5
문제 6
문제 7
문제 8
문제 9
문제 10
문제 11
문제 12
문제 13
문제 14
문제 15
문제 16
문제 17
문제 18
문제 19
문제 20