Loading

复习笔记|第四章 存储器管理《操作系统原理教程》

参考教材:《操作系统原理教程(第4版)》刘美华 翟岩龙著

大纲问题回答(精简版)

1. 存储器管理的功能。名字空间、地址空间、存储空间、逻辑地址、物理地址。

(1)存储器分配:解决多进程共享主存的问题
(2)地址转换或重定位:研究各种地址变换方法及相应的地址变换机构。
(3)存储器保护:防止故障程序破坏OS和其它信息
(4)存储器扩充:采用多级存储技术实现虚拟存储器,交换技术。
(5)存储器共享:研究并发进程如何共享主存中的程序和数据。
⚫ 符号名字空间:源程序中的各种符号名的集合所限定的空间。源程序用符号名访问变量和子程序。
⚫地址空间(address space)表示任何一个计算机实体所占用的内存大小。比如外设、文件、服务器或者一个网络计算机。地址空间包括物理空间以及虚拟空间。
⚫ 存储空间:物理存储器中全部物理存储单元的集合所限定的空间。
⚫ 逻辑地址是指在计算机体系结构中是指应用程序角度看到的内存单元(memory cell)、存储单元(storage element)、网络主机(network host)的地址。 逻辑地址往往不同于物理地址(physical address),通过地址翻译器(address translator)或映射函数可以把逻辑地址转化为物理地址。
逻辑地址:是指用户程序经编译后,每个目标模块以0为基地址进行的顺序编址。逻辑地址又称相对地址 。
⚫ 物理地址:是指内存中各物理存储单元的地址从统一的基地址进行的顺序编址。物理地址又称绝对地址,它是数据在内存中的实际存储地址。

2. 什么是地址重定位?分为哪两种?各是依据什么和什么时候实现的?试比较它们的优缺点。

◆静态重定位、动态重定位
⚫ 程序地址空间的逻辑地址→存储空间的物理地址。地址映射,或地址变换。
(1)静态重定位
⚫ 在进程执行前,由装入程序把用户程序中的逻辑地址全部转换成物理地址。
⚫ 特点:
1)不需要硬件支持;
2)要求占用连续的存储区;
3)在程序执行期间不能移动,主存利用率低;
4)难以做到程序和数据的共享;
5)用于单道批处理系统。
(2)动态重定位
⚫ 装入程序把用户程序和数据原样装入主存区。程序运行时,把该主存区的起始地址送入重定位寄存器。需硬件地址转换机构。
⚫ 用于多道批处理系统、分时系统
⚫ 优点:
◆主存利用充分。可移动用户程序。移动后,只需修改重定位寄存器。
◆程序不必占有连续的主存空间。
◆便于多用户共享主存中的程序和数据。

3. 内存划分为两大部分:用户空间和操作系统空间。存储器管理是针对用户空间进行管理的。

4. 存储保护的目的是什么?对各种存储管理方案实现存储保护时,硬件和软件各需做什么工作?

防止故障程序破坏OS和其它信息
⚫ 防止地址越界:进程运行时产生的所有存储器访问地址都要进行检查,确保只访问为该进程分配的存储区域。
⚫ 正确地进行存取:对所访问的存储空间的存取方式(读、写、执行)进行检查,以防止由于误操作,使其数据的完整性受到破坏。
硬件:
◼ 上、下界寄存器:分别存放进程在主存区的最高地址和起始地址。进程运行时,下界寄存器 ≤ CPU访存地址 ≤ 上界寄存器。否则产生地址越界错误,停止运行。
◼ 基址和限长寄存器:进程运行时,将其分区的首地址装入基址(或重定位)寄存器,将其程序的大小装入限长寄存器。每个逻辑地址应小于限长寄存器内容。
软件(页式存储):
⚫ 保护:可在页表中增加对该页的操作方式位,以表示是可读写/只读/只执行等。
软件(段式存储):
➢对段的信息进行保护:在段表中增加相应的操作方式字段,对相应的段规定读、写、执行是否许可的操作权限。
段允许动态扩充

5. 试述可变式分区管理空闲区的方法及存储区的保护方式。覆盖与交换有什么特点?

