전산직 컴퓨터일반 - Part 02 운영체제 요약

⭐⭐⭐ 반드시 / ⭐⭐ 중요 / ⭐ 참고 ⚠️ = 기출 함정 포인트



Chapter 01. 개요


운영체제란 ⭐⭐

  • 사용자와 하드웨어 사이에서 컴퓨터 자원(CPU, 메모리, 입출력장치, 파일)을 효율적으로 관리하고, 사용자가 컴퓨터를 편리하게 쓰도록 환경을 제공하는 시스템 소프트웨어
  • 컴퓨터 시스템의 4가지 구성 요소 : 하드웨어 → 운영체제 → 응용프로그램 → 사용자
  • 커널(Kernel) : 운영체제의 핵심. 메모리에 상주하며 프로세스·메모리·파일·입출력 관리 등 핵심 기능 수행
  • 셸(Shell) : 사용자의 명령어를 해석해서 커널에 전달하는 명령어 해석기
  • 시스템 호출(System Call) : 응용프로그램이 커널의 기능을 사용하기 위해 요청하는 인터페이스
  • 부팅(Booting) : 운영체제를 메인 메모리에 적재하는 과정

목적과 성능 평가 기준 ⭐⭐⭐

  • 목적 : 편리성, 효율성, 제어 서비스 향상
  • 성능 평가 기준 4가지 ⚠️ 자주 출제
기준 의미 좋아지는 방향
처리 능력 (Throughput) 일정 시간 내 처리하는 작업량 ↑
반환 시간 (Turnaround Time) 작업 의뢰 ~ 결과를 받을 때까지 걸린 시간 ↓
사용 가능도 (Availability) 필요할 때 즉시 사용 가능한 정도 ↑
신뢰도 (Reliability) 작업 결과가 얼마나 정확한가 ↑

운영체제의 기능

  • 자원 관리 : 프로세스(CPU) 관리, 메모리 관리, 입출력장치 관리, 파일 관리
  • 시스템 관리 : 사용자 인터페이스 제공, 보호·보안, 네트워킹, 오류 처리

운영체제 운용 기법 ⭐⭐

발달 순서 : 일괄처리 → 다중프로그래밍 / 시분할 / 실시간 / 다중처리 → 분산처리

방식 설명
일괄처리 (Batch) 작업을 모아서 한꺼번에 처리. 사용자와 상호작용 X
다중프로그래밍 CPU 1개로 여러 프로그램을 메모리에 올려두고, 한 작업이 입출력으로 대기하면 다른 작업 실행 → 동시에 실행되는 것처럼 보임. CPU 이용률 ↑
시분할 (Time Sharing) CPU 시간을 잘게 쪼개(Time Slice) 여러 사용자에게 번갈아 할당. 대화식 처리, 응답시간 ↓ (Round Robin 방식)
실시간 (Real Time) 데이터 발생 즉시 처리. 정해진 시간 안에 반드시 결과를 내야 함 (항공, 은행, 좌석 예약)
다중처리 (Multi Processing) CPU 여러 개가 하나의 메모리를 공유하며 동시에 처리. 신뢰성·처리량 ↑
분산처리 (Distributed) 여러 컴퓨터를 네트워크로 연결. 각 시스템이 독자적인 OS와 메모리를 가지고 독립적으로 운영되며 필요할 때 통신

⚠️ 다중프로그래밍 = CPU 1개 / 다중처리 = CPU 여러 개. 헷갈리게 내는 문제 많음.



Chapter 02. 프로세스와 스레드


프로세스 ⭐⭐⭐

  • 실행 중인 프로그램. 디스크의 프로그램이 메모리에 적재되어 실행되는 것
  • 프로세스 하나는 반드시 PCB(Process Control Block) 하나와 연결됨
  • 종류 : 커널 프로세스, 사용자 프로세스

프로세스 메모리 구조

영역 내용
코드 (Text) 실행할 프로그램 명령어
데이터 (Data) 전역 변수, 정적(static) 변수
힙 (Heap) 실행 중 동적 할당되는 메모리 (malloc, new). 낮은 주소 → 높은 주소로 증가
스택 (Stack) 함수 호출 시 지역 변수, 매개변수, 복귀 주소. 높은 주소 → 낮은 주소로 증가

프로세스 상태 전이 ⭐⭐⭐

1
2
3
생성 → 준비 ⇄ 실행 → 완료
          ↖    ↓
           대기
