본문 바로가기

Information Technology/OS

[운영체제] Memory management(2)

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


page table: 논리적 페이지들이 물리적 메모리의 어느 곳에 위치하는지 저장. 논리적 페이지의 주소만큼 엔트리가 존재

p: 논리적 페이지 번호

d: 해당 페이지에서 얼마나 떨어져 있는지

논리적 주소이든 물리적 주소이든, 어차피 같은 크기의 frame으로 나눠지기 때문에 d의 상대적 위치는 변하지 않음.

 

페이지 테이블의 용량이 크기 때문에 레지스터에 저장은 불가능. 페이지 테이블은 프로그램마다 존재하는데, 이 페이지 테이블을 메모리에 저장하게 됨. 즉, 메모리에 접근하기 위해 주소가 필요한데 주소 접근을 하려면 메모리에 접근을 해야 하기 때문에 결과적으로 메모리에 두 번 접근하게 됨.

 

테이블의 시작 위치를 나타내는 PTBR과, 테이블의 길이를 나타내는 PTLR

 

메모리에 총 2번 접근하는 건 비효율적이기 때문에 별도의 하드웨어를 사용(TLB). 일종의 캐시. 메인 메모리보다 빠른, 메인 메모리와 CPU 사이에 위치.

캐시 메모리: 운영체제에게는 감춰진 개체. 메인 메모리에서 빈번히 사용하는 데이터를 캐시에 저장해서 CPU에 더 빨리 접근할 수 있게 해줌. 이와 같이 주소 변환을 위한 별도의 TLB라는 캐시를 가지고 있음. 

 

TLB는 page table에서 빈번히 사용되는 테이블 일부를 캐싱하고 있음. CPU가 논리적인 주소를 주게 되면, 메모리 상의 Page table에 접근하기 전에 TLB에 먼저 방문해서 혹시 해당 주소가 존재하는지 확인함. 만약 해당 엔트리의 주소가 TLB에 이미 저장이 되어있다면 TLB를 통해 주소변환이 이뤄짐. 이 경우에는 메모리에 한 번만 접근해도 됨.

TLB에 주소가 저장되어있지 않다면 메모리에 두 번 접근해야 함.

하지만 TLB는 페이지 테이블 전체를 저장하고 있지 않음. 대신 논리적 주소인 p와 물리적 주소인 f의 쌍을 가지고 있고, 한 번 TLB를 찾을 때 위에서부터 TLB 전체를 한 번씩 확인해야 함. 이 시간이 오래 걸리기 때문에 병렬 탐색이 가능한 associative register를 사용함. 

 

그런데 page table에서는 TLB처럼 테이블을 전체를 한 번에 돌 필요 없이, page table에서 논리적 주소의 index를 통해 찾기만 하면 됨.

 

page table은 프로세스마다 존재하고, TLB 역시 프로세스마다 다른 정보를 가지고 이를 위해 context switch가 발생할 때 flush를 통해 엔트리를 비워줌.

TLB 접근시간은 일단 메인 메모리에 접근하는 시간보다 짧음. (엡실론은 1보다 작음)

 

HIt ratio가 높아진다면 TLB를 이용하는 것이, 그냥 TLB 없이 페이지 테이블을 이용하는 것보다(2) 작은 값을 가지게 됨. 더 빠름.


기존에 3단계로 이뤄진 page table이 2단계로 이뤄짐

컴퓨터의 목적. 1) 속도를 빠르게 하거나 2) 공간을 줄이는 것

 

Two-Level Page Table의 경우 연산 속도는 줄일 수 없지만, 테이블이 차지하는 공간을 줄일 수 있음

 

현대 컴퓨터의 주소체계 = 32bit. 주소체계는 바이트별로 한 줄씩 띄워서 구분.

32bit로 표현할 수 있는 논리적 주소(Logical address) 한계는 2^32바이트 -> 대략 4GB.(물론 이 4GB의 공간 중 실제 사용자가 사용하는 비율은 그리 크지 않음)

페이지 하나 당 대략 4KB의 크기를 갖기 때문에, 전체 4GB의 주소를 4KB로 쪼개면 1M(100만보다 조금 더 큼) 개의 페이지 개수가 나옴. 즉 페이지 테이블의 엔트리가 1M 개. 이 페이지 테이블을 모두 메모리에 올리면 공간 낭비가 심해짐.  하나의 엔트리가 4Byte이기 때문에 하나의 프로세스마다 4MB의 테이블이 필요함. 이러한 공간 낭비를 줄이기 위해 2단계 페이징을 사용(페이지 테이블은 논리적 주소 공간에 대응하여 모든 페이지 엔트리에 대해 만들어야 하기 때문)

page table 내에 page 주소체계를 하나 더 설정.

outer page table -> innder page table의 위치를 알려줌

inner page table -> 물리적인 주소를 얻어서 d만큼 떨어진 위치에서 원하는 정보를 찾음

 

inner page table의 크기 = page의 크기와 같음. page 하나의 크기 = 4KB. 내부 테이블의 페이지의 크기도 4KB.

엔트리의 크기는 4Byte이기 때문에 하나의 내부 테이블 페이지에 엔트리 1K개가 들어가 있음.

 

논리적 주소의 전체 크기 = 2^32 Byte

 

페이지 하나의 크기 = 4KB = 2^12 Byte개의 주소가 필요. 때문에 page 전체의 offset에 2^12의 Byte 필요

p2 = 하나의 페이지 내에서 차지하는 위치. 4KB인 하나의 페이지 내에 4Byte의 엔트리가 1K 개 들어감. 때문에 p2에 1K= 2^10개의 주소가 필요함.

 

3-level은 사용되지 않는 page가 존재하더라도 maximum size의 page table을 만들어야 하지만,

2-level은 사용되지 않는 inner page에 대해서는 outer page에서 그냥 NULL로 설정해서 공간을 절약.

 

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

[운영체제] Memory management(4)  (0) 2020.02.29
[운영체제] Memory management(3)  (0) 2020.02.29
[알고리즘] Memory management(1)  (0) 2020.02.24
[운영체제] Deadlock  (0) 2020.02.17
[운영체제] Process Synchronization(4)  (0) 2020.02.13