精华内容
下载资源
问答
  • 存储管理

    千次阅读 2012-09-10 08:52:57
    一、存储管理的基本概念 1.绝对地址和逻辑地址 绝对地址:主存储器以字节为编址单位,每个字节都有一个地址与其对应。这些地址称为主存储器的“绝对地址”,绝对地址对应的主存储空间称为“物理地址空间”。...

    http://book.51cto.com/art/201204/331601.htm

    一、存储管理的基本概念

    1.绝对地址和逻辑地址

    绝对地址:主存储器以字节为编址单位,每个字节都有一个地址与其对应。这些地址称为主存储器的“绝对地址”,绝对地址对应的主存储空间称为“物理地址空间”。逻辑地址:用户程序中使用的地址称为 “逻辑地址”,逻辑地址对应的存储空间称为 “逻辑地址空间”。逻辑地址从0开始编址。

    2.地址重定位

    重定位是指将程序地址空间中使用的逻辑地址变换成主存中的地址的过程,也称为地址重定位。重定位分为静态重定位和动态重定位。

    3.覆盖和交换分区

    (1)覆盖技术

    当作业的地址空间超过系统的可用存储空间时,为能使大作业在小主存上工作,一个有效的办法是采用覆盖技术。可以将一个大的程序分成一个主程序和一系列的覆盖,每个覆盖是一个相对独立的程序单位。

    (2)交换技术

    系统在一个作业装入内存开始运行后,还可以根据需要把它交换出内存,如某作业在等待I/O而无需处理机处理时,将其交换出去,腾出内存空间给其他作业,待再运行时又调入调出,从而使资源的利用更为充分有效,但它同样是以牺牲处理机的时间为代价的。

    二、分区存储管理

    1.固定分区分配

    一种静态分区方式,在处理作业前,内存事先固定划分为若干大小不等或相等区域,一旦划分好就不再变化。

    2.可变分区分配

    一种动态分区方式,在作业执行前并不建立分区,而是在处理作业过程中按需要建立分区。

    3.可重定位分区分配

    目的为解决“碎片”问题。碎片是指在已分配区之间存在着的一些没有被充分利用的空白区。解决办法是采用拼接技术,即移动内存中的作业,由存储器管理实施重定位,把已分配的各个分区 “移动”紧靠一边,空白区集中靠另一端。这就是可重定位分区分配策略。

    4.分区保护

    在并发环境中,对私有的数据信息需要加以限制和保护,以避免相互干扰和破坏。

    三、分页存储管理

    1.分页原理

    将一个进程的地址空间划分成若干大小相等的区域,称为页。相应地,将主存空间划分成与页相同大小的若干物理块,称为块或页框架。在为进程分配主存时,将进程中若干页分别装入多个不邻接的块中。

    2.地址结构

    由两部分组成:前一部分为页号 P;后—部分为偏移量w,即页内地址。图 3-3中的地址长度为 32位,其中0~11位为页内地址(每页的大小为4KB),12~31位为页号,所以允许地址空间的大小最多为1MB个页。

    四、分段存储管理

    1.分段基本原理

    作业的地址空间被划分为若干段,每个段定义了一组逻辑信息,如有主程序段、子程序段、数据段及栈段等,每个段都有自己的名字,都是从零开始编址的一段连续的地址空间,段的长度由相应逻辑信息组的长度决定,因而各段长度不等,整个作业的地址空间是二维的。分段系统中地址结构如图3-4所示,其逻辑地址由段号(名)和段内地址两部分组成,在该地址结构中,允许一个作业最多能有256个段,每个段的最大长度为64KB。

     
    图3-3 分页地址结构
     
    图3-4 分段地址结构

    2.分页和分段的主要区别

    分页对用户是不透明的,分段对用户是透明的。页是信息的物理单位,分页仅仅是由于系统管理的需要,而不是用户的需要;而段是信息的逻辑单位,它含有一组具有相对完整意义的信息,是出于用户的需要。

    分段的大小任意,分页固定。分页的长度固定,分页系统把逻辑地址划分为页号和页内地址两部分的功能,由机器硬件实现;而段的长度却不固定,由用户在编程时确定,或由编译程序在对源程序进行编译时,根据信息的性质来划分。

    分页地址空间是一维的,而分段是二维的。分段存储管理有利于模块的动态链接、装入和分段共享。

    五、段页式存储管理

    先将整个主存划分成大小相等的存储块(页架),将用户程序按程序的逻辑关系分为若干个段,并为每个段赋予一个段名,再将每个段划分成若干页,以页架为单位离散分配。在段页式系统中,其地址结构由段号S、段内页号P和页内地址W 3部分组成,如图3-5所示。

     
    图 3-5 段页式管理地址结构

    获得一条指令或数据,要三次访问内存:第一次,是从内存中取得页表始址;第二次,是从内存中取出物理块号形成物理地址;第三次,才能得到所需的指令或数据。

    六、虚拟存储器

    1、基本思想

    利用大容量的外存(通常是高速硬盘)来扩充内存,产生一个比有限的实际内存空间大得多的、逻辑的虚拟内存空间,以便能够有效地支持多道程序系统的实现和大型作业运行的需要,从而增强系统的处理能力。当进程要求运行时,不是将它的全部信息装入内存,而是将其一部分先装入内存,另一部分暂时留在外存。进程在运行过程中,要使用的信息不在内存时,发生中断,由操作系统将它们调入内存,以保证进程的正常运行。

    2.替换算法随机算法(RAND):随机地选择被淘汰的页,这种算法开销小,但被淘汰的页可能马上就会被访问,从而产生了“抖动”。

    最佳置换算法(OPT):这是一种理论化的算法。该算法淘汰在访问串中将来再也不出现的或是在最长时间内不再访问的页。淘汰掉该页将不会造成因需要访问该页又需要把它调入的现象。这种最佳策略本身不是一种实际的方法,它的理论价值在于:用 OPT算法的缺页率去评价其他算法的优劣。

    进先先出算法(FIFO):总是选择作业中在主存驻留时间最长(即最老)的一页淘汰。即先进入主存的页先退出主存。其理由是,最早调入主存的页,其不再被使用的可能性比最近调入主存的页要大。

    最近最少使用算法(LRU):选择在最近一段时间内最久不用的页予以淘汰。这是最常用的页面置换算法,在UNIX V、Windows 95、Windows NT、OS/2中都采用LRU算法。

    怎么考

    【试题 3-16】2011年 11月真题 2

    若某计算机系统的I/O接口与主存采用统一编址,则输入输出操作是通过( 2)指令来完成的。

    (2)A. 控制    B.中断

    C. 输入输出 D.访存

    分析:统一编址方式是指I/O端口与主存单元使用同一个地址空间进行统一编址。在这种方式下,CPU指令系统中无需设置专门的与设备进行数据传输的输入输出指令,I/O端口被当成主存单元同样对待,对主存单元进行访问和操作的指令可以同样用于对I/O端口的访问和操作。【答案:D】

    【试题 3-17】2011年 5月真题 27、28

    某系统采用请求页式存储管理方案,假设某进程有6个页面,系统给该进程分配了4个存储块,其页面变换表如下表所示,表中的状态位等于1/0表示页面在内存/不在内存。当该进程访问的页面2不在内存时,应该淘汰表中页号为( 27)的页面。假定页面大小为4KB,逻辑地址为十六进制3C18H,该地址经过变换后页帧号为(28)。

     

    (27)A.0 B.3 C.4 D.5

    (28)A.2 B.5 C.8 D.12 分析:由表可知,页面1和页面2不在内存。当进程访问的页面2不在内存时,系统应该淘汰未被访问的页面。由访问位可知页面5没有被访问过,因此需要被淘汰。对某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P可按下式求得:

     

    其中,INT是整除函数。由“页面大小为4KB,逻辑地址为十六进制3C18H”可知,页号为3,查表知页面3对应的页帧号为2。【答案:(27)D (28)A】

    【试题 3-18】2008年 12月真题 27、28

    某虚拟存储系统采用最近最少使用(LRU)页面淘汰算法。假定系统为每个作业分配3个页面的主存空间,其中一个页面用来存放程序。现有某作业的部分语句如下:

    1. Var A: Array[1..128,1..128] OF integer;   
    2. i,j: integer;   
    3. FOR i:=1 to 128 DO   
    4. FOR j:=1 to 128 DO   
    5. A[i,j]:=0;  

    设每个页面可存放128个整数变量,变量i、j放在程序页中,矩阵A按行序存放。初始时,程序及变量i、 j已在内存,其余两页为空。在上述程序片段执行过程中,共产生( 27)次缺页中断。最后留在内存中的是矩阵A的最后( 28)。

    (27)A.64 B.128 C.256 D.512

    (28)A.2行 B.2列 C.1行 D.1列分 析:参考试题3-19(2007年5月真题27、28)分析。【答案:B、A】

    【试题 3-19】2008年 5月真题 27、28

    在某计算机中,假设某程序的6个页面如右图所示,其中某指令“COPY A TO B”跨两个页面,且源地址A和目标地址B所涉及的区域也跨两个页面。若地址为A和B的操作数均不在内存,计算机执行该COPY指令时,系统将产生( 27)次缺页中断;若系统产生三次缺页中断,那么该程序应有(28)个页面在内存。

     

    (27)A.2  B.3  C.4  D.5 

    (28)A.2  B.3  C.4  D.5 

    分 析:本题考查页面中断处理。【答 案:C、B】

    在请求分页系统中,每次需要访问的页面不在主存中时,便要产生一个缺页中断,请求OS将所缺的页面调入主存,这是由缺页中断机构完成的。缺页中断发生时的事件顺序如下:

    (1)硬件陷入内核,在堆栈中保存程序计数器。大多数机器将当前指令的各种状态信息保存在特殊的 CPU寄存器中。

    (2)启动一个汇编代码例程保存通用寄存器和其他易失的信息,以免被操作系统破坏。这个例程将操作系统作为一个函数来调用。

    (3)当操作系统发现一个缺页中断时,尝试发现需要哪个虚拟页面。通常一个硬件寄存器包含了这一信息,如果没有的话,操作系统必须检索程序计数器,取出这条指令,用软件分析这条指令,看看它在缺页中断时正在做什么。

    (4)一旦知道了发生缺页中断的虚拟地址,操作系统检查这个地址是否有效,并检查存取与保护是否一致。如果不一致,向进程发出一个信号或杀掉该进程。如果地址有效且没有保护错误发生,系统则检查是否有空闲页框。如果没有空闲页框,执行页面置换算法寻找一个页面来淘汰。

    (5)如果选择的页框“脏”了,安排该页写回磁盘,并发生一次上下文切换,挂起产生缺页中断的进程,让其他进程运行直至磁盘传输结束。无论如何,该页框被标记为忙,以免因为其他原因而被其他进程占用。

    (6)一旦页框“干净”后(无论是立刻还是在写回磁盘后),操作系统查找所需页面在磁盘上的地址,通过磁盘操作将其装入。该页面被装入后,产生缺页中断的进程仍然被挂起,并且如果有其他可运行的用户进程,则选择另一个用户进程运行。

    (7)当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映它的位置,页框也被标记为正常状态。

    (8)恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令。

    (9)调度引发缺页中断的进程,操作系统返回调用它的汇编语言例程。

    (10)该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过一样。由题目知,地址为A和B的操作数均不在内存,计算机执行该COPY指令时,系统会去访问A的源地址和

    B的目标地址,即3~6页,所以系统将产生4次缺页中断。整个程序有6个页面,若产生3次缺页中断,则该程序有3个页面在内存。



    展开全文
  • 页式存储管理 ** 一、页式存储管理的基本原理 【页式存储管理的基本原理】 分页存储器将主存划分成多个大小相同的页架 受页架尺寸限制,程序的逻辑地址也自然分页 不同的页可以放在不同页架中,不需要连续 页表用于...

    **

    页式存储管理

    **

    一、页式存储管理的基本原理

    【页式存储管理的基本原理】

    • 分页存储器将主存划分成多个大小相同的页架
    • 受页架尺寸限制,程序的逻辑地址也自然分页
    • 不同的页可以放在不同页架中,不需要连续
    • 页表用于维系进程的主存完整性
      在这里插入图片描述

    【页式存储管理中的地址】

    • 页式存储管理的逻辑地址由两部分组成:页号和单元号,逻辑地址形式:
      在这里插入图片描述
    • 页式存储管理的物理地址也有两部分组成:页架号和单元号,物理地址形式:
      在这里插入图片描述
    • 地址转换(直接把页号变为页架号)可以通过查页表完成

    【页式存储管理的地址转换思路】
    在这里插入图片描述

    【页式存储管理的内存分配/去配】

    • 可用一张位示图来记录主存分配情况
    • 建立进程页表维护主存逻辑完整性
      在这里插入图片描述

    【页的共享】

    • 页式存储管理能够实现多个进程共享程序和数据
    • 数据共享:不同进程可以使用不同页号共享数据页
    • 程序共享:不同进程必须使用相同页号共享代码页
      #共享代码中的(JMP<页内地址>)指令,使用不同页号时做不到

    二、页式存储管理的地址转换

    【页式存储管理的地址转换代价】

    • 页表放在主存:每次地址转换必须访问两次主存
      1.按页号读出页表中的相应页架号
      2.按计算出来的绝对地址进行读写
    • 存在问题:降低了存取速度
    • 解决方法:利用Cache存放部分页表

    【页式存储管理的快表】

    • 为提高地址转换速度,设置一个专用的高速存储器,用来存放页表的一部分
    • 快表:存放在高速存储器中的页表部分
    • 快表表项:页号,页架号
    • 这种高速存储器是联想存储器,即按照内容寻址,而非按照地址访问

    【引入快表后的地址转换代价】

    • 采用快表后,可以加快地址转换速度
    • 假定主存访问时间为200毫微秒,快表访问时间为40毫微秒,查快表的命中率是90%。平均地址转换代价为:(200+40)*90%+(200+200)*10%=256毫微秒
    • 比两次访问主存的时间(400毫微秒)下降了36%

    【基于快表的地址转换流程】

    • 按逻辑地址中的页号查快表
    • 若该页已在快表中,则由页架号和单元号形成绝对地址
    • 若该页不在快表中,则再查主存页表形成绝对地址,同时将该页登记到快表中
    • 快表填满后,又要登记新页时,则需在快表中按一定策略淘汰一个旧登记项

    【多道程序环境下的进程表】

    • 进程表中登记了每个进程的页表
    • 进程占有处理器运行时,其页表起始地址和长度送入页表控制寄存器
      在这里插入图片描述

    【多道程序环境下的地址转换】
    在这里插入图片描述

    三、页式虚拟存储管理

    【页式虚拟存储管理的基本思想】

    • 把进程全部页面装入虚拟存储器,执行时先把部分页面装入实际内存,然后,根据执行行为,动态调入不在主存的页,同时进行必要的页面调出
    • 现代OS的主流存储管理技术
    • 首次只把进程第一页信息装入主存,称为请求页式存储管理

    【页式虚拟存储管理的页表】

    • 需要扩充页表项,指出
      #每页的虚拟地址、实际地址
      #主存驻留标志、写回标志、保护标志、引用标志、可移动标志
      在这里插入图片描述

    【页式虚拟管理的实现】

    • CPU处理地址
      #若页驻留,则获得块号形成绝对地址
      #若页不在内存,则CPU发出缺页中断
    • OS处理缺页中断
      #若有空闲页架,则根据辅存地址调入页,更新页表与快表等
      #若无空闲页架,则决定淘汰页,调出已修改页,调入页,更新页表与快表

    【页式虚拟存储管理的地址转换】
    在这里插入图片描述

    【缺页中断的处理流程】
    在这里插入图片描述

    四、页面调度

    【页面调度】

    • 当主存空间已满又需要装入新页时,页式虚拟存储管理必须按照一定的算法把已在主存的一些页调出去
    • 选择淘汰页的工作称为页面调度
    • 选择淘汰页的算法称为页面调度算法
    • 页面调度算法如果设计不当,会出现(刚被淘汰的页面立即又要调入,并如此反复)这种现象称为抖动颠簸

    【缺页中断率】

    • 假定进程P共n页,系统分配页架数m个
    • P运行中成功访问次数为S,不成功访问次数为F,总访问次数A=S+F
    • 缺页中断率定义为:f=F/A
    • 缺页中断率是衡量存储管理性能和用户编程水平的重要依据

    【影响缺页中断率的因素】

    • 分配给进程的页架数:可用页架数越多,则缺页中断率就越低
    • 页面的大小:页面尺寸越大,则缺页中断率就越低
    • 用户的程序编制方法:在大数据量情况下,对缺页中断率也有很大影响

    【用户编程的例子】

    • 程序将数组置为“0”,假定仅分得一个主存页架,页面尺寸为128个字,数组元素按行存放,开始时第一页在主存
      在这里插入图片描述

    【OPT页面调度算法】

    • 理想的调度算法是:当要调入新页面时,首先淘汰以后不再访问的页,然后选择距现在最长时间后再访问的页
    • 该算法由Belady提出,称Belady算法,又称最佳算法(OPT)
    • OPT只可模拟,不可实现

    【先进先出FIFO页面调度算法】

    • 总是淘汰最先调入主存的那一页,或者说主存驻留时间最长的那一页(常驻的除外)
    • 模拟的是程序执行的顺序性,有一定合理性

    【最近最少用LRU页面调度算法】

    • 淘汰最近一段时间较久未被访问的那一页,即那些刚被使用过的页面,可能马上还要被使用到
    • 模拟了程序执行的局部属性,既考虑了循环性又兼顾了顺序性
    • 严格实现的代价大(需要维持特殊队列)

    【LRU算法的模拟实现】

    • 每页建一个引用标志,供硬件使用
    • 设置一个时间间隔中断:中断时页引用标志置0
    • 地址转换时,页引用标志置1
    • 淘汰页面时,从页引用标志为0的页中随机选择
    • 时间间隔多长是个难点

    【最不常用LFU页面调度算法】

    • 淘汰最近一段时间内访问次数较少的页面,对OPT的模拟性比LRU更好
    • 基于时间间隔中断,并给每一页设置一个计数器
    • 时间间隔中断发生后,所有计数器清0
    • 每访问页1次就给计数器加1
    • 选择计数值最小的页面淘汰

    【时钟CLOCK页面调度算法】

    • 采用循环队列机制构造页面队列,形成了一个类似于钟表面的环形表
    • 队列指针则相当于钟表面上的表针,指向可能要淘汰的页面
    • 使用页面引用标志位

    【CLOCK算法的工作流程】

    • 页面调入主存时,其引用标志位置1
    • 访问主存页面时,其引用标志位置1
    • 淘汰页面时,从指针当前指向的页面开始扫面循环队列
      #把所遇到的引用标志位是1的页面的引用标志位清0,并跳过
      #把所遇到的引用标志位是0的页面淘汰,指针推进一步

    五、反置页表

    【反置页表的提出】

    • 页表及相关硬件机制在地址转换、存储保护、虚拟地址访问中发挥了关键作用
    • 为页式存储管理设置专门硬件机构
    • 内存管理单元MMU:CPU管理虚拟/物理存储器的控制线路,把虚拟地址映射为物理地址,并提供存储保护,必要时确定淘汰页面
    • 反置页表IPT:MMU用的数据结构

    【反置页表的基本设计思想】

    • 针对内存中的每个页架建立一个页表,按照块号排序
    • 表项包含:正在访问该页架的进程标识、页号及特征位,和哈希链指针
    • 用来完成内存页架到访问进程页号的对应,即物理地址到逻辑地址的转换

    【反置页表的页表项】

    • 页号:虚拟地址页号
    • 进程标志符:使用该页的进程号(页号和进程标志符结合起来标志一个特定进程的虚拟地址空间的一页)
    • 标志位:有效、引用、修改、保护和锁定等标志信息
    • 链指针:哈希链

    【基于反置页表的地址转换过程】

    • MMU通过哈希表把进程标识和虚页号转换成一个哈希值,指向IPT(反置页表)的一个表目
    • MMU遍历哈希链找到所需进程的虚页号,该项的索引就是页架号,通过拼接移位便可生成物理地址
    • 若遍历整个反置页表中未能找到匹配表项,说明该页不在内存,产生缺页中断,请求操作系统调入

    【反置页表下的地址转换示意】
    在这里插入图片描述

    • 未显示选择淘汰页面,同样由MMU完成

    **

    段式存储管理

    **

    一、段式存储管理

    【段式程序设计】

    • 每个程序可由若干段组成,每一段都可以从“0”开始编址,段内的地址是连续的
    • 分段存储器的逻辑地址由两部分组成
      #段号:单元号
      #和页式存储管理(段号:单元号)有本质区别。“段号:单元号”是用户程序设计自己设定的。而“页号:单元号”是系统自动切割的,用户并不知道。所以分页存储器是用户编程原则上不可见的,除了性能优化。而分段存储器是用户可控制的

    【程序的分段结构】
    在这里插入图片描述

    【段式存储管理的基本思想】

    • 段式存储管理基于可变分区存储管理实现,一个进程要占用多个分区
    • 硬件需要增加一组用户可见的段地址寄存器(代码段、数据段、堆栈段、附加段),供地址转换使用
    • 存储管理需要增加设置一个段表,每个段占用一个段表项,包括:段始址、段限长,以及存储保护、可移动、可扩充等标志位

    【段式存储管理的地址转换流程】
    在这里插入图片描述

    【段的共享】

    • 通过不通进程段表中的项指向同一个段基址来实现
    • 对共享段的信息必须进行保护,如规定只能读出不能写入,不满足保护条件则产生保护中断

    二、段式虚拟存储管理

    【段式虚拟存储管理的基本思想】

    • 把进程的所有分段都存放在辅存中,进程运行时先把当前需要的一段或几段装入主存,在执行过程中访问到不在主存的段时再把他们动态装入
    • 段式虚拟存储管理中断的调进调出是由OS自动实现的,对用户透明
    • 与段覆盖基数不同,它是用户控制的主存扩充技术,OS不感知

    【段式虚拟存储管理的段表扩充】

    • 段表的扩充
      #特征位:00(不在内存)01(在内存)11(共享段)
      #存取权限:00(可执行)01(可读)11(可写)
      #扩充位:0(固定长)1(可扩充)
      #标志位:00(未修改)01(已修改)11(不可移动)
      在这里插入图片描述

    【段式虚拟存储管理的地址转换】
    在这里插入图片描述

    三、段页式存储管理

    【段页式存储管理的基本思想】

    • 段式程序设计可以基于页式存储管理实现
    • 每一段不必占据连续的存储空间,可存放在不连续的主存页架中
    • 能够扩充位段页式虚拟存储管理
    • 装入部分段,或者装入段中部分页面

    【段页式存储管理的段表和页表】
    在这里插入图片描述

    【段页式存储管的地址转换】
    在这里插入图片描述

    【段页式虚拟存储管理的地址转换】
    在这里插入图片描述

    展开全文
  • 操作系统存储管理之分区存储管理

    千次阅读 2019-04-13 14:17:06
    一、单连续分区存储管理 【单连续分区存储管理】 每个进程占用一个物理上完全连续的存储空间(区域),可分为三种: #单用户连续分区存储管理 #固定分区存储管理 #可变分区存储管理 【单用户连续分区存储管理】 ...

    一、单连续分区存储管理

    【单连续分区存储管理】

    • 每个进程占用一个物理上完全连续的存储空间(区域),可分为三种:
      #单用户连续分区存储管理
      #固定分区存储管理
      #可变分区存储管理

    【单用户连续分区存储管理】

    • 适用于单用户单任务操作系统,如DOS
    • 主存区域划分为系统区与用户区,系统区用来存放操作系统的程序与数据,用户区则用来存放这一个用户的进程
    • 设置一个栅栏寄存器界分两个区域,硬件用它在执行时进行存储保护
    • 一般采用静态重定位进行地址转换
    • 硬件实现代价低

    【单用户连续分区存储管理示意】

    • 静态重定位:在装入一个作业时,把该作业中程序的指令地址和数据地址全部转换成绝对地址
      在这里插入图片描述

    【固定分区存储管理的基本思想】

    • 支持多个分区
    • 分区数量固定
    • 分区大小固定
    • 可用静态/动态重定位
    • 硬件实现代价低
    • 早期OS采用
      在这里插入图片描述

    【固定分区方式的主存分配】

    • 主存分配表
      在这里插入图片描述
    • 主存的分配与去配

    【固定分区方式的地址转换】

    • 硬件实现机制与动态重定位
      在这里插入图片描述

    【可变分区存储管理概述】

    • 固定分区存储管理不够灵活,既不适应大尺寸程序,又存在内存内零头,有浪费
    • 能否按照进程实际内存需求动态划分分区,并允许分区个数可变
    • 这就是可变分区存储管理

    二、可变分区存储管理

    【可变分区存储管理】

    • 按进程的内存需求来动态划分分区
    • 创建一个进程时,根据进程所需主存量查看主存中是否有足够的连续空闲空间
      #若有,则按需要量分割一个分区
      #若无,则令该进程等待主存资源
    • 由于分区大小按照进程实际需求量来确定,因此分区个数是随机变化的

    【可变分区方式的内存分配示例】
    在这里插入图片描述

    【可变分区方式的主存分配表】

    • 已分配区表与未分配区表,采用链表
      在这里插入图片描述

    【可变分区方式的内存分配】

    • 最先适应分配算法
    • 邻近时应分配算法
    • 最优适应分配算法
    • 最坏适应分配算法

    【可变分区方式的内存回收】
    在这里插入图片描述

    【地址转换与存储保护】

    • 硬件实现机制与动态重定位
      在这里插入图片描述

    【可变分区方式的内存零头】

    • 固定分区方式会产生内存内零头
    • 可变分区方式也会随着进程的内存分配产生一些小的不可用的内存分区,称为内存外零头
    • 最优适配算法最容易产生外零头
    • 任何适配算法都不能避免产生外零头

    【移动技术(程序浮动技术)】

    • 移动分区以解决内存外零头
    • 需要动态重定位支撑
      在这里插入图片描述

    【移动技术的工作流程】
    在这里插入图片描述

    展开全文
  • C语言模拟实现虚拟存储管理(请求分页存储管理)使用FIFO算法 一、实验目的 存储管理的主要功能之一是合理的分配空间。请求分页存储管理是一种常用的虚拟存储管理技术。本实验的目的是:通过编程模拟实现请求分页...

    C语言模拟实现虚拟存储管理(请求分页存储管理)使用FIFO算法
    1)实验目的
    2)实验内容
    3)实验基本原理和解决方案
    4)数据结构、模块划分
    5)画出程序的基本结构框图和流程图(包括主程序流程图、模块详细设计流程图等),对程序的每一部分要有详细的设计分析说明,说明设计实现所用的原理。
    6)源代码,要求格式规范,适当加注释,以有助于说明问题为宜,注释不少于三分之一。
    7)运行的结果,要求有对结果的分析
    8)参考资料
    一、实验目的
    存储管理的主要功能之一是合理的分配空间。请求分页存储管理是一种常用的虚拟存储管理技术。本实验的目的是:通过编程模拟实现请求分页存储管理中硬件地址转换过程、缺页中断处理过程,以及先进先出页面置换算法,加深对页式虚拟存储管理的理解,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换方法;通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。

    二、实验内容
    阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。
    (1)用C语言实现对分页式存储管理中的硬件的地址转换和产生缺页中断。
    (2)设计页表。
    页式虚拟存储系统是把作业的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:
    页 号 标志 主存块号 修改标志 在磁盘上的位置

    其中:
    标志——用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存中,标志位=0,则表示该页尚未装入主存。
    主存块号——用来表示已经装入主存的页所占的物理块号。
    修改标志——用来表示已经装入主存的页是否被修改过。为,则表示该页装入主存后被修改过;为0,则表示该页该页装入主存后未被修改过。
    在磁盘上的位置——用来指出作业副本的每一页被存放在磁盘上的位置。
    可根据页面置换算法的不同,页表的内容可以作适当的增删。

    三、实验基本原理和解决方案
    (1)地址计算。
    作业执行时,先根据指令中的逻辑地址算出参加运算的操作数存放的页号和页内地址,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,根据关系式:
    绝对地址=块号*块长+页内地址
    计算出欲访问的主存单元地址。按计算出的绝对地址可以取到操作数,完成一条指令的执行。若访问的页标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由OS按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
    (2)设计“地址转换”程序模拟硬件的地址转换工作。
    当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。当访问的页不在主存时,则输出“*该页页号”,表示产生了一次缺页中断,执行缺页中断程序。该模拟程序的算法如下图所示。

    地址转换模拟流程图
    (3) 缺页中断模拟。
    在页式虚拟存储系统中,当硬件发出缺页中断请求后,引起操作系统来处理这个中断事件。如果主存有空闲物理块,则调入该页并修改页表;如果主存中没有空闲物理块,则可用FIFO页面置换算法或者LRU页面置换算法从该作业中在主存的页面中选一页淘汰,被淘汰的页是否需要重新写回磁盘,由修改标志决定。然后再把当前要访问的页装入该块。调出和装入后都要修改页表中的相应信息。
    四、数据结构、模块划分
    (1)存放页表的结构体
    struct info //页表信息结构体
    {
    int pageno;
    int flag; //页标志,1表示该页已在主存,0表示该页不在主存
    int block; //块号
    char disk[10]; //在磁盘上的位置
    int dirty; //更新标志(修改标志)

    }pagelist[SizeOfPage];
    (2)存放操作数、逻辑地址以及页表信息的结构体
    struct work{
    char operands[10];
    long adress;
    int pagenum; //页号
    int page_local;//页内地址
    int sign; //标志
    int Block;
    int page_adress;//物理地址
    int page_out; //淘汰页号
    int page_back;

    }worklist[12];

    (3)使用数组进行模拟分配的三个物理块,po始终指向最先进去的页号,模拟FIFO算法
    long po=0; //队列标记
    long P[M]={0,1,2}; //假设内存中最多允许M=3个页面
    (4)使用文本文件进行内存空间初始化
    存放操作数文本文件:
    在这里插入图片描述
    存放页表信息文本文件:
    在这里插入图片描述
    void init_ex1() //内存空间初始化。
    {
    FILE *fp = fopen(“page.txt”,“r”), *fq = fopen(“task.txt”,“r”);
    int i = 0;
    int a = 0, b = 0, c=0, d=0;
    char e[10];
    while(fscanf(fp,"%d%d%d%d%s",&a,&b,&c,&d,&e)!=EOF)
    {
    pagelist[i].pageno=a;
    pagelist[i].flag=b;
    pagelist[i].block=c;
    pagelist[i].dirty=d;
    strcpy(pagelist[i].disk, e);
    i++;
    }
    char s[10];
    long n = 0;
    int k=0;
    while(fscanf(fq,"%s%ld",&s,&n)!=EOF)
    {
    if(k >= 12)
    break;
    strcpy(worklist[k].operands, s);
    worklist[k].adress=n;
    k++;
    }

    fclose(fp);
    fclose(fq);
    

    }
    (5)输出函数
    void print()
    {
    /* char operands[10];
    long adress;
    int pagenum; //页号
    int page_local;//页内地址
    int sign; //标志
    int Block;
    int page_adress;//物理地址
    int page_out; //淘汰页号
    int page_back; //是否写回
    */
    printf(“以下数据1表示是,0表示否\n”);
    printf(“操作数\t逻辑地址\t页号\t页内地址\t是否命中\t物理块号\t物理地址\t淘汰页号\t是否写回\n”);
    for(int i=0;i<12;i++)
    {
    printf("%s\t%ld\t\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d",worklist[i].operands,worklist[i].adress,worklist[i].pagenum,worklist[i].page_local,worklist[i].sign,worklist[i].Block,worklist[i].page_adress,worklist[i].page_out,worklist[i].page_back);
    printf("\n");
    }
    }

    (6)模拟FIFO页面调度算法
    void work_FIFO()
    {
    int i,j;
    for(i=0;i<12;i++)
    {
    worklist[i].pagenum=worklist[i].adress / 128;
    worklist[i].page_local=worklist[i].adress % 128;
    worklist[i].page_back = 0;

    	for(j=0;j<7;j++)
    	{
    		if(pagelist[j].pageno == worklist[i].pagenum)
    		{
    			if(pagelist[j].flag==1)
    			{
    				worklist[i].Block = pagelist[pagelist[j].pageno].block;
    				worklist[i].sign=1;
    				worklist[i].page_adress=(pagelist[pagelist[j].pageno].block* SizeOfBlock + worklist[i].page_local);//worklist[i].Block
    				worklist[i].page_out=-1;
    				if(!(strcmp(worklist[i].operands,"存")))
    				{
    					pagelist[worklist[i].pagenum].dirty = 1;		//是否写回磁盘,修改页表
    					worklist[i].page_back = 1;
    				}
    
    				
    			}
    			else
    			{
    				//printf("*%d\n",worklist[i].pagenum);
    				pagelist[P[po]].flag=0;   //将flag标志位置0,表示当前页面已被置换出去
    				worklist[i].page_out=P[po];
    				worklist[i].Block=pagelist[P[po]].block;
    				pagelist[j].block=pagelist[P[po]].block;
    				worklist[i].page_adress=(worklist[i].Block*SizeOfBlock+worklist[i].page_local);
    		   	  
    			   pagelist[j].flag=1;
    			   worklist[i].sign=0;
    			   P[po]=pagelist[j].pageno;   //保存当前页面所在的位置
    			   po=(po+1)%M; 
    
    			   if(!(strcmp(worklist[i].operands,"存")))
    				{
    					pagelist[worklist[i].pagenum].dirty = 1;		//是否写回磁盘,修改页表
    					worklist[i].page_back = 1;
    				}
    
    			}
    		}
    		else
    		{
    			continue;
    		}
    	}
    
    }
    

    }
    (7)主函数
    int main()
    {
    init_ex1();
    work_FIFO();
    print();
    return 0;
    }
    五、画出程序的基本结构框图和流程图(包括主程序流程图、模块详细设计流程图等),对程序的每一部分要有详细的设计分析说明,说明设计实现所用的原理。
    main()函数

    init_ex1()函数

    使用文本文件进行内存初始化工作
    (1)在程序所在目录下创建两个文本文件page.txt和task.txt
    (2)读取文件内容,用循环将文件内容赋值给页表结构体的成员(pagelist)和存放操作数等结构体的成员(worklist)
    work_FIFO()

    使用双重循环
    (1)逻辑地址进行计算页号和页内地址
    (2)进行条件判断,如果页号标志位1,即在主存中,进行物理地址转换,否则进行缺页中断处理,使用P[M]数组模拟三个分配的物理块,po始终指向最先进去的页号

    六、源代码,要求格式规范,适当加注释,以有助于说明问题为宜,注释不少于三分之一。
    #include<stdio.h>
    #include
    #define SizeOfPage 7
    #define SizeOfBlock 128
    #define M 3
    struct info //页表信息结构体
    {
    int pageno;
    int flag; //页标志,1表示该页已在主存,0表示该页不在主存
    int block; //块号
    char disk[10]; //在磁盘上的位置
    int dirty; //更新标志(修改标志)

    }pagelist[SizeOfPage];

    struct work{
    char operands[10];
    long adress;
    int pagenum; //页号
    int page_local;//页内地址
    int sign; //标志
    int Block;
    int page_adress;//物理地址
    int page_out; //淘汰页号
    int page_back;

    }worklist[12];

    long po=0; //队列标记
    long P[M]={0,1,2}; //假设内存中最多允许M=3个页面

    void init_ex1() //内存空间初始化。
    {
    //memset(pagelist,0,sizeof(pagelist)); 内存空间初始化,第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为s。

    FILE *fp = fopen("page.txt","r"), *fq = fopen("task.txt","r");
    int i = 0;
    int a = 0, b = 0, c=0, d=0;
    char e[10];
    while(fscanf(fp,"%d%d%d%d%s",&a,&b,&c,&d,&e)!=EOF)
    {
    	pagelist[i].pageno=a;
    	pagelist[i].flag=b;
    	pagelist[i].block=c;
    	pagelist[i].dirty=d;
    	strcpy(pagelist[i].disk, e);
    	i++;
    }
    char s[10];
    long n = 0;
    int k=0;
    while(fscanf(fq,"%s%ld",&s,&n)!=EOF)
    {
    	if(k >= 12)
    		break;
    	strcpy(worklist[k].operands, s);
    	worklist[k].adress=n;
    	k++;
    }
    
    fclose(fp);
    fclose(fq);
    

    }

    void print()
    {
    /* char operands[10];
    long adress;
    int pagenum; //页号
    int page_local;//页内地址
    int sign; //标志
    int Block;
    int page_adress;//物理地址
    int page_out; //淘汰页号
    int page_back; //是否写回
    */
    printf(“以下数据1表示是,0表示否\n”);
    printf(“操作数\t逻辑地址\t页号\t页内地址\t是否命中\t物理块号\t物理地址\t淘汰页号\t是否写回\n”);
    for(int i=0;i<12;i++)
    {
    printf("%s\t%ld\t\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d",worklist[i].operands,worklist[i].adress,worklist[i].pagenum,worklist[i].page_local,worklist[i].sign,worklist[i].Block,worklist[i].page_adress,worklist[i].page_out,worklist[i].page_back);
    printf("\n");
    }
    }
    void work_FIFO()
    {

    int i,j;
    for(i=0;i<12;i++)
    {
    	worklist[i].pagenum=worklist[i].adress / 128;
    	worklist[i].page_local=worklist[i].adress % 128;
    	worklist[i].page_back = 0;
        
    	for(j=0;j<7;j++)
    	{
    		if(pagelist[j].pageno == worklist[i].pagenum)
    		{
    			if(pagelist[j].flag==1)
    			{
    				worklist[i].Block = pagelist[pagelist[j].pageno].block;
    				worklist[i].sign=1;
    				//printf("物理块:%d\n",worklist[i].Block);
    				worklist[i].page_adress=(pagelist[pagelist[j].pageno].block* SizeOfBlock + worklist[i].page_local);//worklist[i].Block
    			//	printf("物理地址:%d\n",worklist[i].page_adress);
    				worklist[i].page_out=-1;
    				if(!(strcmp(worklist[i].operands,"存")))
    				{
    					pagelist[worklist[i].pagenum].dirty = 1;		//是否写回磁盘,修改页表
    					worklist[i].page_back = 1;
    				}
    
    				
    			}
    			else
    			{
    				//printf("*%d\n",worklist[i].pagenum);
    				pagelist[P[po]].flag=0;   //将flag标志位置0,表示当前页面已被置换出去
    				worklist[i].page_out=P[po];
    				worklist[i].Block=pagelist[P[po]].block;
    				pagelist[j].block=pagelist[P[po]].block;
    				worklist[i].page_adress=(worklist[i].Block*SizeOfBlock+worklist[i].page_local);
    		   	  
    			   pagelist[j].flag=1;
    			   worklist[i].sign=0;
    			   P[po]=pagelist[j].pageno;   //保存当前页面所在的位置
    			   po=(po+1)%M; 
    
    			   if(!(strcmp(worklist[i].operands,"存")))
    				{
    					pagelist[worklist[i].pagenum].dirty = 1;		//是否写回磁盘,修改页表
    					worklist[i].page_back = 1;
    				}
    
    			}
    		}
    		else
    		{
    			continue;
    		}
    	}
    
    }
    

    }

    int main()
    {
    init_ex1();
    work_FIFO();
    print();

    return 0;
    

    }
    七、运行的结果,要求有对结果的分析
    结果分析:
    页号=int(逻辑地址/每块长度(128)) 页内地址=逻辑地址%每块长度(128)
    初始内存时,存在主存的页号有0,1,2号页。下面进行三个举例验证输出结果是否正确:
    ①第一个操作数为“+”,逻辑地址为:389,页号=int(389/128)=3,页内地址=389%128=5
    此时,3号页不在主存中,未命中(为0),产生缺页中断,使用FIFO算法进行页面调度,淘汰最先进入主存的页号,即0页,故0号页淘汰,将淘汰页的物理块赋值给调入页号的物理块,极为5,物理地址为:5128+5=645,操作数不为“存”,不写回外存。
    ②第二个操作数为“+”,逻辑地址为:150,页号=int(150/128)=1,页内地址=150%128=22
    此时,在主存是页号有3,1,2,故命中(为1),物理块号为8,物理地址为:8
    128+22=1046,命中,无淘汰页号,即记为-1,操作数不为“存”,不写回外存。
    ③第四个操作数为“存”,逻辑地址为:78,页号=int(78/128)=0,页内地址=78%128=78
    此时,在主存中的页号有1,2,3,未命中,产生缺页中断,根据FIFO算法,淘汰1号页,调入0号页,物理块号为8,物理地址为:8*128+78=1102,操作数为“存”,写回外存,记为1。以此类推,现不再重复验证。
    八、主要参考资料
    [1] 汤子瀛等. 计算机操作系统(第三版). 西安:西安电子科技大学出版社2007
    [2] [美]William Stallings. 操作系统――内核与设计原理. 北京:电子工业出版社 2001
    [3] [美]Abraham Silberschatz等. 操作系统概念(第六版) 北京:高等教育出版社 2004
    [4] [荷]Andrews Tanenbaum. 现代操作系统(第2版)北京:机械工业出版社 2005
    [5] 谭浩强. C程序设计(第四版). 北京:清华大学出版社2010

    展开全文
  • 操作系统之存储管理

    千人学习 2018-05-24 09:23:03
    “取指令,执行指令”,这是冯诺依曼式计算机的基本原则,进程... 本课程首先介绍存储管理的研究对象和目的,明确存储管理的基本功能和相关的基本概念;然后从实存和虚存两个角度,分别介绍常用的几种存储管理方案。
  • 连续存储管理

    千次阅读 2018-06-23 13:54:54
    连续存储管理⎧⎩⎨单一连续存储管理固定分区存储管理可变分区存储管理连续存储管理{单一连续存储管理固定分区存储管理可变分区存储管理连续存储管理 \begin {cases} 单一连续存储管理\\ 固定分区存储管理\\ 可变...
  • 分页存储存储管理方式详解

    千次阅读 多人点赞 2020-04-22 21:38:18
    分页存储存储管理方式详解离散分配方式分页储存管理方式页面与页表页面物理块逻辑地址结构页表快表(TLB,Translation Look aside Buffer)一级页表的缺陷两级多级页表反置页表反置页表的提出基于反置页表的地址转换...
  • Windows存储管理

    千次阅读 2018-10-18 09:50:20
    1.Windows存储管理之磁盘类型简介   各种操作系统连接到存储系统之后,并且操作系统识别物理磁盘之后,需要对磁盘进行进一步配置。如果用户连接存储是的Windows Server,存储管理员势必需要了解Windows中的磁盘...
  • 分页存储管理

    万次阅读 2018-05-19 16:58:06
    所以产生了离散的分配方式,根据离散时分配地址空间的基本单位不同,可分为三种,这里我们只讲解分页存储管理。 1. 页面和物理块 (1)页面。分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号,...
  • 存储管理之离散存储

    千次阅读 2016-06-03 20:44:29
    离散存储主要包括分页存储和分段存储两种。...分页存储管理: 页面:系统把进程划分为与帧(存储块)大小相等的块,成为页面(这样就可以让一个页存入一个帧中)。 数据结构:页表(PT)(放在系统区)
  • 段式存储管理、段页式存储管理

    千次阅读 多人点赞 2018-06-24 10:33:36
    分页与分段的区别 1.页是信息的物理单位,是系统管理的需要而不是用户的需要;而段是信息的逻辑单位,分段是为了更好地满足用户的需要 2.页的大小固定且由系统决定,一个...段式存储管理 段:用户编制的程序可以...
  • 分区存储管理

    千次阅读 2019-08-20 14:26:42
    分区存储管理是一种很早期的内存管理方案,其基本思想是将内存区域划分为多个区,给每个作业分配一个区使用,并且每个作业只能在被分配的区中运行。 按照划分方式不同,主要有三种不同的分区方式:固定分区,可变...
  • 分页存储管理方式

    千次阅读 2018-12-05 18:28:54
    存储管理的离散分配方式 基本分页存储管理 基本分段存储管理 段页式存储管理 二.基本分页存储管理 离散分配内存: 作业规定大小划分成小份;内存也按同样大小划分成小份 作业的任一小份可分散放入内存任意未...
  • 基本分页存储管理方式

    万次阅读 多人点赞 2018-07-26 20:16:41
    连续分配存储管理方式产生的问题 在分区存储管理中,要求把进程放在一个连续的存储区中,因而会产生许多碎片。 碎片问题的解决方法 (1)拼接/紧凑技术----代价较高。 (2)离散分配方式---允许将作业/进程离散...
  • 分段存储管理方式

    千次阅读 2019-03-31 11:31:22
    分段存储管理方式(已成为当今所有存储管理方式的基础) 分段存储管理方式的引入 为了满足以下需要 方便编程 信息共享 信息保护 (数据段)动态增长 动态链接(以段作为基本单位链接) 基本原理 分段地址结构...
  • 请求分页式存储管理是基于分页式存储管理的一种虚拟存储器 1. 相同点 a. 把内存空间划分成尺寸相同、位置固定的块 b. 按照内存块大小,把作业的虚拟地址空间(相对地址空间)划分成页(划分过程对用户透明) c. ...
  • 虚拟存储管理

    千次阅读 2018-07-08 00:29:58
    必要性:前面的各种存储管理方式必须一次性全部装入内存才可以运行,直至作业运行结束才能释放全部内存资源,所以存在: (1)内存不满足作业地址空间要求时就不能运行 (2)大量作业要求运行时只有少数作业装入...
  • 分区式存储管理

    千次阅读 2019-05-21 23:02:47
    分区式存储管理 基本思想:将内存划分成若干个连续区域,称为分区。每个分区只装入一个程序,且该程序只能在此分区运行。 问题:内碎片问题(分区内未被利用的空间)+外碎片问题(分区之间难以利用的空间) 需要...
  • 分页存储管理方式,将程序划分为若干个大小固定的区域(页),也把物理内存划分为大小和页相等的块,通过页表完成页到块的映射。 分页存储管理之C语言模拟: #include #include #include #define PAGE 20 int ...
  • 操作系统 存储管理实验报告

    千次阅读 多人点赞 2020-06-19 10:05:40
    存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。 本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 二...
  • 动态分区存储管理

    千次阅读 2019-05-05 21:55:04
    实验三 动态分区存储管理 实验目的:熟悉并掌握动态分区分配的各种算法。 熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。 实验内容:用高级语言模拟实现动态分区存储管理,要求: 分区分配算法...
  • 操作系统存储管理之分段存储

    千次阅读 2017-04-23 14:57:56
    而分段存储管理的引入,则满足用户(程序员)编程和使用上的要求,这些要求其它各种存储管理技术难以满足。需求解析: 在分页存储管理中,经连结编辑处理得到了一维地址结构的可装配模块,这是从0开始编址的一个单一连续的...
  • 用分区方式管理的存储器,每道程序总是要求占用主存的一个或几个连续存储区域,作业或进程的大小仍受...分页式存储管理的基本原理如下: 1. 页框:物理地址分成大小相等的许多区,每个区称为一块(又称页框 page frame);
  • 页式存储管理(不连续存储)

    千次阅读 2018-06-24 01:43:16
    连续存储管理不足 对空间要求高 会形成很多碎片 通过移动技术减少碎片会增加系统的开销 页式存储管理 基本思想 页式存储管理就是把内存物理空间划分成大小相等的若干区域,一个区域称为一块. 把逻辑地址...
  • 操作系统存储管理实验报告

    千次阅读 2020-01-20 09:47:42
    通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚 拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。 实验要求:掌握五种存储管理算法 1...
  • 操作系统之存储管理——FIFO算法和LRU算法

    万次阅读 多人点赞 2018-12-04 16:29:59
    操作系统之存储管理——FIFO算法和LRU算法 操作系统之磁盘调度——SCAN实例讲解 一、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。 本实验的目的是通过请求...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,586
精华内容 62,634
关键字:

存储管理