⚫ 根据作业的大小动态地划分分区,使分区的大小正好等于作业大小。
◆各分区的大小是不定的;
◆内存中分区的数目也是不定的。
⚫ 分区说明表(已分配区表,未分配区表)
⚫ 空闲区链表
⚫ 分配算法:
◆首次适应法(first fit)
◆最佳适应法(best fit)
◆最坏适应法(worst fit)
(1)分区说明表
始址 长度 占用标志
⚫ 分配主存:
◆从未分配区表中找一个空闲区。将其一分为二,一部分分给作业,另一部分留在表中。
◆在已分配区表中进行记录。
⚫ 回收主存:
◆将回收的分区登记在未分配区表中。
◆将该作业占用的已分配区表项置为空。
优点:比较直观、简单。
缺点:由于主存分区个数不定,所以表格的长度不好确定。要么表格溢出,要么表格浪费。
(2)空闲区链
⚫ 是记录内存空闲区的一种较好方法。
⚫ 已分配区,在进程的PCB中有记录。
⚫ 在每个分区的首字和尾字中,有该区信息的记录。
可变式分区--分配算法
(1)首次适应(first fit)法:
◆要求空闲区表或空闲区链中的空闲区按地址从小到大排列。
◆分配内存时,从起始地址最小的空闲区开始扫描,直到找到一个能满足其大小要求的空闲区为止。分一块给请求者,余下部分仍留在其中。
◆优点:
➢实现简单
➢易于产生更大空闲区,能够保留高地址部分的大空闲区,为大进程到达创造了条件
◆缺点:
➢容易产生碎片,低地址部分不断被划分,留下许多难以利用、很小的空闲区。
(2)最佳适应(best fit)法:
◆存储分配程序要扫描所有空闲区,直到找到能满足进程需求且为最小的空闲区为止。
◆优点:
➢避免了对大空闲区的拆分
◆缺点:
➢因为要查找所有的分区,所以比首次适应算法效率低。
➢可能把主存划分得更小,出现很多无用的碎片。
◆改进:从小到大对空闲区排序。
(3)最坏适应(worst fit)法:
◆要扫描所有的空闲区,直到找到满足进程要求且为最大的空闲区为止。一分为二,一部分分给进程,另一部分仍留在链表中。
◆目的:使剩下的空闲区可用。
◆缺点:要扫描所有的空闲区;大空闲区的不断分割,可能满足不了大进程的要求。
◆改进:从大到小对空闲区排序,以提高查找速度。
回收一个释放区
若释放区与空闲区相邻接,要进行合并。

存储区的保护方式:
◼ 基址和限长寄存器:进程运行时,将其分区的首地址装入基址(或重定位)寄存器,将其程序的大小装入限长寄存器。每个逻辑地址应小于限长寄存器内容。

覆盖的特点:
⚫ 特点:打破了必须将一个进程的全部信息装入主存后才能运行的限制。在逻辑上扩充了主存。小主存可运行大进程。
交换的特点:
⚫ 特点:打破了必须将一个程序一旦进入主存便一直到运行结束的限制。缺点是进程的大小受实际主存容量的限制。由于这种交换系统只保留一个运行进程的完整信息在主存中,故它不能使主存得到充分利用,也不能保证分时用户的合理响应时间。

6. 页表的作用是什么?简述页式管理的地址变换过程。能利用页表实现逻辑地址转换成物理地址。管理内存的数据结构有哪些?

◆存储分块表、位示图
⚫ 页表:系统为每个进程建立一张页面映像表,记录逻辑页与主存块的映射关系。
硬件动态地址转换机构负责将这个逻辑地址转换为物理地址。工作过程如下:
(1)把该进程的页表始址和页表长度放入CPU的控制寄存器中。
(2)将程序计数器内容的页号部分与控制寄存器中的页表长度相比较,若页号p小于页表长度时转(3),否则产生地址越界,终止程序运行。
(3)将程序计数器中的页号与控制寄存器中的页表始址相加,得到该访问操作所在页号在页表中的入口地址。这里的加是根据页表项占用的字节数决定的。假定一个页表项占2个字节:
页号在页表中的入口地址=页表始址+页号x页表项占用的字节数= 500+3x2= 506(4) 用该地址去访页表, 获得该页所对应的主存块号为15。
(5)把主存块号15与程序计数器中的页内地址相拼接,从而得到该操作对应主存的物理地址:
15x 1024+928=16288
(6)根据这个地址16288, 完成指定操作。
IMG_20221126_154658_edit_3586499925987630.jpg
image.png

