메모리 관리 기법 (예: 페이징, 세그멘테이션)
메모리 관리 기법은 운영체제가 프로그램에 메모리를 할당하고, 효율적으로 사용하는 방법입니다. 이는 시스템 성능을 높이고 프로그램이 원활하게 실행되도록 돕기 위해 매우 중요합니다. 주요 기법으로는 페이징과 세그멘테이션이 있습니다.
1. 페이징 (Paging)
정의: 프로그램의 메모리 공간을 일정한 크기의 블록, 즉 페이지(Page)로 나누고, 물리 메모리(RAM)도 같은 크기의 블록, 즉 프레임(Frame)으로 나누어 매칭하는 방법입니다.
쉽게 말하면: 책을 일정한 크기의 페이지로 나눠서 관리하는 것과 비슷해요. 각 페이지를 책장에 꽂아두듯이, 프로그램의 각 페이지를 메모리의 빈 공간에 끼워 넣는 겁니다.
작동 방식:
- 논리적 주소(Logical Address): 프로그램이 메모리를 참조할 때 사용하는 주소입니다. 프로그램 입장에서는 메모리가 한 덩어리로 보이지만, 실제로는 여러 조각으로 나뉘어 있을 수 있습니다.
- 물리적 주소(Physical Address): 실제 메모리(RAM)에서 해당 데이터를 위치시키는 주소입니다.
- 페이지는 논리 주소에서 페이지 테이블(Page Table)을 통해 물리 주소로 변환됩니다.
- 페이지 테이블은 페이지 번호와 물리 메모리의 프레임 번호를 매칭하는 역할을 합니다.
- 쉽게 말하면: 페이지 테이블은 도서관에서 책 페이지를 찾기 위한 색인과 같은 역할을 해요.
장점:
메모리 단편화(Fragmentation) 감소
: 메모리 공간이 균일한 크기로 나뉘기 때문에, 작은 공간을 자주 사용하거나 해제할 때 발생하는
외부 단편화
를 줄일 수 있습니다.
- 쉽게 말하면: 책장을 일정한 크기의 칸으로 나눠서 책을 꽂으면, 공간이 남는 부분이 적어져서 깔끔하게 정리할 수 있는 것과 비슷해요.
효율적인 메모리 사용: 페이지를 필요한 만큼만 물리 메모리에 올릴 수 있어서 메모리를 낭비하지 않습니다.
단점:
페이지 테이블 관리 비용
: 페이지 테이블이 커질 수 있고, 이를 관리하는 데 추가 메모리가 필요합니다.
- 쉽게 말하면: 책 색인이 너무 길어지면 그걸 보관할 공간이 따로 필요해지는 것과 같아요.
페이지 교체 비용: 메모리가 꽉 차면 어떤 페이지를 교체할지 결정하는 데 시간이 걸릴 수 있습니다.
2. 세그멘테이션 (Segmentation)
정의: 프로그램을 의미 있는 단위인 세그먼트(Segment)로 나누는 방법입니다. 예를 들어, 코드, 데이터, 스택 등을 각각의 세그먼트로 나누어 관리합니다.
쉽게 말하면: 책을 주제별로 나눠서 정리하는 것과 비슷해요. 예를 들어, 역사책, 과학책, 문학책 등으로 나누고 각 책을 정리하는 것처럼요.
작동 방식:
논리적 주소
는 세그먼트 번호와 세그먼트 내의 오프셋(offset)으로 나뉩니다.
- 세그먼트 번호: 프로그램에서 어떤 부분(세그먼트)을 사용하는지 나타냅니다.
- 오프셋: 해당 세그먼트 내에서의 위치를 나타냅니다.
세그먼트 테이블
을 통해 논리 주소를 물리 주소로 변환합니다.
- 쉽게 말하면: 세그먼트 테이블은 주제별 책장의 위치를 기록해 둔 지도와 같아요.
장점:
사용자 관점에 친화적
: 프로그램을 의미 있는 단위로 나누기 때문에, 개발자가 프로그램의 구조를 이해하고 관리하기 쉽습니다.
- 쉽게 말하면: 주제별로 책을 정리하면, 필요한 책을 찾기가 쉬운 것처럼요.
외부 단편화 문제 해결: 각 세그먼트가 서로 독립적인 크기를 가지므로, 필요한 만큼만 메모리를 사용할 수 있습니다.
단점:
내부 단편화 발생 가능
: 각 세그먼트의 끝부분에서 남는 공간이 발생할 수 있습니다.
- 쉽게 말하면: 책 한 권의 끝에 몇 장의 빈 페이지가 남는 것처럼요.
세그먼트 테이블 관리: 세그먼트 테이블도 별도로 관리해야 하며, 메모리를 추가로 사용하게 됩니다.
페이징과 세그멘테이션의 비교
구분 | 페이징 (Paging) | 세그멘테이션 (Segmentation) |
---|---|---|
기준 | 일정한 크기로 나눈 페이지 | 의미 있는 단위로 나눈 세그먼트 |
주소 구성 | 페이지 번호 + 오프셋 | 세그먼트 번호 + 오프셋 |
메모리 단편화 | 외부 단편화 없음, 내부 단편화 가능 | 외부 단편화 발생 가능, 내부 단편화 적음 |
관리 방식 | 페이지 테이블을 통해 물리 주소 매핑 | 세그먼트 테이블을 통해 물리 주소 매핑 |
사용자 관점 | 시스템 친화적 | 사용자 및 개발자 친화적 |
적합한 경우 | 단순한 메모리 관리가 필요한 경우 | 프로그램의 구조가 복잡하고, 다양한 크기의 메모리 할당이 필요한 경우 |
쉽게 요약
- 페이징: 메모리를 일정한 크기의 조각으로 나누어 관리하는 방식입니다. 모든 페이지가 같은 크기여서, 메모리 낭비가 적고 관리가 간편해요.
- 세그멘테이션: 프로그램의 구조에 맞춰서 다양한 크기의 조각으로 메모리를 나누는 방식입니다. 개발자가 원하는 대로 메모리를 나눌 수 있어서 관리하기 쉽지만, 조각의 크기가 달라서 공간이 낭비될 수 있어요.
'운영체제' 카테고리의 다른 글
가상 메모리(Virtual Memory)의 개념과 필요성 (0) | 2024.10.26 |
---|---|
컨텍스트 스위칭(Context Switching)의 정의와 비용 (1) | 2024.10.26 |
페이지 교체 알고리즘(예: LRU, FIFO, LFU)의 설명 (1) | 2024.10.26 |
데드락(Deadlock)의 개념과 해결 방법 (1) | 2024.10.26 |
멀티스레딩과 멀티프로세싱 차이점 (1) | 2024.10.26 |