[CS 스터디] 운영체제 정리2

오리구이·2025년 3월 6일

🖥️ CPU 스케줄링

🔹 우선순위

  • CPU 활용률: 전체 CPU 가동 시간 중에서 작업을 처리하는 시간의 비율을 의미한다.
  • 대부분의 프로세스는 CPU와 입출력 장치를 모두 사용하며 실행과 대기 상태를 반복한다.
  • CPU 버스트: CPU를 집중적으로 사용하는 구간.
  • 입출력 버스트: 입출력을 수행하는 구간.
  • 입출력 집중 프로세스: 입출력 장치를 자주 사용하는 프로세스.
  • CPU 집중 프로세스: CPU 연산을 자주 수행하는 프로세스.

📌 효율적인 CPU 스케줄링

  • 입출력 집중 프로세스를 최대한 빠르게 실행해 입출력 장치를 지속적으로 작동시킨다.
  • 이후 CPU 집중 프로세스에 CPU를 집중적으로 할당하는 것이 효율적이다.

🔹 스케줄링 큐

📌 스케줄링 큐의 종류

  • 준비 큐 (Ready Queue): CPU를 사용하려고 기다리는 프로세스의 PCB(Process Control Block)가 저장되는 큐.
  • 대기 큐 (Waiting Queue): 입출력과 같은 이벤트를 기다리는 프로세스의 PCB가 저장되는 큐.

📌 프로세스의 흐름

  1. 새로운 프로세스 생성 → 준비 큐로 이동
  2. CPU 할당 → 실행 상태로 전환
  3. 입출력 요청 → 대기 큐로 이동 (대기 상태)
  4. 입출력 작업 완료 → 준비 큐로 복귀
  5. 프로세스 종료

🔹 선점형 스케줄링 vs 비선점형 스케줄링

📌 프로세스 상태 전환 유형

1️⃣ 실행 상태 → 대기 상태 (입출력 요청 등)
2️⃣ 실행 상태 → 준비 상태 (타이머 인터럽트 발생 등)

선점형 스케줄링 (Preemptive Scheduling)

  • 1, 2번 모든 경우에서 CPU 스케줄링 가능
  • 운영체제가 강제로 CPU를 회수하여 다른 프로세스에 할당할 수 있음
  • 장점: CPU 자원을 독점하는 프로세스를 방지하고, 공평한 자원 배분 가능
  • 단점: 문맥 교환(Context Switching)으로 인한 오버헤드 발생 가능

비선점형 스케줄링 (Non-Preemptive Scheduling)

  • 1번 경우에서만 스케줄링 가능
  • 프로세스가 CPU를 스스로 반납하거나 종료될 때까지 기다려야 함
  • 장점: 문맥 교환 오버헤드가 적음
  • 단점: 특정 프로세스가 CPU를 독점할 가능성이 있음

🔹 CPU 스케줄링 알고리즘

1️⃣ FCFS (First Come, First Served) - 선입 선처리 스케줄링

  • 가장 먼저 도착한 프로세스가 먼저 CPU를 할당받아 실행된다.
  • 장점: 구현이 간단하며 공정함.
  • 단점: 실행 시간이 긴 프로세스가 앞에 있으면 대기 시간이 길어지는 "Convoy Effect(호위 효과)" 발생 가능.

2️⃣ SJF (Shortest Job First) - 최단 작업 우선 스케줄링

  • 실행 시간이 가장 짧은 프로세스를 우선 실행.
  • 장점: 평균 대기 시간을 최소화할 수 있음.
  • 단점: 실행 시간을 미리 예측하기 어려움, 긴 작업이 계속해서 뒤로 밀리는 "Starvation(기아 현상)" 가능.

3️⃣ RR (Round Robin) - 라운드 로빈 스케줄링

  • 일정한 Time Quantum(타임 슬라이스) 만큼 CPU를 번갈아 가며 할당.
  • 장점: 모든 프로세스가 공정하게 CPU를 사용할 수 있음.
  • 단점: 타임 슬라이스가 너무 짧으면 문맥 교환이 자주 발생하여 오버헤드 증가.

