BuNa_
IT Story
BuNa_
전체 방문자
오늘
어제
  • 분류 전체보기 (117)
    • CS (14)
      • 운영체제 (8)
      • 네트워크 (0)
      • Design Pattern (1)
      • OOP (4)
    • 대외활동 (24)
      • 우아한테크코스 (14)
      • DND 동아리 (4)
      • UMC 동아리 (5)
      • 해커톤 (1)
    • Android (29)
      • MVVM (2)
      • 스터디 (11)
      • Compose (3)
      • Unit Test (1)
    • Project (5)
      • 어따세워 (5)
      • DnD 과외 서비스 (0)
    • Programming (11)
      • Kotlin (4)
      • 파이썬 (7)
    • Git (1)
    • 인공지능 (22)
    • 백준 (8)
    • 기타 (3)
      • IntelliJ (1)
      • 일상 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 안드로이드
  • 다이나믹 프로그래밍
  • 우테코 5기
  • ViewModel
  • 어따세워
  • Ai
  • 운영체제
  • 우테코 프리코스
  • 인공지능
  • Compose
  • 원시값 포장
  • k-means++
  • UMC
  • 우아한테크코스
  • External fragmentation
  • 셀레니움
  • 백준
  • 딥러닝
  • Android
  • 파이썬
  • Baekjoon
  • RecyclerView
  • 우테코
  • 객체지향 생활체조
  • 선형회귀
  • K-means
  • 인공지능 분류
  • 컴공선배
  • 외부 단편화
  • MVVM

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
BuNa_

IT Story

[운영체제] 비연속할당(Noncontiguous allocation) - 세그먼테이션(Segmentation)
CS/운영체제

[운영체제] 비연속할당(Noncontiguous allocation) - 세그먼테이션(Segmentation)

2023. 1. 6. 22:49

 

목차

  • 🤔  비연속할당(Noncontiguous allocation)이란?
  • 🧩  세그먼테이션(Segmentation)이란?
  • 🙉  세그먼트 테이블(Segment table)
  • 🙊  세그먼테이션(Segmentation) 주소 변환
  • 🙈  Segmentation의 문제점

 

🤔  비연속 할당(Noncontiguous allocation)이란?

기존에는 연속 할당(contiguous allocation) 기법을 사용하여 프로세스를 통째로 메모리에 적재하였습니다.

연속 할당 기법은 base address에 상대 주소인 logical address를 더해줌으로써 물리 주소를 간단하게 translation 할 수 있다는 장점이 있었습니다.

따라서 MMU를 단순화할 수 있었지만, 외부 단편화가 발생하여 메모리 공간을 효율적으로 사용하지 못 한다는 문제가 있었습니다.

 

그렇게 등장한 것이 바로 비연속 할당(noncontiguous allocation)입니다.

비연속 할당(noncontiguous allocation)은 하나의 큰 프로세스를 보다 작은 Hole에 할당할 수 없기 때문에 분산해서 메모리에 적재하자는 개념입니다.

분산하는 기준에 따라 명칭이 다른데, 크게 Segmentation과 Paging이라는 방법이 있습니다.

 

🧩  세그먼테이션(Segmentation)이란?

세그먼테이션(Segmentation)은 프로세스를 논리적 단위(Logical Unit)로 조각내어 메모리에 적재하는 기법입니다.

여기서 논리적 단위는 Segment이며, Segment는 프로세스를 이루고 있는 단위라고 생각할 수 있습니다.

 

'컴퓨터의 메모리 구조'

메모리 구조는 크게 Stack, Heap, Data(+bss), Code 영역으로 나뉘어집니다.

그래서 프로세스를 Stack Segment, Heap Segment, Data Segment, Code Segment 등으로 나눈다는 관점에서 접근할 수 있습니다.

 

Segmentation을 사용하면 프로세스를 분리할 수 있기 때문에, 프로세스를 통째로 메모리에 적재하려고 할 때보다 할당 가능한 Hole이 많이 존재한다는 장점을 갖습니다.

즉, 외부 단편화를 기존 방식에 비해 가능한 적게 발생시킬 수 있습니다.

 

 

🙉  세그먼트 테이블(Segment Table)

'Segment table'

Segment에는 Segment table이라고 하는 새로운 개념이 등장합니다.