상태 설명
생성 (New) 메모리에 작업 공간이 만들어지고 PCB가 생성된 상태
준비 (Ready) CPU 할당을 기다리는 상태 (준비 큐에서 대기)
실행 (Running) CPU를 점유하여 명령어를 실행 중인 상태
대기 (Blocked / Wait) 입출력 등 어떤 이벤트가 끝나기를 기다리는 상태
완료 (Terminated) 실행이 끝나 CPU와 자원을 반납한 상태. PCB도 삭제
전이 방향 원인
디스패치 (Dispatch) 준비 → 실행 스케줄러가 CPU를 할당
할당 시간 초과 (Timer Run Out) 실행 → 준비 할당된 시간을 다 씀 (타이머 인터럽트)
블록 (Block) 실행 → 대기 입출력 요청
웨이크업 (Wake Up) 대기 → 준비 입출력 완료

⚠️ 대기 → 실행으로 바로 가는 전이는 없음. 입출력이 끝나면 반드시 준비 상태를 거침. ⚠️ 준비 → 대기도 없음.

PCB (Process Control Block) ⭐⭐⭐

  • 운영체제가 프로세스를 관리하기 위해 그 프로세스의 정보를 저장한 자료구조
  • 프로세스 생성 시 만들어지고, 종료되면 삭제됨
  • 저장 정보 : 프로세스 식별자(PID), 프로세스 상태, 프로그램 카운터(PC), 레지스터 값, CPU 스케줄링 정보(우선순위), 메모리 관리 정보, 입출력 상태 정보, 계정 정보, 부모·자식 프로세스 포인터

문맥 교환 (Context Switching) ⭐⭐

  • CPU를 다른 프로세스로 넘길 때, 현재 프로세스의 상태(레지스터 등)를 PCB에 저장하고 다음 프로세스의 상태를 PCB에서 복원하는 과정
  • 인터럽트, 할당 시간 초과, 입출력 요청 등으로 실행 중인 프로세스가 바뀔 때 발생
  • 문맥 교환 중에는 실제 작업을 못 하므로 오버헤드. 자주 일어나면 성능 ↓ → 이를 줄이려고 스레드 사용

스레드 (Thread) ⭐⭐⭐

  • 프로세스는 자원(소유) 과 제어(실행 흐름) 로 나눌 수 있는데, 이 중 제어 흐름만 분리한 실행 단위가 스레드
  • “경량 프로세스(Light Weight Process)”라고도 부름
스레드끼리 공유 스레드마다 따로 가짐
코드, 데이터, 힙, 열린 파일 스택, 레지스터, 프로그램 카운터
  • 장점 : 자원 공유로 메모리 절약(경제성), 문맥 교환 빠름, 응답성 향상, 멀티프로세서 활용
  • 단점 : 한 스레드의 오류가 프로세스 전체에 영향, 공유 자원 동기화 필요

사용자 수준 vs 커널 수준 스레드 ⭐

구분 사용자 수준 스레드 커널 수준 스레드
관리 주체 사용자 라이브러리 운영체제 커널
속도 빠름 (커널 개입 X) 상대적으로 느림
한 스레드 블록 시 프로세스 전체가 블록 다른 스레드는 계속 실행



Chapter 03. 병행 프로세스


병행 프로세스 ⭐⭐

  • CPU 하나는 한 번에 하나만 실행하지만, 빠르게 전환하여 동시에 실행되는 것처럼 보이는 여러 프로세스
  • 공유 자원을 동시에 건드리면 결과가 꼬일 수 있음 → 동기화 필요

임계 자원 / 임계 영역 ⭐⭐⭐

  • 임계 자원 : 여러 프로세스가 공유하지만 동시에 사용하면 안 되는 자원
  • 임계 영역 (Critical Section) : 임계 자원에 접근하는 코드 부분. 한 번에 하나의 프로세스만 들어가야 함
  • 상호 배제 (Mutual Exclusion) : 한 프로세스가 임계 영역에 있으면 다른 프로세스는 못 들어가게 하는 것

임계 영역 문제 해결 조건 3가지 ⭐

조건 의미
상호 배제 한 번에 하나만 임계 영역에 진입
진행 (Progress) 임계 영역이 비어 있으면 들어가려는 프로세스를 무한정 막으면 안 됨
한정 대기 (Bounded Waiting) 진입을 요청한 프로세스는 유한한 시간 안에 들어갈 수 있어야 함

