文章目录
- 一.页式存储
- 1.页式存储系统
- 2.逻辑地址到物理地址的转换
- 3.页表
- 4.快表TLB
- 二.虚拟存储器
- (一)页式虚拟存储器
- (二)段式虚拟存储器
- (三)段页式虚拟存储器
一.页式存储
1.页式存储系统
为提高主存的空间利用率,将程序(进程)在逻辑上分为若干个大小相等的“页面”,“页面”大小与“块”的大小相同,使每个页面可以离散地放入不同的主存块中。(若不分页,只能将程序一整块连续放入内存)
2.逻辑地址到物理地址的转换
(1)逻辑地址/虚地址:程序员视角看到的地址
(2)物理地址/实地址:实际在主存中的地址
若x的逻辑地址为001000000011,取变量x至ACC的机器指令为000001 001000000011(操作码000001表示取数)。若程序每个页的大小是1KB=210B,对于12bit的逻辑地址来说,可以用后10位表示页内地址,前面2位表示逻辑页号。因此变量x应该在0号页面。若0号页面被映射到2号主存块,用2号主存块号(000000000010)拼接x的页内地址(1000000011),即可得到x实际存放的物理地址0000000000101000000011
页表寄存器指明了页表在主存中的存放地址
3.页表
记录了每个逻辑页存放在哪个主存块中,通过页表即可完成逻辑地址到物理地址的转换(主存块号拼页内地址)。CPU查页表需要进行一次访存操作。
4.快表TLB
快表又称联想寄存器,是一种访问速度比内存快很多的高速缓存,用来存放最近访问的页表项的副本,可以加快逻辑地址到物理地址转换的速度。与此对应,内存中的页表项称为慢表。
快表未命中才访问慢表,刚访问的逻辑页可以将其页表项放入快表(基于局部性原理)。查询快表速度更快,查询慢表的时间相当于一次访存。快表成本高,只能保存页表中的一部分信息。
若快表命中,则访问某个逻辑地址仅需一次访存即可(访问内存)。若快表未命中,则访问某个逻辑地址需要两次访存(访问页表和内存)。
快表中存储的是页表项的副本,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内存管理-虚拟内存-一二
- 虚拟内存是什么,它有什么优点?
虚拟内存是计算机系统内存管理的一种技术,虚拟存储器将主存或辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间内,用户可以自由编程,而不必在乎实际的主存容量和程序在主存中实际的存放位置。(或者说虚拟内存使得应用程序认为它拥有连续的可用的内存,而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。)
优点:可以弥补物理内存大小的不足;一定程度的提高反映速度;减少对物理内存的读取从而保护内存,延长内存使用寿命。
缺点:占用一定的物理硬盘空间;加大了对硬盘的读写;设置不得当会影响整机的速度与稳定性 - 什么是TLB?
TLB是相联存储器,也叫做快表。这是为了加快地址变换过程而增设的高速缓冲存储器,在虚拟存储器中进行地址变换时,需要虚页号变换成主存中实页号的内部地址变换这一过程。
缓存时首先要到主存查页表,然后才能根据主存物理地址访问主存的存取指令或数据。因此采用虚拟存储器机制后,访存的次数增加了。为了减少访存的次数,往往将页表中最活跃的几个页表项复制到高速缓存中。这种在高速缓存中的页表项称为快表。查表时,根据虚页表同时查找快表和慢表(也可先查快表,未命中再查慢表),当在快表中查到该虚页号时,就能很快找到对应的实页号,将其送入主存实地址寄存器,同时使慢表的查找作废,这使主存的访问速度有所提升。如果在快表中查不到,则经过一个访存的时间延迟后,将从慢表中查到的实页号送入实地址寄存器,同时将此虚页号和对应的实页号送入快表。
TLB是根据局部性原理而设计的,会存放我们最近使用的页。一般快表的命中率可达九成以上,这样分页带来的速度损失就可以降低到10%以下。 - 虚拟存储器都有哪几种分类?
虚拟存储器是指具有请求调入和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。分为页式虚拟存储器、段式虚拟存储器、段页式虚拟存储器。
①页式虚拟存储器:把虚拟存储空间和实际空间等分成固定大小的页,各虚拟页可装入主存中的不同实际页面位置。页式存储中,处理机逻辑地址由虚页号和页内地址两部分组成,实际地址也分为页号和页内地址两部分,由地址映射机构将虚页号转换成主存的实际页号。页式管理的页表包括页号、每页在主存中起始位置、装入位等。页表是虚拟页号与物理页号的映射表,页式管理由操作系统进行,对应用程序员的透明的。
②段式虚拟存储器:是一种把主存按段分配的存储管理方式,是一种模块化的存储管理方式。每个用户程序模块可分到一个段,该程序模块只能访问分配给该模块的段所对应的主存空间。段长可以任意设定,并可放大和缩小。系统中通过一个段表指明各段在主存中的位置,段表中包括段名(段号),段首址、装入位和段长等信息。段表本身也是一个段,段一般是按程序模块分的。
③段页式虚拟存储器:是上述两种方法的结合,它将存储空间按逻辑模块分成段,每段又分成若干个页,访存通过一个段表和若干个页表进行。段的长度必须是页长的整数倍,段的起点必须是某一页的起点。