收藏 分享(赏)

第4章内存管理.ppt

上传人:sjmd695 文档编号:7902241 上传时间:2019-05-29 格式:PPT 页数:159 大小:1.13MB
下载 相关 举报
第4章内存管理.ppt_第1页
第1页 / 共159页
第4章内存管理.ppt_第2页
第2页 / 共159页
第4章内存管理.ppt_第3页
第3页 / 共159页
第4章内存管理.ppt_第4页
第4页 / 共159页
第4章内存管理.ppt_第5页
第5页 / 共159页
点击查看更多>>
资源描述

1、2019/5/29,第4章 存储器管理,计算机系统中的存储器可以分为两种:内存储器和辅助存储器。前者可被CPU直接访问,后者不能。辅助存储器与CPU之间只能够在输入输出控制系统的管理下,进行信息交换。 既然内存储器可被CPU直接访问,因此它是计算机系统中的一种极为重要的资源。在操作系统中,把管理内存储器的部分称为“存储器管理”。能否合理地使用内存,会在很大程度上影响到整个计算机系统的性能。,退出,2019/5/29,4.2. 程序的装入和链接,将一个用户源程序变为一个可在内存中执行的程序,通常要经过编译、链接和装入几个步骤 (1)编译。由编译程序将用户源代码编译成若干个目标模块。 (2)链接。

2、由链接程序将编译后形成的目标模块以及它们所需要的库函数,链接在一起,形成一个装入模块。 (3)装入。由装入程序将装入模块装入主存的过程。,2019/5/29,源程序的执行过程,通常要经过编译、链接和装入几个步骤,2019/5/29,4.2.1 程序的装入,程序的装入就是把程序装入内存空间。 采用三种方式 (1)绝对装入方式:是由装入程序根据装入模块中的地址,将程序和数据装入内存。 (2)可重定位方式 :是由装入程序根据内存当前的实际使用情况,将装入模块装入到内存适当的地方。 (3)动态运行时装入方式:动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而

3、是把这种地址转换推迟到程序要真正执行时才进行。,2019/5/29,程序的装入,绝对装入方式:是由装入程序根据装入模块中的地址,将程序和数据装入主存 若知道程序在内存的位置,编译程序将产生绝对地址目标模块 绝对地址一般由编译程序给出 程序被装入内存后,由于程序中的逻辑地址与实际内存地址完全相同,所以不允许改变程序和数据的地址 只适于单道环境,2019/5/29,程序的装入,绝对装入方式只能将目标模块装入到内存中事先指定的位置。在多道程序环境下,编译程序不可能预知所编译的目标模块应放在内存的什么地方,因此在多道程序环境下,所得到的目标模块的起始地址通常是从0开始的,程序中的其它地址都是相对于起始

4、地址计算的。因此采用重定位装入方式。,2019/5/29,程序的装入,可重定位方式 :是由装入程序根据主存当前的实际使用情况,将装入模块装入到主存适当的地方。 重定位:在装入时对目标程序中指令和数据的修改过程。会使装入模块中的所有逻辑地址与实际装入内存的物理地址不同,2019/5/29,程序的装入,静态重定位方式 : 是指地址转换工作是在程序装入内存时由装配程序完成的。装配程序根据将要装入内存的起始地址,对程序模块中有关的地址部分进行调整和修改 (物理地址=逻辑地址+程序存放在内存的起始地址),一旦确定下来之后不再改变,即静态地址重定位是在程序执行之前完成的地址转换。 它的优点:无需硬件支持,

5、容易实现。缺点:程序经地址重定位后不能再移动,程序在内存空间只能连续存储,程序很难被若干个用户所共享。,2019/5/29,程序的装入,静态重定位方式 :,如上图所示,图(a)中,程序中逻辑地址为6,8,10,因为装入内存中程序的起始地址变为100,所以须对地址进行重定位,否则在图(b)的情况下会发生调用错误,所调用的地址中不再是程序员想要的内容。图(c)为重定位之后的结果。,2019/5/29,程序的装入,动态运行时装入方式:动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序要真正执行时才进行。 适于多道环境 允许程序移动

6、,如切换 动态重定位 需要特殊硬件支持(重定位寄存器),2019/5/29,程序的装入,动态重定位: 是指地址转换工作是在程序执行期间由硬件变换机构动态实现地址转换的。 物理地址=逻辑地址+重定位寄存器的内容。 动态重定位的优点:用户程序在执行过程中内存可移动,程序不必连续存放在内存中,可以放在不同区域,若干个用户可以共享同一程序段或数据段。缺点:需要附加硬件支持,实行存储管理的软件算法比较复杂。,2019/5/29,程序的装入,动态重定位:,如上图所示,作业装入内存后,仍是逻辑地址,没有进行重定位,当运行过程中运行到这一句时,将逻辑地址2500加上重定位寄存器中的10000,即是需要的物理地

