分区方式
分页方式
虚拟存储器
只需要保证同时需要载入的页的大小是低于主存的大小就行。对于同一个任务,其实是每个时刻只会执行部分代码段,所以只需要载入部分页进入内存就行
- 所有的任务的所有的页放入硬盘的特定区域中,也就是虚拟内存
- 每个任务正在使用的页载入主存当中
- 没命中时主存从硬盘中加载;有修改时,硬盘也会从主存加载
- 页表:对每个任务生成一个页表,记录页的状态
- 全相联映射:命中率更高
- 写回:避免像写直达一样,多次对硬盘进行操作
分页式虚拟存储器
- 编写程序时,默认自己有一个很大的、连续的空间,所以记录在页表中的地址都是虚拟地址。
- 程序真正被启动时,会产生很多页面,载入硬盘中
- 把要用的页面真正载入主存中,由页表来记录
- 页表也存在主存中
过程
页表
物理页和虚拟页的大小是一样的。所以页内偏移量是一致的
null
磁盘没有存储VP0 VP4,对应的位置存储了其他信息PP0
物理页号:说明在主存中有载入- 指针:说明在磁盘存储器中有,但是没有载入主存中。
- 虚拟地址比物理地址更长,虚拟空间比物理空间更大,虚拟页号比物理页号的长度更长;存放位置时的指针长度比物理地址小
- 不需要额外用空间记录虚拟页号,因为是按顺序排放的
- **存放位置的长度是按照最长的物理地址存放的 **
问题
快表
CPU访存过程
- 访问的是主存中的数据,因为在Cache中miss了
- 访问的是主存中的页表,数据仍然在Cache中
- 出现缺页情况,访问硬盘和访问主存速度差距非常大
- TLB中有,页表中也一定有
分段式虚拟存储器
物理地址= 段号左移4位+段内偏移量
分页式:对权限管理很混乱,每一个页都要单独记录权限
分段式:
- 会有重复地址
- 长度不固定