首先,了解线性页表大小随地址空间的增长而变化的方式:
paging-linear-translate.py -P 1k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 1k -a 2m -p 512m -v -n 0
paging-linear-translate.py -P 1k -a 4m -p 512m -v -n 0
ARG seed 0
ARG地址空间大小为1m
ARG 物理地址空间大小512m
ARG页面大小1k
ARG verbose true
高位(最左侧)位是VALID位。
paging-linear-translate.py -P 1k -a 2m -p 512m -v -n 0
继续实验:地址空间再增长:
paging-linear-translate.py -P 1k -a 4m -p 512m -v -n 0
第二:了解线性页表大小随页面大小增长而变化的方式:
paging-linear-translate.py -P 1k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 2k -a 1m -p 512m -v -n 0
paging-linear-translate.py -P 4k -a 1m -p 512m -v -n 0
问题:
Before running any of these, try to think about the expected trends. How should page-table size change as the address space grows? As the page size grows? Why shouldn’t we just use really big pages in general?
回答:
页表大小由以下等式控制:address space size = number of page table entries * page size和bits necesssary to address a page = log (physical memory size / page size )
页表条目的数量随地址大小线性增加,并且寻址页面所需的位数随地址大小呈对数增加:
- --asize=1m:1024个条目
- --asize=2m:2048个条目
- --asize=4m:4096个条目
页表条目的数量与页面大小的倒数成比例:页面大小加倍,条目数量减半。寻址页面所需的位数与页面大小的倒数的对数成正比关系。
- --pagesize=1k:1024个条目
- --pagesize=2k:512个条目
- --pagesize=4k:256个条目
总结:
随着地址空间的增长,页表大小应该如何变化?
页表变长,因为需要更多的页面来覆盖到这个地址空间。
随着页面大小的增长?为什么我们不应该只使用真正的大页面呢?
页面大小减小,但是不能使用一个超级大的页面,因为会浪费很多的内存——一般进程所需要使用到的内存很少。