4️⃣ SRTF (Shortest Remaining Time First) - 최소 잔여 시간 우선 스케줄링

  • SJF의 선점형 버전으로, 현재 실행 중인 프로세스보다 남은 실행 시간이 더 짧은 프로세스가 등장하면 CPU를 교체.
  • 장점: 평균 대기 시간 최소화.
  • 단점: 선점 과정에서 문맥 교환이 자주 발생 가능.

5️⃣ Priority Scheduling - 우선순위 스케줄링

  • 프로세스마다 우선순위를 부여하고, 우선순위가 높은 순서대로 CPU 할당.
  • 장점: 중요도가 높은 프로세스를 우선 실행 가능.
  • 단점: 우선순위가 낮은 프로세스는 계속 실행되지 못하는 "Starvation(기아 현상)" 발생 가능.
    • 해결 방법: Aging(노화) 기법을 사용하여 시간이 지날수록 우선순위를 높여주는 방식 적용.

6️⃣ Multilevel Queue Scheduling - 다단계 큐 스케줄링

  • 프로세스를 여러 개의 큐로 나누고, 각 큐에 다른 스케줄링 알고리즘 적용.
  • 장점: 다양한 프로세스 유형을 효율적으로 처리 가능.
  • 단점: 큐 간 이동이 불가능하면 유연성이 떨어질 수 있음.

7️⃣ Multilevel Feedback Queue Scheduling - 다단계 피드백 큐 스케줄링

  • 다단계 큐 스케줄링과 유사하지만, 프로세스가 큐 간 이동 가능.
  • 장점: 자주 실행되는 프로세스는 우선순위를 낮추고, 긴 작업을 뒤로 미뤄 기아 현상 방지.
  • 단점: 스케줄링 알고리즘이 복잡하며, 큐 이동 기준 설정이 어려움.

📌 각 스케줄링 알고리즘은 특정 환경과 요구사항에 따라 선택적으로 사용된다.


🔹 리눅스 CPU 스케줄링

리눅스는 프로세스의 특성과 우선순위에 따라 다양한 CPU 스케줄링 정책을 제공한다.

📌 리눅스 스케줄링 정책

  • SCHED_FIFO: 선입 선처리 방식의 실시간(Real-Time) 스케줄러
  • SCHED_RR: 라운드 로빈 방식의 실시간 스케줄러
  • SCHED_NORMAL: 일반적인 프로세스 스케줄링 (CFS 사용)
  • SCHED_BATCH: 배치 작업을 위한 스케줄링
  • SCHED_IDLE: 우선순위가 가장 낮은 작업을 위한 스케줄링

📌 리눅스의 대표적인 스케줄러

  • RT 스케줄러 (Real-Time Scheduler): 실시간 프로세스를 위해 사용.
  • CFS (Completely Fair Scheduler): 일반 프로세스를 위한 공정한 CPU 스케줄링 제공.

📌 CFS의 핵심 개념: vruntime (가상 실행 시간)

  • vruntime = (실행 시간 × 평균 가중치) / 프로세스의 가중치
  • CPU 시간을 공정하게 나누기 위해 사용됨.

🖥️ 가상 메모리

🔹 물리 주소와 논리 주소

  • 물리 주소: 하드웨어 상의 실제 메모리 주소.
  • 논리 주소: 프로세스마다 부여되는 0번지부터 시작하는 주소 체계.
  • MMU (Memory Management Unit): CPU와 메모리 사이에서 논리 주소를 물리 주소로 변환하는 역할을 수행.

🔹 스와핑과 연속 메모리 할당

스와핑 (Swapping)

  • 스왑 영역: 보조기억장치의 일부로, 일시적으로 메모리를 비우기 위한 저장 공간.
  • 스왑아웃: 실행되지 않는 프로세스를 메모리에서 스왑 영역으로 옮김.
  • 스왑인: 스왑 영역에 있던 프로세스를 다시 메모리로 불러옴.