7、址。此种情况下,作业中的地址一直保持是逻辑地址,如果发生了内存中的移动,将新的内存起始位置传给重定位寄存器即可,也就是重定位寄存器中一直记录着当前作业所在内存的起始地址。,2019/5/29,程序的链接,链接程序的功能是将经过编译或汇编后所得到的一组目标模块以及它们所需要的库函数,装配成一个完整的装入模块。 实现链接的方法有三种 静态链接:事先进行链接,以后不再拆开的链接方式 装入时动态链接:用户源程序经编译后所得到的目标模块,是在装入内存时,边装入边链接的。 运行时动态链接:某些目标模块的链接,是在程序执行中需要该(目标)模块时,才对它进行链接,2019/5/29,4.2.2程序的链接,静态

8、链接:事先进行链接,以后不再拆开的链接方式 对相对地址进行修改 变换外部调用符号,JSR:保 存返回 地址, 跳转到 新地址,2019/5/29,程序的链接,装入时动态链接:用户源程序经编译后所得到的目标模块,是在装入主存时,边装入边链接的。 改变相对地址的方式如方法一 便于修改和更新 便于实现目标模块共享,模块A,模块B,模块C,2019/5/29,程序的链接,运行时动态链接:可将某些目标模块的链接,推迟到执行时才进行。 便于实现目标模块的修改、更新和共享 加快程序的装入过程 提高内存利用率,2019/5/29,逻辑地址与物理地址,逻辑地址物理地址,2019/5/29,练习,静态重定位是在作

9、业的()中进行的,动态重定位是在作业()中进程的 编译过程 装入过程 修改过程 执行过程,2019/5/29,练习,静态链接是在()中进行的,而动态链接是在()或()中进行的,其中在()进行链接,可使得内存利用率最高 编译某段程序时 装入某段程序时 调用某段程序时 紧凑时 装入程序之前,2019/5/29,4.3.连续分配方式,连续分配方式:为一个用户程序分配一个连续的内存空间 单一连续分配 固定分区分配 动态分区分配 动态重定位分区分配,2019/5/29,连续分配方式,单一连续分配 只能用于单用户,单任务的操作系统。 把内存分为系统区和用户区两部分 系统区给OS使用,通常在低址部分 用户区

10、给用户使用。在主存中仅驻留一道程序,整个用户区为一用户独占。当用户作业空间大于用户区时,该作业不能装入。,2019/5/29,连续分配方式,单一连续分配,2019/5/29,连续分配方式,固定分区分配 将内存中的用户空间划分为若干个固定大小的区域 每个分区中只装入一道作业,一个作业也只能装入一个分区中,这样可以装入多个作业,使它们并发执行。当有一个空闲分区时,便可从外存的后备队列中,选择一个适当大小的作业装入该分区;当该作业运行完时,又可从后备队列中选择另一个作业装入该分区(分区大小可以相同也可以不同)。,2019/5/29,连续分配方式,固定分区分配 可运行多道程序的存储管理方式 要求把作业

11、全部装入主存,且装入一个连续的存储空间。,2019/5/29,固定分区分配,划分分区的方法 分区大小相等缺点:缺乏灵活性可被用于利用一台计算机去控制多个相同对象的场合 分区大小不等。,2019/5/29,固定分区分配,内存分配为了记录各个分区的基本情况和使用情况,方便主存空间的分配与回收操作,设置了一张分区使用表。 分区使用表的内容包括:分区序号、起始地址、大小、状态。 状态栏的值为“0”表示分区空闲,可以装入作业;当装入作业后,其值改为已分配,2019/5/29,固定分区分配,内存分配,20,图 4-4 固定分区使用表,2019/5/29,固定分区分配的管理特点,(1)一个作业只能装入一个分

12、区,不能装入两个或多个相邻的分区。一个分区只能装入一个作业,当分区大小不能满足作业的要求时,该作业暂时不能装入。 (2)通过对“分区使用表”的改写,来实现主存的分配与回收。作业在执行时,不会改变存储区域,所以采用静态地址重定位方式。此方法易于实现,系统开销小。 (3)当分区较大作业较小时,仍然浪费许多主存空间(内零头,内部碎片)。并且分区总数固定,限制了并发执行的作业数目。,2019/5/29,固定分区存储管理举例,例 在某系统中采用固定分区分配管理方式,主存分区(单位字节)情况如图所示。现有大小为1KB、9KB、33KB、121KB的多个作业要求进入主存,试画出它们进入主存后的空间分配情况,