a. 存储分块表:记录存储器中的块的占用情况。表的第一项指出当前空闲块总数,第二项为指向第一个空闲块的指针,各空闲块通过单向链链接在一起。
◆ 分配主存时,查存储分块表。先查空闲块总数是否够用,再分配。同时为进程建立页表。
◆ 进程完成时,回收主存块。
image.png
b. 位示图:每个主存块对应位示图中的一位。0表示空闲,1表示被占用。
◆主存块号←→位示图中的字节、位
◆块越小,位示图越大;块越大,位示图越小

7. 什么是页式存储器的内碎片?它与页的大小有什么关系?可变式分区管理产生什么样的碎片?

◆内碎片、外碎片
内碎片:进程的代码段、数据段、堆栈段的最后一页总有得不到利用的部分存储空间。
在内存管理中,内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。
外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。
⚫ 页尺寸大:页的内部碎片大。
⚫ 页尺寸小:进程的页表长。
固定分区存在内部碎片,可变式分区分配会存在外部碎片;
页式虚拟存储系统存在内部碎片;段式虚拟存储系统,存在外部碎片。

8. 段式存储器管理与页式管理的主要区别是什么?

(1) 段是由用户划分的;页是由硬件划分的,对用户是透明的。
(2) 页的大小固定;段的大小不固定。
(3) 段式用二维地址空间;页式用一维地址空间。
(4) 段允许动态扩充,便于存储保护和信息共享。
(5) 段可能产生主存碎片;页消除了碎片。
(6) 段式管理便于实现动态链接,页式管理只能进行静态链接。
(7) 段与页一样,实现地址变换开销大,表格多。

9. 什么是虚拟存储器。虚拟存储器的容量能大于主存容量加辅存容量之和吗?

虚拟存储器:是为满足应用对存储器容量的巨大需求而构造的一个非常大的地址空间。

虚存的最大容量由CPU的地址长度决定。虚存的实际容量由CPU的地址长和外存的容量决定,
当CPU的地址长度能表示的大小远远大于外存容量时,虚存的实际容量为内存和外存容量之和;
当外存容量远大于CPU字长能表示的大小时,虚存的实际容量由CPU字长决定。
一般情况下,CPU的地址长度能表示的大小都大于外存容量。

10.实现请求页式管理,需要对页表进行修改,一般要增加状态位、修改位、访问位。试说明它们的作用。

(1) 有效位(状态位):用来指示某页是否在主存。
➢为1表示该页在主存,完成正常的地址变换;
➢为0表示该页不在主存,由硬件发出一个缺页中断,转操作系统进行缺页处理。
(2) 修改位:指示该页调入主存后是否被修改过。
“1”表示修改过,“0”表示未修改过。
(3) 访问位(引用位):指示该页最近是否被访问过,“1”表示最近访问过,“0”表示最近未访问。

11.产生缺页中断时,系统应做哪些工作?

缺页处理过程简述
1. 根据当前指令的逻辑地址查页表的有效位。
2. 有效位为0,该页不在主存,产生缺页中断。
3. 操作系统处理缺页中断,寻找一个空闲块(页框)
4. 若有空闲页框,则装入所需页。
5. 若无空闲页框,则按页面置换算法选择一个已在主存的页,进行淘汰。若修改过还要写磁盘。装入需要的页。之后要修改相应的页表和主存分块表。
6. 恢复现场,重新执行被中断的指令。

12.会利用FIFO、LRU、OPT以及时钟页面置换算法描述页面置换过程,计算产生的缺页率。Belady异常。

