Operating System — Memory Management

OS가 한정된 물리 메모리를 여러 프로세스에게 어떻게 나누는지를 다루는 페이지다. Fixed partition, variable partition, virtual memory 순으로 어떤 종류의 단편화를 감수하고 무엇을 얻는지를 정리한다.

메모리 관리의 목표

OS 메모리 관리는 세 가지를 목표로 한다.[1]

  1. 프로세스 간 메모리 격리 (Protection)
  2. 한정된 자원의 할당 최적화
  3. 편리한 추상화 제공 (각 프로세스에 연속된 주소 공간처럼 보이게)

Multiprogramming(여러 프로세스를 동시에 메모리에 적재하는 것)은 각 프로세스가 서로 다른 크기·연속 공간을 요구한다는 점에서 다음 요구사항을 낳는다.[2]

메모리 할당 기법 비교

기법 설명 장점 단점
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]

이 페이지가 다루는 범위

흔히 놓치는 지점

관련

출처

테스트 질문


  1. 뭔가 나올거같은 개념 정리.md — "메모리 관리 목표: 프로세스 간의 메모리 격리 / 한정된 자원의 할당의 최적화 / 편리한 추상화 제공" ↩︎

  2. 뭔가 나올거같은 개념 정리.md — "Multiprogramming: 하나의 메모리 공간에 여러 프로세스, 프로세스마다 다른 사이즈, 연속적인 공간 요구", "Multiprogramming 요구사항: Protection / Fast translation / Fast context switching" ↩︎

  3. 뭔가 나올거같은 개념 정리.md — "고정 분할: 물리적 메모리를 고정된 크기의 여러 파티션으로 나누는 메모리 관리 기법", "장점으로는 구현이 쉽고, 컨텍스트 스위칭이 빠르다는 점이 있지만, 내부 단편화 문제가 있고 파티션 크기가 고정되어 유연성이 떨어집니다" ↩︎ ↩︎ ↩︎

  4. 뭔가 나올거같은 개념 정리.md — "가변 분할: 물리적 메모리를 가변 크기의 여러 파티션으로 나누는 메모리 관리 기법 ... 내부 단편화를 줄입니다", "장점으로는 내부 단편화가 없다는 점이 있지만, 외부 단편화가 발생할 수 있습니다. 외부 단편화를 해결하기 위해 압축, 페이징, 세그멘테이션 기법이 사용됩니다" ↩︎ ↩︎ ↩︎

  5. 뭔가 나올거같은 개념 정리.md — (L63) "프로그램의 일부분만 메모리에 적재하여 실행하는 기법 ... 메모리가 제한된 시스템에서 큰 프로그램을 실행할 수 있게 합니다", (L67) "구현이 복잡하고 운영 체제의 특별한 지원이 필요하지 않습니다" ↩︎ ↩︎ ↩︎

  6. 뭔가 나올거같은 개념 정리.md — "스와핑: 실행 중인 프로세스를 메모리에서 백업 스토리지로 이동시키고, 필요 시 다시 메모리로 불러오는 기법", "전송 시간이 많이 소요될 수 있고, I/O 대기 중인 프로세스를 스와핑하면 안 된다는 단점이 있습니다" ↩︎ ↩︎ ↩︎

  7. 뭔가 나올거같은 개념 정리.md — "가상 메모리: 실제 물리적 메모리 크기에 구애받지 않고, 큰 연속적 메모리 공간을 프로세스에 제공 ... 필요한 데이터만 메모리에 로드", "사용자 논리 메모리를 물리 메모리와 분리하여 큰 메모리 공간을 제공하고, 여러 프로그램을 동시에 실행할 수 있습니다" ↩︎ ↩︎

  8. 뭔가 나올거같은 개념 정리.md — "가상 메모리의 단점: 성능이 저하될 수 있으며, 페이징 테이블을 유지하는 데 시간적, 공간적 오버헤드가 발생할 수 있습니다" ↩︎

  9. 출처 매핑 미확인 — "어떤 단편화를 감수할 것인가의 선택 연속"이라는 프레이밍과 "정답이 하나가 아니라 하드웨어 지원·워크로드·성능 요구사항에 따라 선택이 달라진다"는 종합은 source 개별 사실을 엮은 Wiki 차원의 해석이며 source에 이 문장 그대로는 없다. ↩︎