Operating System — Memory Management
OS가 한정된 물리 메모리를 여러 프로세스에게 어떻게 나누는지를 다루는 페이지다. Fixed partition, variable partition, virtual memory 순으로 어떤 종류의 단편화를 감수하고 무엇을 얻는지를 정리한다.
메모리 관리의 목표
OS 메모리 관리는 세 가지를 목표로 한다.[1]
- 프로세스 간 메모리 격리 (Protection)
- 한정된 자원의 할당 최적화
- 편리한 추상화 제공 (각 프로세스에 연속된 주소 공간처럼 보이게)
Multiprogramming(여러 프로세스를 동시에 메모리에 적재하는 것)은 각 프로세스가 서로 다른 크기·연속 공간을 요구한다는 점에서 다음 요구사항을 낳는다.[2]
- Protection (프로세스끼리 메모리 침범 차단)
- Fast translation (가상 → 물리 주소 변환 속도)
- Fast context switching
메모리 할당 기법 비교
| 기법 | 설명 | 장점 | 단점 |
|---|---|---|---|
| Fixed partitions | 물리 메모리를 고정 크기 파티션으로 분할[3] | 구현 단순, context switching 빠름[3:1] | 내부 단편화 (partition 보다 작은 프로세스가 들어가 낭비), 크기 고정으로 유연성 낮음[3:2] |
| Variable partitions | 프로세스 필요 크기만큼 가변 파티션 할당, 사용 후 반환[4] | 내부 단편화 없음[4:1] | 외부 단편화 (작은 hole들이 흩어져 큰 할당 불가) — 해결: 압축(compaction) / 페이징 / 세그멘테이션[4:2] |
| Overlays | 프로그램 일부만 메모리에 적재해 실행[5] | 메모리 제한 시 큰 프로그램 실행 가능[5:1] | 구현 복잡, 운영체제의 특별한 지원이 필요하지 않음[5:2] (수동 관리라는 점은 이 page의 해석) |
| Swapping | 프로세스 전체를 메모리↔백업 스토리지 이동[6] | 여러 프로세스 동시 실행[6:1] | 전송 시간 큼, I/O 대기 중인 프로세스는 swap 금지[6:2] |
| Virtual Memory | 가상 주소 공간을 물리와 분리, 필요한 페이지만 적재[7] | 물리 메모리보다 큰 공간 제공, 프로세스 주소 공간 격리[7:1] | 성능 저하 가능, 페이지 테이블 유지 시간/공간 오버헤드[8] |
발전 방향: 어떤 단편화를 감수할 것인가
OS 메모리 관리의 발전은 어떤 단편화를 감수할 것인가의 선택 연속이라고 볼 수 있다. Fixed partitions는 내부 단편화를 감수하고 단순함을 얻고, Variable partitions는 외부 단편화를 감수하고 유연함을 얻는다. Virtual Memory는 두 단편화를 페이지/세그멘테이션으로 회피하되, 페이지 테이블이라는 새로운 overhead를 도입한다. 따라서 "최적의 메모리 관리 기법"에 정답이 하나 있는 것이 아니라, 하드웨어 지원(MMU/TLB), 워크로드, 성능 요구사항에 따라 선택이 달라진다고 볼 수 있다.[9]
이 페이지가 다루는 범위
- 이 source는 memory allocation, swapping, virtual memory의 개념을 다룬다.
- File system, page-replacement algorithm, 특정 TLB/MMU 구현은 별도 source가 들어오기 전까지 이 페이지의 주장 범위가 아니다.
흔히 놓치는 지점
- Variable partition에서 외부 단편화를 방치하면 큰 프로세스 적재가 실패할 수 있다.
- I/O 대기 프로세스를 swap해버리면 I/O 완료 신호가 도착하지 못할 수 있다.
- Overlay를 현대 시스템에서 굳이 쓰려는 경우가 있다 — 가상 메모리가 더 우위에 있다.
관련
- Abstraction Cost Tradeoff: 가상 메모리가 단순한 주소 공간 추상화를 제공하는 대신 페이지 테이블/TLB overhead를 도입하는 사례로 연결된다.
- Separation of Concerns across Layers: OS가 프로세스 주소 공간을 분리해 protection과 독립 실행을 제공하는 계층 분리 사례다.
- Virtualization and Hypervisors: 이 페이지의 가상 주소 → 물리 주소 변환 위에, 가상화 환경에서는 게스트 물리 주소 → 호스트 물리 주소 변환이 한 단계 더 붙는다.
- 후속 source로 scheduling, deadlock, file system 세부를 다루는 concept이 추가될 수 있다.
출처
테스트 질문
- Fixed partitions와 Variable partitions의 단편화 종류 차이는 무엇인가?
- 가상 메모리가 multiprogramming을 더 잘 지원하는 이유는 무엇인가?
- Swapping이 I/O 대기 프로세스에 적용되면 안 되는 이유는 무엇인가?
- Virtual memory가 fixed/variable partition과 비교해 제공하는 추상화와 비용은 무엇인가?
뭔가 나올거같은 개념 정리.md — "메모리 관리 목표: 프로세스 간의 메모리 격리 / 한정된 자원의 할당의 최적화 / 편리한 추상화 제공" ↩︎
뭔가 나올거같은 개념 정리.md — "Multiprogramming: 하나의 메모리 공간에 여러 프로세스, 프로세스마다 다른 사이즈, 연속적인 공간 요구", "Multiprogramming 요구사항: Protection / Fast translation / Fast context switching" ↩︎
뭔가 나올거같은 개념 정리.md — "고정 분할: 물리적 메모리를 고정된 크기의 여러 파티션으로 나누는 메모리 관리 기법", "장점으로는 구현이 쉽고, 컨텍스트 스위칭이 빠르다는 점이 있지만, 내부 단편화 문제가 있고 파티션 크기가 고정되어 유연성이 떨어집니다" ↩︎ ↩︎ ↩︎
뭔가 나올거같은 개념 정리.md — "가변 분할: 물리적 메모리를 가변 크기의 여러 파티션으로 나누는 메모리 관리 기법 ... 내부 단편화를 줄입니다", "장점으로는 내부 단편화가 없다는 점이 있지만, 외부 단편화가 발생할 수 있습니다. 외부 단편화를 해결하기 위해 압축, 페이징, 세그멘테이션 기법이 사용됩니다" ↩︎ ↩︎ ↩︎
뭔가 나올거같은 개념 정리.md — (L63) "프로그램의 일부분만 메모리에 적재하여 실행하는 기법 ... 메모리가 제한된 시스템에서 큰 프로그램을 실행할 수 있게 합니다", (L67) "구현이 복잡하고 운영 체제의 특별한 지원이 필요하지 않습니다" ↩︎ ↩︎ ↩︎
뭔가 나올거같은 개념 정리.md — "스와핑: 실행 중인 프로세스를 메모리에서 백업 스토리지로 이동시키고, 필요 시 다시 메모리로 불러오는 기법", "전송 시간이 많이 소요될 수 있고, I/O 대기 중인 프로세스를 스와핑하면 안 된다는 단점이 있습니다" ↩︎ ↩︎ ↩︎
뭔가 나올거같은 개념 정리.md — "가상 메모리: 실제 물리적 메모리 크기에 구애받지 않고, 큰 연속적 메모리 공간을 프로세스에 제공 ... 필요한 데이터만 메모리에 로드", "사용자 논리 메모리를 물리 메모리와 분리하여 큰 메모리 공간을 제공하고, 여러 프로그램을 동시에 실행할 수 있습니다" ↩︎ ↩︎
뭔가 나올거같은 개념 정리.md — "가상 메모리의 단점: 성능이 저하될 수 있으며, 페이징 테이블을 유지하는 데 시간적, 공간적 오버헤드가 발생할 수 있습니다" ↩︎
출처 매핑 미확인 — "어떤 단편화를 감수할 것인가의 선택 연속"이라는 프레이밍과 "정답이 하나가 아니라 하드웨어 지원·워크로드·성능 요구사항에 따라 선택이 달라진다"는 종합은 source 개별 사실을 엮은 Wiki 차원의 해석이며 source에 이 문장 그대로는 없다. ↩︎