① 最佳置换算法(OPT算法)
② 先进先出置换算法(FIFO)
③ 最近最少使用的页面置换算法(LRU)
④ 时钟页面置换算法
(1)最佳置换算法
简称OPT(optimal)算法。选择以后不再访问的页或经很长时间之后才可能访问的页进行置换
(2)先进先出置换算法(FIFO)
⚫ 发生页面置换时,置换在主存驻留时间最长的那一页。
⚫ 页表里的页面,按访问先后顺序排成一个队列,设置队列头指针,指向最早进入的页。发生页面置换时,置换头指针所指的页,然后头指针加1,循环向下指。表长为获得的主存块数。
⚫ Belady异常:Belady在1969年发现,采用FIFO算法,当为进程分配的主存块多时,有时产生的缺页中断次数反而增多。
(3)LRU页面置换算法
⚫ 最近最少使用LRU,Least Recently Used。
⚫ 根据局部性原理,置换那些在最近一段时间里最少使用的一页。
⚫ 进程的工作集:在一段时间内,进程集中在一组子程序或循环中执行,导致所有的存储器访问局限于进程地址空间的一个固定的子集。
⚫ 利用栈记录页的使用。正在引用的页放在栈顶,最近最少使用的页放在栈底。
⚫ 为了便于栈中元素移动,可采用双向链。
具有LRU算法特性的一类算法所具有的性质:M ( m , r ) \(\subseteq\)M ( m+1 , r )
⚫ m为分配的主存块数,r为页面引用序列。
⚫公式表明:在任何时刻,主存块为m+1时,存于主存中的一串页面必然包含主存块为m时存于主存中的各页。决不会出现Belady异常。
(4)时钟页面置换算法
⚫ 第二次机会算法,近似LRU算法。
⚫ 页表中的引用位:0表示最近未被引用;1表示最近被引用。
⚫ 将进程所访问的页放在一个像时钟一样的循环链中。链中的节点数就是为之分配的主存块数。
⚫ 系统设有一个指针指向最早进入主存的页。
⚫ 淘汰时,检查指针所指页。若引用位为0,则用新页置换之,指针向前走一个位置。若引用位为1,清0,指针前进,直到找到引用位为0的页。

13.什么是程序的局部性原理?什么叫系统抖动?工作集模型如何防止系统抖动?

程序访问的局部性原理
1) 时间局部性:程序中往往含有许多循环,在一段时间内会重复执行该部分。
2) 空间局部性:程序中含有许多分支,在一次执行中,只有满足条件的代码运行,不满足条件的代码不运行。即使顺序执行程序,程序的地址域在短时间内变化不大。
3) 在进程运行过程中,用到哪部分程序或数据再由系统自动装入。

抖动现象:刚被置换的页面马上又要用,因而又要把它调入。调入不久再被置换,置换不久再次装入。如此频繁地调入调出,降低了系统的处理效率。

⚫ 进程的工作集:在一段时间内,进程集中在一组子程序或循环中执行,导致所有的存储器访问局限于进程地址空间的一个固定的子集。
操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的物理块。
操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的物理块。
如果所有工作集之和增加到超过了可用物理块的总数,操作系统会暂停一个进程,将其页面调出并且将其物理块分配给其他进程,防止出现抖动现象。

14.多级页表的概念,多级页表中页表建立的时机。写时复制技术的概念。

◆页表不必占用连续的内存空间,页表的建立推迟到要访问页时才进行
多级页表其实就是对页表实施分页管理,即内存中只常驻一级页表,一级页表的每个PTE指向一个二级页表的基地址,以此类推,最后一级页表存储物理块号和块内偏移量,因为页和块的大小相等,所以页偏移量和块偏移量相等,只块号不同,即虚拟地址通过查页表就是完成了页号到块号的转换.

由于页表占用很庞大的空间,页表的建立不再是进程装入主存时,而是推迟到要访问页时,才为包含该页的页表分配空间和建立页表页。