상호 배제 구현 기법 ⭐⭐

  • 소프트웨어 : 데커(Dekker) 알고리즘, 피터슨(Peterson) 알고리즘, 램포트의 빵집(Bakery) 알고리즘
  • 하드웨어 : Test-and-Set, Swap 명령어, 인터럽트 비활성화
  • 운영체제 동기화 도구 : 세마포어, 모니터

세마포어 (Semaphore) ⭐⭐⭐

  • 다익스트라(Dijkstra) 가 제안. 정수 변수 S와 두 연산으로 상호 배제를 구현
연산 동작
P 연산 (wait) S > 0이면 S를 1 감소시키고 진입, S = 0이면 대기 → 임계 영역 들어갈 때
V 연산 (signal) S를 1 증가시키고, 대기 중인 프로세스가 있으면 깨움 → 임계 영역 나올 때
  • 이진 세마포어 : S가 0 또는 1 (뮤텍스처럼 사용)
  • 계수 세마포어 : S가 0 이상 정수 (자원이 여러 개일 때)
  • P, V 연산은 중간에 끊기면 안 되는 원자적(Atomic) 연산

모니터 (Monitor) ⭐

  • 공유 자원과 그 자원에 접근하는 프로시저를 하나로 묶은 고급 동기화 구조
  • 모니터 안에는 한 번에 하나의 프로세스만 들어갈 수 있음 (자동 상호 배제)
  • 정보 은폐 : 외부에서는 모니터의 프로시저를 통해서만 자원 접근 가능
  • 조건 변수와 wait, signal 연산 사용

대표적인 동기화 문제 ⭐

  • 생산자-소비자 문제 (유한 버퍼 문제)
  • 판독기-기록기 문제 (Readers-Writers)
  • 식사하는 철학자 문제 (교착상태 예시로도 자주 쓰임)



Chapter 04. 교착상태


교착상태 (Deadlock) ⭐⭐⭐

  • 둘 이상의 프로세스가 서로 상대방이 가진 자원을 기다리며, 결코 일어나지 않을 사건을 무한정 기다리는 상태

발생 필요조건 4가지 ⭐⭐⭐

4가지가 동시에 모두 만족해야 발생 → 하나만 깨도 예방 가능

조건 의미
상호 배제 (Mutual Exclusion) 한 자원은 한 번에 하나의 프로세스만 사용 가능
점유와 대기 (Hold and Wait) 이미 자원을 가진 채로 다른 프로세스의 자원을 기다림
비선점 (No Preemption) 자원을 가진 프로세스가 스스로 반납하기 전까지 강제로 빼앗을 수 없음 (선점 = 강제로 빼앗음)
순환 대기 (Circular Wait) P1 → P2 → … → P1 처럼 대기 관계가 원형(사이클)을 이룸

교착상태 해결 방법 4가지 ⭐⭐⭐

① 예방 (Prevention)

필요조건 중 하나를 아예 성립하지 않게 만드는 방법. 자원 낭비가 큼.

부정할 조건 방법
상호 배제 부정 자원을 공유 가능하게 함 (현실적으로 어려움)
점유와 대기 부정 필요한 자원을 실행 전에 한꺼번에 요청·할당. 못 받으면 하나도 안 가짐
비선점 부정 추가 자원을 못 얻으면 가진 자원을 모두 반납
순환 대기 부정 자원마다 번호를 붙이고 번호 순서대로만 요청하게 함

② 회피 (Avoidance)

교착상태 가능성을 미리 계산해서 피하는 방법

  • 은행원 알고리즘 (Banker’s Algorithm) : 다익스트라가 제안. 자원을 할당했을 때 시스템이 안전 상태(Safe State) 로 남는 경우에만 할당
  • 안전 상태 : 모든 프로세스가 어떤 순서로든 끝까지 실행될 수 있는 상태 (안전 순서열이 존재)
  • 불안전 상태 : 교착상태가 발생할 수 있는 상태 ⚠️ 불안전 상태 = 교착상태는 아님

③ 탐지 (Detection)

  • 교착상태가 생기는 것을 허용하고, 주기적으로 검사해서 찾아냄
  • 자원 할당 그래프를 사용. 그래프에 사이클이 있는지 확인

④ 회복 (Recovery)

  • 교착상태에 빠진 프로세스를 종료하거나, 자원을 선점해서 다른 프로세스에 할당

교착상태 vs 기아 상태 ⭐⭐