13、并说明主存浪费有多大?,2019/5/29,0,0,0,0,2019/5/29,动态分区分配,固定分区存储管理中的“固定”有两层含义,一是分区数目固定,一是每个分区的尺寸固定。采用这种内存管理技术时,分配出去的分区总可能会有一部分成为内部碎片而浪费掉。究其原因,是因为进入分区的作业大小,不可能刚好等于该分区的尺寸。那么能否不事先划分好分区,而是按照进入作业的相对地址空间的大小来分配存储,从而避免固定式分区所产生的存储浪费,这实际上就是可变分区(动态分区)存储管理考虑问题的出发点。,2019/5/29,动态分区存储管理的基本思想是:在作业要求装入内存储器时,如果当时内存储器中有足够的存储空间满足

14、该作业的需求,那么就划分出一个与作业相对地址空间同样大小的分区分配给它。,2019/5/29,2019/5/29,由于实施动态分区存储管理时,分区的划分是按照进入作业的尺寸进行的,因此在这个分区里不会出现内部碎片。这就是说,动态分区存储管理消灭了内部碎片,不会出现由于内部碎片而引起的存储浪费现象。,2019/5/29,动态分区,动态分区存储管理方式是在作业要求装入主存时,根据作业的大小动态地划分分区,使分区的大小正好适应作业的要求。各分区的大小是不定的,主存中分区的数目也是不定的。 动态分区存储管理方式必须解决三个问题: 一是分区分配中所用的数据结构。 二是分区的分配算法。 三是分区的分配和回

15、收。,2019/5/29,采用的数据结构,为了实现分区分配,系统中必须配置相应的数据结构,用来记录内存的使用情况。比如空闲分区的情况,为作业分配内存空间提供依据。常用的有空闲分区表和空闲分区链。,2019/5/29,采用的数据结构,空闲分区表。记录主存中空闲分区的情况,包括空闲分区序号、起始地址和大小。为了便于处理,一般情况下空闲分区表中的空闲分区记录以地址递增的顺序排列。 空闲分区链。在每个分区的起始部分,设置一些用于控制分区分配的信息,以及用于链接各分区的前向指针,在分区尾部设置一个后向指针,这样将所有的空闲分区链接成双向链表。,2019/5/29,分区分配算法,(1)首次适应分配算法(F

16、F) (2)循环首次适应分配算法(NF) (2)最佳适应分配算法(BF) (3)最坏适应分配算法(WF),2019/5/29,空闲区表或队列的排序,按空闲区首址递增的次序归类组织空闲区表或空闲区队列 按空闲区大小的递增或递减次序组织空闲区表或队列,2019/5/29,(1)首次适应法,要求空闲区按首址递增的次序组织空闲区表(队列)。,2019/5/29,分配:当进程申请大小为SIZE的内存时,系统从空闲区链的链首开始查询,直到首次找到等于或大于SIZE的空闲区。从该区中划出大小为SIZE的分区分配给进程,余下的部分仍作为一个空闲区留在空闲区链中,但要修改其首址和大小。 若找不到满足要求的,则分

17、配失败,返回。,2019/5/29,分析,注意:每次分配和回收后空闲区链都要按首址递增的次序排序。首次适应法的优点: 这种算法是尽可能地利用低地址空间,从而保证高地址空间有较大的空闲区。,2019/5/29,缺点 容易产生过多的小地址碎片;降低了主存空间利用率。 每次查找都是从低址开始,增加了查找的开销 改进 采用循环首次适应算法。,2019/5/29,(2)循环首次适应算法,不是每次都从链首开始找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区。 设置查寻指针; 循环查找方式 使内存中的空闲分区分布得更均匀,减少了查找时的开销,但会缺乏大的空闲分区。,20

18、19/5/29,(3)最佳适应法,所谓最佳就是每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业,避免大材小用。 要求按空闲区大小从小到大的次序组成空闲区链。,2019/5/29,分配:当进程申请一个存储区时,系统从表头开始查找,当找到第一个满足要求的空闲区时,停止查找,并且这个空闲区是最佳的空闲区。 分配和回收后要对空闲区表(队列)重新排序。,2019/5/29,分析,优点: 在系统中若存在一个与申请分区大小相等的空闲区,必定会被选中,而首次适应法则不一定。 若系统中不存在与申请分区大小相等的空闲区,则选中的空闲区是满足要求的最小空闲区,而不致于毁掉较大的空闲区。,2019

