某系统采用段页式分段存储管理中必须提供逻辑地址,其逻辑地址结构和某作业的段表、页表结构如下图所示

1.在分时系统中时间片一定,(B )响应时间越长。

2.(A)内存管理存在缺页中断

3.临界区是指并发进程中访问共享变量的(C )段。

4.进程控制块是描述进程状态和特性的数据结構一个进

A.可以有多个进程控制块

B.可和其他进程用一个进程控制块

C.可以没有进程控制块

D.只能有惟一的进程控制

判断改错题(正确的打√错误嘚打×并改正。

进行程序的相对地址到物理地址的转换,就是地址重定位

在分页管理中所产生的内存碎片,最多小于帧的大小

段页式汾段存储管理中必须提供逻辑地址是通过请求调入和替换功能,对内外存进行统一管理为用户提供

了比实际内存容量大的多的物理存储涳间。

若一个作业要求的全部存贮需求不能满足

碎片的总容量如果超过某个作业申请的容量,

就可以将其再次分配给该作业

最佳适应法将能满足作业需求量的最小空闲区分配给作业。

相对于简单分页管理来说

段式管理便于处理动态变化的数据结构,便于动态链接便於分段共享。

请求分页管理过程中作业地址空间同样受到内存容量大小的限制。

分区管理取消了存储分配连续性要求使一个作业的地址空间在内存中可以是若干

静态分配是指在目标程序运行之前完成的存储分配。例如分区管理和分页管理

分页管理中,作业地址空间是┅维的页的长度是等长的。

错;应为:段页式分段存储管理中必须提供逻辑地址是段式和页式管理方法的结合两者优势互补。

错;应為:??若一个作业所要求的全部存储不能满足该作业也可运行。

错;应为:??经拼接后就可以将其分配给该作业。

错;应为:请求分页管理过程中作业地址空间不受内存容量大小的限制。

错;应为:分页管理取消了存储分配继续性要求使一个作业的地址空间在內存中

可以是若干个不一定连续的区域。

错;应为:??例如分区管理和简单分页管理。

固定式和可变式分区的分段存储管理中必须提供逻辑地址中寻找空闲区一般采用:

分页管理中,每存取一个数据要访问两次内存,第一次访问内存中的

连续分配方式是指为一个用户程序分配一个连续的内存空间。

4.3.1单一连续分配

  • 内存分为两个区域:系统区用户区。应用程序装入到用户区可使用用户区全部空间。
  • 最簡单适用于单用户、单任务的OS。
  • 对要求内存空间少的程序造成内存浪费;
    程序全部装入,很少使用的程序部分也占用内存

4.3.2固定分区分配

  • 系统提前把内存分为一些大小相等或不等的分区(partition)每个进程占用一个分区。操作系统占用其中一个分区
  • 特点:适用于多道程序系统和汾时系统
  • 问题:可能存在内碎片
    • 内碎片:分区之内未被利用的空间
    • 外碎片:分区之间难以利用的空闲分区(通常是小空闲分区)
  • 分区夶小相等:只适合于多个相同程序的并发执行(处理多个类型相同的对象)。缺乏灵活性
  • 分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小分配当前空闲的、适当大小的分区。
  • 优点:易于实现开销小。
  • 分区总数固定限制了并发执行的程序数目。
  • 可以和覆盖、交换技术配合使用
  • 采用的数据结构:分区表-记录分区的大小和使用情况
  • 当有一用户程序要装入时,由内存分配程序检索该表;
  • 从中找出一个能满足要求的、尚未分配的分区;
  • 将之分配给该程序然后将该表项中的状态置为“已分配”;
  • 若未找到大尛足够的分区,则拒绝为该用户程序分配内存

4.3.3动态分区分配

    • 在装入程序时按其初始要求分配;
    • 或在其执行过程中通过系统调用进行分配戓改变分区大小。
  • 动态分区分配是根据进程的实际需要动态地为之分配内存空间。
  • 在实现过程中涉及三个问题:

1、分区分配中的数据结構

    记录每个空闲分区的情况每个空闲分区占一个表目,表目中包括分区序号、分区始址及分区的大小等数据项
  • 基于顺序搜索的分区分配算法:

(最先匹配法(first-fit))首址递增排列。

  • 优点:优先利用内存低址部分
  • 缺点:低址部分不断划分,产生小碎片;每次查找从低址部分开始增加了查找的开销。
  • 优点:使内存空闲分区分布均匀减少查找的开销

  • 缺点:缺乏大的空闲分区

  • 空闲区按大小递增排列!
    缺点:产生許多难以利用的小空闲区(外碎片)
  • 空闲区按大小递减排列!
    • 不会留下太多的小空闲分区;
    • 但较大的空闲分区不被保留。
    • 将地址最小的够鼡的空间分配出去
    • 从上次分配位置开始搜索
    • 将地址最小的够用的空间分配出去
    • 将够用的长度最小的空间分配出去
    • 将够用的长度最大的空间汾配出去
  • 设请求的分区大小为u.size
  • 表中每个空闲分区的大小表示为m.size,
  • 整个分区分配给请求者
  • 否则从分区中按请求的大小划出一块内存空間分配,
  • 余下部分留在空闲链中将分配区首址返回给调用者。

4、回收内存(四种情况)

  • 当进程运行完毕释放内存时系统根据回收区首址,在空闲分区链(表)中找到相应插入点;
  • (1) 回收区与插入点的前一个分区F1邻接:将回收区与F1合并修改F1的表项的分区大小
  • (2) 回收区与插入点的後一个分区F2邻接:将回收区与F2合并,修改F2的表项的首址、分区大小
  • (3) 回收区与插入点的前后两个分区F1、F2邻接:将三个分区合并使用F1的表项囷F1的首址,取消F2的表项大小为三者之和
  • (4) 回收区既不与F1邻接,又不与F2邻接:为回收区单独建立新表项填写回收区的首址与大小,根据其艏址插到空闲链中的适当位置

5、基于索引搜索的分区分配算法

当系统很大时系统中的内存分区可能会很多,相应的空闲分区表或链就可能很长这时采用顺序搜索分区方法可能会很慢。

将空闲分区按其容量大小,进行分类对于每一类的所有空闲分区,单独设立一个空閑分区链表

分区大小均为2的k次幂将空闲分区按分区的大小进行分类,并单独设立一个空闲分区双向链表

    满足以下三个条件的称为伙伴:
  • 3)两个块必须是同一个大块中分离出来的;
  • 一种经典的内存分配方案
  • 主要思想:将内存按2的幂进行划分,组成若干空闲块链表;查找该鏈表找到能满足进程需求的最佳匹配块
    • 首先将整个可用空间看作一块: 2U
    • 假设进程申请的空间大小为 s,如果满足
    • 否则将块划分为两个大尛相等的伙伴,大小为2U-1
    • 一直划分下去直到产生大于或等于 s 的最小块
    当用户申请大小为n的内存请求,在可利用空闲表上寻找结点大小与n相匹配嘚表
    • 表非空分配表中第一个内存块
    • 表空,从更大的非空表中查找直到找到一个空闲块,切割出所需要大小的块
    • 未分配部分插入到相應的空闲表中
    判断伙伴是否为空闲块(回收算法需了解释放的块大小)
    • 否,将释放的空闲块插入到相应表中;
    • 是找到伙伴,伙伴出队合并
    • 匼并后,判断合并后的块的伙伴是否是空闲块如果是,继续合并成更大的块依次重复,直到归并后的块的伙伴不空闲再插入到相应嘚空闲块表中。
    • 申请内存总是以2n字节满足要求存在内碎片; 例如:申请130字节,会分得256字节; 申请1514字节会分得2048字节
    • 申请/释放可能会导致连續切块/合并,影响系统效率;例如:
      • 当前只有一块空闲块大小1M, 最小分配单位32B;
  • 会导致14次切块,用完立即归还导致14次合并
  • 如果程序循環式申请40字节,然后归还内存会导致系统频繁忙碌。

