CS/Operating System

17. Paged segmentation

공부중인학생 2024. 1. 23. 15:20

페이징은 fragmentation 문제를 해결할 수 있지만 page table의 오버헤드가 굉장히 커진다는 점과 segmentation과 유사하게 메모리를 access 할 때 추가적인 access가 필요하여 성능이 저하되는 문제가 있었습니다. 페이징만 적용한다면 프로세스 당 하나의 세그먼트밖에 없는 상태로 code sharing과 맞춤 protection이 불가능합니다. 

 

 

 

paged segmentation은 조금 복잡합니다. segmentation을 기반으로 하면서 paging을 더한 기법으로 프로세스가 여러 개의 세그먼트를 가지며 각각에 세그먼트에 페이징을 적용한다고 생각하시면 됩니다. 그래서 프로세스가 address translation을 하려면 세그먼트마다 별도의 segment table이 필요합니다. 

 

로지컬 어드레스의 형식은 제일 상위 bit에 세그먼트 넘버, 중간 bit에는 페이지 넘버, 마지막 부분에는 페이지의 offset이 됩니다. (address translation이 기존보다 더 복잡해지게 됩니다.)

 

 

 

paged segmentation의 구조입니다. 이전보다 MMU의 내부가 더 복잡해진 것을 알 수 있습니다. unmapped area에 segment table과 page table이 함께 있습니다. MMU가 address translation을 할려면 CPU가 issue 한 로지컬 어드레스를 받아 상위 bit으로부터 세그먼트 넘버를 획득하고 segment table base register에 적힌 segment table의 시작 주소로 가서 이 값을 인덱스로 segment table를 검색을 합니다. 그 뒤 베이스, 바운드 값을 가지고 옵니다. (베이스 값에는 세그먼트를 표현하는 page table의 시작 주소가 담겨 있습니다.)

 

그다음 로지컬 어드레스의 중간 bit에서 page number를 가져온 다음 이전에 얻은 page table 시작 주소를 통해 검색하여 page table entry를 얻습니다. 여기서 얻은 page frame number와 page offset 값을 concat 하면 피지컬 어드레스를 얻게 됩니다. 

 

정리하자면 segment number와 page number가 physical frame number로 매핑되는 것이 paged segmentation에서 MMU가 하는 역할입니다. OS는 프로세스의 컨텍스트가 바뀌면 새 프로세스의 segment table address를 segment table base register에 적어줘야 합니다.

 

 

 

paged segmentation의 동작을 알아봤는데 address translation 과정에서 매핑 정보가 너무 많습니다. 이는 로지컬 어드레스 스페이스를 구현하기 위한 컨텍스트의 양이 커진다고 생각할 수 있습니다. (table들이 많아졌으니 컨택스트의 크기가 커진 것)

 

기존 페이징은 피지컬 메모리에 연속적인 page table이 존재했지만 paged segmentation은 세그먼트 단위로 나눠져 크기가 작아졌고 나눠서 저장이 가능하다는 장점도 있습니다. 하지만 segmemtation과 paging 기법이 합쳐지면서 기존에 있던 단점들이 더 크게 부각됩니다.

 

이전에 address traslation을 할 때 table에 접근해야하기 때문에 추가적인 메모리 레퍼런스가 필요했었습니다. paged segmentaiton에서는 segment table과 page table에 접근하기 때문에 메모리 액세스 성능이 더 나빠지게 됩니다. 

 

 

\

paged segmentation은 기존 paging 기법을 더 발전한 방법으로 보이지만 modern OS의 경우 paged segmentation을 지원하지 않고 paging만을 지원합니다. segmentation의 장점인 read-only 세그먼트 프로세스 간의 공유나 read-only, read-write 세그먼트에 대한 각기 다른 protection policy를 사용할 수 없어 보이지만 페이지 단위로 sharing을 진행하기 때문에 문제가 없습니다.

 

코드 세그먼트에 속한 모든 페이지를 read-only로 설정하는 방식으로 생각하시면 됩니다. paged segmenation의 단점은 한 가지가 더 있는데 hardware dependent하다는 것입니다. 프로세서의 아키텍처에 굉장히 영향을 많이 받습니다. 대신에 세그먼트를 software data structure를 통해서 지원합니다. 이전에 malloc에 대해 공부했을 때 리눅스는 사이즈가 크면 힙이 아닌 별도의 세그먼트를 만들어 제공한다고 했습니다.

 

 

'CS > Operating System' 카테고리의 다른 글

19. Memory Management Mechanism  (1) 2024.01.25
18. Enhancing Mechanisms  (1) 2024.01.24
16. Segmentation  (1) 2024.01.10
15. Dynamic allocation in Linux  (0) 2023.12.24
14. GNU Linker  (1) 2023.12.18