| 순서 | 학습 주제 | 핵심 질문 |
|---|---|---|
| ① | 메모리 계층 구조 | CPU~디스크까지 어떤 계층이 있는가? |
| ② | 캐시 메모리 원리 | CPU는 왜 캐시가 필요한가? |
| ③ | 캐시 교체와 적중률 | 캐시 효율은 어떻게 평가되는가? |
| ④ | 프로세스 메모리 구조 | 프로세스가 메모리를 어떻게 사용하는가? |
| ⑤ | 가상 메모리 구조 | 논리 주소는 어떻게 물리 주소로 변환되는가? |
| ⑥ | 페이징, TLB, 스왑 | 가상 메모리는 성능을 어떻게 유지하는가? |
| ⑦ | 캐시 vs 가상 메모리 통합 | 두 시스템은 어떤 관계인가? |
프로세스가 메모리를 어떻게 사용하는가 → OS가 이를 어떻게 효율적으로 관리하는가
CPU~디스크까지 어떤 계층이 있는가?
| 계층 | 구성요소 | 관리 주체 | 속도 | 용량 | 주요 구성요소 |
|---|---|---|---|---|---|
| 1 | 레지스터(Register) | CPU 하드웨어 | 가장 빠름 | 매우 작음 | CPU 내부 레지스터 |
| 2 | 캐시(Cache) | CPU 하드웨어 | 빠름 | 작음 | L1, L2, L3 캐시 |
| 3 | 메인 메모리(Main Memory, RAM) | 운영체제(OS) | 중간 | 중간 | DRAM (Dynamic RAM) |
| 4 | 보조기억장치(Secondary Storage) | 운영체제(OS) / | |||
| 파일 시스템 | 느림 | 큼 | SSD, HDD | ||
| 5 | 보관 장치(Backup Storage) | 사용자 / 서버 | 가장 느림 | 매우 큼 | 외장 드라이브, 클라우드, 테이프 등 |
모든 메모리 관리 기법의 핵심 전제
CPU가 데이터를 접근할 때 특정 영역을 집중적으로 접근하는 경향
CPU는 왜 캐시가 필요한가? → CPU 속도 vs RAM 속도의 차이 (메모리 병목 문제)
CPU의 메모리 접근 속도를 보완하기 위한 하드웨어적 메모리 관리 기법
OS가 직접 개입하지 않으며, CPU와 MMU 수준에서 관리됨
데이터가 RAM에서 캐시로 올라올 때 어느 위치에 저장될지 결정하는 방법
RAM이 어떻게 사용되는가?
➡ 이 논리 주소 매핑을 효율적으로 관리하기 위한 기술이 가상 메모리
운영체제는 논리 주소 → 물리 주소 변환을 통해 프로세스마다 독립적인 주소 공간을 제공하며, 이것이
가상 메모리 시스템의 핵심 동작 원리
MMU는 CPU 안에 내장된 하드웨어로, 주소 변환(Address Translation) 을 수행함
프로세스가 실행될 때, 운영체제는 프로세스마다 독립적은 주소공간을 제공함
주소공간은 일반적으로 다음 4개의 영역으로 구성됨
| 영역 | 설명 | 예시 |
|---|---|---|
| 코드(Code) | 실행 명령어 저장 | 함수, 제어문 |
| 데이터(Data) | 전역 변수, static 변수 | int a = 10; |
| 힙(Heap) | 동적 메모리 할당 공간 | malloc(), new |
| 스택(Stack) | 함수 호출, 지역 변수 저장 | 함수 매개변수, 지역 변수 |
주소를 결정하는 시점에 따라 3가지로 구분됨
| 바인딩 시점 | 설명 | 특징 |
|---|---|---|
| Compile Time | 실행 전에 절대 주소로 결정 | 주소 고정, 유연성 낮음 |
| Load Time | 프로그램 로드 시 주소 결정 | 재배치 가능 |
| Run Time | 실행 중 동적으로 주소 변환 | 가상 메모리 필요, 가장 유연함 |
메모리 용량을 확장하고, 프로세스 간 메모리 독립성을 보장하는 OS 관리 기법
왜 필요한가? 물리적 메모리 한계 극복, 메모리 보호, 다중 프로그래밍 효율성 증대
[주소 공간 구조]
| 구성요소 | 설명 |
|---|---|
| 가상 주소(Virtual Address) | 프로세스가 바라보는 주소 |
| 물리 주소(Physical Address) | 실제 RAM 상의 주소 |
| MMU (Memory Management Unit) | 주소 변환을 수행하는 하드웨어 장치 |
| 페이지 테이블(Page Table) | 가상 주소 → 물리 주소 매핑 정보 저장 |
프로세스는 OS로부터 가상 주소 공간(Virtual Address Space)을 할당받는데
이 가상 주소는 실제 물리 주소로 직접 연결되지 않고,
MMU(Memory Management Unit)가 페이지 테이블(Page Table)을 통해 변환(mapping)
가상 메모리는 일반적으로 페이징 기법을 사용함
| 용어 | 의미 |
|---|---|
| 페이지(Page) | 가상 메모리의 고정 크기 블록 (예: 4KB) |
| 프레임(Frame) | 물리 메모리의 고정 크기 블록 (예: 4KB) |
| 페이지 폴트(Page Fault) | 접근하려는 페이지가 메모리에 없을 때 발생 |
| 스왑(Swap) | 디스크에서 페이지를 불러오거나 내보내는 작업 |
⇒ 즉, OS는 필요할 때만 디스크에서 데이터를 메모리에 수요에 따라(Demand Paging)
페이징과 세그멘테이션 모두 프로세스의 메모리 공간을 비연속적으로 물리 메모리에 할당하여 가상 메모리를 구현하는 기법
두 기법의 주요 차이점은 메모리를 나누는 단위와 기준에 있음
| 구분 | 페이징 (Paging) | 세그멘테이션 (Segmentation) |
|---|---|---|
| 분할 단위 | 고정 크기의 페이지(Page) | 가변 크기의 세그먼트(Segment) |
| 분할 기준 | 물리적 주소 공간의 효율적 관리 | 논리적 의미 단위 (코드, 데이터, 힙, 스택, 함수 등) |
| 주소 구조 | <페이지 번호, 오프셋> | <세그먼트 번호, 오프셋> |
| 주체 | 운영체제와 하드웨어에 의해 투명하게 관리 (사용자에게 숨김) | 사용자/컴파일러의 논리적 구조를 반영 (사용자에게 노출) |
| 주요 단편화 | 내부 단편화 (Internal Fragmentation) | 외부 단편화 (External Fragmentation) |
| 메모리 공유/보호 | 페이지 단위로 세밀한 보호 어려움 | 논리적 단위이므로 공유 및 보호가 용이함 |
메모리를 고정된 크기의 조각(Page/ Frame)으로 나누어 관리하여 외부 단편화를 완전히 제거함
대신 페이지 크기 때문에 발생하는 내부 단편화가 존재함
프로그램의 코드, 데이터, 스택 등 의미 있는 논리적 단위(Segment)로 나누어 관리함
사용자 관점의 메모리 구조를 반영하지만, 크기가 가변적이라 외부 단편화 문제가 발생할 수 있음
프로세스가 접근하려는 페이지가 물리 메모리(RAM)에 없을 때 페이지 폴트(Page Fault) 발생
→ 해당 페이지를 디스크에서 물리 메모리로 가져와야 하는데
물리 메모리의 모든 프레임이 이미 사용중인 경우, OS는 현재 메모리에 있는 페이지 중 하나를 희생시켜 공간을 확보함 (Swap Out)
이 때 어떤 페이지를 희생시킬것인가를 결정하는 규칙이 페이지 교체 알고리즘
페이지 교체 알고리즘은 대체로 지역성의 원리에 기반하여 작동함
| 알고리즘 | 개념 |
|---|---|
| FIFO | 가장 오래된 페이지 제거 |
| LRU (Least Recently Used) | 가장 오랫동안 사용되지 않은 페이지 제거 |
| OPT (Optimal) | 앞으로 가장 늦게 참조될 페이지 제거 (이론적 최적) |
| Clock | LRU 근사 알고리즘 (효율성과 단순함의 절충) |