이는 한 프로세스의 여러 Segment들에 대한 Base와 Limit 값을 포함하는 Entry를 갖습니다.

Base와 Limit은 각각 해당 Segment에 대한 시작 주소 값과 크기를 의미합니다.

 

또한, STBR(Segment Table Base Register), STLR(Segment Table Length Register)가 존재하는데, 해당 Register에는 각각 Segment table의 시작 주소와 Segment의 개수를 가지고 있습니다.

 

🙊  세그먼테이션(Segmentation) 주소 변환

'Segmentation의 address translation'

Segmentation을 사용하면 MMU는 기존과 다른 방식으로 주소 변환을 해야 합니다.

우선, logical address(논리 주소)는 Segment number와, Segment offset으로 나뉩니다.

위 그림에서 s가 Segment number, d가 Segment offset에 해당합니다.

Segment number는 여러 Segment를 구분하기 위한 값이며, Segment Offset은 해당 Segment의 몇 번째 메모리 번지에 위치하는지에 대한 값을 가지고 있습니다.

 

MMU는 주소 변환을 할 때, 논리 주소의 Segment number를 바탕으로 Segment table의 Entry를 찾습니다.

그리고 논리 주소의 Offset과 Entry의 Limit 값을 비교하는데, 만약 Offset이 Limit보다 큰 경우, 다른 Segment나 Process의 메모리 영역에 접근하는 문제가 발생하기 때문에 Memory protection fault를 발생시킵니다.

만약 문제가 없다면, Base + Offset을 통해 물리 주소로 변환을 마치게 됩니다.

 

Base와 Limit이라는 개념을 사용한다는 점에서 Contiguous allocation과 약간은 유사하다는 특징을 가지고 있습니다.

하지만, 프로세스를 논리적 단위로 나눈다는 점에서 확연한 차이가 있습니다.

 

🙈   Segmentation의 문제점

그럼에도 불구하고 외부 단편화(External Fragmentation)는 해결되지 않았습니다.

외부 단편화를 최소화하기 위한 임시방편일 뿐, Hole보다 큰 Segment가 존재하는 이상, 남은 메모리 공간의 합이 충분해도 적재하지 못한다는 것입니다.

이러한 문제점을 해결하기 위해 또 다른 비연속 할당 기법인 Paging이 등장합니다.

 

Paging을 간략히 설명하자면, 논리 주소 공간과 물리 주소 공간을 동일한 고정 크기로 잘게 나누어 할당하여 자투리 공간이 발생하지 않게끔 하는 방법입니다.

자세한 내용은 다음 포스팅에서 다루겠습니다.

 

 

 

 

github : https://github.com/tmdgh1592

 

tmdgh1592 - Overview

느리더라도 천천히..!! 😁. tmdgh1592 has 21 repositories available. Follow their code on GitHub.

github.com

 

 

저작자표시 비영리 변경금지 (새창열림)

'CS > 운영체제' 카테고리의 다른 글

[운영체제] Page table의 3가지 구조 - Hierarchical, Hashed, Inverted Page table  (2) 2023.02.08
[운영체제] 비연속할당(Noncontiguous allocation) - 페이징(Paging)  (0) 2023.01.10
[운영체제] Contiguous Allocation의 문제점 - External Fragmentation(외부단편화)  (1) 2023.01.02
[운영체제] Address Binding - Compile, Load, Execution time binding  (0) 2022.12.30
[운영체제] 식사하는 철학자들 문제 (Dining philosophers problem) - Deadlock, Starvation  (8) 2022.11.30
    'CS/운영체제' 카테고리의 다른 글
    • [운영체제] Page table의 3가지 구조 - Hierarchical, Hashed, Inverted Page table
    • [운영체제] 비연속할당(Noncontiguous allocation) - 페이징(Paging)
    • [운영체제] Contiguous Allocation의 문제점 - External Fragmentation(외부단편화)
    • [운영체제] Address Binding - Compile, Load, Execution time binding
    BuNa_
    BuNa_
    안드로이드 개발자를 향해 달리고 있는 공대생입니다! 🧑 Android, Kotlin, Java, Python 등 학습하고 있는 내용과 프로젝트를 주로 업로드하고 있습니다. 지적과 조언은 언제나 환영입니다!😊 github : https://github.com/tmdgh1592

    티스토리툴바