물리적인 메모리를 관리하는 기법
논리 메모리를 각각 page 로 나눠서 물리적인 메모리에 적당한 곳에 올려놓는다.
page table 이 사용된다 .
각각의 논리 페이지들이 물리 페이지 어디에 올라가있는지
논리주소 p번째로 가면 물리주소 f 번째로 저장되어있다고 테이블에 적혀있다.
근데 주소변황용 페이지 테이블의 용량이 너무 커진다.
그래서 이걸 메모리에 위치하게 되는데
페이지 테이블 때문에 메모리 접근을 2번하게 되는데
이걸 빠르게 접근하기위해 TLB 라는 하드웨어 캐시를 사용한다.
마치 캐시메모리 처럼 (데이터를 보관하는 캐시는 아니지만),
주소 변환을 위한 캐시메모리 장치
- 페이지 테이블에서 빈번히 사용되는애를 캐시하고 있다.
(TLB 에 없는경우는 평상시처럼 메모리접근을 2번한다)
메모리는 바이트 단위로 메겨진다.
32비트를 쓴다고 하면, 표현 가능한 전체 바이트 주소는 2의 32승. 즉 , 메모리 주소가 0번째 부터 2의 32승 -1 바이트 (4GB) 의 논리적 메모리 주소공간을 가진다.
4기가 바이트의 논리적 메모리를 페이지 단위로 쪼개는것
각각의 페이지 크기 4kb 로 쪼갠다. 그럼 거의 100만개(1mb)가 생긴다 그럼 , 페이지 테이블도 100만개가 생기는것이고
이게 메모리 공간의 들어가기 때문에 공간남비가 심하다.
그래서 투 레벨 페이지 테이블 을 쓴다.
1단계 페이지에서 공간낭비가 심한 이유는
논리적 주소에서 굉장히 일부분의 페이지만 실행이 될수가 있는데
페이지 테이블은 전체를 다 가지고 있어야된다. 그래서 실제론 조금만 물리 주소에 들어가도 되는데
페이지 테이블은 전체를 가지고 있어서 메모리 낭비가 심했다.
바깥쪽 p1 페이지 번호를 찾고, p1 엔트리를 가서 주소 엔트리를 얻고,
안쪽 페이지 테이블의 p2 번째 엔트리를 가면 물리적인 번호를 얻게된다.
위에서 프로그램의 상당 부분은 사용이 안된다고 했다.
근데 페이지 테이블에서는 전부 만들게 되는데,
2단계 테이블을 쓰게 되면 이걸 해소할 수 있다.
바깥 테이블은 전체 논리 메모리 만큼 만들어지지만, 안쪽 테이블에서는
사용되지 않는 부분은 안쪽 테이블에 안만들어지고 null 값으로 들어간다.
그래서 페이지 테이블의 공간을 줄일 수 있다.
'프로그래밍 > 운영체제' 카테고리의 다른 글
[운영체제] Virtual Memory - FIFO, LRU, LFU (0) | 2020.06.20 |
---|---|
[운영체제] Memory Management3 - Segmentation (0) | 2020.06.20 |
[운영체제] Memory Management (0) | 2020.06.18 |
[운영체제] Deadlock (0) | 2020.06.17 |
[운영체제] Process Synchronization3 (0) | 2020.06.17 |