[Memory] segmentation

2023. 5. 11. 16:56·CS/OS
728x90

Segmentation이란?

Segmentation은 Paging과 달리 프로세스가 할당 받은 메모리 공간을 논리적 의미 단위인 Segment로 나눠서 연속되지 않은 물리 메모리 공간에 할당될 수 있도록 하는 메모리 관리 기법이다.

 

Paging 기법은 사전에 미리 메모리를 나누어 두는 기법이라고 한다면 Segementation은 프로세스가 할당 받은 메모리 공간 만큼 메모리를 나누어 주는 기법이라고 보면 된다.

즉, 프로세스가 필요로 하는 메모리 작업 공간 만큼의 크기를 제공한다. 맞춤형 이라고 보면 된다.
Segmentation은 코드, 데이터, 힙, 스택 등의 기능 단위로 segment(단위)를 정의하는 경우가 많으며 주소 바인딩을 위해 모든 프로세스가 각각의 주소 변환을 위한 segment table을 갖게 된다.

 

Segment Table

# base limit
0 4000 200
1 1000 300

이렇게 테이블이 있을 때 base가 물리적 메모리의 주소를 말하고 limit는 메모리의 크기를 말 한다고 보면 된다.

 

segmentation의 문제

Paging 기법에서 내부 단편화의 문제가 있듯이 Segmentation도 단편화 문제가 있다.

Segmentation은 쉽게 말해서 맞춤형 메모리를 제공한다고 했다. 하지만 이 맞춤형 메모리가 독이 되는 경우인데 자세한 과정은 아래와 같다.

1. 메모리의 총 공간은 10이라고 가정한다.
2. 프로세스 A와 B가 각각 메모리 5씩 차지해서 메모리 공간을 풀 사용중이다.
3. 프로세스 A가 작업을 마치고 나가서 5의 메모리 공간이 남게 되었다.
4. 이번에는 프로세스 C가 들어와서 메모리 공간 4를 사용하기 시작했다.
5. 지금 상황을 보면 프로세스 B가 메모리 5만큼 사용 중이고 프로세스 C가 4만큼 사용중이기 때문에 남은 메모리 공간은 1이 된다.
6. 이때 갑자기 프로세스 D가 2만큼의 메모리 공간 사용을 원한다 하지만 남은 공간은 1이다.
7. 남는 메모리 공간이 있음에도 들어오려는 프로세스의 크기가 커서 사용되지 못 하는 낭비가 발생하게 된다.
8. 이런 낭비를 외부 단편화라고 한다.

 

Paging과 Segmentation 차이는?

Paging은 크기 단위로 나누고 Segmentation은 기능 단위로 물리 메모리에 할당한다. 또, Paging은 내부 단편화가 발생할 수 있고, Segmentation은 외부 단편화 문제가 발생할 수 있다.

 

Paged Segmentation

Segmentation을 기본으로 하면서 Page 크기로 다시 나눠 물리 메모리에 할당하는 메모리 관리 기법이다. 프로그램을 의미 단위의 Segment로 나누고 개별 Segment의 크기를 Page의 배수가 되도록 하는 방법으로 외부 단편화를 해결하고 Segment 단위로 프로세스간 공유와 접근 권한 보호가 이뤄지면서 Paging의 단점을 해결한 방법이다.

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)
'CS/OS' 카테고리의 다른 글
  • 동기 VS 비동기, 블로킹 VS 논블로킹
  • [Memory] paging (메모리 관리 기법, 메모리 단편화)
  • [Process & Thread] 교착상태(Deadlock)
  • [Process & Thread] Multi Process, Multi Thread 동기화 (Mutex, Semaphore)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (461)
      • AI (1)
      • Infra (13)
        • Architecture (2)
        • Kubernetes (5)
        • Docker (3)
        • Cloud (1)
        • DevOps (1)
        • Monitoring (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Spring (19)
      • JPA (4)
      • Language (9)
        • Kotlin (1)
        • Java (8)
      • Git (4)
      • DB (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그리디
    파이썬
    DP
    다익스트라
    LIS
    구간합
    재귀
    이분탐색
    자료구조
    덱
    트리
    동적계획법
    BFS
    최대공약수
    백준
    플로이드워셜
    정렬
    구현
    최단거리
    최소신장트리
    스택
    알고리즘
    Algorithm
    월간코드챌린지
    프로그래머스
    힙
    조합
    DFS
    큐
    그래프
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[Memory] segmentation
상단으로

티스토리툴바