1、主存空间分为两部分:系统区存放操作系统内核程序和数据结构等;用户区存放应用程序和数据。
主存存储器功能:1)分配和去分配:进程可请求对主存区的独占式使用。
2)抽象和映射:主存器被抽象,使得进程认为分配给它的地址空间是一个大且连续地址锁组成的数组,同时建立抽象机制支持进程用逻辑地址来映射到物理主存单元,实现地址转换。
3)隔离和共享:系统负责隔离已分配给进程的主存区,允许多个进程共享主存区。
4)存储扩充:主存和辅助存储器被抽象成虚拟主存,允许用户的虚拟地址空间大于主存物理地址空间。
2、存储器层次结构:
1)寄存器:访问速度最快,容量较小,一般以字节为单位,用于加速存储访问速度。
2)高速缓存:访问速度快于主存,存放主存中经常访问的一些信息,以提高程序执行速度。
3)主存储器:可执行程序必须被保存在主存储器中,与设备相交换的信息也依托于主存地址空间。
3、源程序及程序名字空间:
1)编译:
程序模块包括文本段、数据段和堆栈段。由于模块包含外部引用,即指向其他模块中的数据或指令的操作数地址,或包含对库函数的引用,编译程序负责记录引用的发生位置,编译或汇编的结果将产生相应的多个目标模块,每个目标模块都附有供引用使用的内部符号表和外部符号表。符号表中依次给出各个符号及在本目标模块中的名字地址,在模块被链接时进行转换。
2)链接:
把多个目标模块链接成一个完整的可重定位程序(包括应用程序要调用的标准库函数、所引用的其他模块中的子程序),需要解析内部和外部符号表,把对符号名的引用转换为数值引用,要将涉及名字地址的程序入口点和数据引用点转换为数值地址。
可重定位目标程序又称为装载代码模块,它存放于磁盘中,由于程序在主存中的位置不可预知,链接时程序地址空间中的地址总是相对某个基准(通常为0)开始编号的顺序地址,称为逻辑地址或相对地址。
3)装入:
在加载一个装载代码模块之前,存储管理器程序总会分配一块实际主存区给进程,装入程序根据指定的主存区首地址,再次修改和调整被装载模块中的逻辑地址,将逻辑地址绑定到物理地址,使之称为可执行二进制代码。
把逻辑地址转换(绑定)为物理地址的过程称为地址重定位、地址映射或地址转换。有两种方式:静态地址重定位和动态地址重定位。
4、固定分区:
主存空间被划分成数目固定不变的分区,各分区的大小不等,每个分区只装入一个作业,若多个分区中都装有作业,则它们可以并发执行。
主存分配表:
记录主存储器中划分的分区及其使用情况。固定分区的任务是何时及如何把主存空间划分成分区。
作业进入分区有两种排队策略:一是每个分区有单独的作用等待队列,二是所有等待处理的作业排成一个等待队列。
5、可变分区存储管理:
按照作业的大小来划分分区,但划分的时间、大小、位置都是动态的。常用的分配算法:
1)最先适应分配算法:
顺序查找未分配区表或链表,直至找到第一个能满足长度要求的空闲区为止,分隔此分区,一部分分配给作业,另一部分仍为空闲区(若有)。
2)下次适应分配算法:
总是从未分配区的上次扫描结束处顺序查找为分配区表或链表。
3)最优适应分配算法:
扫描整个未分配区表或链表,从空闲区中挑选一个能满足用户进程要求的最小分区进行分配。通常把空闲区按长度递增顺序排列。
4)最坏适应分配算法:
扫描总是挑选一个最大的的空闲区分割给作业使用。
5)快速适应分配算法:
为那些经常用到的长度的空闲区设立单独的空闲区链表。
6、地址转换与存储保护:
对固定分区采用静态地址重定位,进程运行时使用绝对地址,可由加载程序进行地址越界检查。动态地址重定位时,进程的程序和数据的地址转换由硬件完成,及基址寄存器和限长寄存器。
代码段寄存器CS在指令执行期间重定位指令地址,堆栈段寄存器SS为栈指令的执行重定位地址,数据段寄存器DS在指令执行周期内重定位其他地址。
7、主存不足的解决办法:
1)移动技术:
把已在主存中的进程分区链接在一起,是分散的空闲区汇集成片。方法一是把所有当前占用的分区移动到主存的另一端,二是把占用分区移动到主存的一端,但当产生足够大小的空闲区时就停止移动。
2)对换技术:
选择其中一个进程将其移出主存,腾出空间给其他进程使用。通常系统把时间片耗尽或将优先级较低的进程换出,因为短时间内它们不会投入运行。数据区和堆栈是进程运行时所创建和修改的,操作系统可通过文件系统把这些可变信息作为特殊文件保存。
3)覆盖技术:
指程序执行过程中程序的不同模块在主存中相互替代,以达到小主存执行大程序的目的。
8、分页存储管理:
页面——进程逻辑地址空间分成大小相等的区,每个区称为页面或页,页号从0依次开始。
页框——即页帧,把主存物理地址空间分成大小相等的区,其大小与页面大小相等,每个区是一个物理块或页框,块号从0依次开始。
逻辑地址——即页号+页内位移。采用分页存储管理时,逻辑地址是连续的,进程在主存中的每个页框内的地址是连续的,但页框之间的地址可以不连续。
页表——是为进程建立的,目的是把页面映射为页框,页表是一个函数,其变量是页面号,函数值为页框号。
物理地址=页框号*块长+页内位移。
整个系统只有一个页表基址寄存器,只有占用CPU的进程才占有它。
页表可存放在一组寄存器或主存中。快表记录最近转换的页号即页框号,高速缓存保存最近实际访问的指令或数据的副本。
9、数据共享:允许不同进程对共享的数据页用不同的页号,只要让各自页表中的有关表项指向共享的数据页框。
程序共享:不同进程正确执行共享代码页面,必须为它们在所有逻辑地址空间中指定同样的页号。
动态链接:需要使用共享库,它包含共享函数的目标代码模块,在运行时可以加载到任意主存区域。
10、多级页表:
逻辑地址结构分为:页目录位移,页表页位移,页内位移。
二级页表地址转换需3次访问主存,一次访问页目录,一次访问页表页,一次访问指令或数据。
11、分段存储管理:
逻辑地址=段号+段内位移。以段为单位来划分和连续存放,为作业的各段分配一个连续的主存空间,而各段之间不一定连续。
在分页存储管理中,页的划分,即逻辑地址划分为页号和页内位移,是用户不可见的,连续的地址空间将根据页面的大小自动分页。在分段中,地址结构是用户可见的。
共享的数据段在作业进程的段表中可指定不同的段号。每个用户进程的段表分为两个部分:局部描述符表LDT和全局描述符表GDT。
12、虚拟存储器管理:
实存管理:必须为进程分配足够的主存空间,装入其全部信息,否则进程无法运行。
虚拟存储:仅将当前使用部分先装入主存,其余部分存放在磁盘中,使用时系统自动将其装进来。允许用户的逻辑地址空间大于主存物理地址空间。是将逻辑地址映射到物理地址的一种手段。以页或段为单位。
13、请求分页虚拟存储管理:主存管理部件MMU。
1)管理硬件页表基址寄存器。2)分解逻辑地址。3)管理快表。4)访问页表。5)发出相应中断。6)管理特征位。
如何发现页面不在主存中?办法是扩充页表项的内容,增加驻留标志位。
缺页异常:
是由于发现当前访问页面不再主存时由硬件所产生的一种特殊中断信号,CPU通常在一条指令执行完成后操检查是否有中断到达,即只能在两条指令之间响应中断,但缺页中断却是在指令执行期间产生并获得系统处理的。
14、在请求分页虚拟存储管理中,页表中存放的是把逻辑地址转换为物理地址时硬件所需要的信息,作用有:
1)获得页框号以实现虚实地址转换。
2)设置各种访问控制位,对页面信息进行保护。
3)设置各种标志位来实现相应的控制功能(如缺页标志,脏页标志,访问标志,锁定标志,淘汰标志)。
15、页面装入策略和清除策略:
1)请页式:仅当需要访问程序和数据时把所需页面装入主存。
2)预调式:动态预测进程最可能要访问的那些页面。
16、页面替换策略:
1)局部替换:
作用范围局限于进程自身。实现方法有:局部最佳页面替换算法,工作集模型和工作集置换算法,模拟工作集替换算法,缺页频率替换算法。
2)全局替换:
不考虑进程属主,范围是整个系统。实现方法有:最佳页面替换算法,先进先出页面替换算法,最近最少使用页面替换算法LRU。其维护一个页面淘汰队列。LRU算法的实现需要硬件支持,模拟方法有:引用位法,计数器法,记时法。第二次机会页面替换算法,时钟页面替换算法。
要为每个进程维护一组页面,称其为工作集,其大小随进程的执行而变化,应自动地排除不再在工作集中的页面。
17、请求分段虚拟存储管理:
在段表中加入若干表项,如特征位、存取权限、扩充位、标志位、主存起始地址和段长等。每个分段在逻辑上是独立的。便于越界检查和存取控制检查。
18、Intel X86系列CPU采用3种工作模式:
实地址模式:采用段式实存或单一连续分区,无特权级,不启用分页机制,寻址范围1MB。
保护模式:采用分段和分页机制,共有段式、页式、段页式3种虚拟存储管理模式。
虚拟8086模式:是在保护模式下对实地址模式的仿真。Windows和linux在保护模式下运行。
19、主存管理器:
实现虚拟主存,为进程提供一个受保护的大且专用的地址空间,组成:
1)存储管理系统服务程序:用于虚拟主存的分配、回收和管理。
2)转换无效和访问错误的陷阱处理程序:用于解决硬件所检测到的与主存管理有关的异常,并将虚页面装入主存。
3)一组系统线程:在核心态上下文中执行。包括有工作集管理器,进程/堆栈交换程序,已修改页面写入器,映射页面写入器,废弃段线程,零页线程。
20、进程主存空间分配:使用两个数据结构:
1)虚拟地址描述符VAD:进程的虚拟地址不是连续的,空间可达4GB。
2)区域对象:即文件映射对象,表示可被两个或多个进程所共享的主存块。作用如下:
---1、系统利用区域对象将可执行映像和动态链接库装入主存。
---2、高速缓存管理器利用区域对象访问高速缓存文件中的数据。
---3、使用区域对象将会文件映射到进程虚拟地址空间,然后,可以像访问主存中的数组一样访问此文件。
21、应用程序主存管理方法:
1)虚页主存分配:管理大型对象数据或动态结构数组。
2)主存堆分配:管理大量的小型主存申请。、
3)主存映射文件:管理大型数据流文件及多个进程之间的数据共享。
22、进程页表与地址映射:
32位逻辑地址被解释为3个分量:页目录索引(10位),页表页索引(10位),位移索引(12位),页面大小为4KB。
进程拥有单独的页目录,这是内核管理器所创建的特殊页,用于映射进程所有页表页的位置,它被保存在核心进程块(KPROCESS)中。页表是按需创建的,大多数进程页目录仅指向页表的已小部分,所以进程页表中的虚拟地址往往不连续。
页目录由页目录项PDE组成,每个PDE有4B长,描述进程所有页表的状态和位置。每个进程需要一张页目录表(有1024个PDE)指出1024张页面表,每张页表页描述1024个页面,合计描述4GB的虚拟地址空间。
页框数据库:由所有主存页框组成。每个页框占一项,每一项称为一个PFN结构,用来跟踪物理主存的使用情况。用一个数组表示,索引号从0起直至最大页框号。PFN在任一时刻的状态:
有效。过渡。后备。修改。修改不写入。空闲。零初始化。坏。