3주차 발자국 운영체제
가상메모리 개요
정의: 가상 메모리는 물리 메모리(RAM)의 용량이 부족할 때 보조 저장 장치(디스크)를 마치 메모리처럼 사용하는 기술이야.
목적: 한정된 물리 메모리 자원을 효과적으로 활용하고, 프로그램이 실제 메모리 크기를 몰라도 실행되도록 해 줌.
장점: 여러 프로그램이 동시에 실행 가능하고, 물리 메모리보다 큰 프로그램도 실행할 수 있음.
가상메모리의 메모리 분할 방식 1: 세그멘테이션(Segmentation)
설명: 프로그램을 의미 있는 단위(세그먼트)로 나누는 방식. 보통 코드, 데이터, 스택 등으로 나눔.
방식: 가변 분할 방식 → 각 세그먼트 크기가 서로 다름.
장점:
논리적인 구조 반영이 용이함 (코드, 데이터 등을 따로 관리).
필요한 메모리만큼만 할당하므로 메모리 낭비가 적음.
단점:
외부 단편화 발생 → 메모리가 여기저기 나뉘어져 있어서 충분한 메모리가 있어도 연속 공간이 부족하면 사용하지 못하는 문제.
가상메모리의 메모리 분할 방식 2: 페이징(Paging)
설명: 메모리를 고정된 크기의 페이지(Page) 단위로 나눔.
방식: 고정 분할 방식 → 모든 페이지 크기가 동일함.
장점:
외부 단편화가 없음 → 빈 공간이 여기저기 흩어져 있어도 사용 가능.
메모리 관리가 간단함.
단점:
내부 단편화 발생 → 페이지 크기보다 작은 데이터는 빈 공간이 생김.
가상메모리의 메모리 분할 방식 3: 페이지드 세그멘테이션(Paged Segmentation)
설명: 세그멘테이션과 페이징을 결합한 방식.
특징:
세그먼트는 논리적인 단위지만, 각 세그먼트 내부는 페이지로 나누어서 관리.
장점:
외부 단편화와 내부 단편화 문제를 모두 어느 정도 해결.
효율적인 메모리 할당 가능.
디맨드 페이징(Demand Paging)
설명: 필요한 페이지가 메모리에 없을 때만 디스크에서 불러오는 방식. 프로그램 실행 시 전체를 메모리에 올리지 않아도 됨.
근거 이론: 지역성(Locality)의 원리
시간적 지역성: 최근에 참조한 데이터는 가까운 시점에 다시 참조될 가능성이 높다.
공간적 지역성: 현재 참조한 주소 근처가 곧 참조될 가능성이 높다.
가상 메모리 주소가 참조되는 상황
스왑이 필요 없는 경우
→ 필요한 페이지가 이미 물리 메모리에 존재. 바로 접근 가능.스왑 영역에 있는 데이터를 참조하는 경우
→ 페이지 폴트(Page Fault)가 발생하여 스왑 영역에서 페이지를 불러와야 함.물리 메모리가 꽉 찼을 때 스왑 영역 참조
→ 기존에 있는 페이지를 스왑 아웃(교체)하고 새 페이지를 불러와야 함.
페이지 교체 정책(Page Replacement Algorithm)
목적: 메모리가 꽉 찼을 때 어떤 페이지를 제거하고 새 페이지를 가져올지 결정.
정책 종류:
Random: 무작위 선택 → 구현은 쉽지만 비효율적.
FIFO(First-In-First-Out): 가장 먼저 들어온 페이지를 제거 → 오래된 게 덜 쓸 것 같아서 사용하지만, 성능이 안 좋을 때도 있음(벨라디의 이상 현상 발생 가능).
Optimal(OPT): 앞으로 가장 오래 쓰지 않을 페이지를 제거 → 이상적이지만 미래를 예측할 수 없어서 현실에서는 불가능.
LRU(Least Recently Used): 최근에 사용하지 않은 페이지를 제거 → 지역성 원리를 반영하여 성능이 좋음.
단점: 시간 정보 기록 필요 → 하드웨어 지원이 없으면 구현이 비효율적(비트 오버플로우 문제 등).
Clock 알고리즘 (Second Chance)
LRU를 근사화한 방식 → 참조 비트(Reference Bit)를 사용하여 순환하면서 교체.
Enhanced Clock: 참조 비트와 수정 비트를 함께 사용하여 더 효율적으로 교체.
스레싱(Thrashing)과 워킹셋(Working Set)
스레싱: 과도한 페이지 폴트로 CPU가 페이지 교체에만 매달리는 현상 → CPU 사용률 저하.
원인: 물리 메모리가 부족해서 자주 교체가 발생.
워킹셋 모델:
현재 프로세스가 일정 시간 동안 자주 사용하는 페이지 집합을 워킹셋이라 함.
워킹셋을 메모리에 유지하면 페이지 폴트율을 낮출 수 있음.
운영체제가 페이지 폴트율을 기준으로 페이지를 할당하거나 회수하는 방식으로 스레싱 완화 가능.
주변장치
I/O 디바이스와 저장장치 구분
캐릭터 디바이스: 데이터가 순차적으로 처리(키보드, 마우스, 프린터 등).
블록 디바이스: 대량의 데이터 블록 단위 처리(하드디스크, SSD 등).
연결 방식
시스템 버스와 입출력 제어기로 연결됨.
DMA(Direct Memory Access): CPU 개입 없이 메모리와 직접 데이터 전송 → 고속 입출력 지원.
Memory Mapped IO: 입출력 장치를 메모리처럼 접근.
마우스와 키보드 동작
광학 마우스
초당 수천 번 촬영한 사진을 DSP가 분석해서 위치 변화를 계산.
클릭/움직임 감지 후 인터럽트 신호를 CPU에 전달.
키보드
키가 눌릴 때 신호 발생 → 디바이스 컨트롤러가 감지 후 CPU에 인터럽트 발생.
하드디스크 vs 플래시 메모리(SSD)
하드디스크
기계적 방식 → 회전하는 플래터와 읽기/쓰기 헤드 사용.
자성 매체라서 외부 충격, 자기장에 민감함.
트랙과 섹터로 구분, 밀리초 단위 접근 시간.
SSD
전자적 방식 → 반도체 기반으로 전기 신호로 데이터 저장.
속도가 빠르고 충격에 강함.
수명 제한(지울 수 있는 횟수 제한).
파일 시스템(파일 관리자)
기능
파일 생성, 수정, 삭제, 검색.
접근 권한 관리, 암호화, 백업 및 복구.
파일 관리
파일 테이블과 파일 제어 블록(FCB) 사용 → 파일 속성 및 위치 정보 저장.
전송 단위
저장 장치에서는 블록 단위, 사용자 관점에서는 바이트 단위 접근.
파일 구성
헤더: 속성 정보(이름, 크기, 시간 등).
데이터: 실제 내용.
파일 구조
순차 파일: 순서대로 접근 → 수정과 삽입이 비효율적.
직접 파일: 해시 기반 → 빠른 접근.
인덱스 파일: 인덱스를 통해 빠르게 검색 가능 → 음악 목록 같은 구조.
디렉토리와 파일 디스크
디렉토리도 파일이지만 파일 정보를 저장하는 특수한 구조.
블록 단위로 디스크 관리, 페이지와 유사하지만 파일 시스템에선 블록.
할당 방식
연속 할당: 빠르지만 외부 단편화 문제.
불연속 할당:
연결 할당: 링크드 리스트 방식 → 순차 접근 효율.
인덱스 할당: 인덱스 블록으로 블록 정보를 관리 → 랜덤 액세스에 유리.