이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;)
1) CPU가 segment table의 번호인 s와, s에서 얼마나 떨어져 있는지 나타내는 offset값 d를 전달. segment table에는 물리적 메모리의 시작으로부터 얼마나 떨어져 있는지 나타내는 base와, 그 엔트리의 크기인 limit 값이 저장되어 있음.
STBR(Segment Table Base Register): segment table이 메모리의 어디에 위치해있는지 나타냄(시작 위치)
STLR(Segment Table Length Regist): segment table의 전체 길이(크기)인 s의 값.
segment는 실제적으로 나눠지는 수가 많지 않음. table을 위한 memory 낭비는 segment가 paging에 비해 훨씬 적음
0번 segment는 process1과 process2가 공유하는 코드. shared segment는 다른 프로세스 내에서도 동일한 logical address를 가져야 함. 그래서 P1과 P2 모두 editor는 0번 segment
segment 하나가 여러 개의 page로 구성. 때문에 메모리에 올라갈 때 page 단위로 잘려서 올라감. segment table entry가 물리적 메모리에서 segment가 어디서 시작하는지 나타내는 base address가 아니라 segment를 구성하는 page의 위치를 나타내는 page table의 base address를 가지고 있음. 이를 통해 segment의 크기가 각각 달라 hole이 발생하는 문제를 해결.
어떤 segment를 read-only로 설정할 것인지 등등의 의미단위 작업은 segment table에서 미리 설정.
1) logical address에서 s를 통해 setment table 내의 몇 번째 segment entry를 나타내는지 확인
2) 그렇게 알게 된 segment table의 s에서 segment 내부의 page의 시작 위치인 page-table base를 확인
3) 한편, 물리적 메모리에서 해당 segment가 어디에서 시작하는지 나타내는 offset값 d와 s를 비교하여 error를 검출
4) 3번에서 이상이 없다면 offset값 d를 나눠서 page의 page-table에서 몇 번째 page entry인지 나타내는 p값과 page의 어디에서 시작되는지 나타내는 offset 값 d'를 확인
5) 1~4번에서 얻은 값을 통해 최종적으로 논리적 주소를 물리적 메모리 주소로 변환
이 모든 작업은 MMU라는 하드웨어와 CPU가 해줘야 하는 일. 여기서 운영체제가 하는 일은 없음. 운영체제는 IO Device에 접근할 때. 하지만 메모리 접근 시에는 하드웨어가 작업.
'Information Technology > OS' 카테고리의 다른 글
[운영체제] Virtual memory(2) (0) | 2020.03.10 |
---|---|
[운영체제] Virtual memory(1) (0) | 2020.03.05 |
[운영체제] Memory management(3) (0) | 2020.02.29 |
[운영체제] Memory management(2) (0) | 2020.02.26 |
[알고리즘] Memory management(1) (0) | 2020.02.24 |