zoukankan      html  css  js  c++  java
  • 存储管理-段式管理

    存储管理-段式管理

    为什么引入段式存储?

    • 分区式管理和页式管理的进程地址空间结构是线性的,不同作业或进程之间共享公用子程序和数据变得非常困难
    • 页式管理时,一个页面中可能装有两个不同子程序段的指令代码,因此,通过页面共享来达到共享一个逻辑上完整的子程序或数据块是不可能的。
    • 分区管理和页式管理只能采用静态链接,CPU开销和存储空间浪费大

    基本思想

    • 程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作业或进程所包含的段对应于一个二维线性虚拟空间,也就是一个二维虚拟存储器。
    • 段式管理程序以段为单位分配内存,然后通过地址映射机构把段式虚拟地址转换成实际的内存物理地址。
    • 和页式管理一样,段式管理只允许经常访问的段驻留内存,将来一段时间内不被访问的段放入外存,待需要时自动调入。

    地址结构

    逻辑地址由段号S与段内偏移量W两部分组成。

    段式管理的内存分配与释放

    特点:

    • 段式管理以段为单位分配内存,每段分配一个连续的内存区。
    • 由于各段长度不等,所以这些存储区的大小不一。
    • 同一进程包含的各段之间不要求连续。
    • 段式管理的内存分配与释放在作业或进程的执行过程中动态进行。

    分配:
    1.首先,段式管理程序为一个进入内存准备执行的进程或作业分配部分内存,作为该进程的工作区用于放置即将执行的程序段。
    2.随着进程执行,进程根据需要随时申请调入新段和释放在内存中的段。

    当进程要求调入某一段时:

    内存中有足够的空闲区满足该段的内存要求。
    内存中没有足够的空闲区满足该段的内存要求。段式管理程序根据给定的置换算法淘汰内存中在今后一段时间内不再被CPU访问的段,也就是淘汰那些访问概率最低的段。
    1.动态页式管理的几种常用淘汰算法都可以用来作为段式管理的淘汰算法。例如FIFO置换算法、LRU算法及其近似算法等。
    2.与页式管理时每页具有相同长度不一样,需要调入的某段长度可能大于被淘汰的一段程序或数据的长度。这样,仅仅淘汰一段可能仍然满足不了需要调入段的内存要求。此时需要再淘汰另外的段直到满足需调入段的内存要求时为止。
    3.一次调入时需淘汰的段数与段的大小有关。如果一个作业或进程的段数较多,且段长之间的差别较大,则有可能出现调入某个大段时,需淘汰好几个小段的情况。
    4.除了初始分配之外,段的动态分配是在CPU访问时,地址变换机构发现该段不在内存,由硬件发出缺段中断信号的情况下发生的。因此,段的淘汰或置换算法是缺段中断处理过程的一部分

    段式地址变换

    使用数据结构段表:

    1.段表(segment mapping table):在进行初始内存分配之前,首先根据用户要求的内存大小为作业或进程建立一个段表,一般在内存中给出一块固定的区域放置段表。
    2.段号与用户指定的段名一一对应。始址和长度分别表示该段在内存或外存的物理地址与实际长度。
    3.存取方式对该段进行存取保护。只有处理机状态字中的存取控制位与段表中存取方式一致时才能访问该段。
    4.内外用于表明该段现在存储于外存还是内存中。如果所访问段在外存的话,则发生中断。
    5.访问位根据淘汰算法的需要设置。

    过程:

    1.进程开始执行时,管理程序通过访问段表寄存器得到该进程的段表始址,把段表始址放入段表地址寄存器。
    2.依据虚地址中的段号s为索引查段表。若该段在内存,则判断其存取控制方式是否有错。
    3.存取控制方式正确,则从段表相应表目中查出该段在内存的起始地址,并将其和段内相对地址w相加,从而得到实际内存地址。
    4.如果该段不在内存,则产生缺段中断将CPU控制权交给内存分配程序。
    5.内存分配程序首先检查空闲区链,查找是否有足够长度的空闲区装入需要的段。
    6.如果内存中的可用空闲区总数小于要求的段的长度,则检查段表中访问位,淘汰那些访问概率低的段并将需要段调入。

    提高速度方法-快表

    1.与页式管理相同,段式管理的地址变换过程也必须经过二次以上的内存访问。
    2.即首先访问段表以计算得到待访问指令或数据的物理地址,然后才是依据物理地址进行取数据或存数据操作。
    3.为了提高访问速度,页式地址变换使用的高速联想寄存器方法也可以用在段式地址变换中。
    4.即高速联想寄存器中存放那些经常访问的段号对应的段表项,且高速联想寄存器中的段表和内存的段表可同时查找。
    5.如果在联想寄存器中找到了需要的段,则可以大大加快地址变换速度。

    段的共享与保护

    共享

    多道环境下,多个子程序和应用程序被多个用户使用。如果每个用户进程或作业都在内存保留它们共享的程序和数据的副本,会极大地浪费内存空间。
    最好的办法是内存中只保留一个副本,供多个用户使用,称为共享。

    如果用户进程或作业需要共享内存中的某段程序或数据,只要使用相同的段名,在新的段表中填入已存在于内存之中的段的起始地址,并置以适当的读写控制权,就可做到共享一个逻辑上完整的内存段信息。

    保护

    址越界保护:段表中的段长项 VS. 虚拟地址中的段内相对地址。若段内相对地址大于段长,系统产生保护中断。不过,在允许段动态增长的系统中,段内相对地址大于段长是允许的。为此,段表中设置相应的增补位以指示该段是否允许动态增长。

    存取方式控制保护:除了存入、读取的控制保护之外,还需要考虑数据共享的保护。在段表中设立相应的共享位用于判断该段是否正被某个进程调用。

    段式管理的优缺点

    优点:
    1.段式管理提供内外存统一管理的虚存实现。
    2.段式虚存每次交换的是一段有意义的信息,不像页式虚存只交换固定大小的页从而需要多次缺页中断才能把所需信息完整地调入内存
    3.段长可根据需要动态增长,有利于不断增加或吸收新数据
    4.方便共享具有完整逻辑功能的信息段。
    5.便于实现动态链接

    缺点:
    1.比其他几种方式要求更多硬件支持,机器成本较高。
    2.内存空闲区的管理与分区式管理相同,在碎片问题以及为了消除碎片所进行的合并等问题上较分页式管理要差。
    3.允许段的动态增长给系统管理带来一定的难度和开销。
    4.每个段的长度受内存可用区大小的限制。
    5.和页式管理一样,段式管理系统在选择淘汰算法时也必须十分慎重,否则也有可能产生抖动现象。

  • 相关阅读:
    南邮NOJ没有被接待的童鞋
    南邮NOJ 1014 数据的插入与删除
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    Absolute C++ 2.10题目
    南邮NOJ开灯问题
    南邮NOJ偷吃可耻
    【HDOJ】1166 敌兵布阵
    【HDOJ】1180 诡异的楼梯
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11921912.html
Copyright © 2011-2022 走看看