用什么分配算法装入主存的托盘利用率怎么算最高

2008年下半年软件设计师上午试卷
考试中心《2008年下半年软件设计师上午试卷》在线考试
试卷年份2008年下半年
试题题型【单选题】
某虚拟存储系统采用最近最少使用(LRU)页面淘汰算法。假定系统为每个作业分配 3 个页面的主存空间,其中一个页面用来存放程序。现有某作业的部分语句如下:Var A: Array[1..128,1..128] OFi,j:FOR i:=1 to 128 DOFOR j:=1 to 128 DOA[i,j]:=0;设每个页面可存放 128 个整数变量,变量 i、j 放在程序页中,矩阵 A 按行序存放。初始时,程序及变量 i、j 已在内存,其余两页为空。在上述程序片段执行过程中,共产生 (1) &次缺页中断。最后留在内存中的是矩阵 A 的最后 &(2) &。(1)A、64 B、128 C、256 D、512(2)A、2 行 B、2 列 C、1 行 D、1 列
信管网参考答案:
B、A(仅供参考,欢迎评论交流)
信管网解析:
普通会员无法查看试题解析。[]
发表评论&&&&
李老师:信息系统项目管理师、国家工信部和科技部专家、高级项目经理、12年培训经验,编写
了多本教材,...
软考办网站
合作网站内容> 问题详情
实存的存储分配算法用来决定输入的程序和数据放到主存中的位置,采用“总是把程序装入主存中最大的
悬赏:0&答案豆
发布时间:
实存的存储分配算法用来决定输入的程序和数据放到主存中的位置,采用“总是把程序装入主存中最大的空闲区域”的算法称为(79)。A.最佳适应算法B.最差适应算法C.首次适应算法D.循环首次适应算法请帮忙给出正确答案和分析,谢谢!
权威推荐: & &
为您推荐的考试题库
您可能感兴趣的试题
1在文件存储设备管理中,有三类常用的空闲块管理方法,即位图向量法、空闲块链表法和(81)。A.一级目录法B.多级目录法C.分区法D.索引法2若某计算机系统是由500个元器件构成的串联系统,且每个元器件的夫效率均为10-7/H,在不考虑其他因素对可靠性的影响时,该计算机系统的平均故障间隔时间为______ 小时。A.2×104B.5×104C.2×105D.5×1053驻留在多个网络设备上的程序在短时间内同时产生大量的请求消息冲击某Web服务器,导致该服务器不堪重负,无法正常响应其他合法用户的请求,这属于______。A.网上冲浪B.中间人攻击C.DDoS攻击D.MAC攻击4某计算机系统的可靠性结构是如图1-18所示的双重串并联结构,若所构成系统的每个部件的可靠性为0.9,即R=0.9,则系统的可靠性为 ______。A.0.9997B.0.9276C.0.9639D.0.6561
我有更好的答案
电脑、移动端同步直播
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
每天只需0.4元
选择支付方式
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
恭喜你被选中为
扫一扫-免费查看答案!
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
提示:请截图保存您的账号信息,以方便日后登录使用。
常用邮箱:
用于找回密码
确认密码:&|&&|&&|&&|&&
当前位置: >
面试问题系列:内存管理之虚拟内存
作者:zhoulv2000 & 来源:转载 &
摘要: 一、虚拟内存术语
在存储分配机制中,尽管备用地址是主内存的一部分,它也可以被寻址。程序引用内存使用的地址与内存系统用于识别的物理地址是不同的,程序生成的地址会自动转化为机器地址。虚拟存储的大小受计算机系统寻址机制和可用的备用内存量的限制,而不受内存储位置实际数量的限制虚拟地址在虚拟内存中分配给某一位置的地址使该位置可以被
一、虚拟内存术语
& &&&虚拟内存& && && && && && && && && && && && && && &
& && & 在存储分配机制中,尽管备用地址是主内存的一部分,它也可以被寻址。程序引用内存使用的地址与内存系统用于识别的物理地址是不同的,程序生成的地址会自动转化为机器地址。虚拟存储的大小受计算机系统寻址机制和可用的备用内存量的限制,而不受内存储位置实际数量的限制
在虚拟内存中分配给某一位置的地址使该位置可以被访问,仿佛是主存的一部分
虚拟地址空间
分配给进程的虚拟存储
可用于某进程的内存地址范围
内存中存储位置的地址
二、分段和分页的特点(虚拟与非虚拟)
内存被划分为固定大小的小块,成为页框
内存被划分为固定大小的小块,成为页框
内存未被划分
内存未被划分
程序被划分为页
程序被划分为页
由程序员给编译器指定程序段
由程序员给编译器指定程序段
页框内有内部碎片
页框内有内部碎片
没有内部碎片
没有内部碎片
没有外部碎片
没有外部碎片
有外部碎片
有外部碎片
操作系统必须为每个进程维护一个页表,以说明每页对应的页框
操作系统必须为每个进程维护一个页表,以说明每页对应的页框
操作系统必须为每个进程维护一个段表,以说明每一段的加载地址和长度
操作系统必须为每个进程维护一个段表,以说明每一段的加载地址和长度
操作系统必须维护一个空闲页框页表
操作系统必须维护一个空闲页框页表
操作系统必须维护一个内存中空闲的空洞列表
操作系统必须维护一个内存中空闲的空洞列表
处理器使用页号和偏移地址来计算绝对地址
处理器使用页号和偏移地址来计算绝对地址
处理器使用段号和偏移量计算绝对地址
处理器使用段号和偏移量计算绝对地址
当进程运行时所有页必须在内存中,除非使用了覆盖技术
当进程在运行时,并不是所有页都必须在内存页框内,只是在需要时才读入页
当进程运行时所有段必须在内存中,除非使用了覆盖技术
当进程在运行时,并不是所有段都必须在内存,只是在需要时才读入段
把一页读入内存可能需要把另外一页写到磁盘
把一段读入内存可能需要把另外一段或几个段写到磁盘
三、系统抖动
当使用虚拟内存时,并不是把全部的进程页全部调用内存,只需要在内存中调用够用的页就可以了,当需要访问外存中的程序页时,再调用即可。这样减少了一个进程在内存中的空间,可以在主存里装入更多的进程,提高对计算机系统其他设备的利用率。但是,当页交换算法不合理时,如果一个页刚被调出内存,下面又要访问它,这样如果频繁地发生这种情况,那么处理器大部分时间都消耗在内存与外存之间的页交换上了,而不是执行指令。这种情况叫做“系统抖动”。
四、地址转换
1,分页系统中的地址转换
13:05:40 上传
(57.59 KB)
分页存储管理的基本原理是:将主存空间和辅存空间分别等分为大小相等的若干页,页的大小为个字节,如(1KB),(2KB),(4KB)等,并且为每个页按顺序指定一个页号,即0页、1页、2页、…。为了叙述方便,把主存的页(物理页或绝对页)称为页面。例如,若主存空间为8KB,辅存空间为16KB,页的大小为1KB,则主存空间可分为8个页面,其页面号为0~7;辅存空间可分为16个页,其页号为0~15。当程序运行时,以“页”为单位进行地址映射,即操作系统以页为单位把逻辑页从辅存调入主存,存放在物理页面上,供CPU执行。在分页存储管理机制中,把逻辑页对应的逻辑地址称为线性地址。
 在分页存储管理中,需要解决的关键问题是:选择哪一个物理页存放调入的逻辑页?如何将线性地址转换为物理地址?为了解决这些问题,系统为每一个页建立一个页表,保存在主存中,存放页的若干信息,如页号、容量、是否装入主存、存放在主存的哪一个页面上等。   CPU访问某页时,首先要查找页表,判断要访问的页是否在主存,若在主存为命中,否则为未命中。然后将未命中的页按照某种调度算法由辅存调入主存,并根据逻辑页号和存放的物理页面号的对应关系,将线性地址转换为物理地址。   页表在存储器中的位置由页表地址寄存器定位。页表中记录的状态信息为:第1项页号指示逻辑页;第2项特征位记录该逻辑页是否装入主存,“0”表示未装入,“1”表示已装入;第3项记录该逻辑页装入主存所存放的物理页的页面号,即1号逻辑页从辅存调入主存后,存放在第7号物理页面上。   存储单元的物理地址由页面号和页内地址两部分组成。 8KB主存的页内地址由地址线A9~A0提供,可寻址1KB的页内存储空间,地址范围为0~1 023;页面号由高3位地址线A12~A10提供,8个页面的页面号为0~7。由此可以看出,页面存储单元的物理地址为   物理地址=页的大小×页面号+页内地址   线性地址的确定方法与物理地址的确定方法完全相同,也是由页号和页内地址两部分组成,如图5.37(b)所示。16KB辅存空间可分为16页,页内地址由地址线A9~A0提供,其页号0~15由高4位地址线A13~A10提供。