19、/5/29,分析,缺点: 空闲区的大小一般与申请分区大小不相等,因此将其一分为二,留下来的空闲区一般情况下是很小的,以致无法使用。随着时间的推移,系统中的小空闲区会越来越多,从而造成存储区的大量浪费。,2019/5/29,(4)最坏适应算法,扫描整个空闲分区表,或链表,总是挑选一个最大的空闲区分割给作业使用。 要求按空闲区大小从大到小的次序组成空闲区链。 优点:可使剩下的空闲区不至于太小,产生碎片的几率最小,对中、小作业有利。 缺点:缺乏大的空闲分区,不利于大作业。,2019/5/29,3. 分区的分配,在采用分区存储管理的系统中,系统初启后。除操作系统占用一个分区外,其余存储区为一个大的空闲

20、区。分区的分配是指系统根据用户的请求,在空闲区表或空闲区队列中寻找一个满足用户要求的空闲区,把这个空闲区分配给用户。当用户要求一个大小为SIZE的存储空间时,系统查询空闲区链(表),找一个大于或等于SIZE的空闲区。,2019/5/29,分区的回收,当某个进程释放某存储区时,系统首先检查释放区是否与系统中的空闲区相邻,若相邻则把释放区合并到相邻的空闲区中去,否则把释放区作为一个空闲区插入到空闲区表的适当位置。,2019/5/29,释放区与空闲区相邻的四种情况,2019/5/29,说明,释放区与前空闲区相邻:将释放区与前空闲区合并为一个空闲区。其首址仍为前空闲区首址,大小为释放区大小与空闲区大小

21、之和。 释放区与后空闲区相邻:则把释放区合并到后空闲区,首地址为释放区首地址,大小为二者大小之和。 释放区与前后两个空闲区相邻:将这三个区合为一个空闲区,其首址为前空闲区首址,大小为这三个区大小之和,并取消原后空闲区表项。 释放区不与任何空闲区相邻:将释放区作为一个空闲区,将其大小和首址插入到空闲区链的适当位置。,2019/5/29,可重定位分区分配,在连续分配中,必须把一个系统或用户程序装入一连续的内存空间。 不能被利用的小分区称为“外零头”或“外部碎片”。 将主存中的所有作业进行移动,使它们相邻接。这样,原来分散的多个小分区便拼接成一个大分区,从而就可以把作业装入该区。 这种通过移动,把多

22、个分散的小分区拼接成大分区的方法被称为“拼接”或“紧凑”,改变作业在主存中位置的工作称为“移动”。,2019/5/29,可重定位分区分配,2019/5/29,练习,在动态分区式内存管理中,倾向于优先使用低址部分空闲区的算法是(),能使内存空间中空闲区分布得较均匀的算法是(),每次分配时,把既能满足要求,又是最小的空闲区分配给进程的算法是()。,2019/5/29,非连续分配方式,分页管理方式 分段管理方式 段页式管理方式,2019/5/29,4.4基本分页存储管理模式,作业地址空间划分成连续的大小相同的页面,内存划分成连续的大小相等的块(也称为页框),作业进入内存时其不同的页面对应于内存中不同

23、的块,连续页面可以对应不连续的块。,2019/5/29,分页管理方式,页面(用户程序划分)把用户程序按逻辑页划分成大小相等的部分,称为页(page) 。从0开始编制页号,页内地址是相对于0编址,2019/5/29,内存空间按页的大小划分为大小相等的区域,称为块或内存块(物理页面,页框)在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常不满一块而形成了不可利用的碎片称之为“页内碎片”逻辑上相邻的页,物理上不一定相邻,2019/5/29,地址结构用户程序的划分是由系统自动完成的,对用户是透明的。一般,一页的大小为2的整数次幂,因此,地址的高

24、位部分为页号,低位部分为页内地址,2019/5/29,地址结构对某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:,2019/5/29,页表,将页号和页内地址转换成内存地址,必须要有一个数据结构,用来登记页号和块的对应关系和有关信息。 这样的数据结构称为页表。 页表的作用就是实现从页号到物理块号的地址映射。,2019/5/29,系统为每个进程建立一个页表,页表的长度和首地址存放在该进程的进程控制块(PCB)中。 占用处理机的现行进程的页表必须驻留在内存,其首地址和长度由地址变换机构的页表寄存器指示。,2019/5/29,页表内

