-
불연속 할당
페이징 기법
- 보통 4kb
- 페이지의 개수가 많기 때문에 레지스터만으로는 불가능
- 프로세스의 가상 메모리를 동일한 사이즈의 페이지 단위로 나눔
- 가상 메모리의 내용이 페이지 단위로 불연속적으로 저장
- 일부는 백킹 스토리지에 일부는 물리 메모리에 저장
- 물리적 메모리를 동일한 크기의 프레임으로 나눔
- 논리적 메모리를 동일 크기의 페이지로 나눔 (프레임과 같은 크기)
- 모든 가용 프레임들을 관리
- 페이지 테이블을 사용하여 논리적 주소를 물리적 주소로 변환
- External fragmentation(외부조각)이 안 생김
- internal fragmentation(내부 조각)은 생김
- 32비트 주소체계면 4기가
page table
- 메인 메모리에 상주
- 프로그램마다 하나씩 존재
- Page-table basr register(PTBR)가 page table을 가리킴
- Page-table length register(PTLR)가 테이블 크기를 보관
- 모든 메모리 접근 연산에는 2번의 메모리 액세스 필요
- page table은 메모리에 존재하기 때문에 주소 변환을 위해 메모리를 갔다가 변환된 주소로 다시 메모리에 접근해야 함
- 그래서 TLB를 이용해서 page table의 일부를 가지고 있고, 변환해야 할 주소를 TLB에서 먼저 찾고, 없으면 page table로 접근을 한다.
- TLB는 일부만 가지고 있기 때문에 논리 페이지 번호와 프레임 번호를 쌍으로 갖고 있어야 함
- TLB를 하나하나 접근해서 찾는 건 오버헤드가 너무 크다.
- 그래서 속도 향상을 위해서 associative register라는 하드웨어를 이용해서 일일이 탐색하지 않고 해결
- 다른 프로세스가 실행되면 기존 TLB를 지워야 함
2단계 페이지 테이블
- 현대의 컴퓨터는 address space가 매우 큰 프로그램 지원
- 32 bit address 사용 시 : 2^32(4G)의 주소 공간
- page size가 4K 시 1M 개의 page table entry 필요
- 각 page entry가 4B시 프로세스당 4M의 page table 필요
- 그러나, 대부분의 프로그램은 4G의 주소 공간 중 지극히 일부분만 사용하므로 page table 공간 낭비
- 해결책
- page table 자체를 page로 구성
- 사용하지 않는 주소 공간에 대한 outer page table의 엔트리 값은 null
- 페이지 테이블 주소 변환과 페이지 접근을 위해서 메모리를 더 접근
- 시간으로는 손해지만 공간의 효율성을 위해서 사용
- 1단계 페이지 테이블
- 사용하지 않는 공간도 페이지가 만들어지고 표시
- 2단계 페이지 테이블
- 밖에 페이지 테이블이 안쪽 페이지 테이블을 가리키고 안쪽 페이지 테이블이 메모리의 주소공간을 알려준다
- 밖에 페이지 테이블만 만들어지고 안쪽에 사용하지 않는 페이지 테이블은 만들어지지 않음
- 공간 효율
- 메모리에 여러 번 접근하므로 시간 낭비
- 시작 테이블 페이지의 주소는 레지스터가 가지고 있음
- 단계가 많아질수록 공간 효율은 올라가고, 시간 효율이 떨어짐
- 4단계 페이지 테이블을 사용하는 경우
- 필요 없는 공간을 거의 사용하지 않음
- TLB에서 캐시로 커버할 수 있는 사용 중인 메모리 주소가 많아짐
- TLB hit ratio가 98%인 경우 TLB에서 보통 바로 주소를 가져올 수 있어서 속도가 빨라짐