본문 바로가기

Information Technology/OS

[운영체제] Memory management(3)

이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;)

 


TLB를 통해 페이지 테이블 접근에 필요한 속도를 효과적으로 줄일 수 있기 때문에 다단계 페이징을 사용해도 실제로 페이지 테이블에 접근하는 데 소요되는 시간이 엄청 크지는 않음.


페이지 테이블-> 사용 가능한 메모리의 크기만큼 존재함. 때문에 사용되지 않는 페이지에 대한 주소 역시 페이지 테이블에는 존재함.

사용 가능한 페이지에 대한 주소에는 valid bit, 사용하지 않는 페이지에 대한 주소에는 invalid bit. 즉, 실제로 물리적 메모리에 올라가지 않는 논리적 주소는 invalid bit가 입력됨

Protection bit: page에 대한 접근 권한. 페이지 테이블 -> 프로세스마다 독립적으로 존재. 본인의 페이지에 대해서만 주소 변환이 가능함. 다른 프로세스에 대해 주소 변환을 할 수 없도록 설계되어있음. 여기서 protection bit이란 접근에 대한 protection이라기보다는 연산(intstruction)에 대한 protection(read/ write/ read-only) bit.


기존에는 프로세스별로 페이지 테이블이 존재.

Inverted Page Table은 각 시스템에 페이지 테이블이 하나만 존재. 

실제 물리적 메모리의 프레임 개수만큼 테이지 테이블에 엔트리가 존재.

페이지 테이블의 첫 번째 엔트리에는 물리적 메모리의 첫 번째 프레임에 들어가는 논리적 메모리의 첫 번째 프레임의 주소가 있고,

페이지 테이블의 두 번째 엔트리에는 물리적 메모리의 두 번째 프레임에 들어가는 논리적 메모리의 두 번째 프레임의 주소가 있음.

페이지 주소 변환이란, 1) 논리적 메모리의 주소를 참조해서 2) 물리적 메모리를 찾아가는 과정. Inverted Page Table은 이와 완전히 반대되는 개념.

논리적 페이지의 페이지 번호 p가 물리적 메모리의 몇 번째 프레임에 위치했는지 찾기 위해서는, 페이지 테이블을 모두 뒤져서 p가 자리한 엔트리를 찾은 뒤 물리적 메모리의 어디에 위치해있는지 알 수 있음. 그럼에도 이걸 사용하는 건 페이지 테이블이 메모리에서 차지하는 공간을 줄이기 위한 것. 뿐만 아니라 p가 어느 프로세스의 p인지 파악하기 위해 프로세스를 구분하는 pid 역시 저장해야 함. 

 

1) CPU가 logical address를 줌

2) 1번에서 받은 주소를 가지고 page entry를 뒤져서 p가 위치하는 물리적 메모리의 frame 위치를 파악

3) p가 여러 개 존재할 수 있기 때문에 현재 CPU를 점유하고 있는 프로세스의 PID를 동시에 줘서 그 PID를 가진 P가 물리적 메모리의 어떤 위치에 존재하는지 찾음.

4) 찾아진 위치가 page table에서 몇 번째 떨어진 위치인지(여기서는 f만큼 떨어진 엔트리) 파악해서 물리적 메모리에 가서 f번째 떨어진 엔트리를 찾음으로써 주소 변환을 완료. 

* 여기서 page table을 하나의 하나의 연산으로(순차적으로) 처리하면 시간이 너무 오래 걸리기 때문에, associative register라는 별도의 하드웨어에 page table을 저장해서 병렬 연산을 통해 logical address의 주소를 찾음


Shared code(Re-entrant Code재진입 가능 코드): Pure code라고도 함. 공유할 수 있는 코드를 하나만 올려서 여러 프로세스와 매핑. Read-only로만 세팅해서 물리적 메모리에 하나의 code만 올림.

1) read-only로 저장

2) 동일한 logical address에 위치해야 함. 물리적 메모리뿐만 아니라, 논리적 address에서도 동일한 위치에 있어야 함. 

Private code and data: 각각의 다른 프레임에 매핑되도록 설정 

 

만약 하나의 워드 프로그램을 3개 사용한다고 하면, 같은 프로그램을 사용하기 때문에 프로그램 코드는 share가 가능함. 이렇게 share가 가능한 코드들에 대해서는 물리적 메모리에 하나의 코드만 올려서 이걸 공유함. 각각의 프로세스마다 다른 데이터 코드만 메모리에 별도로 올려서 사용.


프로세스를 구성하는 주소 공간을 의미 단위로 자름. 

프레임의 크기가 일괄적인 페이징 기법과 달리, 세그먼트 기법은 unit별로 크기가 다르기 때문에 물리적 메모리에서 세그먼트가 시작하는 위치인 base와 함께 세그먼트의 크기인 limit 값도 가지고 있음.

페이징에서는 프레임 크기가 모두 동일하기 때문에 프레임 번호만으로도 주소를 찾아갈 수 있음

세그먼트 번호가 STLR보다 작으면 오류 발생

세그먼트의 크기 limit보다, 세그먼트가 위치하는 곳을 나타내는 offset의 크기 d의 값이 더 크면 역시 scope error이기 때문에 오류 발생.

이러한 오류가 발생하지 않을 때 비로소 세그먼트가 시작하는 위치 base에서 offset의 크기 d를 더한 주소로 이동


단점: segmentation의 크기가 동일하지 않기 때문에 hole 문제가 발생 가능

장점: 의미단위로 일을 처리할 때에는 매우 효과적. 의미 단위로 세그먼트를 나누기 때문에 Read/ Write 등등을 구분하는 게 자연스러움

'Information Technology > OS' 카테고리의 다른 글

[운영체제] Virtual memory(1)  (0) 2020.03.05
[운영체제] Memory management(4)  (0) 2020.02.29
[운영체제] Memory management(2)  (0) 2020.02.26
[알고리즘] Memory management(1)  (0) 2020.02.24
[운영체제] Deadlock  (0) 2020.02.17