25、容,页表包含以下几个表项: 页号:登记程序地址空间的页号。 块号:登记相应的页所对应的内存块号 其它:登记与存储信息保护有关的信息。,2019/5/29,地址变换机构,地址变换机构的任务是实现从逻辑地址到物理地址的转换。即把程序地址转换成内存地址,这个转换过程是在程序执行过程中完成的,是动态地址映射。 在现代计算机系统中,由系统提供的地址映射硬件来完成地址映射工作。,2019/5/29,例,设页长为1K,程序地址字长为16位,用户程序空间和页表如图,地址字为2进制。,2019/5/29,说明,在执行指令MOV r1,2500时,地址转换步骤如下: 取出程序地址字2500送虚地址寄存器VR,然后

26、由硬件分离出页号P和页内地址W,实际上分离出页号和页内地址是一件很简单的事,因为页长为1K,所以页内地址占10位(0-9位),页号占6位(10-15位),所以硬件只要简单地取出VR寄存器中的高6位即为页号,低10 位即为页内地址。 当然我们通过计算可以得到P=2,W=452。,2019/5/29,根据页号P=2,硬件自动查该进程的页表,找到第2页对应的块号为7,将块号送到内存地址寄存器MR的高10位中。 将VR中的W的值452复制到MR的低10位中,从而形成内存地址。系统就以MR中的地址访问内存硬件能自动分离出页号和页内地址,但我们只能通过计算才能得到。,2019/5/29,计算时要注意: 若

27、给出的地址字为16进制,则将其转换为二进制,然后,根据页长及程序地址字的长度,分别取出程序地址字的高几位和低几位就得到页号及页内地址。如页长为2K,程序地址字为16位,则高5位为页号,低11位为页内地址。,2019/5/29,若给出的地址字为10进制,则用公式: 程序地址字/页长 商为页号,余数为页内地址。 如程序地址为8457, 页长为4KB,则8457/4096可得:商为2,余数为256。,2019/5/29,分页存储管理中的信息保护,分页存储管理中的存储信息保护从两个方面来实现。 一、在分离程序地址字的页号和页内地址时判别访问是否合法,若产生的页号满足下式为合法:0=页号程序地址空间的页

28、数上述判断由硬件自动做,若不合法,硬件产生越界中断,由操作系统的越界中断处理程序进行处理。,2019/5/29,二、在页表中增加用于存取控制和存储保护的信息,当要访问某页时系统要根据该页的存取控制和存储保护信息检查访问是否合法。(主要用来判断访问是否越权),2019/5/29,快表和联想存储器,在前述的页地址变换过程中有一个严重的问题,那就是每一次对内存的访问都要访问页表,页表是放在内存中的,也就是说每一次访问内存的指令至少要访问两次内存,运行速度要下降一半。 第一次访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,形成物理地址 第二次访问内存时,才是从第一次所得地址中获

29、得所需数据(获向此地址中写入数据),2019/5/29,解决这个问题的一种方法是把页表放在一组快速存储器中(Cache),从而加快访问内存的速度。我们把这种快速存储器组成的页表称为快表,把存放在内存中的页表称为慢表。快表又叫联想存储器(associative memory)或 TLB(Translation lookaside buffers)用以存放当前访问的那些页表项,2019/5/29,地址变换过程:在CPU给出有效地址后,由地址变换机构自动将页号P送入高速缓冲寄存器,并将此页号与高速缓存中的所有页号进行比较,若其中有与此相匹配的页号,便表示所要访问的页表项在快表中,可直接从快表中读出该

30、页所对应的物理块号,并送到物理地址寄存器中 如果未找到对应的页表项,则还须再访问内存中的页表,找到后,把从页表项中读出的物理块号送地址寄存器;同时将此页表项存入快表的一个寄存器单元中。如果联想寄存器已满,则OS必须找到一个老的且已被认为不再需要的页表项,将它换出。,2019/5/29,2019/5/29,页式存储管理方案小结,优点:解决了碎片问题便于管理可以使程序和数据存放在不连续的主存空间 缺点:不易实现共享不便于动态连接页表都有可能占用较大的存储空间。要求有相应的硬件支持,从而增加了系统成本,也增加了系统开销,2019/5/29,练习: 某系统采用页式存储管理策略,拥有逻辑空间32页,每页

