운영체제/메모리 관리

효율적인 메모리 활용법? 페이징과 세그멘테이션으로 배우는 메모리 세계 - 코드카인 티스토리

CodeCaine Explorer 2024. 10. 26. 16:41
728x90
반응형
SMALL

안녕하세요😊 코드카인 여러분!

컴퓨터 메모리는 마치 우리 집의 서랍과 같아요. 서랍을 어떻게 나누고 사용하는지에 따라 공간을 더 효율적으로 쓸 수 있겠죠? 오늘은 페이징세그멘테이션이라는 메모리 관리 기법에 대해 알아보려고 해요. 쉽고 재미있는 예시로 풀어볼 테니 끝까지 함께해 주세요!


📂 페이징: 서랍을 똑같이 나눠 쓰는 법

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;
}

🛠️ 페이징과 세그멘테이션, 무엇을 선택할까?

페이징의 경우

  • 프로그램 크기와 무관하게 균일한 관리가 필요할 때 유리해요.
  • 하지만 페이지 테이블 같은 추가적인 관리 도구가 필요합니다.

세그멘테이션의 경우

  • 프로그램의 구조가 복잡하고 다양한 크기의 메모리를 요구할 때 적합해요.
  • 그러나 단편화와 관리의 어려움이 단점이 될 수 있어요.

😊 마무리하며..

오늘은 페이징과 세그멘테이션의 기본 개념과 차이점을 알아봤어요.
메모리를 어떻게 나눠 쓰느냐에 따라 성능이 크게 달라진다는 점, 놀랍지 않나요?
이제 여러분도 메모리 관리의 고수가 될 수 있어요!😊

다음에는 더 재미있고 유익한 내용을 들고 올게요.
"코드카인 - 중독성 있는 코딩 여정"과 함께, 오늘도 코딩의 즐거움을 만끽하세요! ✨

728x90
반응형
SMALL