写时复制(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调用者都是透明的。此作法主要的优点是如果调用者没有修改该资源,就不会有副本(private copy)被创建,因此多个调用者只是读取操作时可以共享同一份资源。
⚫ 写时复制的页面保护:若没有进程向共享主存页写时,两个进程就共享之。若有进程要写某页,系统就把此页复制到主存的另一个页框中,并更新该进程的页表,使之指向此复制的页框,且设置该页为可读/写。
⚫ 父子进程之间的写时复制:父子进程最初共享父进程的所有页,将这些页标记为写时复制。

15.页的共享问题。需要一个专门数据结构来记录进程间共享页。

◆原型页表
把共享页锁在内存,且在页表中增加引用计数项,仅当其引用计数为0时,才允许调出或释放盘空间。
P313

大纲问题回答

1. 存储器管理的功能。名字空间、地址空间、存储空间、逻辑地址、物理地址。

(1)存储器分配:解决多进程共享主存的问题
(2)地址转换或重定位:研究各种地址变换方法及相应的地址变换机构。
(3)存储器保护:防止故障程序破坏OS和其它信息
(4)存储器扩充:采用多级存储技术实现虚拟存储器,交换技术。
(5)存储器共享:研究并发进程如何共享主存中的程序和数据。
⚫ 符号名字空间:源程序中的各种符号名的集合所限定的空间。源程序用符号名访问变量和子程序。
⚫地址空间(address space)表示任何一个计算机实体所占用的内存大小。比如外设、文件、服务器或者一个网络计算机。地址空间包括物理空间以及虚拟空间。
⚫ 存储空间:物理存储器中全部物理存储单元的集合所限定的空间。
⚫ 逻辑地址是指在计算机体系结构中是指应用程序角度看到的内存单元(memory cell)、存储单元(storage element)、网络主机(network host)的地址。 逻辑地址往往不同于物理地址(physical address),通过地址翻译器(address translator)或映射函数可以把逻辑地址转化为物理地址。
逻辑地址:是指用户程序经编译后,每个目标模块以0为基地址进行的顺序编址。逻辑地址又称相对地址 。
⚫ 物理地址:是指内存中各物理存储单元的地址从统一的基地址进行的顺序编址。物理地址又称绝对地址,它是数据在内存中的实际存储地址。
注:符号名字空间属于地址空间

2. 什么是地址重定位?分为哪两种?各是依据什么和什么时候实现的?试比较它们的优缺点。(2)

◆静态重定位、动态重定位
⚫ 程序地址空间的逻辑地址→存储空间的物理地址。地址映射,或地址变换。
(1)静态重定位
⚫ 在进程执行前,由装入程序把用户程序中的逻辑地址全部转换成物理地址。
⚫ 特点:
1)不需要硬件支持;
2)要求占用连续的存储区;
3)在程序执行期间不能移动,主存利用率低;
4)难以做到程序和数据的共享;
5)用于单道批处理系统。
(2)动态重定位
⚫ 装入程序把用户程序和数据原样装入主存区。程序运行时,把该主存区的起始地址送入重定位寄存器。需硬件地址转换机构。
⚫ 用于多道批处理系统、分时系统
⚫ 优点:
◆主存利用充分。可移动用户程序。移动后,只需修改重定位寄存器。
◆程序不必占有连续的主存空间。
◆便于多用户共享主存中的程序和数据。

3. 内存划分为两大部分:用户空间和操作系统空间。存储器管理是针对用户空间进行管理的。

4. 存储保护的目的是什么?对各种存储管理方案实现存储保护时,硬件和软件各需做什么工作?(1)

防止地址越界:进程运行时产生的所有存储器访问地址都要进行检查,确保只访问为该进程分配的存储区域。
正确地进行存取:对所访问的存储空间的存取方式(读、写、执行)进行检查,以防止由于误操作,使其数据的完整性受到破坏。
硬件:
◼ 上、下界寄存器:分别存放进程在主存区的最高地址和起始地址。进程运行时,下界寄存器 ≤ CPU访存地址 ≤ 上界寄存器。否则产生地址越界错误,停止运行。
◼ 基址和限长寄存器:进程运行时,将其分区的首地址装入基址(或重定位)寄存器,将其程序的大小装入限长寄存器。每个逻辑地址应小于限长寄存器内容。
软件(页式存储):
⚫ 保护:可在页表中增加对该页的操作方式位,以表示是可读写/只读/只执行等。
软件(段式存储):
➢对段的信息进行保护:在段表中增加相应的操作方式字段,对相应的段规定读、写、执行是否许可的操作权限。
段允许动态扩充
页式管理:
使用越界中断的判断机构判断是否越界,软件上为页表增加该页的操作方式位以表示可读可写可执行;
段式管理:
硬件上,控制寄存器和段表内部均进行越界中断判断;软件上,为段表增加操作方式位;

5. 试述可变式分区管理空闲区的方法及存储区的保护方式。覆盖与交换有什么特点?(4)