구분 교착상태 (Deadlock) 기아 상태 (Starvation)
의미 서로 기다리느라 아무도 진행 못 함 특정 프로세스만 우선순위에 밀려 계속 자원을 못 받음
해결 예방, 회피, 탐지, 회복 에이징 (Aging) : 오래 기다린 프로세스의 우선순위를 높여줌



Chapter 05. 단일 프로세서 스케줄링


스케줄러 종류 ⭐⭐

스케줄러 다른 이름 역할
장기 스케줄러 작업 스케줄러 (Job) 어떤 작업을 메모리에 올릴지 결정 → 다중 프로그래밍 정도 결정
중기 스케줄러 스와핑 메모리가 부족하면 프로세스를 디스크로 내보냄(Swap Out) / 다시 올림(Swap In)
단기 스케줄러 프로세스(CPU) 스케줄러 준비 큐의 프로세스 중 누구에게 CPU를 할당할지 결정. 가장 자주 실행됨

스케줄링 평가 기준 ⭐⭐

  • CPU 이용률 ↑, 처리량 ↑, 반환 시간 ↓, 대기 시간 ↓, 응답 시간 ↓
  • 반환 시간 = 종료 시간 − 도착 시간 (= 대기 시간 + 실행 시간)
  • 대기 시간 = 반환 시간 − 실행 시간

선점 vs 비선점 ⭐⭐⭐

비선점 (Non-Preemptive) 선점 (Preemptive)
한번 CPU를 잡으면 끝날 때까지 실행 실행 중에도 CPU를 빼앗을 수 있음
FCFS, SJF, HRN, 우선순위, 기한부 RR, SRT, 선점 우선순위, 다단계 큐, 다단계 피드백 큐
문맥 교환 적음, 응답시간 예측 쉬움 대화형·실시간 시스템에 적합, 문맥 교환 오버헤드

⚠️ 우선순위 스케줄링은 선점·비선점 둘 다 가능

스케줄링 알고리즘 ⭐⭐⭐

FCFS (First Come First Served)

  • 준비 큐에 도착한 순서대로 CPU 할당. 가장 단순함
  • 긴 작업이 앞에 있으면 뒤의 짧은 작업들이 오래 기다리는 호위 효과(Convoy Effect) 발생

SJF (Shortest Job First)

  • 대기 중인 작업 중 실행 시간이 가장 짧은 것을 먼저 실행 (비선점)
  • 평균 대기 시간이 최소 (비선점 중에서)
  • 긴 작업은 계속 밀리는 기아 상태 발생 가능
  • 실행 시간을 미리 정확히 알기 어려움

SRT (Shortest Remaining Time)

  • SJF의 선점 버전
  • 새 작업이 도착할 때마다 현재 작업의 남은 시간과 비교해서 더 짧으면 CPU를 빼앗음
  • 평균 대기 시간은 더 짧지만 문맥 교환 오버헤드 발생

HRN (Highest Response ratio Next) ⭐⭐⭐

  • SJF의 약점(긴 작업의 기아 상태)을 보완. 비선점
  • 대기 시간이 길어질수록 우선순위가 올라감
1
우선순위 = (대기 시간 + 서비스 시간) / 서비스 시간
  • 값이 클수록 우선순위가 높음 ⚠️ 작은 게 아니라 큰 것부터!

예시

작업 대기 시간 서비스 시간 우선순위 계산
A 5 5 (5+5)/5 = 2
B 10 6 (10+6)/6 ≈ 2.67
C 15 7 (15+7)/7 ≈ 3.14

→ 실행 순서 : C → B → A

우선순위 (Priority) 스케줄링

  • 우선순위가 높은 프로세스부터 CPU 할당
  • 낮은 우선순위 프로세스의 기아 상태 → 에이징으로 해결

기한부 (Deadline) 스케줄링

  • 작업마다 정해진 시간(기한) 안에 끝내도록 계획. 비선점

RR (Round Robin) ⭐⭐⭐

  • FCFS 순서로 돌되, 각 프로세스에 같은 크기의 시간 할당량(Time Quantum) 만 주고, 시간이 다 되면 준비 큐 맨 뒤로 보냄 (선점)
  • 시분할 시스템에 적합
  • 시간 할당량이 너무 크면 → FCFS와 같아짐
  • 시간 할당량이 너무 작으면 → 문맥 교환이 잦아져 오버헤드 증가