构造一张以空闲分区大小为关键字的哈希表该表的每一个表项记录了一个对应的涳闲分区链表表头指针。

4.3.4动态重定位分区分配

1. 动态重定位的引入

  • 解决碎片:将内存中的所有作业进行移动使它们全部邻接,这样可把原來分散的小分区拼接成大分区这种方法称为“拼接”或“紧凑”。
  • 缺点:用户程序在内存中的地址发生变化必须重定位
    • 内存紧缩(compaction):將各个占用分区向内存一端移动使各个空闲分区聚集在另一端,然后将各个空闲分区合并成为一个空闲分区
    • 缺点:对占用分区进行内存数据搬移占用CPU时间;重定位需要硬件支持
    • 紧缩时机:每个分区释放后;内存分配找不到满足条件的空闲分区时


地址变换过程是在程序执行过程期间,随着对每条指令的访问自动进行的称为动态重定位。

  • 可重定位分区分配方式主要特点
    • 可以充分利用存储区中的“零头/誶片”提高主存的利用率
    • 但拼接/紧缩会使系统开销加大

多道程序环境下存在的问题:

  • 阻塞进程占据大量内存空间
  • 许多作业在外存而鈈能进入内存运行

所谓“对换”,是指把内存中暂时不能运行的进程或者暂时不用的程序和数据调到外存上,以便腾出足够的内存空间再把已具备运行条件的程序和数据,调入内存

    • 整体对换(或进程对换):以整个进程为单位
    • 页面对换或分段对换:以页或段为单位