⚫ 根据作业的大小动态地划分分区,使分区的大小正好等于作业大小。
◆各分区的大小是不定的;
◆内存中分区的数目也是不定的。
(1)分区说明表
始址 长度 占用标志
⚫ 分配主存:
◆从未分配区表中找一个空闲区。将其一分为二,一部分分给作业,另一部分留在表中。
◆在已分配区表中进行记录。
⚫ 回收主存:
◆将回收的分区登记在未分配区表中。
◆将该作业占用的已分配区表项置为空。
优点:比较直观、简单。
缺点:由于主存分区个数不定,所以表格的长度不好确定。要么表格溢出,要么表格浪费。
(2)空闲区链表
⚫ 是记录内存空闲区的一种较好方法。
⚫ 已分配区,在进程的PCB中有记录。
⚫ 在每个分区的首字和尾字中,有该区信息的记录。
可变式分区--分配算法
(1)首次适应(first fit)法
◆要求空闲区表或空闲区链中的空闲区按地址从小到大排列。
◆分配内存时,从起始地址最小的空闲区开始扫描,直到找到一个能满足其大小要求的空闲区为止。分一块给请求者,余下部分仍留在其中。
◆优点:
➢实现简单
易于产生更大空闲区,能够保留高地址部分的大空闲区,为大进程到达创造了条件
◆缺点:
➢容易产生碎片,低地址部分不断被划分,留下许多难以利用、很小的空闲区
(2)最佳适应(best fit)法
◆存储分配程序要扫描所有空闲区,直到找到能满足进程需求且为最小的空闲区为止。
◆优点:
➢避免了对大空闲区的拆分
◆缺点:
➢因为要查找所有的分区,所以比首次适应算法效率低
➢可能把主存划分得更小,出现很多无用的碎片
◆改进:从小到大对空闲区排序。
(3)最坏适应(worst fit)法
◆要扫描所有的空闲区,直到找到满足进程要求且为最大的空闲区为止。一分为二,一部分分给进程,另一部分仍留在链表中。
◆目的:使剩下的空闲区可用。
◆缺点:要扫描所有的空闲区;大空闲区的不断分割,可能满足不了大进程的要求
◆改进:从大到小对空闲区排序,以提高查找速度。
回收一个释放区
若释放区与空闲区相邻接,要进行合并。

存储区的保护方式:
基址和限长寄存器:进程运行时,将其分区的首地址装入基址(或重定位)寄存器,将其程序的大小装入限长寄存器。每个逻辑地址应小于限长寄存器内容。

覆盖:
允许同一主存区可被不同程序段重复使用,实质上就是让不同时执行的程序段共用同一主存区;需要系统提供覆盖管理控制程序,用户提供覆盖结构;主要用于系统内部的程序管理;
覆盖的特点:
⚫ 特点:打破了必须将一个进程的全部信息装入主存后才能运行的限制。在逻辑上扩充了主存。小主存可运行大进程。
交换:系统根据需要把主存中暂不运行的进程的部分或全部信息移到外存,而把外存中的进程移进主存并投入运行;
交换的特点:
⚫ 特点:打破了必须将一个程序一旦进入主存便一直到运行结束的限制。缺点是进程的大小受实际主存容量的限制。由于这种交换系统只保留一个运行进程的完整信息在主存中,故它不能使主存得到充分利用,也不能保证分时用户的合理响应时间

6. 页表的作用是什么?简述页式管理的地址变换过程。能利用页表实现逻辑地址转换成物理地址。管理内存的数据结构有哪些?(4)

◆存储分块表、位示图
⚫ 页表:将进程虚页转换成主存物理块
页式管理的地址变换过程为:首先取页号与控制寄存器中的内容进行越界判断,若不越界,则与基址相加得到页表对应页;之后从对应页取出页号对应的物理内存块号,取出逻辑地址作为页内地址,进行地址计算;
IMG_20221126_154658_edit_3586499925987630.jpg
image.png
地址计算的方法为:物理块号×物理块大小+页内地址;

a. 存储分块表:记录存储器中的块的占用情况。表的第一项指出当前空闲块总数,第二项为指向第一个空闲块的指针,各空闲块通过单向链链接在一起。
◆ 分配主存时,查存储分块表。先查空闲块总数是否够用,再分配。同时为进程建立页表。
◆ 进程完成时,回收主存块。
image.png
b. 位示图:每个主存块对应位示图中的一位。0表示空闲,1表示被占用。
◆主存块号←→位示图中的字节、位
◆块越小,位示图越大;块越大,位示图越小