다단계 큐 (MLQ, Multi-Level Queue) ⭐⭐

  • 준비 큐를 우선순위별로 여러 개로 나눔 (시스템 → 대화형 → 편집 → 일괄처리)
  • 프로세스는 처음 배정된 큐에 고정. 다른 큐로 이동 불가
  • 각 큐는 독자적인 스케줄링 알고리즘 사용 가능
  • 상위 큐가 비어야 하위 큐 실행 → 하위 큐 기아 상태 가능

다단계 피드백 큐 (MLFQ / MFQ) ⭐⭐⭐

  • 다단계 큐를 보완. 프로세스가 큐 사이를 이동할 수 있음
  • 새 프로세스는 최상위 큐로 들어가고, 시간 할당량 안에 못 끝내면 한 단계 아래 큐로 내려감
  • 하위 큐일수록 우선순위 ↓, 시간 할당량 ↑
  • 마지막 큐는 보통 FCFS 또는 RR
  • 짧은 작업·입출력 위주 작업은 빨리 끝나고, CPU를 오래 쓰는 작업은 아래로 내려감
  • 에이징으로 기아 상태 방지 가능
구분 다단계 큐 다단계 피드백 큐
큐 간 이동 불가 가능
기아 상태 발생 가능 에이징으로 해결



Chapter 06. 메모리 관리


기억장치 관리 전략 ⭐⭐⭐

전략 질문 내용
반입 (Fetch) 언제 가져올까? 요구 반입 / 예상 반입
배치 (Placement) 어디에 둘까? 최초 적합 / 최적 적합 / 최악 적합
교체 (Replacement) 무엇을 내보낼까? FIFO, LRU, LFU, OPT, NUR 등 (Chapter 07)

반입 전략

  • 요구 반입 (Demand Fetch) : 실행 중인 프로그램이 요구할 때 메모리로 가져옴
  • 예상 반입 (Anticipatory Fetch) : 앞으로 요구될 가능성이 큰 것을 미리 예상해서 가져옴

배치 전략 ⭐⭐⭐

전략 방법
최초 적합 (First Fit) 들어갈 수 있는 빈 공간 중 첫 번째 공간에 할당. 가장 빠름
최적 적합 (Best Fit) 들어갈 수 있는 빈 공간 중 가장 작은 공간에 할당 (남는 공간 최소)
최악 적합 (Worst Fit) 들어갈 수 있는 빈 공간 중 가장 큰 공간에 할당

⚠️ 최초 적합은 “가장 큰 첫 번째”가 아니라 “크기가 충분한 첫 번째” 공간

예시 : 빈 공간이 순서대로 15K, 4K, 30K, 13K, 8K 이고, 12K 작업이 들어올 때

전략 선택되는 공간 남는 공간
최초 적합 15K (12K 이상인 첫 번째) 3K
최적 적합 13K (12K 이상 중 가장 작음) 1K
최악 적합 30K (가장 큼) 18K

메모리 할당 방식 ⭐⭐

  • 연속 할당 : 프로그램 전체를 메모리의 연속된 공간에 할당
    • 고정 분할 (정적 분할) : 메모리를 미리 고정된 크기로 나눠둠 → 내부 단편화 발생
    • 가변 분할 (동적 분할) : 작업 크기에 맞게 나눔 → 외부 단편화 발생
  • 분산 할당 : 프로그램을 여러 조각으로 나눠 흩어서 할당 → 페이징, 세그먼테이션 (Chapter 07)
  • 오버레이 (Overlay) : 프로그램을 여러 조각으로 나눠 필요한 조각만 차례로 메모리에 올림
  • 스와핑 (Swapping) : 프로그램 전체를 메모리와 디스크 사이에서 통째로 교체

단편화 (Fragmentation) ⭐⭐⭐

구분 내부 단편화 외부 단편화
의미 분할 영역이 작업보다 커서 할당하고 남은 공간 분할 영역이 작업보다 작아서 아예 할당 못 하고 비어 있는 공간
발생 고정 분할, 페이징 가변 분할, 세그먼테이션

예시 : 10K 영역에 8K 작업 할당 → 2K가 내부 단편화 / 5K 영역에 8K 작업 → 못 들어가서 5K 전체가 외부 단편화

단편화 해결 방법

  • 통합 (Coalescing) : 인접한 빈 공간들을 하나로 합침
  • 압축 (Compaction) : 흩어진 빈 공간들을 모두 한쪽으로 모아 하나의 큰 공간으로 만듦 (시간 오래 걸림)
  • 가비지 컬렉션 : 더 이상 쓰지 않는 공간을 회수



