[操作系统] 分页存储管理中的页表项长度
看到很多人有疑问?读到这里的时候我也有疑问的。
在操作系统的分页存储管理方式中,写道:
将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置。
于是可从中得到该页的物理块号,将之装入物理地址寄存器中。
列出式子出来: 页表始址+页号x页表项长度
1)页表项长度是页面长度是吗?
2)如果是页面长度,那两者相乘就是整个内存的大小来,你想一想整个内存都用来存储页表可能吗?
当然是不可能了,首先内存被划分成若干个和页面大小相等的片。
每个页表项代表一个页面的地址,一般很小。
假设内存大小是2GB,页面大小(物理块)是4KB,页表项长度是4B。
则整个内存可以被划分成2GB/4KB=512K个页面。
页表的长度=页表项的长度x页面的个数=4Bx512K=2M。
内存中用2M的大小来存放页表。
这下清楚了吧,实际上是取了每一个页号对应的页面的起始地址,或许还有对应的物理块号(应该有)。
TLB就是用来存放当前访问的那些页表项的。
看到这里其实大多数同学是完全不知道这个页表项长度到底是个什么玩意。其实来个图像就明确了:
首先内存被划分成若干个和页面大小相等的片。
每个页表项代表一个页面的地址,一般很小。
假设内存大小是2GB,页面大小(物理块)是4KB,页表项长度是4B。
则整个内存可以被划分成2GB/4KB=512K个页面。
页表的长度=页表项的长度x页面的个数=4Bx512K=2M。
内存中用2M的大小来存放页表。
这下清楚了吧,实际上是取了每一个页号对应的页面的起始地址,或许还有对应的物理块号(应该有)。