13:15:59 上传
(28.63 KB)
  在进行地址转换时,由于逻辑页和物理页的大小相等,它们的页内地址是相同的,所不同的是页号,只要将线性地址的页号转换为物理地址的页面号即可。在图5.36中,给出1号逻辑页中某条指令访问数据的逻辑地址为2=1 476,它存入主存7页面上所对应的物理地址为1 024×7+452=7 620。
2,分段系统中的地址转换
13:16:19 上传
(44.17 KB)
分段存储管理的基本原理是:按程序的逻辑结构,以段为单位划分,各个段的长度因程序而异。为了说明逻辑段的各种属性,系统为每一个段建立一个段表(驻留在内存),记录段的若干信息,如段号、段起点、段长度和段装入情况等。CPU通过访问段表,判断该段是否已调入主存,并完成逻辑地址与物理地址之间的转换。
  逻辑地址由段号S和段内地址W组成,段号S相当于逻辑段的段名,它表示该逻辑段的起始地址。在进行地址转换时,操作系统用S检索段表,段表中记录的信息1表明该段已调入主存,b是S段装入主存的起始地址,因此该逻辑地址对应的物理地址为b+W。   在分段存储管理方式中,由于段的分界与程序的自然分界相对应,所以具有逻辑独立性,易于程序的编译、管理、修改和保护,也便于多道程序共享。但是,因为段的长度参差不齐,起点和终点不定,给主存空间分配带来了麻烦,容易在段间留下不能利用的“零头”,造成浪费