Chapter 07. 가상메모리


가상 메모리 ⭐⭐⭐

  • 보조기억장치(디스크)의 일부를 주기억장치처럼 사용하는 기법
  • 실제 메모리보다 큰 프로그램도 실행 가능, 다중 프로그래밍 정도 ↑
  • 프로그램이 쓰는 가상 주소(논리 주소) 와 실제 메모리의 물리 주소를 분리하고, 실행 중에 변환 → 동적 주소 변환 (DAT, Dynamic Address Translation)
  • 주소 변환은 하드웨어인 MMU (Memory Management Unit) 가 담당
  • TLB : 페이지 테이블 일부를 저장하는 고속 캐시. 주소 변환 속도 ↑

페이징 vs 세그먼테이션 ⭐⭐⭐

가상 메모리의 이동 단위를 블록이라고 함

구분 페이징 (Paging) 세그먼테이션 (Segmentation)
블록 크기 고정 길이 (페이지) 가변 길이 (세그먼트)
나누는 기준 물리적 크기 논리적 단위 (함수, 배열 등)
단편화 내부 단편화 외부 단편화
주소 구성 페이지 번호 + 오프셋 세그먼트 번호 + 오프셋
사용 테이블 페이지 맵 테이블 세그먼트 맵 테이블

페이지 크기에 따른 영향 ⭐⭐

페이지 크기가 작으면 페이지 크기가 크면
페이지 테이블 커짐 페이지 테이블 작아짐
내부 단편화 감소 내부 단편화 증가
필요한 내용만 올라와 지역성 활용 ↑ 불필요한 내용도 같이 올라옴
입출력 횟수 증가 입출력 횟수 감소

페이지 부재와 교체 ⭐⭐⭐

  • 페이지 부재 (Page Fault) : 필요한 페이지가 메모리에 없는 상황
  • 요구 페이징 (Demand Paging) : 페이지가 실제로 필요할 때만 메모리에 가져옴
  • 메모리가 꽉 찬 상태에서 페이지 부재가 나면, 기존 페이지 하나를 골라 내보내야 함 → 페이지 교체 알고리즘
알고리즘 교체 대상 특징
OPT (최적) 앞으로 가장 오랫동안 사용하지 않을 페이지 페이지 부재 최소. 미래를 알아야 해서 실제 구현 불가 (비교 기준용). 벨레이디가 제안
FIFO 메모리에 가장 먼저 들어온 페이지 구현 간단. 프레임을 늘렸는데 오히려 부재가 늘어나는 벨레이디의 모순 발생
LRU 가장 오랫동안 사용하지 않은 페이지 과거 사용 기록을 봄. 카운터·스택 필요
LFU 사용 횟수가 가장 적은 페이지  
NUR 최근에 사용하지 않은 페이지 참조 비트와 변형 비트 사용. 둘 다 0인 페이지부터 교체
SCR (2차 기회) FIFO에서 참조 비트가 1이면 한 번 더 기회를 줌 FIFO의 단점 보완

⚠️ LRU = 가장 오래 안 쓴 것 (시간 기준) / LFU = 가장 적게 쓴 것 (횟수 기준)

예시 : 프레임 3개, 참조 순서 7, 0, 1, 2, 0, 3, 0, 4

FIFO

참조 7 0 1 2 0 3 0 4
프레임1 7 7 7 2 2 2 2 4
프레임2   0 0 0 0 3 3 3
프레임3     1 1 1 1 0 0
부재 O O O O   O O O

→ FIFO 7회 / 같은 조건에서 LRU 6회, OPT 6회

지역성 (Locality) ⭐⭐⭐

  • 프로세스는 메모리를 균일하게 참조하지 않고, 특정 부분을 집중적으로 참조하는 성질 (데닝이 제시)
  • 시간 지역성 : 최근 참조한 곳을 곧 다시 참조 → 반복문(Loop), 스택, 카운터, 서브루틴
  • 공간 지역성 : 참조한 곳 근처를 곧 참조 → 배열 순회, 순차적 코드 실행

워킹 셋 (Working Set) ⭐⭐

  • 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합
  • 워킹 셋을 메모리에 유지하면 페이지 부재와 교체가 줄어듦 (지역성 기반)