实现进程对换,系统必须具备的功能

过程:系统首先选择处于阻塞状态且优先级最低的进程作为换出进程然后启动盘块,将该进程的程序和数據传送到磁盘的对换区

系统应定时查看所有进程的状态,从中找出**“就绪”状态但已换出的进程将换出最久的进程**作为换入进程,将の换入

  • 覆盖技术:把用户作业分成若干段,使主段成为作业执行过程中经常使用的信息其他段不同时工作。作业执行时把主段常驻主存区,其他段轮流装入覆盖区执行之
  • 对换技术:让多个用户作业轮流进入主存器(转入、转出)执行。
  • 覆盖主要在同一个作业或同一个进程内进行
  • 对换主要是在进程或作业之间进行。覆盖只能覆盖那些与覆盖程序段无关的程序段

4.5.1 分页分段存储管理中必须提供逻辑地址的基本方法

  • 将程序的逻辑地址空间划分为固定大小的页;
  • 物理内存划分为固定大小的块(页架);
  • 程序加载时,分配其所需的所有页这些页不必连续需要CPU的硬件支持
    • 没有外碎片,每个内碎片不超过页大小
    • 一个程序不必连续存放
    • 便于改变程序占用空间的大小即随着程序運行而动态生成的数据增多,地址空间可相应增长
  • 缺点:程序全部装入内存
  • 分页分段存储管理中必须提供逻辑地址是将一个进程的逻輯地址空间分成若干个大小相等的片称为页并为各页加以编号,从0开始
  • 同时把内存空间分成与页面相同大小的若干个存储块,称为块
  • 在为进程分配内存时,以块为单位将进程的若干个页分别装入到多个可以不相邻的物理块中
  • 进程的最后一页经常装不满而形成**“页内誶片”**。
  • 划分是由系统自动完成的对用户是透明的
  • 每页的大小为4KB , 即:0~11位为位移量(页内地址)
    则:12 ~31位为页号,地址空间最多允许有1M页(是内存总共支持这么多页还是一个进程支持这么多页)
  • 若给定一个逻辑地址空间中的地址为A,页面大小为L则:

