안녕하세요😊 코드카인 여러분!
컴퓨터 메모리는 마치 우리 집의 서랍과 같아요. 서랍을 어떻게 나누고 사용하는지에 따라 공간을 더 효율적으로 쓸 수 있겠죠? 오늘은 페이징과 세그멘테이션이라는 메모리 관리 기법에 대해 알아보려고 해요. 쉽고 재미있는 예시로 풀어볼 테니 끝까지 함께해 주세요!
📂 페이징: 서랍을 똑같이 나눠 쓰는 법
1. 페이징이란?
페이징(Paging)은 메모리를 동일한 크기의 블록으로 나눠서 관리하는 방법이에요. 이 블록을 프레임(Frame)이라고 하고, 프로그램이 사용하는 메모리는 페이지(Page)라고 부른답니다.
프레임과 페이지 크기는 동일하므로 프로그램이 사용하는 데이터가 메모리에 깔끔하게 들어가요.
2. 일상생활 속 페이징
마치 책장의 칸을 같은 크기로 나누어 책을 넣는 것 같아요. 칸마다 책 한 권씩만 들어갈 수 있는 거죠. 책이 잘라져 들어가도 상관없고, 칸이 남아도 그대로 둡니다. 하지만 이 방식에는 장단점이 있어요.
- 장점: 빈칸을 쉽게 활용할 수 있어요.
- 단점: 책이 잘려서 다른 칸에 들어가다 보니 페이지 테이블이라는 추가 관리 도구가 필요해요.
3. 예제 코드
#include <stdio.h>
#define PAGE_SIZE 4
int main() {
int memory[16]; // 총 16칸 메모리
for (int i = 0; i < 16; i++) {
memory[i] = i + 1; // 데이터 채우기
}
printf("Page 1: ");
for (int i = 0; i < PAGE_SIZE; i++) {
printf("%d ", memory[i]); // 1~4번 데이터 출력
}
return 0;
}
🗂️ 세그멘테이션: 다양한 크기의 서랍 만들기
1. 세그멘테이션이란?
세그멘테이션(Segmentation)은 메모리를 프로그램의 논리적 단위로 나누어 관리하는 방법이에요.
예를 들어, 프로그램의 코드, 데이터, 스택 등을 각각 세그먼트(Segment)로 분리하는 방식이죠.
2. 일상생활 속 세그멘테이션
서랍 크기가 달라도 괜찮은 맞춤형 서랍장을 떠올려 보세요. 큰 이불은 큰 칸에, 작은 양말은 작은 칸에 넣는 식이에요.
이 방법은 공간 활용이 뛰어나지만, 단편화라는 문제가 생길 수 있어요. 즉, 중간중간 자투리 공간이 남을 수 있다는 뜻이에요.
- 장점: 프로그램 구조를 반영해 효율적이에요.
- 단점: 자투리 공간 관리가 어려워요.
3. 예제 코드
#include <stdio.h>
typedef struct {
int base;
int limit;
} Segment;
int main() {
Segment code = {0, 100}; // 코드 세그먼트
Segment data = {100, 200}; // 데이터 세그먼트
Segment stack = {200, 300}; // 스택 세그먼트
printf("Code Segment: Base = %d, Limit = %d\n", code.base, code.limit);
printf("Data Segment: Base = %d, Limit = %d\n", data.base, data.limit);
printf("Stack Segment: Base = %d, Limit = %d\n", stack.base, stack.limit);
return 0;
}
🛠️ 페이징과 세그멘테이션, 무엇을 선택할까?
페이징의 경우
- 프로그램 크기와 무관하게 균일한 관리가 필요할 때 유리해요.
- 하지만 페이지 테이블 같은 추가적인 관리 도구가 필요합니다.
세그멘테이션의 경우
- 프로그램의 구조가 복잡하고 다양한 크기의 메모리를 요구할 때 적합해요.
- 그러나 단편화와 관리의 어려움이 단점이 될 수 있어요.
😊 마무리하며..
오늘은 페이징과 세그멘테이션의 기본 개념과 차이점을 알아봤어요.
메모리를 어떻게 나눠 쓰느냐에 따라 성능이 크게 달라진다는 점, 놀랍지 않나요?
이제 여러분도 메모리 관리의 고수가 될 수 있어요!😊
다음에는 더 재미있고 유익한 내용을 들고 올게요.
"코드카인 - 중독성 있는 코딩 여정"과 함께, 오늘도 코딩의 즐거움을 만끽하세요! ✨
'운영체제 > 메모리 관리' 카테고리의 다른 글
[운영체제] 페이지 교체 알고리즘 비교: FIFO, LRU, LFU 차이점과 동작 원리 (0) | 2024.12.18 |
---|---|
[운영체제] 프로세스 구성 요소 완벽 가이드: 메모리 구조와 역할 쉽게 이해하기 (0) | 2024.12.18 |