연속 메모리 할당과 외부 단편화

  • 연속 메모리 할당: 프로세스에 연속적인 메모리 공간을 할당하는 방식.
  • 할당 방식:
    • First-Fit (최초 적합): 메모리에서 첫 번째로 적절한 공간을 찾아 할당.
    • Best-Fit (최적 적합): 가장 크기가 근접한 공간을 찾아 할당.
    • Worst-Fit (최악 적합): 가장 크기가 큰 공간을 찾아 할당.
  • 단편화 문제:
    - 외부 단편화: 사용되지 못하는 작은 공간들이 메모리에 남는 현상.
    - 내부 단편화: 할당된 메모리 공간이 프로세스가 실제로 필요로 하는 크기보다 커서 낭비되는 현상.

🔹 페이징을 통한 가상 메모리 관리

  • 페이징 (Paging): 프로세스의 논리 주소 공간을 고정된 크기의 페이지 단위로 나누고, 물리 주소 공간을 동일한 크기의 프레임 단위로 나눈 뒤 페이지를 프레임에 매핑하는 방식.

  • 세그멘테이션 (Segmentation): 프로세스를 일정한 크기의 페이지 단위가 아닌, 의미를 가지는 가변적인 크기의 세그먼트 단위로 분할하는 방식.

  • 페이지 인: 디스크에서 메모리로 페이지를 로드하는 과정.
  • 페이지 아웃: 메모리에서 디스크로 페이지를 내보내는 과정.

🔹 페이지 테이블과 TLB

페이지 테이블

  • 테이블 엔트리 구성:
    • 페이지 번호, 프레임 번호, 유효 비트, 보호 비트, 참조 비트, 수정 비트.
  • 페이지 폴트 (Page Fault):
    1. CPU가 참조하려는 페이지가 메모리에 없음.
    2. 페이지 폴트 처리 루틴 실행 → 필요한 페이지를 메모리로 적재하고 유효 비트를 1로 변경.
    3. 프로세스 재시작.
  • 페이징의 장점: 외부 단편화 해결.
  • 페이징의 단점: 내부 단편화 문제 발생 가능.

TLB (Translation Lookaside Buffer) - 페이지 테이블 캐시

  • TLB 히트: CPU가 참조하려는 논리 주소의 페이지 번호가 TLB에 있을 경우 빠르게 변환.
  • TLB 미스: 페이지 테이블에서 변환을 수행해야 하는 경우.
  • 계층적 페이징 (Hierarchical Paging): 다단계 페이지 테이블을 사용하여 메모리 사용량 절감.

🔹 페이징 주소 체계

  • 페이지 번호: 페이지 테이블에서 프레임 번호를 찾는 키.
  • 변위 (Offset): 페이지 내부의 특정 위치를 가리키는 값.

🔹 페이지 교체 알고리즘

요구 페이징 (Demand Paging)

  1. CPU가 특정 페이지에 접근하는 명령어를 실행.
  2. 페이지가 메모리에 있을 경우 (유효 비트가 1) → 바로 접근.
  3. 페이지가 메모리에 없을 경우 (유효 비트가 0) → 페이지 폴트 발생.
  4. 페이지 폴트 처리 루틴을 실행하여 페이지를 메모리로 로드.
  5. 다시 1의 과정을 반복.

페이지 교체 알고리즘

  • FIFO (First-In, First-Out): 가장 먼저 메모리에 들어온 페이지를 먼저 교체.
  • Optimal (OPT, 최적 페이지 교체): 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체.
  • LRU (Least Recently Used): 가장 오랫동안 사용되지 않은 페이지를 교체.

🖥️ 파일 시스템

📂 파일과 디렉터리

📄 파일(File)