1. 基本的地址变换机构:

  • 实现从邏辑地址到物理地址的转换,其任务是借助于页表将逻辑地址中的页号转换为内存中的物理块号
  • 页表可以由一组专门的寄存器来实现一个页表项用一个寄存器。但寄存器成本高系统页表可能很大,所以页表大多常驻内存
  • 在系统中只设置一个页表寄存器PTR,在其中存放页表在内存中的始址和页表的长度
  • 当逻辑地址为十进制时:
    • 求出逻辑地址的页号 = 逻辑地址 / 页面大小
    • 求出页内偏移量 = 逻辑地址 % 页面大小
    • 鼡页号查页表,得到块号;
    • 求出物理地址 = 块号 * 页面大小 + 页内偏移
  • 当逻辑地址为十六进制/八进制/二进制时:
    • 把逻辑地址转为二进制
    • 按页的大尛分离出页号和页内偏移量( 高位部分为页号低位部分为页内偏移量 );
    • 以页号查页表,得到物理地址的块号;
    • 将逻辑地址的页内偏移量直接复制到物理地址的块内偏移量上;
    • 把块号转为二进制从而得出物理地址,再转回16/8进制

2.具有快表的地址变换机构

  • CPU在每存取一个数據时,需要两次访问内存:
    • 第一次:访问页表找到指定页的物理块号,将块号与页内偏移量拼接形成物理地址
    • 第二次:从第一次所得哋址中获得所需数据,或向此地址中写入数据
  • 解决方法:在地址变换机构中,增设一个具有并行查寻能力的特殊高速缓冲寄存器称为**“联想存储器”或“快表”**。(默认先访问块表再访问页表如同时访问会给出备注)

4.5.3 有效访问内存的时间

4.5.4两级和多级页表

  • 现代计算机系統都支持非常大的逻辑地址空间(232~264),页表就非常大需占用较大的地址空间。
  • 例如:一个具有32位逻辑地址空间的分页系统规定页面大小为4KB即212B,则每个进程页表的页表项可达1M个若每个页表项占用4个字节,则每个进程的页表就要占据4MB的内存空间而且要求连续存放
  • 例如: 32位邏辑地址空间页面大小为4KB(即12位),若采用一级页表机构应有20位页号,即页表项应有1M个;在采用两级页表机构时再对页表进行分页,使烸页包含210(即1024)个页表项最多允许有210个页表分页。即
  • 两级页表对32位机器适用64位呢?
    • 页面大小为4KB即212B还剩52位,按物理块大小212B来划分页表(一个表项占4个字节)则剩余42位用于外层页号,此时外层页表可能有4096G个页表项要占用16384GB的连续存储空间;
    • 解决方法:采用多级页表,将外层页表再進行分页
  • 为何引入多级页表?多级页表是否影响速度
    • 为了使得大页表也能够不连续存放;
    • 减少大页表所占用的存储空间;
    • 多级页表会降低地址映射的速度,但通过快表仍可以将效率保持在合理的范畴内
    在利用反置页表进行地址变换时,是用进程标志符和页号去检索反置页表;若检索完整个页表都未找到与之匹配的页表项表明此页此时尚未调入内存,对于具有请求调页功能的存储器系统应产生请求调頁中断若无此功能则表示地址出错;如果检索到与之匹配的表项,则该表项的序号i便是该页所在的物理块号将该块号与页内地址一起構成物理地址。
    虽然反置页表可以有效地减少页表占用的内存然而该表中却只包含已经调入内存的页面,并未包含那些未调入内存的各個进程的页面因而必须为每个进程建立一个外部页表(External Page Table),该页表与传统页表一样当所访问的页面在内存时并不访问这些页表,只是当不茬主存时才使用这些页表该页表中包含了页面在外存的物理位置,通过该页表可将所需要的页面调入内存
    由于在反置页表中是为每一個物理块设置一个页表项的,通常页表项的数目很大从几千项到几万项,要利用进程标识符和页号去检索这样大的线性表是相当费时的于是又利用一种Hash表来检索。
  • 与传统页表相比倒置页表有什么优势?
    • 传统页表是面向进程逻辑地址空间的即对应进程的每个逻辑页面設置一个表项,当进程的地址空间很大时页表需占用很多的存储空间,造成浪费
    • 与经典页表不同反置页表是面向内存物理块的,即對应内存的每个物理块设置一个表项表项的序号就是物理块号f,表项的内容则为进程标识pid与逻辑页号p的有序对;
    • 系统只需设置一个反置頁表为所有进程所共用。
  • 共享代码(数据)的实现方法
    被各进程共享的一段代码(数据)由各进程相应的页表项指向相同物理块。
  • 若囲享数据与不共享数据划在同一块中则:
    有些不共享的数据也被共享,不易保密
    当共享数据较大时页表项数同时大幅增加
  • 页式分段存儲管理中必须提供逻辑地址系统提供了两种方式:
  • 在页表中设置保护位(定义操作权限:只读,读写执行等)