31、2k,拥有物理空间1M。写出逻辑地址的格式,2019/5/29,逻辑地址转物理地址:0A5C,2019/5/29,在分页存储管理系统中,有一作业大小为4页,页长为2K,页表如下: 求出逻辑地址4635所对应的物理地址。,2019/5/29,4.5分段管理方式,引入段式管理方式主要是为了满足用户和程序员的需要 方便用户:用户希望逻辑分段 信息共享 信息保护 动态增长 动态连接,2019/5/29,分段系统基本原理,分段 用户程序划分按程序自身的逻辑关系划分为若干个程序段,每个程序段都有一个段名,且有一个段号。段号从0开始,每一段段内也从0开始编址,段内地址是连续的。段的长度由相应的逻辑信息组的长

32、度决定,因而各段长度不等。 逻辑地址:由段号和段内地址组成09年考研题:一个分段存储管理系统中,地址长度为32位,其中段号占8位,则最大段长是()。 A28字节 B216字节 C224字节 D232字节,2019/5/29,0,116,N,2019/5/29,内存划分内存空间被动态的划分为若干个长度不相同的区域,称为物理段,每个物理段由起始地址和长度确定 内存分配以段为单位分配内存,每一个段在内存中占据连续空间(内存随机分割,需要多少分配多少),但各段之间可以不连续存放,2019/5/29,操作系统,操作系统,2019/5/29,段表段映射表。每个程序有一个段表程序的每个段在表中占有一个表项,

33、其中记录了该段在内存中的起始地址和段的长度。可放在内存中,也可放在寄存器中。段表是用于实现从逻辑段到物理内存区的映射。,2019/5/29,3、地址变换机构,段地址映射过程为: 系统中设置了段表寄存器,用于存放段表始址和段表长度TL。 取出段号S和段内位移W。 若STL,段号太大越界。 根据段表始址找到段表,查找段号为S的表目,得到该段在内存的起始地址。 检查段内地址d是否起过该段的段长SL。若超过越界。 把段首地址与段内位移相加,形成内存物理地址。,2019/5/29,地址变换机构,2019/5/29,同页地址变换一样,在段地址变换过程中,也有两次访问内存的问题。为了加快访问内存的速度也可采

34、用快速存储器组成快表。,2019/5/29,Cl,Cb,+,段号S 段内地址d,比较,比较,b + d,段表,S= Cl,快表,物理地址,段表始址寄存器,段表长度寄存器,逻辑地址,L,b,.,.,.,S,L,b,地址越界,d=L,d=L,地址映射及存储保护机制,地址越界,地址越界,比较,2019/5/29,分页与分段的主要区别,两者都采用离散分配方式,且都要通过地址变换机构来实现地址变换。 分段与分页主要有以下差别: 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头, 提高内存的利用率。或者说, 分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意

35、义相对完整的信息。 分段的目的是为了能更好地满足用户的需要。,2019/5/29,分页与分段的主要区别,页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定, 决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址; 而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名, 又需给出段内地址。,2019/5/29,信息共享,分段系统的一个突出优点就是易于实现段的共享,即允

36、许若干个进程共享一个或多个分段,且对段的保护也十分简单。,2019/5/29,信息共享,图 4-18 分页系统中共享editor的示意图,2019/5/29,信息共享,在分段系统中,实现共享则容易得多,只需在每个进程的段表中为文本编辑程序设置一个段表项,图 4-19 分段系统中共享editor的示意图,2019/5/29,段式存储管理方案小结,优点:便于动态申请内存管理和使用统一化便于共享便于动态链接 缺点:产生外部碎片,2019/5/29,(3) 段页式存储管理方式,产生背景:结合页式段式优点,克服二者的缺点基本原理 地址变换过程,2019/5/29,基本原理,用户程序划分按段式划分(对用户

37、来讲,按段的逻辑关系进行划分;对系统讲,按页划分每一段)逻辑地址内存划分按页式存储管理方案 内存分配以页为单位进行分配,2019/5/29,段表:记录了每一段的页表始址和页表长度 页表:记录了逻辑页号与内存块号的对应关系(每一段有一个,一个程序可能有多个页表) 内存分配管理:同页式管理,地址变换过程,2019/5/29,图 4-21 利用段表和页表实现地址映射,2019/5/29,地址变换过程,图 4-22 段页式系统中的地址变换机构,2019/5/29,在段页式系统中,为了获得一条指令数据,须三次访问内存。 1、访问内存中的段表,从中取得页表始址 2、访问内存中的页表,从中取出该页所在的物理