7. 什么是页式存储器的内碎片?它与页的大小有什么关系?可变式分区管理产生什么样的碎片?(1)

◆内碎片、外碎片
内碎片:进程的代码段、数据段、堆栈段的最后一页总有得不到利用的部分存储空间。
内零头存在于页式管理的最后一页,若这一页未用完,则未用完的部分就是内零头即碎片;一般内零头的大小和页的大小成正比
在内存管理中,内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。
外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。
⚫ 页尺寸大:页的内部碎片大。
⚫ 页尺寸小:进程的页表长。
固定分区存在内部碎片,可变式分区分配会存在外部碎片;
页式虚拟存储系统存在内部碎片;段式虚拟存储系统,存在外部碎片。
注:内部碎片:分配出去但没用,外部碎片:太小没法分配出去

8. 段式存储器管理与页式管理的主要区别是什么?(4)

(1) 段是由用户划分的;页是由硬件划分的,对用户是透明的。
(2) 页的大小固定;段的大小不固定。
(3) 段式用二维地址空间(段号+段内地址,用户地址空间被人为分了很多段);页式用一维地址空间(用户地址空间还是连续的)。
(4) 段允许动态扩充,便于存储保护和信息共享。
(5) 段可能产生主存碎片;页消除了碎片。
(6) 段式管理便于实现动态链接,页式管理只能进行静态链接。
注:段是用户划分的大小不固定的(也即可以动态扩充的)便于动态链接的可能产生主存碎片的二维地址空间。

9. 什么是虚拟存储器。虚拟存储器的容量能大于主存容量加辅存容量之和吗?(5)

虚拟存储器:是为满足应用对存储器容量的巨大需求而构造的一个非常大的地址空间

虚存的最大容量由CPU的地址长度决定。虚存的实际容量由CPU的地址长和外存的容量决定
当CPU的地址长度能表示的大小远远大于外存容量时,虚存的实际容量为内存和外存容量之和;
当外存容量远大于CPU字长能表示的大小时,虚存的实际容量由CPU字长决定。
一般情况下,CPU的地址长度能表示的大小都大于外存容量。

10.实现请求页式管理,需要对页表进行修改,一般要增加状态位、修改位、访问位。试说明它们的作用。(4)

(1) 有效位(状态位):用来指示某页是否在主存
➢为1表示该页在主存,完成正常的地址变换;
➢为0表示该页不在主存,由硬件发出一个缺页中断,转操作系统进行缺页处理。
(2) 修改位:指示该页调入主存后是否被修改过
“1”表示修改过,“0”表示未修改过。
(3) 访问位(引用位):指示该页最近是否被访问过,“1”表示最近访问过,“0”表示最近未访问。

11.产生缺页中断时,系统应做哪些工作?(1)

缺页处理过程简述
1. 根据当前指令的逻辑地址查页表的有效位。
2. 有效位为0,该页不在主存,产生缺页中断。
3. 操作系统处理缺页中断,寻找一个空闲块(页框)
4. 若有空闲页框,则装入所需页。
5. 若无空闲页框,则按页面置换算法选择一个已在主存的页,进行淘汰。若修改过还要写磁盘。装入需要的页。之后要修改相应的页表和主存分块表。
6. 恢复现场,重新执行被中断的指令。

12.会利用FIFO、LRU、OPT以及时钟页面置换算法描述页面置换过程,计算产生的缺页率。Belady异常。(5)