파일은 데이터를 저장하는 기본 단위로, 다양한 속성과 정보를 포함한다.

  • 속성(Attribute): 파일 크기, 생성/수정 날짜, 접근 권한 등.
  • 메타데이터(Metadata): 파일에 대한 추가적인 정보를 포함.
  • 파일 디스크립터(File Descriptor, 파일 핸들):
    • 운영체제가 파일을 식별하는 정수형 값(0 이상의 정수).
    • 입출력 장치, 파이프, 소켓도 파일로 취급하여 파일 디스크립터를 통해 식별함.

📁 디렉터리(Directory)

디렉터리는 파일을 체계적으로 관리하기 위한 트리 구조를 가진다.

  • 루트 디렉터리(Root Directory): 최상위 디렉터리.
  • 경로(Path): 특정 파일 또는 디렉터리의 위치.
  • 디렉터리 엔트리(Directory Entry): 디렉터리에 포함된 요소(파일, 서브디렉터리)의 정보.

📦 파일 할당

  • 파일과 디렉터리는 블록 단위로 읽고 씀.
  • 블록(Block): 일반적으로 4096바이트(4KB) 크기.
  • 할당 방식:
    • 연결 할당(Linked Allocation): 블록이 링크로 연결됨.
    • 색인 블록(Index Block): 색인 테이블을 통해 블록 관리.
    • 색인 할당(Index Allocation): 파일의 블록 위치를 직접 저장.

🗂️ 파일 시스템

파일 시스템은 파일을 저장하고 관리하는 방식으로, 운영체제에 따라 여러 종류가 있다.

🏗️ 주요 개념

  • 파티셔닝(Partitioning)
    • 보조기억장치를 논리적으로 나누어 여러 개의 파일 시스템을 사용할 수 있도록 영역을 구분하는 작업.
  • 포매팅(Formatting)
    • 파일 시스템을 설정하여 데이터를 저장할 준비를 하는 과정.

💻 운영체제별 파일 시스템 종류

  • Windows: NTFS, ReFS
  • Linux: EXT, EXT2, EXT3, EXT4, XFS, ZFS 등
  • macOS: APFS

🏷️ 아이노드(Inode) 기반 파일 시스템

아이노드는 파일의 메타데이터와 데이터 블록 위치를 저장하는 구조체이다.

  • 각 파일은 고유한 아이노드 번호(Inode Number)를 가짐.
  • 데이터 블록을 가리키며 파일의 크기, 권한, 소유자 등의 정보 포함.
  • 아이노드 공간이 가득 차면 새로운 파일을 생성할 수 없음.

EXT4 파일 시스템의 구조

  • 슈퍼블록(Superblock): 파일 시스템의 전체 정보 저장.
  • 그룹 식별자(Group Descriptor): 블록 그룹 정보를 저장.
  • 블록 비트맵(Block Bitmap): 사용 가능한 블록을 관리.
  • 아이노드 비트맵(Inode Bitmap): 사용 가능한 아이노드를 관리.
  • 아이노드 테이블(Inode Table): 파일의 메타데이터 저장.
  • 데이터 블록(Data Block): 실제 파일 데이터가 저장되는 공간.

🔗 하드링크 vs 심볼릭 링크

  • 원본 파일과 같은 아이노드를 공유하는 파일.
  • 원본 파일이 삭제되더라도 하드링크가 남아있다면 데이터 접근 가능.
  • 원본 파일을 가리키는 경로 정보만 저장하는 파일.
  • 원본 파일이 삭제되거나 이동되면 심볼릭 링크는 무효화됨.

📌 마운트(Mount)

마운트란 운영체제가 외부 저장 장치나 파일 시스템을 특정 디렉터리에 연결하는 과정.

🛠️ 마운트 명령어 (Linux)

# USB 메모리를 /mnt에 마운트 (예: /dev/sdb1)
sudo mount /dev/sdb1 /mnt

# 확인 (마운트된 디렉터리 구조 출력)
ls /mnt

🛠️ 마운트 해제

sudo umount /mnt

Ref. 📗《이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접》, 강민철

0개의 댓글