38、块号,将该块号与页内地址一起形成指令或数据的物理地址 3、从物理地址中取出指令或数据。 快表,地址变换过程,2019/5/29,总结(关于碎片问题),固定分区的分配方式会产生内零头,因为是找出一个满足作业要求的空闲分区分配给作业,大小不一定刚好合适,分区中有一部分存储空间会被浪费。 在可变式分区分配中,是按照作业的大小找出一个分区来分配如果大于作业申请的空间,则一分为二,剩下的一分部作为系统的空闲分区,有可能很小无法利用而成为外零头。,2019/5/29,总结,为了解决外零头的问题,提出了离散的分配方式,在分页式存储管理中,存储空间被分面与页大小相等的物理块,作业的大小不可能都是物理块的整数倍

39、,因此在作业的最后一页中有可能有部分空间未被利用,属于内零头。 分段式存储管理中,其内存分配方式类似于动态分区的分配,因此会产生外零头。 段页式存储管理中,其内存分配方式类似于页式的分配,因此会产生内零头。,2019/5/29,练习,在没有快表的情况下,分页系统每访问一次数据,要访问()次内存;分段系统每访问一次数据,要访问()次内存;段页式系统每访问一次数据,要访问()次内存。 页是信息的()单位,其大小是()(固定/可变)的,进行分页是出于()的需要;段是信息的()单位,其大小(),分段是出于()的需要。,2019/5/29,4.6 虚拟内存基本概念,程序局部性原理 时间局部性一条指令被执

40、行了,则在不久的将来它可能再被执行,如果某数据被访问过, 则不久以后该数据可能再次被访问。 (循环操作)空间局部性若某一存储单元被使用,则在一定时间内,与该存储单元相邻的单元可能被使用,即程序在一段时间内所访问的地址,可能集中在一定的范围之内。 (程序顺序执行),2019/5/29,虚拟存储器的定义,虚拟存储器是指仅把作业的一部分装入内存便可运行作业的存储器系统。具体地说,所谓虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对主存容量进行扩充的一种存储器系统。实际上,用户所看到的大容量只是一种感觉,是虚的,故而得名虚拟存储器。,2019/5/29,虚拟存储器的实现方法,1.分页式请求系统

41、它是在分页式存储管理系统上增加了请求调页功能、页面置换功能所形成的页式虚拟存储管理系统。 硬件支持 请求分页的页表机制,它是在纯分页的页表机制上增加若干项而形成的,作为请求分页的数据结构; 缺页中断机构,即每当用户程序要访问的页面尚未调入内存时 便产生一缺页中断,以请求OS将所缺的页调入内存; 地址变换机构,它同样是在纯分页地址变换机构的基础上发展形成的。 实现请求分页的软件,2019/5/29,虚拟存储器的实现方法,2.分段式虚拟存储管理 它是在分段式存储管理系统上增加了请求调段功能、分段置换功能所形成的段式虚拟存储管理系统。 硬件支持: 请求分段的段表机制 缺段中断机构 地址变换机构 实现

42、请求分段的软件,2019/5/29,虚拟存储器存储的特点,(1)多次性。多次性是指一个作业被分成多次调入主存运行 。 (2)对换性。对换性是指允许在作业的运行过程中换进、换出 。 (3)虚拟性。虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的主存容量远大于实际主存容量。,2019/5/29,4.7.请求分页式存储管理,1硬件支持 2内存分配策略和分配算法 3调页策略,2019/5/29,它是建立在纯分页基础上的,增加了请求调页功能、页面置换功能所形成的请求分页存储管理系统。 把作业分成大小相等的若干页,把主存分成与页大小相等的若干块;对每个作业限定分给它的主存块数,先把作业的部分页装入主存的

43、这些块中,在作业运行时再装入所需要的页。,2019/5/29,在进程开始运行之前,不是装入全部页面,而是装入几个页面,之后根据进程运行的需要,动态装入其它页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面,2019/5/29,2019/5/29,采用的数据结构,(1)页表 页表用来记录作业的分配情况 。 (2)缺页中断机构 在请求分页系统中,每当所要访问的页面不在主存时,便要产生一次缺页中断,请求操作将所缺的页调入主存。 (3)地址变换机构,2019/5/29,页表表项,页号、内存块号、状态位、访问位、修改位、外存地址 状态位P:表示该页是否已调入内存,

44、供程序访问时参考 访问位A:用于记录本页在一段时间内被访问的次数或最近已有多长时间未被访问,供选择换出页面时参考,2019/5/29,页表表项,页号、内存块号、驻留位、外存地址、访问位、修改位 修改位:查看此页是否在内存中被修改过,供置换页面时参考。 外存地址:该页存放在外存上的地址。供调入该页时参考。,2019/5/29,缺页中断(Page Fault)机构,缺页中断机构 在请求分页系统中,每当所要访问的页面不在主存时,便要产生一次缺页中断,请求操作将所缺的页调入主存。缺页中断作为中断,它同样需要经历诸如保护CPU环境、分析中断原因、转入缺页中断处理程序进行处理、恢复CPU环境等几个步骤。