3、段页式系统中的地址转换
13:16:37 上传
(46.13 KB)
分页存储管理的主要特点是主存利用率高且对辅存管理容易,但模块化性能差;分段存储管理的主要特点是模块化性能好,但主存利用率不高且对辅存的管理比较困难。
段页存储管理是将分段存储管理和分页存储管理结合起来的一种折中方案。它首先将程序按其逻辑结构划分为若干个大小不等的逻辑段,然后再将每个逻辑段划分为若干个大小相等的逻辑页。主存空间也划分为若干个同样大小的物理页。辅存和主存之间的信息调度以页为基本传送单位,每个程序段对应一个段表,每页对应一个页表。CPU访问时,段表指示每段对应的页表地址,每一段的页表确定页所在的主存空间的位置,最后与页表内地址拼接,确定CPU要访问单元的物理地址
段页存储管理方式综合了段式管理和页式管理的优点,但需要经过两级查表才能完成地址转换,消耗时间多。
五、置换策略
置换算法有:最佳置换算法OPT、FIFO置换算法、最少使用页面置换算法、最近未使用页面置换算法、时钟页面置换算法等
OPT算法是理论算法,它将不再使用的页面换出,而实际中不能预知哪个页面不再使用,但是这个算法是最优算法,可以作为评测其他算法的性能。
FIFO算法:按照页面装进内存的时间进行置换,越老的页面最先被换出,不管该页面是否经常使用,这样就有可能导致缺页率增加,导致页面置换次数增加。
最少使用页面置换算法:按照上次使用时间进行排序,将离上次使用时间最长的页面换出,可以采用栈的数据结构,每次页面被访问将该页面号放在栈顶。
最近未使用页面置换算法:设置引用位R,每次调用将R=1,系统每个一段时间将R=0,当进行置换式检查哪个页面为零说明近期不会再使用,可以将其换出。
时钟页面置换算法:采用应用为R,当R=1说明被引用过,这种方法是FIFO的改进,根据装入内存时间和是否被引用过作为标准,首先从时间最长项检查,若R=0则置换出,若为1则检查下一项并将R=0。若全部R=1,则按照FIFO方法进行置换。
选择好置换的页面后,如何进行置换呢?
首先判断被置换的页面是否被修改过,若没有则可以直接擦出该页框,如修改过则必须首先保存到外存中,然后再读入新页面。
页面缓冲技术:不必先保存,因为每次都保存一个页面增加了IO操作,消耗过大。缓冲技术可以将被修改过和未修改过的页面存在缓冲区,然后对被修改过的页面进行批量保存,减少了IO操作。未修改的页面进行缓冲是为了防止在近期内被调用,不必再从外存调入内存,若在一段时间内不被调用则批量消除。
(感谢来源:http://blog.csdn.net/xue/article/details/8960770)
版权所有 IT知识库 CopyRight (C)
IT知识库 IT610.com , All Rights Reserved.  操作系统对内存的划分和动态分配,就是内存管理的概念。有效的内存管理在多道程序设计中非常重要,不仅方便用户使用存储器、提高内存利用率,还可以通过虚拟技术从逻辑上扩充存储器。内存管理的功能有:
内存空间的分配与回收
地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。
内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
存储保护:保证各道作业在各自的存储空间内运行,互不干扰。
程序装入和链接
  创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤:
编译:由编译程序将用户源代码编译成若干个目标模块。
链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
装入:由装入程序将装入模块装入内存运行。
  程序的链接有以下三种方式:
静态链接:在程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的可执行程序,以后不再拆开。
装入时动态链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,釆用边装入边链接的链接方式。
运行时动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接。其优点是便于修改和更新,便于实现对目标模块的共享。
  模块在装入内存时,同样有以下三种方式:
绝对装入。在编译时,如果知道程序将驻留在内存的某个位置,编译程序将产生绝对地址的目标代码。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。由于程序中的逻辑地址与实际内存地址完全相同,故不需对程序和数据的地址进行修改。
可重定位装入。在多道程序环境下,多个目标模块的起始地址通常都是从0开始,程序中的其他地址都是相对于起始地址的,此时应釆用可重定位装入方式。根据内存的当前情况,将装入模块装入到内存的适当位置。装入时对目标程序中指令和数据的修改过程称为重定位,地址变换通常是在装入时一次完成的,所以又称为静态重定位。静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。此外,作业一旦进入内存后,在整个运行期间不能在内存中移动,也不能再申请内存空间。
动态运行时装入,也称为动态重定位,程序在内存中如果发生移动,就需要釆用动态的装入方式。装入程序在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。因此,装入内存后的所有地址均为相对地址,这种方式需要一个重定位寄存器的支持。动态重定位的特点是可以将程序分配到不连续的存储区中;在程序运行之前可以只装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;便于程序段的共享,可以向用户提供一个比存储空间大得多的地址空间。
逻辑地址空间与物理地址空间
  编译后,每个目标模块都是从0号单元开始编址,称为该目标模块的相对地址(或逻辑地址)。当链接程序将各个模块链接成一个完整的可执行目标程序时,链接程序顺序依次按各个模块的相对地址构成统一的从0号单元开始编址的逻辑地址空间。用户程序和程序员只需知道逻辑地址,不同进程可以有相同的逻辑地址,因为这些相同的逻辑地址可以映射到主存的不同位置。
  物理地址空间是指内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取。当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位。
  内存分配前,需要保护操作系统不受用户进程的影响,同时保护用户进程不受其他用户进程的影响。通过釆用重定位寄存器和界地址寄存器来实现这种保护。重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址值。每个逻辑地址值必须小于界地址寄存器;内存管理机构动态地将逻辑地址与界地址寄存器进行比较,如果未发生地址越界,则加上重定位寄存器的值后映射成物理地址,再送交内存单元。当CPU调度程序选择进程执行时,派遣程序会初始化重定位寄存器和界地址寄存器。每一个逻辑地址都需要与这两个寄存器进行核对,以保证操作系统和其他用户程序及数据不被该进程的运行所影响。
  覆盖的基本思想是:由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间分成一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按调用关系分段。首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段。
  交换的基本思想是,把处于等待状态 的程序从内存移到辅存,把内存空间腾出来,这一过程又叫换出;把准备好竞争CPU运行的程序从辅存移到内存,这一过程又称为换入。有关交换需要注意以下几个问题:
交换需要备份存储,通常是快速磁盘。它必须足够大,并且提供对这些内存映像的直接访问。
为了有效使用CPU,需要每个进程的执行时间比交换时间长,而影响交换时间的主要是转移时间。转移时间与所交换的内存空间成正比。
如果换出进程,必须确保该进程是完全处于空闲状态。
交换空间通常作为磁盘的一整块,且独立于文件系统,因此使用就可能很快。
交换通常在有许多进程运行且内存空间吃紧时开始启动,而系统负荷降低就暂停。
  交换技术主要是在不同进程(或作业)之间进行,而覆盖则用于同一个程序或进程中。
  连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。
单一连续分配
  内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。这种方式无需进行内存保护。这种方式的优点是简单、无外部碎片,可以釆用覆盖技术,不需要额外的技术支持。缺点是只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低。
固定分区分配
  固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环。固定分区分配在划分分区时,有两种不同的方法:分区大小相等、分区大小不等。
  为便于内存分配,通常将分区按大小排队,并为之建立一张分区说明表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配)。当有用户程序要装入时,便检索该表,以找到合适的分区给予分配并将其状态置为&已分配&;未找到合适分区则拒绝为该用户程序分配内存。这种分区方式存在两个问题:一是程序可能太大而放不进任何一个分区中,这时用户不得不使用覆盖技术来使用内存空间;二是主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,这样分区内部有空间浪费,这种现象称为内部碎片。固定分区是可用于多道程序设计最简单的存储分配,无外部碎片,但不能实现多进程共享一个主存区,所以存储空间利用率低。
