为提高主存的空间利用率,将程序(进程)在逻辑上分为若干个大小相等的“页面”,“页面”大小与“块”的大小相同,使每个页面可以离散地放入不同的主存块中。(若不分页,只能将程序一整块连续放入内存)
(1)逻辑地址/虚地址:程序员视角看到的地址
(2)物理地址/实地址:实际在主存中的地址
若x的逻辑地址为001000000011,取变量x至ACC的机器指令为000001 001000000011(操作码000001表示取数)。若程序每个页的大小是1KB=210B,对于12bit的逻辑地址来说,可以用后10位表示页内地址,前面2位表示逻辑页号。因此变量x应该在0号页面。若0号页面被映射到2号主存块,用2号主存块号(000000000010)拼接x的页内地址(1000000011),即可得到x实际存放的物理地址0000000000101000000011
记录了每个逻辑页存放在哪个主存块中,通过页表即可完成逻辑地址到物理地址的转换(主存块号拼页内地址)。CPU查页表需要进行一次访存操作。
快表又称联想寄存器,是一种访问速度比内存快很多的高速缓存,用来存放最近访问的页表项的副本,可以加快逻辑地址到物理地址转换的速度。与此对应,内存中的页表项称为慢表。
快表未命中才访问慢表,刚访问的逻辑页可以将其页表项放入快表(基于局部性原理)。查询快表速度更快,查询慢表的时间相当于一次访存。快表成本高,只能保存页表中的一部分信息。
若快表命中,则访问某个逻辑地址仅需一次访存即可(访问内存)。若快表未命中,则访问某个逻辑地址需要两次访存(访问页表和内存)。
快表中存储的是页表项的副本,Cache中存储的是主存块的副本。
快表采用SRAM,是一种相联存储器。主存采用DRAM
回顾:
①相联存储器:全相联映射指主存中的每一块可以装入Cache中的任何位置,每行的标记用于指出取自主存的哪一块,所以CPU访存时需要与所有Cache行的标记进行比较。标记比较的速度较慢,实现成本高。通常需要采用按内容寻址的相联存储器进行地址映射。根据标记的内容通过硬件电路寻址比主存的按地址信息寻访要快。
②DRAM有电容,破坏性读出,需要重写,速度较慢,用于主存,结构简单,集成度高,发热量小,电容易失,需要刷新,存储容量大,行/列地址先分别放到行/列缓冲区,分两批送到行/列地址译码器
详细内容见操作系统-3-1内存管理-内存管理概念-四.非连续分配管理方式-(一)基本分页存储管理方式
多道程序并发执行不仅使进程之间共享了处理器,而且同时共享了主存。然而随着对处理器需求的增长,进程的执行速度会以某种合理平滑的方式慢下来。但是,若同时运行的进程太多,则需要很多的内存,当一个程序没有内存空间可用时,那么它甚至无法运行。所以,在物理上扩展内存相对有限的条件下,应尝试一些其他可行的方式在逻辑上扩充内存。
虚拟内存使用外存上的空间来辅助扩充内存空间,通过一定的换入/换出,使得整个系统在逻辑上能够使用一个远远超出其物理内存大小的内存容量。因为虚拟内存技术调换页面时需要访问外存,会导致平均访存时间增加,若使用了不合适的替换算法,则会大大降低系统性能。
将程序分页,将需要用到的页放到主存的各个位置。
页表的修改
(1)有效位
在页表中需记录当前页表是否被调入内存,引入有效位(有效位为1表示已调入,为0表示未调入)
(2)外存块号
将程序的某一页调入内存时,为确定当前页在外存的存放位置,在页表中引入外存块号(将外存分块)。
(3)访问位
由于主存比辅存小得多,为实现页面替换算法,引入访问位。如用访问位表示当前页面被访问次数(即LFU算法)
(4)脏位
主存中只能保存辅存的一些副本,如果修改了主存中某些块的数据,需要将其写回外存。若当前主存块的内存进行了修改,脏位置1,否则置0
段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度可能不同。虚拟地址格式为(段号,段内地址)
在此方式下,主存不会分块,每个段可以存在主存的任意位置
1.段表
段表是程序的逻辑段和在主存中存放位置的对照表,虚拟地址到实地址(物理地址)之间的变换是通过段表实现的。
段表的结构:
①段首址:表示段在主存中存放的起始位置
②装入位:1表示已调入主存,0表示未调入
③段长:段的长度
2.地址转换过程
CPU根据虚拟地址访存时,首先根据段号与段表基地址(段首址)拼接成对应的段表行,然后根据该段表行的装入位判断是否已调入主存。已调入主存时,从段表读出该段在主存中的起始地址,与段内地址相加,得到对应的主存实地址
3.优点
段的分界与程序自然分界相对应,因而仅有逻辑独立性,使得它易于编译、管理、修改和保护,也便于多道程序的共享
4.缺点
因为段长度可变,分配空间不变,容易在段间留下不便使用的碎片,造成空间浪费
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。每个程序对应一个段表,每段对应一个页表。
地址结构(段号,段内页号,页内地址)
关于基本分段存储管理方式、分段与分页、段页式管理方式的具体内容见操作系统3-1内存管理-内存管理概念-四.非连续分配管理方式-(二)(三)(四)
关于虚拟内存、页表机制、缺页中断机构、地址变换机构的详细内容见操作系统-3-2内存管理-虚拟内存-一二