45、此时应将缺页的进程挂起(调页完成唤醒),2019/5/29,如果内存中有空闲块,则分配一个块,将要调入的页装入该块,并修改页表中相应页表项目的驻留位及相应的内存块号若此时内存中没有空闲块,则要淘汰某页(若被淘汰页在内存期间被修改过,则要将其写回外存),2019/5/29,缺页中断同一般中断的区别? 缺页中断同一般中断都是中断, 相同点是:保护现场 中断处理 恢复现场 不同点: 在指令执行期间产生和处理中断信号。一般中断是一条指令完成后中断,缺页中断是一条指令执行时,发现所要访问的指令或数据不在内存时所产生的中断 一条指令执行时可能产生多个缺页中断。如指令可能访问多个内存地址,这些地址在不同的页

46、中。,2019/5/29,地址变换机构,请求分页系统中的地址变换与页式存储管理相同,为了实现虚拟存储功能,又增加了产生和处理缺页中断和从内存换入换出一页的功能等等。地址变换过程:首先检索快表,若找到,修改页表中的访问位。对于写指令,要将修改位也置成“1”,然后利用页表项中给出的物理块号和页内地址,形成物理地址。,2019/5/29,下面,通过一个图例来说明请求分页式存储管理的运作过程。该图例的基础如下: (1)内存容量为40KB,被划分成10个存储块,每块4KB字节,操作系统程序占用第0块。如下图(a)所示。 (2)内存第1块为系统数据区,里面存放着操作系统运行时所需要的各种表格。 存储分块表

47、:它记录当前系统各块的使用状态,是已分配的,还是空闲的,如图(b)所示。可以看出,目前内存中的第3、7、9块是空闲的,其余的都已经分配给各个作业使用。,2019/5/29,下图用数字标出了缺页中断的处理过程:,根据当前执行指令中的虚拟地址,形成数对:(页号,页内位移)。用页号去查页表,判断该页是否在内存储器中,若该页的R位(缺页中断位)为“0”,表示当前该页不在内存,于是产生缺页中断,让操作系统的中断处理程序进行中断处理。,中断处理程序去查存储分块表,寻找一个空闲的内存块;查页表,得到该页在辅助存储器上的位置,并启动磁盘读信息。,把从磁盘上读出的信息装入到分配的内存块中。,根据分配存储块的信息

48、,修改页表中相应的表目内容,即将表目中的R位设置成为“1”,表示该页已在内存中,在B位填入所分配的块号。另外,还要修改存储分块表里相应表目的状态。,由于产生缺页中断的那条指令并没有执行,所以在完成所需页面的装入工作后,应该返回原指令重新执行。这时再执行时,由于所需页面已在内存,因此可以顺利执行下去。,2019/5/29,页面调入策略,(1)何时调入 (2)何处调入 (3)页面调入过程,2019/5/29,何时调入,(1)预调入 采用一种以预测为基础的调入策略,将预计不久要使用的页调入主存。 缺点:预计不准 场合:进程的首次调入 (2)请求调入 当发生缺页时,提出请求,由系统调入 优点:命中率1

49、00%,实现简单 缺点:开销大,每次只调入一页 场合:大多数,2019/5/29,页面调入过程,保护现场 转中断处理程序 查页表,找到页的外存地址 内存未满则调入,修改页表 内存已满,则先置换。被置换的页若被修改过,则写入磁盘。 将缺页调入内存,修改页表和快表 再访内存,2019/5/29,练习,作业在执行中发生了缺页中断,经操作系统处理后,应让其执行_指令: A、被中断的前一条 B、被中断的 C、被中断的后一条 D、启动时的第一条 在采用请求分页式存储管理的系统中,地址变换可能会因为_、_和_等原因而产生中断。,2019/5/29,练习,某请求页式管理系统页表的内容如下表,作业在地址空间所规定的页长为1K,对于CPU所给出的有效地址:33790、40462,其对应的物理地址分别为:_、_。,2019/5/29,4.8.页面置换算法,(1)最佳置换算法 (OPT) (2)先进先出置换算法(FIFO) (3)最近最久未使用算法(LRU) (4)Clock置换算法,2019/5/29,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报