动态分区分配
  动态分区分配又称为可变分区分配,是一种动态划分内存的分区方法。这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统中分区的大小和数目是可变的。
  动态分区在开始分配时是很好的,但是之后会导致内存中出现许多小的内存块。随着时间的推移,内存中会产生越来越多的碎片,内存的利用率随之下降。这些小的内存块称为外部碎片,指在所有分区外的存储空间会变成越来越多的碎片,这与固定分区中的内部碎片正好相对。克服外部碎片可以通过紧凑(Compaction)技术来解决,就是操作系统不时地对进程进行移动和整理。但是这需要动态重定位寄存器的支持,且相对费时。
  在进程装入或换入主存时,如果内存中有多个足够大的空闲块,操作系统必须确定分配哪个内存块给进程使用,这就是动态分区的分配策略,考虑以下几种算法:
首次适应(First &Fit)算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
最佳适应(Best &Fit)算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。
最坏适应(Worst &Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。
邻近适应(Next &Fit)算法:又称循环首次适应算法,由首次适应算法演变而成。不同之处是分配内存时从上次查找结束的位置开始继续查找。
  首次适应算法可能比最佳适应法效果好,而它们两者一定比最大适应法效果好。另外注意,在算法实现时,分配操作中最佳适应法和最大适应法需要对可用块进行排序或遍历查找,而首次适应法和邻近适应法只需要简单查找;回收操作中,当回收的块与原来的空闲块相邻时(有三种相邻的情况,比较复杂),需要将这些块合并。在算法实现时,使用数组或链表进行管理。除了内存的利用率,这里的算法开销也是操作系统设计需要考虑的一个因素。
界地址寄存器、越界
(用户空间划
上下界寄存器、越界检查机构
基地址寄存器、长度寄存器、动态地址转换机构
多道可变连续分配
  非连续分配允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式。分页存储管理方式中,又根据运行作业时是否要把作业的所有页面都装入内存才能运行分为基本分页存储管理方式和请求分页存储管理方式。
基本分页存储管理方式
  固定分区会产生内部碎片,动态分区会产生外部碎片,这两种技术对内存的利用率都比较低。为了能尽量避免碎片的产生,就引入了分页的思想:
把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。分页的方法从形式上看,像分区相等的固定分区技术,分页管理不会产生外部碎片。但它又有本质的不同点:块的大小相对分区要小很多,而且进程也按照块进行划分,进程运行时按块申请主存可用空间并执行。这样,进程只会在为最后一个不完整的块申请一个主存块空间时,才产生主存碎片,所以尽管会产生内部碎片,但是这种碎片相对于进程来说也是很小的,每个进程平均只产生半个块大小的内部碎片(也称页内碎片)。
1) 分页存储的几个基本概念
  ①页和页大小。进程中的块称为页(Page),内存中的块称为帧(Page Frame,或页帧)。外存也以同样的单位进行划分,直接称为块(Block)。进程在执行时需要申请主存空间,就是要为每个页面分配主存中的可用帧,这就产生了页和帧的一一对应。为方便地址转换,页大小应是2的整数幂。同时页大小应该适中,如果面太小,会使进程的页数过多,这样页表就过长,占用大量内存,而且也会增加硬件地址转换的开销,降低页面换入/换出的效率;页面过大又会使页内碎片增大,降低内存的利用率。所以页面的大小应该适中,考虑到耷间效率和时间效率的权衡。
  ②地址结构。地址结构包含两部分:前一部分为页号P,后一部分为页内偏移量W。地址长度为32 位,其中0~11位为页内地址,即每页大小为4KB;12~31位为页号,地址空间最多允许有220页。
  ③页表。为了便于在内存中找到进程的每个页所对应的物理块,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,页表一般存放在内存中。在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。
2) 基本地址变换机构
  地址变换的任务是将逻辑地址转换为内存中物理地址,地址变换是借助于页表实现的。
  在系统中通常设置一个页表寄存器(PTR),存放页表在内存的始址F和页表长度M。进程未执行时,页表的始址和长度存放在进程控制块中,当进程执行时,才将页表始址和长度存入页表寄存器。设页大小为L,逻辑地址A到物理地址E的变换过程如下:
