본문 바로가기

잡동사니

[study: OS] — ?. Segmentation

 

# 들어가기 전

가상메모리란, 실행중인 프로세스가 가상의 공간을 참조하여 마치 커다란 물리 메모리를 가지고 있는 것처럼 사용할 수 있도록 하는 것
(실제 메모리 주소가 아닌 가상의 메모리 주소를 주는것)

  • 가상메모리는 각 프로세스 당 메인메모리와 동일한 크기를 할당받는다.
  • 그 공간은 보조기억 장치(HDD, SSD) 이용
  • 메모리 관리장치놈에 의해 물리 주소로 변환
  • 유저가 모르게 메모리 맵핑 되어 가상메모리 활용

# Segmentation

  • 페이징과는 다르게 메모리를 서로다른 크기의 논리적인 단위인 Segment로 분할하고 메모리를 할당하여 물리주소를 논리주소로 변환 하는 것
  • 미리 분할 하는것이 아닌 메모리에 적재될 때 빈공간을 찾아 할당
  • 서로다른 크기를 가지는 논리적인 블록이 연속적인 공간에 배치 되는 것
  • 데이터, 힙, 스택 영역 등 각 영역을 Segment 라고 하며 영역별로 쪼개는 기술을 Segmentation 이라고 한다
  • 각 영역들의 기능, 권한, 크기가 다르기 때문에 분할하여 효율적인 메모리 관리가 가능하도록 한 것

# Segment Table

  • Segment의 시작주소(base)와 세그먼트의 길이(limit)가 담긴 테이블
  • 각각의 Segment를 offset 단위로 관리할 수 있다
  • 시작주소와 offset 값으로 실제 물리적 위치로 변환 가능

# 장단점?

  • 하나의 세그먼트 단위로 통제가 가능
  • 내부 단편화는 없지만 외부 단편화가 발생

내부 단편화

  • 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당 되어 메모리가 낭비되는 상황

외부 단편화

  • 메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리가 중간중간 존재하게 된다. 이때 중간중간 사용하지 않는 메모리가 존재해서 총 메모리는 충분하나 실제로 할당할 수 없는 상황

'잡동사니' 카테고리의 다른 글

Clean Agile #4 - 팀 실천 방법  (2) 2021.01.28
2020년 회고  (0) 2020.12.29
Clean Code #2 - 의미 있는 이름  (0) 2020.09.13
Clean Code #1 - 깨끗한 코드  (0) 2020.09.08
List Interface  (0) 2020.07.27