操作系统原理4——存储管理

本章考核知识点:

1、重定位

2、固定分区存储管理

3、可变分区存储管理

4、页式存储管理

5、段式存储管理

6、虚拟存储器

  自学要求 :

明确存储管理的职能是对主存储器中的用户区域进行管理;

理解在不同的管理方式下如何实现存储保护、地址转换、以及主存空间的分配和回收;

比较各种管理方式的特点;

掌握虚拟存储器的实现原理和方法。

  重点是:

各种管理方式的特点;

可变分区方式的主存分配算法以及移动技术;

分页式虚拟存储管理的实现以及页面调度算法;

分段式虚拟存储管理的实现。

  操作系统的存储管理如同一个大地主,管着一个大庄园,当有农户需要租用田地时,地主就给  分配一块地让他种(用户区分配)。

等到地里长出了果实(结果出来后,地主还得来收回这块地(去配)。

  为了管好这片田地,地主还要管好庄园的门,凡是要进去种地的,都得由地主根据他的需要让他到位置确定实际的田地上去干活。

把 逻辑地址 转换成 物理地址

  庄园里还有一些大家共同可以使用的地方,比如地主的花园,工具房等,大家可以进去,也可以使用,但是不许改变任何现有的东东,还有,每个农户只能在自己的地里刨食吃,如果有人胆敢到别人地里或地主的花园里摘花偷食,可要当心他们养的狼狗跳出来哦。(共享保护

  当然,再大的地也是不够多的,地主为了多赚些钱,当所有的地都租出去的时候,他想办法把有些种田人  暂时不种的那块地里的东东 连地皮一起挖出来放到仓库里先堆着。把地腾出来租给别人种

(这一招可够绝的,不过地主说啦,这就是“虚拟存储”。)

  你说这个地主是好是坏??

  概述:本章讨论的是主存储器空间的管理。

主存储空间分成  系统区  和  用户区  两部分。

存储管理的功能包括:主存空间的分配和去配、 实现地址转换、 主存空间的分享和保护和      主存空间扩充。

  一、重定位( 领会 )

  1、区分逻辑地址与绝对地址。

  绝对地址 :主存储器以字节为编址单位,容量为n的主存储器中,每个单元有唯一的编号,从0到n-1,这个唯一的编号就是主存储器的 物理地址 .

                           比如我们现在用的128MB内存条中就有128×1024×1024=134217728 字节,                        所以它的内存绝对地址就是从0到134217727.

  注意啦,庄园的大地主就是这么给自己的地做上标记的。

  逻辑地址 :在多道程序设计的系统中,操作系统为了方便用户,就允许每个用户都认为自己的作业的程序和数据存放在地址是0开始的 连续空间中。 这样用户程序中使用的地址就是 逻辑地址 .

  种田人不管地主庄园有多少块地,标了什么号,只要记住自己需要多少地,给自己种的地打上标记就是了。

地主想,只要你们能干活,不需要知道了我的底细了吧(家财不可外扬哦)。

  2 、重定位(地址转换的方式)

  为了保证作业的正确执行,必须根据分配给作业的主存区域对  作业中指令和数据的存放  进行重定位,这种 把 逻辑地址转换成绝对地址 的工作称为“ 重定位 ”或“地址转换”。

重定位的方式有“ 静态重定位 ”和“ 动态重定位 ”两种。

  庄园主道:静态重定位比较简单,想当初张三来这儿, 说要 租一百块地,青菜种在第1块地,萝卜种2块地里,土豆得种在第3块地里……然后得在第28块地里养鸭,完了要把28块地里的鸭粪拉到

第49块地的鱼塘里喂鱼…… 我就说,行啦行啦,你进去,庄园的左边101到200号那100块地就分给你吧,以后你要找哪块地养鸭养鱼的,就得按我给你编的号来找。

每个地址都已经加上100了,不会找错吧。别说我没讲清楚哦。

  至于动态重定位,庄主笑道:这个我也能做到,这么实现的:李四来租地时,我也不问他,直接把他带到空闲的一片地方。派人记着这那片地的第一个地址。比如说是100号吧。李四这个笨小子干着干着会叫起来说:“老板,现在我要到32号地里抓鱼!”旁边人一听,马上告诉他“哎呀,你现在已经分了地啦,起始地块是100号,那你就得到132号地去才对!”就这样,李四每一次要找地方时,都叫别人给他重新算一下。

这样他才不会找错位置。这样也有一个好处,就是如果有人出价更好,我可以让他搬到别处去干活,反正都是叫别人给他重新算位置,所以他就不用记住搬地方后的物理地址啦。

  (1)静态重定位

  在装入一个作业时,把作业中的指令地址和数据地址全部转换成绝对地址。

这种转换工作是在 作业开始 集中完成 的,在作业执行过程中 无需再进行地址转换。所以称为“静态重定位”。

  (2)动态重定位

  在装入一个作业时,不进行地址转换,而是直接把作业装到分配的主区域中。在作业执行过程中,每当执行一条指令时都由硬件的地址转换机构转换成绝对地址。

这种方式的地址转换是在 作业执行动态完成 的,所以称为动态重定位。

  动态重定位由软件(操作系统)和硬件(地址转换机构)相互配合来实现。

动态重定位的系统支持“程序浮动”,                    而静态重定位则不能。

  二、固定分区存储管理( 领会 )

  分区存储管理是把存储器中的用户区作为一个连续区或分成若干连续区进行管理。

早先使用一个分区的存储管理,后发展成多分区的存储管理。

多个分区的管理可采用 固定分区方式  和  可变分区方式

  1、固定分区存储管理的原理

  固定分区 的意思就是指      主存空间划分成若干连续区后,这些分区的 大小 个数  就   固定 不变。

  固定分区管理利用一张“ 主存分配表 ”说明各分区的情况。            装入和结束作业均通过这个  分区表  来记录分区使用的变化情况。

  2、如何实现存储保护

  固定分区管理 可采用 静态重定位 的方式装入作业。

装入程序把作业中的逻辑地址转换为绝对地址。并检查绝对地址是否在指定(装入)的分区内,如果是,就装入这个作业。否则就不能装入。

如果装入主存分区的作业占用处理器时(注意,是运行时),进程调度程序(不是装入程序了)必须把作业所在分区的上下限地址存入“下限寄存器”和“上限寄存器”中,这样可以在指令执行中判断其所用到的绝对地址是否越界,达到存储保护的目的。

  3、怎样 提高主存空间的利用率 这里有几种办法:

  (1)分区按大小顺序排列,这样可以使作业总是  先使用满足要求的 最小分区

  (2)根据经常出现的作业大小和频率划分分区。

  (3)按作业的对主存空间的需求量排成多个队列,规定队列与分区的对应关系。也就是说多大的作业只能放在多大的分区里,就算有更大的分区空着,也不许他进入。

  三、可变分区的管理( 领会 )

  可变就是指分区的 大小和位置不是固定 的,而是根据作业要求的主存量  来分配分区的大小。

  1、主存的分配和去配(回收)

  在系统初始化时,主存除了操作系统所占部分外,整个用户区是一个大的空闲区,可以按作业需要的空间大小顺序分配空闲区直到不够时为止。

  当作业结束时,它的占用分区被收回。这个空闲区又可以根据新作业的大小重新用于分配,所以主存中的已占分区和空闲区的数目和大小都是在变化的。

可以用两张表“已分配区表”和“空闲区表”来记录和管理。

  2、常用的分配算法

  最先适应分配算法 :简单地说,就是在分区表中顺序查找,找到够大的空闲区就分配。  但是这样的分配算法可能形成许多不连续的空闲区,造成许多“碎片”,使主存空间利用率降低。

  最优适应分配算法 :这种算法总是挑选一个能满足作业要求的最小空闲区。但是这种算法可能形成一些极小的空闲区,以致无法使用,这也会影响     主存利用率。

  最坏适应分配算法 :这种算法和上面的正好相反,它总是挑一个最大的空闲区分给作业使用,使剩下的空间不至于太小。

  3、地址转换与存储保护

  采用 可变分区方式管理 时,一般均采用 动态重定位 方式装入作业。也就是每读一条指令,都要变换一次地址。

变换要靠  硬件 支持,主要是 两个寄存器 : 基址 寄存器 限长 寄存器,限长寄存器存放作业所占分区的长度,基址寄存器则存放作业所占分区的起始地址,这两个值确定了一个分区的位置和大小。

  转换时根据逻辑地址与限长值比较,如果不有超过这个值,表示访问地址合法,再加上基址寄存器中的值就得到了绝对地址了,否则形成“地址越界”中断。达到存储保护的目的。

  对于共享程序,则硬件提供两组限长寄存器和基址寄存器。

访问时对访问区享区和作业区的地址分别进行转换。

  4、移动技术的应用

  移动技术 要“移动”的东东就是主存空间中的作业。

把某个作业移到另一处主存空间去(在磁盘整理中我们应用的也是类似的移动技术),这样的最大好处就是可以合并一些空闲区。

  但是移动技术的应用也要注意以下问题。

  移动会增加系统开销。所以要尽量减少移动。

  移动是有条件的,如果作业在执行过程中正等待与外围设备传输信息,就不能移动。因此在移动时首先要判定该作业是否与外设交换信息。

  四、页式存储管理( 领会 )

  1、如何分页和分块

  页式存储管理中有两个名词:“ 页 ”和“ 块 ”,其中的“块”是针对硬件来说的,就是把存储器分成若干相等大小的区,每个区就称为一个块。

对应的,在程序中,逻辑地址进行“分页”,其大小和每个块相一致。

  事实上,页面的大小是由块的大小自然决定的。对于程序来说,其逻辑地址还是和原来一样采用连续的地址。只是 按照块的位数取其前面数位做为页号 .

  分配空间时,根据作业长度可以确定它的页面数,根据这个页面数在主存中分配相应的块数,只要是空闲块就可以放入,即使不是相邻的。并把分配情况记在“页表”中,根据页表可以找到相对应的页号与块号,就得出绝对地址了。

  2、采用页式管理,使主存空间充分利用,页不必为了得到连续空间而进行移动。 可以提高系统效率。

  3、页表的构造与作用

  每个被装入主存的作业都有一张 页表 ,指出该作业逻辑地址中的页号与所占用的主存块号之间的对应关系。页表的长度由作页拥有的页面数决定,行号对应为页号,行中记录的是主存中的块号。

  页表是硬件进行地址转换的依据,每执行一条指令时按逻辑地址中的页号查找页表并转换成绝对地址。

  在多道程序设计系统中,进入主存的每个作业都有一张页表,由一个硬件“页表控制寄存器”来记录每个作业的页表所在位置和长度以便作业转换时同时转换页表。

  4、快表的构造与作用

  快表 就是页表的一部分克隆,每行中有页号及其对应的块号,整个快表存放在一个小容量的高速缓存中,访问时快表和内存同时进行查找,因为快表速度很快,而常用的页都登记在快表中,因此可以大大加快执行速度。

  5、采用页式管理的地址转换过程

  (为什么不直接用块分配表来记录而要用位示图呢,因为主存块很多,这样可以节省空间,提高效率。位示图就是用一个位(0或1)来表示一个块的使用状态,一个字32位,可以表示32块。按顺序排列,只需一小段内存就可以记录主存中大量的块状态)

  6、利用位示图实现页式存储空间的分配和回收

  页式存储管理把主存空间分成大小固定的许多块,在装业作业时,如何知道主存中哪些块已使用,哪些还未用,可以用位示图来表示。

  块号=字号×字长+位号

  字号=[i/字长](即块号i除以字长取整)

  位号=i mod 字长(即块号i除以字长取余)。

  五、段式存储管理( 领会 )

  1、段式存储中段的划分

  段式管理 是根据人们对 程序 中需要 分段编制 的要求出发而提供的。它提供给用户编程时使用的逻辑地址由“段号”和“段内地址”两部分组成,其形式和页式管理相同。但是实际上是不同的:

  页式存储管理提供连续逻辑地址由系统自动分页,段式存储管理中的作业分段是由用户决定的,每段独立编程,因此段间的逻辑地址是不连续的。

  2、段式存储空间的分配

  这种分配方法和可变分区管理方式的分配方法相同,所不同的是:

  可变分区管理方式中是为每个作业分一个区,而段式管理是为一个作业中的每个段分一个连续的空间。(段式管理更细)。

  3、段表的构造与作用

  段表 由 段号 、 本段限长 和 起始地址 三部分组成,由于每一行记录的行号可以对应程序的段号,因此段号实际上被省略,不占存储空间。

  与其他管理方式一样,段表记录的信息用于地址转换和存储保护。段表的表目起到了基址/限长寄存器的作用。

  4、段式存储管理的地址转换

  这个转换过程如同可变分区方式的地址转换,但是由段表的表目替代了基址/限长寄存器。

  绝对地址=根据段号找到段表中的起始地址+段内地址 (如果段内地址超过限长则产生“地址越界”程序性中断事件达到存储保护)

  多道程序设计系统中,每个进入主存的作业都建立了段表,因此还有一个硬件“段表控制寄存器”来记录每个作业的段表在主存中的位置和长度。

  六、虚拟存储器( 领会 )

  1、什么是虚拟存储器

  虚拟存储器 是为“扩大”主存容量而采用的一种设计技巧,它利用作业在只装入部分信息时就可以执行的特性和程序执行中表现出来的局部性特性,借助于大容量的辅助存储器实现小主存空间容纳大逻辑地址空间的作业。

  虚拟存储器的容量 由计算机的 地址结构(总线位数) 决定。

  2、虚拟存储器的实现原理

  它的工作原理如下:首先把作业信息保留在磁盘上,当作业请求装入时,只将其中一部分先装入主存,作业执行中若要访问的信息不在主存中,则再设法将这些信息装入主存。

  3、分页式虚拟存储器的实现

  页式虚拟存储管理 是在 页式存储管理 的基础上实现的。首先把作业信息作为副本存放在磁盘上,作业执行时,把作业信息的部分页面装入主存储器,作业执行时若所访问的页面已经在主存中,则进行地址转换,得到绝对地址,否则产生“缺页中断”由操作系统把当前所需的页面装入主存。

  4、常用的页面调度算法:FIFO、LRU、LFU

  当主页中无空闲块时,为了装入一个页面,就必须按某种算法将主存中某个页调出,调入所需装入的页面。这就是页面调度。常用的算法有:先进先出调度算法( FIFO )、最近最少使用调度算法( LRU )和最近最不常用调度算法( LFU )。

  特别要注意掌握的就是 LRU的算法 ,如何进行调度。

  5、缺页中断率

  如果作页执行中访问页面的总次数为A,其中有F次访问的页面尚未装入主存,则有F次缺页中断,f=F/A,这里的f就称为缺页中断率。影响缺页中断的因素有:

  分配给作业的主存块数——块数n↑ f↓

  页面的大小——页面大小↑ f↓

  程序编制方法——局部化程度↑ f↓

  页面调度算法

  6、段式虚拟存储器的实现

  段式虚拟存储管理 以 段式存储管理 为基础,在磁盘上保留作业的各个分段信息,作业执行时把需要执行的一段或几段装入主存。在实际使用中,也要进行查表和地址转换以及“缺段中断” 和调度(包括调出、装入、移动等)工作。

时间: 2024-10-03 23:10:26

操作系统原理4——存储管理的相关文章

操作系统基本分页存储管理方式

操作系统基本分页存储管理方式 连续分配内存方式会形成许多"碎片",通过紧凑的方式将碎片拼接成一块大的空间,但是拼接过程系统开销太大.如果允许将一个进程直接分散地装入到许多不相邻的分区中,那么就不需要再进行"紧凑".基于这一思想而产生了离散分配方式.如果离散分配的基本单位是页,则称为分页存储管理方式:如果离散分配的基本单位是段,则称为分段存储管理方式. 在分页管理方式中,如果不具备页面对换功能(将处于阻塞状态且优先级低的进程对换到外存),则称为基本的分页存储管理方式,

操作系统原理2——OS结构

操作系统原理2——OS结构 计算机系统是由硬件系统和软件系统两部分组成, 操作系统是软件系统的一个组成部分,它是直接在硬件系统的基础上工作的,所以在研究操作系统之前,先必须对计算机系统的结构有一个基本的了解,本章就是讲述计算机系统结构的基本知识. 本章的考核 知识点 是: 1.计算机系统的层次结构 2.硬件环境 3.操作系统结构 学习本章要求:了解计算机系统的结构,有关硬件的I/O中断和存储结构,硬件的保护措施:有关操作系统的结构,操作系统提供的使用接口. 重点 是:硬件环境和操作系统的结构 一

操作系统原理(转)

操作系统原理   我们每天都同操作系统打交道,了解一些操作系统原理上的知识是绝对有必要的,它可以让你了解操作系统内部是怎么工作的,为什么会出现这样那样的问题,为我们解决这些问题提供思路. 本文完全是为普通电脑用户写的,省略了所有难以理解的算法.原理,没有太多细节上的东西,只是针对普通电脑用户可能感兴趣的问题给出了实现思想.写这些东 西只是我的一相情愿,就怕我还是写得深了些,初学者读不懂.如果这10K文字能让你对操作系统有更深的了解,那也就不枉了这几个汗流浃背的夏日午后了. Q:什么是中断?A:中

马哥学习笔记三十二——计算机及操作系统原理

缓存方式: 直接映射 N路关联 缓存策略: write through:通写 write back:回写 进程类别: 交互式进程(IO密集型) 批处理进程(CPU密集型) 实时进程(Real-time) CPU: 时间片长,优先级低IO:时间片短,优先级高 Linux优先级:priority 实时优先级: 1-99,数字越小,优先级越低 静态优先级:100-139,数据越小,优先级越高 实时优先级比静态优先级高 nice值:调整静态优先级   -20,19:100,139   0:120 ps

操作系统基本分段存储管理方式

操作系统基本分段存储管理方式 引入分段存储管理方式的目的:满足程序员在编程和使用上多方面的要求.这种存储管理方式已经成为当今所有存储管理方式的基础. 1.分段存储管理方式的引入 主要满足用户和程序员以下需求: 1).方便编程 用户把自己的作业按照逻辑管理划分为若干段,每个段都是从0开始编址,并有自己的名字和长度.因此,希望要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的. LOAD1,[A] | <D>;//将分段A中D单元内的值读入寄存器1 STORE1,[B] | <C

漫谈怎样学习操作系统原理

本人学习计算机技术至今,对于怎样学习操作系统原理有一点自己的看法,如今写出来,希望对大家能有所助! 操作系统怎么学.首先要想操作系统是怎么来的,在没有操作系统的年代里,人们是怎么编程的. 这是首要的问 题.不知道有没有人看过INTEL官方的CPU文档,总是分为应用级编程.系统级编程.指令集这三块.当中系统级编 程这一块最复杂,我不说内容,就单从文件的大小来看,IA-64编程手冊的应用级编程卷是2MB,系统卷却有6MB.就 连IA-32编程手冊上的系统卷部分也远比应用卷的要多.当然这些内容我还没有

第五十二课 linux操作系统原理、虚拟机基础原理

linux操作系统原理 linux操作系统原理 虚拟机技术基础原理 虚拟机技术基础原理

漫谈如何学习操作系统原理

本人学习计算机技术至今,对于如何学习操作系统原理有一点自己的看法,现在写出来,希望对大家能有所助! 操作系统怎么学,首先要想操作系统是怎么来的,在没有操作系统的年代里,人们是怎么编程的.这是首要的问 题.不知道有没有人看过INTEL官方的CPU文档,总是分为应用级编程.系统级编程.指令集这三块.其中系统级编 程这一块最复杂,我不说内容,就单从文件的大小来看,IA-64编程手册的应用级编程卷是2MB,系统卷却有6MB.就 连IA-32编程手册上的系统卷部分也远比应用卷的要多.当然这些内容我还没有看

操作系统原理(二),进程、线程

Technorati 标签: 操作系统,原理 现代操作系统比如,Linux,Windows等,都是支持"多任务"的操作系统.所谓多任务,指的就是操作系统可以同时运行多个任务.也就是在同一台电脑上,可以同时上网.听歌.使用Word,在过去单核的CPU上都已经可以支持多任务,实现的方式是操作系统让各个任务轮流交替执行.,比如任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒,因为CPU执行速度非常块,我们感觉到所有任务都是并发处理. 到了多核CPU时代