计算页号P(P=A/L)和页内偏移量W (W=A%L)。
比较页号P和页表长度M,若P &= M,则产生越界中断,否则继续执行。
页表中页号P对应的页表项地址 = 页表起始地址F + 页号P * 页表项长度,取出该页表项内容b,即为物理块号。
计算E=b*L+W,用得到的物理地址E去访问内存。
  以上整个地址变换过程均是由硬件自动完成的。若页面大小L为1K字节,页号2对应的物理块为b=8,计算逻辑地址A=2500的物理地址E的过程如下:P=,W=2,查找得到页号2对应的物理块的块号为 8,E=8*4。
  分页管理方式存在的两个主要问题:
每次访存操作都需要进行逻辑地址到物理地址的转换,地址转换过程必须足够快,否则访存速度会降低;
每个进程引入了页表,用于存储映射机制,页表不能太大,否则内存利用率会降低。
3) 具有快表的地址变换机构
  若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存:一次是访问页表,确定所存取的数据或指令的物理地址,第二次才根据该地址存取数据或指令。显然,这种方法比通常执行指令的速度慢了一半。为此,在地址变换机构中增设了一个具有并行查找能力的高速缓冲存储器&&快表,又称联想寄存器(TLB),用来存放当前访问的若干页表项,加速地址变换的过程。与此对应,主存中的页表也常称为慢表。
  在具有快表的分页机制中,地址的变换过程:
