티스토리 뷰

운영체제

[운영체제] 세그멘테이션

Hani_Levenshtein 2021. 1. 15. 23:12

Paging은 프로세스를 물리적으로 일정한 크기의 Page로 나누고 메모리도 일정한 크기의 Frame으로 나눠서 Page를 Frame에 넣는 방식으로 메모리에 위치시키는 방식이며, Page Table을 통해 주소변환을 할 수 있습니다.

 

반면, 이번 포스팅의 주제인 Segmentation은 프로세스를 논리적으로 나눈 Segment를 메모리에 위치는 방식입니다.


Segmentation

Segmentation은 프로세스를 논리적으로 나눠 Segment의 크기가 가변적이므로 Frame의 크기도 일정하지 않습니다.

따라서 Segment를 Segment Table을 통해 메모리에 위치시키기 위해서 추가 요소가 필요합니다.

 

Paging에서는 Page Number에 맞는 Frame Number를 찾고 Offset을 고려해 물리 주소로 변환을 했습니다.

반면, Segmentation에서는 Segment Number와 Segment의 가변적인 크기를 나타내는 레지스터가 추가됩니다.

 

MMU가 논리주소를 받으면 Base Register에는 논리주소의 시작점에 대응하는 물리주소의 시작점이 담기고 Limit Register에는 Segment의 크기가 담깁니다.

두 레지스터가 구성한 범위가 메모리를 할당하는데 적합하다면 논리주소를 물리주소로 바꾸는데 성공합니다. 


Protection / Sharing

Segmentation에서도 Segment Table마다 r, w, x 비트를 만들어서 Segment에 대한 접근 권한을 부여합니다.

크기가 아닌 의미 단위로 Segment가 분리되기 때문에 접근 권한도 의미 단위로 부여되어 Paging보다 유리합니다.

code 공유 측면에서도 의미 단위로 code가 분리되기 때문에 Segmentation가 Paging보다 유리합니다.


보호와 공유 측면에서 Segmentation이 더 나아보이며 Paging의 문제였던 Internal Fragmentation도 막을 수 있습니다.

 

하지만 Segmentation에서는 Hole의 크기가 서로 다르다는 단점이 있습니다.

Paging에서는 막을 수 있었던 External Fragmentation을 Segmentation에서는 다시 문제가 됩니다.

 

따라서 Segmentation과 Paging은 각자 장단점이 존재하며, 혼용해서 쓰는 Paged Segmentation도 존재합니다.

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

[운영체제] 프레임 할당  (0) 2021.01.23
[운영체제] 가상 메모리  (0) 2021.01.23
[운영체제] 메모리와 페이징  (0) 2021.01.01
[운영체제] 교착상태  (0) 2020.12.26
[운영체제] 프로세스 동기화  (0) 2020.12.24
댓글