本章无思考题
习题七
7.1. 除了采用请求调页实现换入以外, 也可以使用请求调段来实现换入, 根据段页式内存管理 机制的工作过程, 给出请求调段的详细工作过程。并就请求调页和请求调段进行对比分析, 说明为什么在实际操作系统实现内存换入时更倾向于采用请求调页。
请求调段需要分段管理,不用段页式了。
- 程序运行之前,只需先调入若干个分段(不必调入所有的分段)
- 发现所需段的段表对应行无效,此时请求调段。产生中断。
- 在物理内存中找到合适的空闲位置(由于段长不定,所以调段比调页更复杂)
- 将内容从磁盘复制到物理内存。
- 修改段表的基址(直接指向物理内存)和有效位(改为有效)。
- 恢复中断,重新执行刚刚被中断的语句。
7.2. 分析缺页处理主要的代价及其原因。
主要代价:从磁盘向物理内存搬移文件。
为什么在系统颠簸时, CPU 利用率会 变得很低?
一直缺页,不断的中断,换出页,换入页,磁盘读写。cpu要等待
这个时候计算机主要在做些什么事?
读写磁盘
7.3. 为什么说选择未来最远使用的页面进行淘汰是最明智的选择? 即证明针对 一个页面访问序列, 该算法可以让缺页次数最少。
反证法:
- 假设算法A在某次置换时选择淘汰P,而后续访问序列是先P后Q。
- 这意味着在未来的某个时刻,当页面P被访问时,它必须被重新调入内存,因为算法A错误地淘汰了P而保留了Q。
- 因此,算法A至少比最远使用算法多产生了一次缺页。
7.4. 采用指针修改的方法, 画出页面栈 A、D、B (从栈顶到栈底) 的基于指针链表的数据结构, 并画出从该结构变成 D、A、B (从栈顶到栈底) 时的指针是如何一步一步变化的, 分析总共需要的内存访问次数。
如果用单向链表,A->D->B,此时访问D,就可变成D->A->B
访存找到D对应的指针pD,由于是单向链表,找到D的前一个节点的指针(pA)就很麻烦,可能要遍历全部节点。然后做出如下指针修改
tmp = pD->next;
pA->next = pD->next
pD->next = top;
top = pD;
双向链表可一下子就找到pA,缺点是八句话更新指针。
7.5. 针对虚拟页面访问序列: A B C A B D A D B C B, 假定分配给该进程的页框个数仍然 是 3, 采用基本 clock 算法, 即第二次机会置换算法, 画图给出各个时刻虚拟页面的 R 位情况, 并给出缺页情况和页面淘汰情况。
这个例子正好是基本clock算法不太奏效的一个序列.
7.6. 查阅资料再给出一种以 R 位为基础的 clock 算法的变形, 并比较分析该 clock 算法变形的 优缺点。
改进型CLOCK算法在原有的CLOCK算法基础上增加了一个修改位(modified bit),也称为脏位(dirty bit)。这样,每一页就有两个状态,分别是使用位(used bit)和修改位。这两种状态的组合可以分为四种情况:
- (0,0):最近没有使用也没有修改,最佳淘汰状态。
- (0,1):修改过但最近没有使用,将会被写回。
- (1,0):使用过但没有被修改,下一轮可能再次被使用。
- (1,1):使用过也修改过,下一轮页面置换的最后选择。
工作原理:
- 当页面被访问时,检查其R位。如果R位为1,则将其置为0,并继续扫描;如果R位为0,则淘汰该页面,并加载新页面。
- 如果页面被修改(即脏位为1),则在页面置换时优先考虑其他页面,以避免频繁写回磁盘。
优点:避免频繁写回磁盘。
缺点:暂时不知道
7.7. 假定某一基于分页的虚拟存储系统 (请求调页), 某时刻测得的利用率是: CPU 为 20%, 磁 盘交换区 I/O 为 99.7%, 其他设备 I/O 为 5%, 解释产生这一现象的原因。针对这种情况, 更换一 个更快的 CPU 能提高 CPU 利用率吗? 为什么?
内存不够,系统颠簸
增加磁盘交换分区的容量能提高 CPU 利用率 吗? 为什么?
不能。物理内存不够,增加交换区没用。增加交换区会让换入换出的开销降低一些,但是还是频繁的换入换出。
我的疑问:磁盘交换区跟普通磁盘有什么区别,普通磁盘不也是存换出的文件的吗
答案:磁盘交换区:专门用于虚拟内存管理,存储那些暂时不活跃的内存页。当物理内存(RAM)不足时,操作系统会将一些不常用的内存页移动到磁盘交换区。
并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会不堪重负),有相当一部分数据被直接交换到文件系统。例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。
ref:https://blog.csdn.net/jiahao1186/article/details/121644359
请设计一种与上面两种方法无关的提高 CPU 利用率的措施。
-
增加物理内存:增加物理内存可以减少缺页率,从而减少页面置换的频率,提高CPU的利用率。
-
减少多道程序程度:减少同时运行的进程数可以减轻内存压力,减少页面置换,提高CPU利用率。
-
优化页面置换算法:使用更高效的页面置换算法可以减少不必要的页面置换,提高CPU利用率。
7.8. 假设同时有超过 500 人上实验课, 登录并使用实验网站, 每个用户的登录都需要网站建立 一个进程来处理, 由于登录人数过多而导致网站响应缓慢。这个时候, 很多用户又都会习惯性地 刷新页面, 致使服务器又建立了更多的服务进程, 网站响应更慢了。请解释网站响应变慢的原因。
原因一:网络
原因二:服务器自身进程太多,每个进程分得的页框太少,导致频繁换入换出,即“系统颠簸”
此时管理员迅速响应, 试图从终端登录系统解决问题, 但管理员登录的过程也变得异常缓慢, 这是 为什么?
只有上面的原因二
管理员成功登录后, 应立即采取什么手段来解决问题? 为什么?
限制每个用户或IP的并发连接数,减少服务器同时需要处理的进程数量,减轻服务器负担。
7.9. 在进程新建、就绪、阻塞、运行、退出的五状态转移图基础上, 引入就绪挂起态和阻塞挂起态, 画出引入这两个状态以后的进程状态转移关系图。
先解释挂起操作:将进程从主存中移至外存中
7.10. 针对书中给出的全局置换策略的描述, 假定采用这样一个 clock 算法, 两个指针分别是扫 描指针和淘汰指针。两个指针都是每隔时间 τ (一个系统参数) 就工作一次, 且两个指针总是保持 一定的夹角间隔 (Δ , 又一个系统参数) 。两个指针的工作内容是: 扫描指针负责将 R 位清 0, 淘 汰指针发现页面的 R 位等于 0 时就将页面淘汰出去。系统的全局空闲物理页框组织成一个链表, 设计此时全局置换策略中的各个数据结构、算法以及相互关系。编写一个程序实现对该全局置换 策略的模拟。