CPU给出逻辑地址后,由硬件进行地址转换并将页号送入高速缓存寄存器,并将此页号与快表中的所有页号进行比较。
如果找到匹配的页号,说明所要访问的页表项在快表中,则直接从中取出该页对应的页框号,与页内偏移量拼接形成物理地址。这样,存取数据仅一次访存便可实现。
如果没有找到,则需要访问主存中的页表,在读出页表项后,应同时将其存入快表,以便后面可能的再次访问。但若快表已满,则必须按照一定的算法对旧的页表项进行替换。
  一般快表的命中率可以达到90%以上,这样,分页带来的速度损失就降低到10%以下。快表的有效性是基于著名的局部性原理,这在后面的虚拟内存中将会具体讨论。
4) 两级页表
  由于引入了分页管理,进程在执行时不需要将所有页调入内存页框中,而只要将保存有映射关系的页表调入内存中即可。但是仍然需要考虑页表的大小。以32位逻辑地址空间、页面大小4KB、页表项大小4B为例,若要实现进程对全部逻辑地址空间的映射,则每个进程需要220,
约100万个页表项。也就是说,每个进程仅页表这一项就需要4MB主存空间,这显然是不切实际的。而即便不考虑对全部逻辑地址空间进行映射的情况,一个逻辑地址空间稍大的进程,其页表大小也可能是过大的。以一个40MB的进程为例,页表项共40KB,如果将所有页表项内容保存在内存中,那么需要10个内存页框来保存整个页表。整个进程大小约为1万个页面,而实际执行时只需要几十个页面进入内存页框就可以运行,但如果要求10个页面大小的页表必须全部进入内存,这相对实际执行时的几十个进程页面的大小来说,肯定是降低了内存利用率的;从另一方面来说,这10页的页表项也并不需要同时保存在内存中,因为大多数情况下,映射所需要的页表项都在页表的同一个页面中。将页表映射的思想进一步延伸,就可以得到二级分页:将页表的10页空间也进行地址映射,建立上一级页表,用于存储页表的映射关系。这里对页表的10个页面进行映射只需要10个页表项,所以上一级页表只需要1页就足够(可以存储210=1024个页表项)。在进程执行时,只需要将这1页的上一级页表调入内存即可,进程的页表和进程本身的页面,可以在后面的执行中再调入内存。
  如图3-11所示,这是Intel处理器80x86系列的硬件分页的地址转换过程。在32位系统中,全部32位逻辑地址空间可以分为220(4GB/4KB)个页面。这些页面可以再进一步建立顶级页表,需要210个顶级页表项进行索引,这正好是一页的大小,所以建立二级页表即可。
  举例,32位系统中进程分页的工作过程:假定内核已经给一个正在运行的进程分配的逻辑地址空间是0xx2003FFFF,这个空间由