스래싱 (Thrashing) ⭐⭐⭐

  • 페이지 교체가 너무 자주 일어나서, 실제 실행보다 교체에 시간을 더 많이 쓰는 현상
  • 다중 프로그래밍 정도가 너무 높으면 발생 → CPU 이용률이 급격히 떨어짐
  • 해결 : 다중 프로그래밍 정도를 낮춤, 워킹 셋 유지, 페이지 부재 빈도(PFF) 조절

페이지 부재 빈도 (PFF, Page Fault Frequency) ⭐

  • 페이지 부재 비율을 보고 프레임 수를 조절
  • 부재율이 높으면 프레임을 더 주고, 낮으면 프레임을 회수



Chapter 08. 디스크 스케줄링


디스크 접근 시간 ⭐⭐

1
접근 시간 = 탐색 시간 + 회전 지연 시간 + 전송 시간
  • 탐색 시간 (Seek Time) : 헤드를 원하는 트랙(실린더) 까지 이동시키는 시간 → 가장 오래 걸림
  • 회전 지연 시간 (Rotational Latency) : 원하는 섹터가 헤드 아래로 올 때까지 회전하는 시간
  • 전송 시간 (Transfer Time) : 데이터를 실제로 읽고 쓰는 시간

탐색 시간 최적화 기법 ⭐⭐⭐

기법 방법 특징
FCFS 먼저 도착한 요청부터 처리 공평하지만 헤드 이동 많음
SSTF 현재 헤드에서 탐색 거리가 가장 짧은 요청부터 처리량 ↑, 안쪽·바깥쪽 끝 요청은 기아 상태 가능
SCAN 한 방향으로 끝까지 가면서 처리 후 방향을 바꿔 돌아옴 (엘리베이터 알고리즘) 대부분 시스템의 기본. 가운데 트랙이 유리
C-SCAN 한 방향으로만 처리. 끝에 도달하면 처리 없이 반대쪽 끝으로 점프 후 다시 같은 방향으로 처리 SCAN의 불공평한 대기 시간을 균등하게
LOOK SCAN과 같지만 디스크 끝까지 가지 않고 그 방향의 마지막 요청까지만 간 뒤 방향 전환 SCAN보다 불필요한 이동 ↓
C-LOOK C-SCAN + LOOK. 마지막 요청까지만 가고 반대쪽의 첫 요청 위치로 점프  
N-step SCAN SCAN 진행 중 새로 들어온 요청은 다음 방향 때 처리 헤드가 한곳에 묶이는 현상 방지

예시 : 헤드 위치 53, 요청 큐 98, 183, 37, 122, 14, 124, 65, 67

  • FCFS : 53 → 98 → 183 → 37 → 122 → 14 → 124 → 65 → 67 = 총 이동 거리 640
  • SSTF : 53 → 65 → 67 → 37 → 14 → 98 → 122 → 124 → 183 = 총 이동 거리 236

⚠️ SSTF는 매번 현재 위치에서 가장 가까운 곳을 다시 계산해야 함

회전 지연 시간 최적화 기법 ⭐⭐

기법 방법
SLTF (Shortest Latency Time First) 같은 실린더 안의 요청 중 회전 지연 시간이 가장 짧은 섹터부터 처리. 섹터 큐잉이라고도 함
에센바흐 (Eschenbach) 기법 탐색 시간뿐 아니라 회전 지연 시간까지 최적화하기 위해 만든 최초의 기법. 헤드는 C-SCAN처럼 움직이고, 한 실린더에서 한 바퀴 회전하는 동안 그 실린더의 요청을 처리



Chapter 09. 파일 관리


파일의 구성 ⭐

  • 필드 (Field) → 모여서 레코드 (Record) → 모여서 파일 (File)

파일 구조 (파일 편성 방식) ⭐⭐⭐

구조 설명 특징
순차 파일 (Sequential) 레코드를 입력 순서 또는 키 순서대로 연속 저장 저장 효율 좋음. 순차 처리 빠름. 검색·삽입·삭제 느림 (처음부터 찾아야 함)
색인 순차 파일 (Indexed Sequential) 레코드를 키 순서대로 저장 + 색인(인덱스) 을 따로 둠 순차 접근과 직접 접근 모두 가능. 색인 공간 필요. 기본 영역·색인 영역·오버플로 영역으로 구성
직접 파일 (Direct / Random) 키 값을 해싱 함수로 계산해서 물리적 주소를 구하고 직접 접근 검색 가장 빠름. 충돌(Collision) 처리 필요, 공간 효율 낮음
파일 (Heap / Pile) 레코드를 도착 순서대로 그냥 쌓음 구조 없음. 검색 시 전체 탐색

