分页
分页(Paging)
分页内存管理方案允许进程的物理地址空间可以是非连续的。分页的基本方法是将程序分成等长的小块,称为页(page),同样内存也被分成了和页面同样大小的页框/帧(frame),这样一个页就可以装到一个页框中。
分页机制把进程散布在不同的页框中,因此在执行程序的时候,需要根据页表(page table)查找某个页面在内存的某个页框中,由此完成逻辑地址到物理地址的映射。
每当进程的某一条指令要访问进程内某地址时,其产生的地址都会被分割成页号和偏移量的形式。CPU根据页号查找页表,找到物理内存中该页对应的页框号用来替换页号,重新拼接成真正的物理地址。
采用分页技术不会产生普通单页分配的外部碎片,每个空闲页框都可以分配给需要它的进程。不过,分页会产生内部碎片,如果进程所要求的内存并不是页的整数倍,那么最后一个页框就可能用不完。
分页的一个重要特点是用户视角的内存和实际的物理内存是分离的,逻辑地址需要通过映射转变成物理地址,这种映射由操作系统所控制,普通用户程序使用逻辑地址而不直接指定物理位置。
由于内存空间都是预先划分好的,普通单页分配不会像分段那样因小间隙而无法满足请求。同时内存也都是以页为单位释放的,不会产生小于一页且无法分配的空闲片段。
如果内存空间不够,操作系统可以把最近未使用且允许换出的内存页面暂时换出(swap out)到硬盘上。一旦需要,再换入(swap in)加载进来。因此,一次可以只传输一个或几个页,而不必交换整个进程;不过磁盘I/O仍可能产生较大延迟。
采用请求分页时,加载程序不需要一次把全部页面加载到物理内存。只有运行中需要对应虚拟页里的指令和数据时,才加载所需页。
看虚拟页如何找到物理页框
解锁完整互动实验、进阶解析与精选参考答案。
TLB(Translation Lookaside Buffer)
程序局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小区域中。即在一段时间内,整个程序的执行通常仅限于程序中的某一部分,相应地,所访问的存储空间也局限于某些内存区域。
利用这一特性,可以把常用的页表映射缓存到访问速度更快的硬件中。CPU芯片中的这种缓存通常称为TLB、页表缓存或快表。有了TLB,CPU寻址时先查TLB,未命中才查常规页表。
知识测验
知识测验
追踪转换与TLB淘汰
使用下列页表,页大小256字节,初始为空的两项LRU快表;列表按最久未用到最近使用排列。
| 页 | 页框 | 驻留 | 权限 |
|---|---|---|---|
| 0 | 4 | 是 | R / W |
| 1 | 1 | 是 | R |
| 2 | — | 否 | R / W |
| 3 | 6 | 是 | R / W |
- 依次读0、785、0、256、785,标明TLB命中或未命中、物理地址,以及每次访问后的TLB。
- 再读512、写256,区分非驻留缺页与保护异常。
- 计算600字节的整页浪费,以及t = 10ns、m = 100ns、h = 0.95的简化有效访问时间。