64个页面组成。在进程运行时,我们不需要知道全部这些页的页框的物理地址,很可能其中很多页还不在主存中。这里我们只注意在进程运行到某一页时,硬件是
如何计算得到这一页的页框的物理地址即可。现在进程需要读逻辑地址0x中的字节内容,这个逻辑地址按如下进行处理:
  逻辑地址: 0x10 10 00 0110 B)
  顶级页表字段:0x80 (00
  二级页表字段:0x21 (00 B)
  页内偏移量字段:0x406& (10 B)
  顶级页表字段的0x80用于选择顶级页表的第0x80表项,此表项指向和该进程的页相关的二级页表;二级页表字段0x21用于选择二级页表的第0x21表项,此表项指向包含所需页的页框;最后的页内偏移量字段0x406用于在目标页框中读取偏移量为0x406中的字节。
  建立多级页表的目的在于建立索引,这样不用浪费主存空间去存储无用的页表项,也不用盲目地顺序式查找页表项,而建立索引的要求是最高一级页表项不超过一页
  我们假设仍然釆用4KB页面大小。偏移量字段12位,假设页表项大小为8B。这样,其上一级分页时,每个页框只能存储29(4KB/8B)个页表项,而不再是210个,
所以上一级页表字段为9位。后面同理继续分页。64=12+9+9+9+9+9+7,所以需6级分页才能实现索引。很多书中仍然按4B页表项分析,虽然同
样得出6级分页的结果,但显然是错误的。这里给出两个实际的64位操作系统的分页级别(注意:里面没有使用全部64位寻址,不过由于地址字节对齐的设计考
虑,仍然使用8B大小的页表项),理解了表3-2中的分级方式,相信对多级分页就非常清楚了。
13+10+10+10
12+9+9+9+9
基本分段存储管理方式
  分页管理方式是从计算机的角度考虑设计的,以提高内存的利用率,提升计算机的性能, 且分页通过硬件机制实现,对用户完全透明;而分段管理方式的提出则是考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
  段式管理方式按照用户进程中的自然段划分逻辑空间。例如,用户进程由主程序、两个子程序、栈和一段数据组成,于是可以把这个用户进程划分为5个段,每段从0开始编址,并分配一段连续的地址空间(段内要求连续,段间不要求连续,因此整个作业的地址空间是二维的)。其逻辑地址由段号S与段内偏移量W两部分组成。如图段号为16位,段内偏移量为16位,则一个作业最多可有216=65536个段,最大段长为64KB。
  在页式系统中,逻辑地址的页号和页内偏移量对用户是透明的,但在段式系统中,段号和段内偏移量必须由用户显示提供,在髙级程序设计语言中,这个工作由编译程序完成。
  每个进程都有一张逻辑空间与内存空间映射的段表,其中每一个段表项对应进程的一个段,段表项记录该段在内存中的起始地址和段的长度。段表的内容如图所示。  在配置了段表后,执行中的进程可通过查找段表,找到每个段所对应的内存区。可见,段表用于实现从逻辑段到物理内存区的映射。
3) 地址变换机构。
  分段系统的地址变换过程如图所示。为了实现进程从逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址F和段表长度M。其从逻辑地址A到物理地址E之间的地址变换过程如下:
