프로그램을 구성하는 논리적인 메모리
(logical memory)를 동일한 크기
(page)로 잘라서 각각의 page별로 물리적인 메모리의 비어있는 곳에 올라간다.
주소변환을 위해서 page table
사용
page table은 순차적 검색 x => entry의 크기가 미리 정해져있기 때문에
1) cpu가 논리적인 주소를 주게 되면,
이거를 물리적인 메모리 주소로 바꿔야 되는데
2) paging 기법에서는 주소변환을 할 때 page table
을 이용한다.
3) p : 페이지 번호
d : 페이지 내에서 얼만큼 떨어져있는지 나타내는 offset
4) 논리적인 page 번호에 해당하는 entry를 page table의 위에서 p번째 찾아가면
5) f라는 페이지 프레임 번호가 나타난다.
6) 그럼 논리적 주소를 => 물리적 주소로 바꾸게 됨.
논리적인 페이지번호를, 물리적인 프레임 전호를 위에서 몇번째 번호인지로 바꿔주면
7) 주소 변환 끝.
기본적인 MMU 기법에서는 레지스터 두개로 주소 변환
레지스터 : CPU안에 들어가 있는 아주 빠른 장치.
page table
이 별도로 있어야 한다. page table
의 용량이 너무 크다.page table
을 메모리
에 집어넣자!PTBR (Page-table base register)
메모리 상에 page table이 어디 있는지 시작위치
PTLR (Page-table length register)
page table의 길이
속도 향상을 위해, 하드웨어 사용
associative register
로 구성되는 TLB
(일종의 cache)
사실은 이 page table이 physical memory 안에 있음.
원래 original paging 기법
속도 개선 위해서 TLB라는 별도의 하드웨어를 둠
정보1)
메인 메모리(physical memory) 윗단에 cache memory가 있음 !
주소변환을 위한 별도의 cache memory를 두는 것 => TLB
따라서, cpu가 논리적인 주소를 주게 되면 메모리(physical memory) 상에 있는 page table에 접근하기 전에 TLB
를 먼저 검색한다.
page table에서는 주소 변환을 할 때,
TLB는 page table 내용을 전부 가지고 있지 않기 때문에,
주소 변환을 위해서 TLB의 특정 항목을 검색하는 것이 아니라, 전체를 검색해야 한다.
parallel search
가 가능한 병렬적 탐색이 가능한 Associative Register를 이용한다. 각 프로세스마다 page table, TLB가 다르기 때문에 프로세스가 바뀌는 context-switch 때 flush
를 해서 모든 엔트리를 비워야 한다.
실제로 메모리에 접근하는 시간을 얼마나 될까?
TLB에 접근하는 시간을 입실론
(ε, epsilon)
메모리에 접근하는 시간 1
=> TLB 접근시간 < 메모리 접근시간
TLB로부터 주소 변환이 되는 비율을 알파
라고 하자.
실제로 메모리에 접근하는 시간은?
결과적으로,
Page table만 있을 때는 값이 2
이고, (메모리 접근 2번 하니까. )
TLB도 있을 때는 2 + ε - α
이 된다.
2단계 Page Table임.
cpu가 논리적 주소를 주게 되면 ~ page table을 두단계 거쳐서 주소 변환을 하고 실제 메모리 접근을 한다.
안쪽 page table
바깥쪽 page table
메모리 접근
2단계 page table을 써야 하는 이유는?
=> 메모리 공간 효과적(사용안되는 주소 공간 엄청 많음.)