P1 1 0 0 0 1 7 5 0 P2 1 3 5 4 2 3 5 6 P3 0 6 3 2 0 6 5 2 P4 0 0 1 4 0 6 5 6 使用银行家算法回答下面问题: a.Need矩阵的内容是怎样的? b.系统是否处于安全状态?
c.如果从进程P1发出一个请求(0 4 2 0),这个请求能否被满足?
Answer:a.Need矩阵的内容是P0(0 0 0 0) P1(0 7 5 0) P2(1 0 0 2) P3(0 0 2 0)
P4(0 6 4 0)。
b. .系统处于安全状态,因为Available矩阵等于(1 5 2 0),进程P0和P3都可以
运行,当进程P3运行完时,它释放它的资源,而允许其它进程运行。
c.可以被满足,满足以后,Available矩阵等于(1 1 0 0),当以次序P0,P2, P3, P1,P4运行时候,可以完成运行。
7.12在死锁检测算法中,乐观假设是什么?这种假设怎样可以被违反?
Answer:乐观假设是在资源分配方面和进程请求资源的过程中,不存在任何形式的循环等待。如果在实际过程中,一个循环等待确实发生,这种假设可以被违反。 8.1解释内部碎片和外部碎片的区别?
Answer:内部碎片是某一区域或某一页中,未被占据其位置的作业所使用的区域。直到作业完成,释放页或区域,这个空间才能被系统所利用。
8.2考虑下面产生二进制的过程。编译器是用来为每个独立单元产生目标代码,连接编辑器是用来联合各个部分的目标单元组成一个单一的程序二进制。连接编辑器是怎样对内存地址改变指令和数据的捆绑?从编译器到连接编辑器,什么信息需要被通过,而使内存绑定连接编辑器作业比较容易?
Answer:连接编辑器不得不将分解的符号地址替换为在最终的程序二进制中,与变量相联系的实际地址。为了完成这个,单元必须追踪那些查阅到的未分解的符号指令。在连接期间,全部程序二进制中的每个单元会被分配到一序列的地址空间,当它完成时,对于未分解的符号关系,可以通过这个二进制输出,当每个另外单元包含一系列需要修复的指令时,这个二进制可以在另外单元被修复。
8.3按顺序给出5个部分的内存,分别是100KB,500KB,200KB,300KB和600KB,用 first-fit,best-fit和worst-fit算法,能够怎样按顺序分配进程212KB,417KB,112KB,426KB和426KB?哪个算法充分利用了内存空间? Answer: a. First-fit:
b. 212K is put in 500K partition c. 417K is put in 600K partition
d. 112K is put in 288K partition (new partition 288K = 500K ?212K) e. 426K must wait f. Best-fit:
g. 212K is put in 300K partition h. 417K is put in 500K partition i. 112K is put in 200K partition j. 426K is put in 600K partition k. Worst-fit:
l. 212K is put in 600K partition m. 417K is put in 500K partition n. 112K is put in 388K partition o. 426K must wait
Best-fit:算法充分利用了内存空间。
8.4在运行过程中,许多系统允许程序分配更多的内存给它的地址空间。在程序堆中的数据分配是这种分配方式的一个实例。在下面的方案中,为了支持动态内存分配的要求是什么? a.连续内存分配b.纯段式分配c.纯页式分配
Answer:a.连续内存分配:当没有足够的空间给程序去扩大它已分配的内存空间时,将要求重新分配整个程序。
b.纯段式分配:当没有足够的空间给段去扩大它的已分配内存空间时,将要求重新分配整个段。
c.纯页式分配:在没有要求程序地址空间再分配的方案下,新页增加的分配是可能的。 8.5 比较在主存组织方案中,连续内存分配,纯段式分配和纯页式分配在下面问题中的关系。
a.外部碎片b.内部碎片c.通过进程分享代码的能力
Answer:连续内存分配会产生外部碎片,因为地址空间是被连续分配的,当旧进程结束,新进程初始化的时候,洞会扩大。连续内存分配也不允许进程共享代码,因为一个进程的虚拟内存段是不被允许闯入不连续的段的。纯段式分配也会产生外部碎片,因为在物理内存中,一个进程的段是被连续放置的,以及当死进程的段被新进程的段所替代时,碎片也将会产生。然而,段式分配可以使进程共享代码;比如,两个不同的进程可以共享一个代码段,但是有不同的数据段。纯页式分配不会产生外部碎片,但会产生内部碎片。进程可以在页
granularity中被分配,以及如果一页没有被完全利用,它就会产生内部碎片并且会产生一个相当的空间浪费。在页granularity,页式分配也允许进程共享代码。
8.6在一个页式分配系统中,为什么一个进程不被允许进入它所不拥有的内存?操作系统怎么能被允许进入其它内存?它为什么应当可以或不可以进入?
Answer:地址在页式分配系统上是一个逻辑页号和一个偏移量。在逻辑页号的基础上产生一个物理页号,物理页通过搜索表被找到。因为操作系统控制这张表的内容,只有在这些物理页被分配到进程中时,它可以限制一个进程的进入。一个进程想要分配一个它所不拥有的页是不可能的,因为这一页在页表中不存在。为了允许这样的进入,操作系统只简单的需要准许入口给无进程内存被加到进程页表中。当两个或多个进程需要交换数据时,这是十分有用的。------它们只是读和写相同的物理地址(可能在多样的物理地址中)。在进程内通信时,这是十分高效的。
8.7比较页式存储与段式存储为了从虚地址转变为物理地址,在被要求的地址转化结构的内存数量方面的有关内容。
c页式存储需要更多的内存来保持转化结构,段式存储的每个段只需要两个寄存器,一个保存段的基地址,另一个保存段的长度。另一方面,页式存储每一页都需要一个入口,这个入口提供了那页所在的物理地址。
8.8在许多系统中的程序二进制的一般构造如下:代码被存储在较小的固定的地址中,比例0。代码段后紧跟着被用来存储程序变量的数据段。当这个程序开始运行,栈被分配到虚地址空间的另一个端末尾,并被允许向较低的虚地址扩张。上述结构在下列方案中具有什么意义: a.连续内存分配b.纯段式分配c.纯页式分配
Answer:1)当程序开始运行时,连续内存分配要求操作系统给程序分配最大限度的虚地址空间。这可能造成比进程所需要的实际内存大很多。2)纯段式分配,在程序开始运行时,给每个段分配较小的空间,而且能随着段的扩展而扩大,这就给操作系统提供了灵活性。3)
纯页式分配在一个进程开始运行时,就不需要操作系统给进程分配最大的虚地址空间。当一个程序需要扩展它的堆或栈时,它需要分配一个新的页,但是相关的页表入口被提前分配了。 8.9考虑一个分页系统在内存中存储着一张页表。a.如果内存的查询需要200毫秒,那么一个分页内存的查询需要多长时间?b.如果我们加上相关联的寄存器,75%的页表查询可以在相关联的寄存器中找到,那么有效的查询时间是多少?(假设如果入口存在的话,在相关的寄存器中找到页表入口不花费时间)
Answer:a.400毫秒:200毫秒进入页表,200毫秒进入内存中的字 b.有效进入时间=0.75*200毫秒+0.25*400毫秒=250毫秒 8.10为什么有时候段式分配存储与页式分配存储可以联合成一种方案?
Answer:段式存储与页式存储经常结合在一起是为了提高它们两个中的每一个存储方式。当页表变的十分大时,段式存储是十分有用的。一大段连续的页表是不习惯被分解成为一个以0为段表地址的单一段表入口。分页的段式存储句柄有一个非常大的段的时侯,就需要很多时间来进行分配。通过把段分页,我们降低了由于外部碎片而造成的内存浪费,而且也简化了分配。
8.11解释为什么当共享一个使用段式存储的reenteant单元时比纯页式存储时这样做要来的容易?
Answer:因为段式存储是以内存的逻辑共享为基础的,而不是物理的,任何大小的段在段表中,被每个只具有一个入口的用户所共享。而分页必须在页表中对每个被共享的页有相同的入口。
8.13问:页表分页的目的是什么?
答:在某些情况下,分页的页表可以变得足够大,可以简化内存分配问题(确保全部可以分
配固定大小的网页,而不是可变大小的块),确保当前未使用的部分页表可以交换。 8.14问:考虑分层分页方案,使用VAX架构。当用户程序执行一个内存装载程序时,有多少个内存操作要执行? 答:当一个内存装载程序完成时,有三个内存操作可以完成,一个是说明能够被打到的页表
的位置。第二个是页表进入自己。第三个是现实的内存装载操作。 8.15问:比较段页式表和哈希页表在处理大量的地址空间上,在什么环境下,哪一个方案
更好? 答:当一个程序占用大的虚拟地址空间的一小部分时,哈希页表更适合小一点的。哈希页表
的缺点是在同样的哈希页表上,映射多个页面而引起的冲突。如果多个页表映射在同个入口处,则横穿名单相应的哈希页表可能导致负担过重。这种间接最低的分割分页方案,
即每一页表条目保持有关只有一页。
8.16问:假设Intel的地址转换方案如图8.22所示
A.描述Intel80836将逻辑地址转换成物理地址所采用的所有步骤。 B.使用这样复杂的地址转换硬件对硬件系统有什么好处?
C.这样的地址转换系统有没有什么缺点?如果有,有哪些?如果没有,为什么不是每个制造商都使用这种方案。 答:A。选择符是段描述符表的标志,段描述符的结果加上原先的偏移量构成页表,再加上目录、偏移量构成页表,构成线性地址。这个目录是页目录的标志。目录项选择页表,页表域是页表的索引。页表项再加上偏移量,构成物理地址。 B.这样的页表转换系统提供了灵活性,允许大多数操作系统在硬件上执行内存工具,而不是实施部分硬件和一些软件。因为,它可以在硬件上实施,更有效率(内核更简单) C.地址转换在查找多样表时更花时间,缓存帮助,仍会导致缓存丢失。
9.1问。举一个例子,IBM360/370 的资源和目的地区重叠时说明,(MVC)重新启动移动块的问题。 答:假设页面边缘为1024,移动空间从资源区800:1200到目标区700:1100,假设当页表
在1024边缘发生故障访问错误,这时候的位置800:923已覆盖新的值,因此,重新启动区块移动指令会导致在800:923到700:823之间复制新的值,而这是不正确的。 9.2问:考虑支持请求页面调度的硬件需求。
答:对于每一个内存访问操作,页表需要检查相应的页表驻留与否和是否计划已经读取或写入权限访问页面,一个TLB可以作为高速缓存和改善业绩的查询操作。 9.3问:什么是写时拷贝功能,在什么情况下,有利于此功能?支持此功能的硬件是什么? 答:当两个进程正在访问同一套程序值(例如,代码段的二进制代码)在写保护的方式下,
映射相应的页面到虚拟地址空间是有用的,当写操作进行时,拷贝必须允许两个程序分别进行不同的拷贝而不干扰对方。硬件要求:在每个内存访问的页表需要协商,以检查是否该页表是写保护。如果确实是写保护,陷阱会出现,操作系统可以解决这个问题。 9.4问:某个计算机给它的用户提供了2的虚拟内存空间,计算机有2B的物理内存,虚拟内存使用页面大小为4094B的分页机制实现。一个用户进程产生虚拟地址11123456,现在说明一下系统怎么样建立相应的物理地址,区分一下软件操作和硬件操作。(第六版有翻译) 答:该虚拟地址的二进制形式是 0001 0001 0001 0010 0011 0100 0101 0110。由于页面大
小为212,页表大小为220,因此,低12位的“0100 0101 0110 ”被用来替换页(page),
32
14