공간 관리를 할 떄
가변 크기의 조각들로 분할(세그멘테이션)하거나 동일크기의 조각으로 분할(페이징)해 공간관리를 한다.
세그멘테이션은 공간이 단편화 될 수 있다...
페이징은 프로세스의 주소 공간을 고정크기의 단위(페이지)로 나눈다.
실제 메모리도 페이지 프레임이라는 고정된 크기의 배열이라고 생각한다.
페이징
주소공간을 page
라고 불리는 고정된 크기의 단위로 나눈다.
세그멘테이션과 다르다.
페이징을 하면, 실제 메모리는 page frame
이라는 배열로 나뉜다.
가상메모리에서 실제메모리로 변환이 필요하기 때문에 프로세스마다 page table
이 필요하다
페이징 장점
가상 메모리의 페이지들은 실제 메모리 전체에 분산 배치 되어있다.
그래서 페이지 테이블을 이용해 가상과 실제의 대응 정보를 알아
OS가 페이지를 사용할 수도 있다.
프로세스마다 존재한다
VPN을 이용해 페이지 번호를 알아내고 offset을 이용해 페이지 번호내의 어디인지 판단
EX) 64바이트의 주소공간, 페이지는 16바이트, 가상주소 21
64바이트의 주소공간을 사용하니 가상 주소는 6비트여야한다.(2^6 = 64)
여기에 페이지는 16바이트니 가상 주소의 offset은 4비트다.
21을 이진수로 변경하면 010101이다.
VPN: 01 offset: 0101이 된다.
그래서 가상 주소 21은 가상 페이지 01의 5번째 바이트이다.
이 가상주소를 페이지테이블을 이용해 VPN을 물리페이지 번호로, Offset은 그대로 사용해 해당 바이트를 찾는다.
오프셋이 동일한 이유
페이지 테이블은 가상주소를 물리주소로 매핑하는데 사용되는 자료구조이다.
OS는 VPN으로 배열의 항목에 접근하고 PTE를 검색한다.
PTE page table entry
- 32bit 주소공간 4바이트
- 64bit 주소공간 8바이트
page frame number
valid bit
read/write bit (protection bit)
user/supervisor bit
present bit
accessed bit
dirty bit
4kb의 페이지를 가진 32비트 주소공간에선 pte가 4바이트를 지닌다했다..
페이지가 4kb니깐 offset이 12bit가 필요, 그럼 20bit의 vpn이 있음
그럼 32비트 주소공간을 사용하니 페이지 베이스 주소는 vpn이 20이니 해당 vpn에 상응하는 물리 페이지 20비트가 필요, 나머지 비트 12개에는 추가정보
원하는 데이터를 가져오기 위해 시스템은 가상 주소를 물리 주소로 변환해야한다.
시스템은 프로세스의 페이지 테이블에서 적절한 페이지 테이블을 가져와 변환을 수행 후 물리 메모리에서 데이터를 탑재한다.
그럼 페이지 테이블이 어디 있는지 알아야겠네??
원하는 PTE를 찾기위해, 페이지 테이블의 시작 지점이 필요하다
원하는 PTE를 찾기 위해 가상 주소에서 VPN을 골라낸다.
해당 VPN에 맞는 PTE를 찾기 위해서이다.
마스킹을 통해 가상 주소에서 VPN을 골라내면 이제 메모리에서 PTE를 가져올 수 있다.
이제 물리 프레임 숫자PFN를 찾아 offset과 결합해 원하는 물리 주소를 찾을 수 있다.
명령어 반입 시 메모리가 두번 참조된다.
명령어에 따라 추가적 메모리 참조를 할 때도 있다.
이를 해결해야한다.