- 정리
- 연속 할당: virtual → phys 로 옮기는데 base 값에 담긴 시작 주소만큼만 더해주면 물리 메모리에 올라간다!
- page 기법에서는? 이렇게 못함!
- 주소 변환: 시작 지점만 안다고 할 수 있는 게 아님.
- 단순히 base & bound 레지스터만 가지고서 주소 변환할 수 없음.
Paging
- 페이징: 프로그램 구성하는 논리 메모리를 동일 페이지로 잘라서 각 페이지 별로 물리 메모리 적당한 위치에 어디든 비어있는 곳이 있다면 거기에 올리는 기법!
- 페이징 기법에서 주소 변환: 페이지 테이블!
- 페이지 테이블: 논리 페이지가 물리 페이지 내 어디에 올라가 있는지를 기록해놓는!
- 논리 페이지: 번호 매겨놓고
- 물리 메모리에서 페이지가 들어갈 수 있는 공간을 페이지 프레임!
- 페이지 프레임도 동일한 크기로 잘라서 번호 매겨놔.
- 논리 0번이 물리 어디에 / 1번은 어디에? ⇒ 논리 페이지 별로 물리페이지 위치를 기록한 공간이 페이지 테이블!
- 엔트리: 테이블 자료구조(배열 or 링크드 리스트)에서 들어갈 수 있는 공간을 뜻함.(후보군)
- 0번 페이지는 1번 페이지 프레임에 올라가 있다는 것을 알려줌(페이지 테이블이)
- 3번 페이지는 7번 프레임에!
- 배열: 순차적으로 검색할 필요 X.
- 엔트리 크기가 이미 결정되어 있음. 우리가 3번 페이지 위치를 보고 싶으면 맨 위에서 엔트리 크기 *3 만큼 아래로 이동하면 해당 위치로 도착!
- 인덱스를 이용해서 곧바로 접근 가능한 자료구조!
- CPU가 논리 주소를 주면 ⇒ 물리 메모리 상의 주소로 바꿔야 함.
- 페이징 기법에서는 페이지 테이블을 사용.
- 주소에서 앞 부분(P): 페이지 번호에 해당
- 뒷부분(d): 얼만큼 떨어져있는지 나타내는 오프셋!
- 위에서 p번째 찾아가면 f라는 페이지 번호가 나온다!
- 이를 물리 주소로 바꿔!
- 이때 f는 물리주소 0번지에서 f만큼 아래로 내려오면 위치!
- p가 f로 바뀌지만 페이지 내에서의 값은 그대로 옮겨간다!
Page table
- 페이지 테이블은 어디에 있을 것인가?
- 페이지 크기: 4키로바이트.
- 그러면 주소공간은 매우 클 것.
- 페이지: 100만개 엔트리가 만들어진다.
- 얘네들 다 CPU 레지스터에 있을 수 있나? ㄴㄴ 용량이 매우 큼.
- 페이지 테이블에 많은 용량이 필요함!
- 심지어 프로그램마다 페이지 테이블이 따로 필요함.
- 메모리 정보인데 디스크에도 넣을 수 없음.
⇒ 페이지 테이블은 메모리에 넣는다!
Implementation of page table