디렉터리 구조 ⭐⭐⭐

구조 설명
1단계 모든 파일이 하나의 디렉터리에 있음. 파일 이름이 겹치면 안 됨
2단계 마스터 파일 디렉터리(MFD) 아래에 사용자마다 사용자 파일 디렉터리(UFD) 를 둠
트리 구조 하나의 루트 디렉터리 아래 서브 디렉터리를 계층적으로 둠. 대부분의 OS가 사용 (UNIX, Windows)
비순환 그래프 트리 구조 + 파일·디렉터리 공유 가능 (링크). 사이클은 허용 X
일반 그래프 사이클까지 허용. 탐색이 복잡하고 가비지 컬렉션 필요

디스크 공간 할당 방법 ⭐⭐⭐

파일에 디스크 블록을 어떻게 배정할까?

방법 설명 장점 단점
연속 할당 파일을 디스크의 연속된 블록에 할당 순차·직접 접근 빠름 외부 단편화, 파일 크기 늘리기 어려움
연결 할당 블록들을 포인터로 연결 (리스트) 외부 단편화 없음, 크기 변경 쉬움 직접 접근 불가, 포인터 공간 필요, 포인터 손상 시 위험
인덱스 할당 파일마다 인덱스 블록을 두고, 각 블록의 주소를 테이블처럼 저장 직접 접근 가능, 외부 단편화 없음 인덱스 블록 공간 필요

빈 공간 관리 방법 ⭐⭐

디스크의 빈 블록을 어떻게 기록해둘까?

방법 설명
비트 벡터 (비트맵) 블록마다 1비트 사용 (0 = 빈 블록, 1 = 사용 중. 시스템에 따라 반대)
연결 리스트 빈 블록들을 포인터로 연결
그룹핑 첫 빈 블록에 다른 빈 블록 n개의 주소를 저장
카운팅 연속된 빈 블록의 시작 주소와 개수만 저장

⚠️ “디스크 할당(연속·연결·인덱스)”과 “빈 공간 관리(비트벡터·연결리스트)”는 다른 개념. 연결 리스트가 양쪽에 다 나와서 헷갈리게 냄.

UNIX ⭐⭐⭐

특징

  • 대화식 시스템 (Interactive)
  • 다중 사용자 (Multi-User), 다중 작업 (Multi-Tasking) 시스템
  • 대부분 C 언어로 작성되어 이식성과 확장성이 높음
  • 계층적 트리 구조의 파일 시스템
  • 장치·프로세스를 파일처럼 다룸
  • 네트워킹 기능이 뛰어남

구성

구성 요소 역할
커널 (Kernel) UNIX의 핵심. 부팅 시 메모리에 상주하며 프로세스·메모리·파일·입출력 관리. 하드웨어를 직접 제어
셸 (Shell) 사용자 명령어를 해석해 커널에 전달하는 명령어 해석기. 종류 : Bourne Shell, C Shell, Korn Shell, Bash 등
유틸리티 에디터, 컴파일러, 정렬 프로그램 등

파일 시스템 구조 (디스크 블록) ⭐⭐

블록 내용
부트 블록 부팅에 필요한 코드
슈퍼 블록 파일 시스템 전체 정보 (크기, 블록 수, 빈 블록 목록 등)
I-노드 블록 각 파일의 정보를 담은 I-노드들
데이터 블록 실제 파일 데이터

I-노드 (I-node) ⭐⭐⭐

  • 파일마다 하나씩 있는, 파일 정보를 담은 자료구조
  • 포함 정보 : 파일 소유자(UID), 그룹, 파일 크기, 파일 유형, 접근 권한, 생성·접근·수정 시간, 링크 수, 데이터 블록 주소
  • ⚠️ 파일 이름은 I-노드에 없음. 파일 이름은 디렉터리에 저장됨

자주 나오는 명령어 ⭐

명령어 기능
fork 새로운 프로세스(자식) 생성
exec 새로운 프로그램을 실행 (현재 프로세스를 대체)
wait / exit 자식 종료 대기 / 프로세스 종료
ls / cat / pwd 파일 목록 / 파일 내용 출력 / 현재 디렉터리
cp / mv / rm 복사 / 이동·이름 변경 / 삭제
chmod / chown 접근 권한 변경 / 소유자 변경
mount 파일 시스템을 디렉터리에 연결