从逻辑地址A中取出前几位为段号S,后几位为段内偏移量W。
比较段号S和段表长度M,若S多M,则产生越界中断,否则继续执行。
段表中段号S对应的段表项地址 = 段表起始地址F + 段号S *&段表项长度,取出该段表项的前几位得到段长C。若段内偏移量&=C,则产生越界中断,否则继续执行。
取出段表项中该段的起始地址b,计算 E = b + W,用得到的物理地址E去访问内存。
4) 段的共享与保护。
  在分段系统中,段的共享是通过两个作业的段表中相应表项指向被共享的段的同一个物理副本来实现的。当一个作业正从共享段中读取数据时,必须防止另一个作业修改此共享段中的数据。不能修改的代码称为纯代码或可重入代码(它不属于临界资源),这样的代码和不能修改的数据是可以共享的,而可修改的代码和数据则不能共享。与分页管理类似,分段管理的保护方法主要有两种:一种是存取控制保护,另一种是地址越界保护。地址越界保护是利用段表寄存器中的段表长度与逻辑地址中的段号比较,若段号大于段表长度则产生越界中断;再利用段表项中的段长和逻辑地址中的段内位移进行比较,若段内位移大于段长,也会产生越界中断。
段页式管理方式
  页式存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于段的共享。如果将这两种存储管理方法结合起来,就形成了段页式存储管理方式。在段页式系统中,作业的地址空间首先被分成若干个逻辑段,每段都有自己的段号,然后再将每一段分成若干个大小固定的页。对内存空间的管理仍然和分页存储管理一样,将其分成若干个和页面大小相同的存储块,对内存的分配以存储块为单位。
  在段页式系统中,作业的逻辑地址分为三部分:段号、页号和页内偏移量。
  为了实现地址变换,系统为每个进程建立一张段表,而每个分段有一张页表。段表表项中至少包括段号、页表长度和页表起始地址,页表表项中至少包括页号和块号。此外,系统中还应有一个段表寄存器,指出作业的段表起始地址和段表长度。
  注意:在一个进程中,段表只有一个,而页表可能有多个。
  在进行地址变换时,首先通过段表查到页表起始地址,然后通过页表找到页帧号,最后形成物理地址。如图所示,进行一次访问实际需要三次访问主存,这里同样可以使用快表以加快查找速度,其关键字由段号、页号组成,值是对应的页帧号和保护码。
阅读(...) 评论()

我要回帖

更多关于 客服通话利用率算法 的文章

 

随机推荐