(1)最佳置换算法(OPT算法)
简称OPT(optimal)算法。选择以后不再访问的页或经很长时间之后才可能访问的页进行置换
最优,新进入的页挤掉的是下一次访问距现在最远的页;(若在访问队列的末尾附近,可能也看上一次访问距现在最远)
(2)先进先出置换算法(FIFO)
⚫ 发生页面置换时,置换在主存驻留时间最长的那一页。
⚫ 页表里的页面,按访问先后顺序排成一个队列,设置队列头指针,指向最早进入的页。发生页面置换时,置换头指针所指的页,然后头指针加1,循环向下指。表长为获得的主存块数。
⚫ Belady异常:Belady在1969年发现,采用FIFO算法,当为进程分配的主存块多时,有时产生的缺页中断次数反而增多
(3)最近最少使用的页面置换算法(LRU)
⚫ 最近最少使用LRU,Least Recently Used。
⚫ 根据局部性原理,置换那些在最近一段时间里最少使用的一页。
⚫ 进程的工作集:在一段时间内,进程集中在一组子程序或循环中执行,导致所有的存储器访问局限于进程地址空间的一个固定的子集。
⚫ 利用栈记录页的使用。正在引用的页放在栈顶,最近最少使用的页放在栈底。
⚫ 为了便于栈中元素移动,可采用双向链。
具有LRU算法特性的一类算法所具有的性质:M ( m , r ) \(\subseteq\)M ( m+1 , r )
⚫ m为分配的主存块数,r为页面引用序列。
⚫公式表明:在任何时刻,主存块为m+1时,存于主存中的一串页面必然包含主存块为m时存于主存中的各页。决不会出现Belady异常。
(4)时钟页面置换算法
⚫ 第二次机会算法,近似LRU算法。
⚫ 页表中的引用位:0表示最近未被引用;1表示最近被引用。
⚫ 将进程所访问的页放在一个像时钟一样的循环链中。链中的节点数就是为之分配的主存块数。
⚫ 系统设有一个指针指向最早进入主存的页。
⚫ 淘汰时,检查指针所指页。若引用位为0,则用新页置换之,指针向前走一个位置。若引用位为1,清0,指针前进,直到找到引用位为0的页。

13.什么是程序的局部性原理?什么叫系统抖动?工作集模型如何防止系统抖动?

程序访问的局部性原理
1) 时间局部性:程序中往往含有许多循环,在一段时间内会重复执行该部分。
2) 空间局部性:程序中含有许多分支,在一次执行中,只有满足条件的代码运行,不满足条件的代码不运行。即使顺序执行程序,程序的地址域在短时间内变化不大。
3) 在进程运行过程中,用到哪部分程序或数据再由系统自动装入。

抖动现象:刚被置换的页面马上又要用,因而又要把它调入。调入不久再被置换,置换不久再次装入。如此频繁地调入调出,降低了系统的处理效率。

⚫ 进程的工作集:在一段时间内,进程集中在一组子程序或循环中执行,导致所有的存储器访问局限于进程地址空间的一个固定的子集。
操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的物理块。
操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的物理块。
如果所有工作集之和增加到超过了可用物理块的总数,操作系统会暂停一个进程,将其页面调出并且将其物理块分配给其他进程,防止出现抖动现象。

14.多级页表的概念,多级页表中页表建立的时机。写时复制技术的概念。(4)

◆页表不必占用连续的内存空间,页表的建立推迟到要访问页时才进行
大页表可以不在主存中连续存放,而是将其分散到许多页中存放,并为这些页建立相应的页表,即多级页表;

由于页表占用很庞大的空间,页表的建立不再是进程装入主存时,而是推迟到要访问页时,才为包含该页的页表分配空间和建立页表页。

写时复制(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调用者都是透明的。此作法主要的优点是如果调用者没有修改该资源,就不会有副本(private copy)被创建,因此多个调用者只是读取操作时可以共享同一份资源。
写时复制技术指若有进程写某个页,则系统把此页复制到主存另一个页框中,并更新该进程的页表,并置该页为可读/写;
⚫ 写时复制的页面保护:若没有进程向共享主存页写时,两个进程就共享之。若有进程要写某页,系统就把此页复制到主存的另一个页框中,并更新该进程的页表,使之指向此复制的页框,且设置该页为可读/写。
⚫ 父子进程之间的写时复制:父子进程最初共享父进程的所有页,将这些页标记为写时复制。

15.页的共享问题。需要一个专门数据结构来记录进程间共享页。(4)

◆原型页表
页的共享可避免出现多个同一页的副本,节约主存;
通常只读页可共享,而可读/写的数据页不可共享;
共享页除了要专门的数据结构记录以外,还需要在页表中添加引用计数项,仅当此项为 0 时才允许调出或释放盘空间;
P313

posted @ 2023-08-07 13:44  LateSpring  阅读(327)  评论(0编辑  收藏  举报