[OS] Segmentation

BaeRonui·2022년 3월 4일
0

OS

목록 보기
12/14
post-custom-banner

1. 서론

앞에서 다룬 Paging의 기법으로는 Virtual Memory를 같은 크기로 분할하여 Internal Fragmentation을 극복하지 못하였다. Segmentation은 같은 크기로 분할을 하였기에 문제가 생기므로, Virtual Memory를 다른 크기로 분할해보자는 아이디어에서 부터 시작한다. 그렇기에, Segmentation은 Virtual Memory를 유동적인 크기로 분리하기위해 Segment라는 논리적인 단위로 분할을 하고, Memory를 할당하여 주소 변환을 진행한다.

Segmentation

Segmentation은 Virtual Memory를 유동적인 크기로 분할한다. 이왕에 유동적인 크기로 배정하자고 하였으니, User 관점에서 관리하기 쉽도록 분리를 한다. 즉, Stack Segment, Data Segment, Code Segment 등과 같은 커다란 조각으로 논리주소를 분할한다.
동작 방법은 Paging과 유사하다. segment number을 기반으로, segment table을 참조하여 주소를 변환한다. 이때, Segment의 크기는 유동적이기에, Memory safety를 위해서 segment의 크기를 segment table에 저장을 한다. 이후, offset의 크기가 limit보다 크다면, addressing error 를 내뿜는다.

권한

Segmentation Table에는 r,w,x 권한이 저장되어 있기에, 사용 권한을 확인하고 권한이 없으면 trap을 발동한다.

한계점

Segmentation은 유동적으로 memory를 할당 받음으로서 Internal Fragmentation의 문제를 해결하였다. 하지만, External Fragmentation의 문제가 다시 생겨났다는 한계점이 있다.

profile
iOS / Swift 였던것 이젠 BE
post-custom-banner

0개의 댓글