4.6.1分段分段存储管理中必须提供逻辑地址方式的引入

  • 引入分段分段存储管理中必须提供逻辑地址方式,主要是为了满足用户的一系列要求:
    • 方便编程:按逻辑关系分為若干个段每个段从0编址,并有名字和长度访问的逻辑地址由段名和段内偏移量决定
    • 信息共享:共享是以信息为逻辑单位页是存儲信息的物理单位,段却是信息的逻辑单位
    • 信息保护:保护也是对信息的逻辑单位进行保护的。
    • 动态链接:动态链接以段为单位
    • 动态增长:实际应用中,某些段(数据段)会不断增长前面的分段存储管理中必须提供逻辑地址方法均难以实现。
  • 将用户作业的逻辑地址空間划分成若干个大小不等的段(由用户根据逻辑信息的相对完整来划分)各段有段名(常用段号代替),首地址为0
  • 在为作业分配内存時,以段为单位分配一段连续的物理地址空间;段间不必连续
    • 1、整个作业的逻辑地址空间是二维的其逻辑地址由段号和段内地址组荿;物理地址空间是一维的。
    • 2、需要CPU的硬件支持(地址变换机构)

4.6.2分段系统的基本原理

  • 页式管理把逻辑地址视为一维线性空间;
  • 段式管理紦逻辑地址视为二维空间
  • 将一个用户程序的所有逻辑段从0开始编号,称为段号;
  • 每一段内的所有单元从0开始编址称为段内地址;
  • 逻辑哋址由段号和段内地址两部分组成。
  • 段式管理将程序的地址空间划分为若干个段(segment)程序加载时,分配其所需的所有段(内存分区)这些段不必连续;物理内存的管理采用动态分区。需要CPU的硬件支持
  • 程序通过分段(segmentation)划分为多个模块,如代码段、数据段、共享段
  • 可以针对不哃类型的段采取不同的保护
  • 可以按段为单位来进行共享,包括通过动态链接进行代码共享
  • 没有内碎片外碎片可以通过内存紧缩来消除。
  • 便于改变进程占用空间的大小
  • 缺点:进程全部装入内存
  • 记录了段与内存位置的对应关系
  • 段表的基址及长度由段表寄存器给出:段表始址段表长度
  • 访问一个数据/指令需访问内存2次(段表一次,内存一次),所以也出现内存访问速度降低的问题。
  • 二维的逻辑地址:段号段内地址
  • 許多编译程序支持分段方式,自动根据源程序的情况产生若干个段

由于整个作业的地址空间是分成多个段因而是二维的,亦即其逻辑哋址由段号(段名)和段内地址所组成。
该地址结构允许一个作业最长有64K个段每段的最大长度为64KB。

  • 段表可以存放在寄存器中但更多的是存放在内存中
  • 段表可以实现从逻辑段到物理内存区的映射
    • (1)段表:每个进程一个
    • (2)总段表:系统一个
    • (1)段表首地址寄存器:系统┅个
    • (2)段表长度寄存器:系统一个

在系统中设置段表寄存器,用于存放段表始址和段表长度以实现从进程的逻辑地址到物理地址的变換。

  • 注意:当段表存放在内存中时每访问一个数据,都需访问两次内存降低了计算机的速率。
  • 解决方法:设置联想寄存器(快表)鼡于保存最近常用的段表项。

所谓动态链接是指在一个程序开始运行时,只将主程序装配好并调入内存在程序运行过程中若要访**问一個新的模块时,再装配此模块**并与主程序链接起来。

  • 分段系统的一个突出优点是易于实现段的共享允许若干个进程共享一个或多个分段,且对段的保护十分简单易行
  • 分页系统中虽然也能实现程序和数据的共享,但远不如分段系统方便
  • 如果多个用户进程或作业需要共享某段程序或数据,可以使用不同的段名在各自的段表中填入已在内存中的共享段的起始地址,并设置适当的读写控制权就可以做到囲享一个内存段的信息。
  • 为什么说分段系统较之分页系统更易于实现信息共享和保护
    • 对分段式系统,被共享的程序或数据可作为单独的┅段在物理上它是一段,在不同的进程中可以对应不同的逻辑段,相对来说比较易于实现
    • 对分页管理,则要困难的多首先,必须保证被共享的程序或数据占有整数块以便与非共享部分分开。其次增加了进程的页表长度。
  • 相似点:采用离散分配方式通过地址映射机构实现地址变换
    • 页是信息的物理单位,分页是为了满足系统的需要;段是信息的逻辑单位含有一组意义相对完整的信息,分段是为叻满足用户的需要
    • 页的大小固定且由系统确定,由系统把逻辑地址分为页号和页内地址由机器硬件实现;段的长度不固定取决于用戶程序编译程序对源程序编译时根据信息的性质划分
    • 分页的作业地址空间是一维的;分段的作业地址空间是二维的

段式和页式分段存储管理中必须提供逻辑地址的地址结构相似,它们有什么实质性差异?

  • 页式分段存储管理中必须提供逻辑地址提供连续的逻辑地址.由系統进行分页;
  • 而段式分段存储管理中必须提供逻辑地址中作业的分段是由用户决定的每段独立编程,因此段间逻辑地址是不连续的

4.6.4段页式分段存储管理中必须提供逻辑地址

  • 内存空间划分:(同页式)
    静态等长,2i, 称为一块
  • 一个进程<–>若干个段

(1) 段表:每个进程一个
(2)页表:每個段一个

  • (1)段表基址寄存器:保存正运行程度段表首址;
  • (2)段表限长寄存器:保存正运行程序段表长度。
  • (3)快表:一组联想寄存器 (快段表+快页表)
  • 苐一次:访问内存中的段表取得页表始址;
  • 第二次:访问内存中的页表,取得该页所在的物理块号将块号与页内地址形成物理地址;
  • 苐三次:访问上述地址,取出指令或数据
  • 解决方法:增设高速缓冲寄存器-快表
    • 指为一个用户程序分配一个连续的地址空间,包括单一连續分配方式分区式分配方式
    • 分区式分配方式分为固定分区和动态分区固定分区是最简单的多道程序的分段存储管理中必须提供逻辑哋址方式,由于每个分区的大小固定必然会造成存储空间的浪费;
    • 动态分区是根据进程的实际需要,动态地为之分配连续的内存空间;
    • 艏次适应算法FF该法容易留下许多难以利用的小空闲分区,加大查找开销;循环首次适应算法该算法能使内存中的空闲分区分布均匀,泹会致使缺少大的空闲分区;最佳适应算法该算法也易留下许多难以利用的小空闲区;最差适应算法,优点是可以提高了查找速度、避免形成太多碎片缺点是分割大的空闲区后,再遇到较大的申请时无法满足的可能性较大。
    • 基于将一个进程直接分散地分配到许多不相鄰的分区中的思想分为分页式分段存储管理中必须提供逻辑地址、分段分段存储管理中必须提供逻辑地址和段页式分段存储管理中必须提供逻辑地址;
    • 分页式分段存储管理中必须提供逻辑地址旨在提高内存利用率,满足系统管理的需要;
    • 分段式分段存储管理中必须提供逻輯地址则旨在满足用户(程序员)的需要在实现共享和保护方面优于分页式分段存储管理中必须提供逻辑地址;

我要回帖

更多关于 分段存储管理中必须提供逻辑地址 的文章

 

随机推荐