zoukankan      html  css  js  c++  java
  • 操作系统概论-03

    3】存储管理   

    3.1 计算机中的存储器

    寄存器 存储器 高速缓冲区 辅助存储器

    处理器能直接访问寄存器 主存储器 高速缓冲区

    通常的寄存器 指令寄存器 =通用寄存器 =控制寄存器

    用来存放操作系统的程序 数据 管理信息以及操作系统与硬件的接口信息等我称之为系统区

    除系统区外其余的主存空间可以存放用户的程序和数据成为用户区

    3.2重定位

    3.2.1绝对地址和逻辑地址

    把主存空间的地址编号称为主存储器的绝对地址与其地址相对应的主存空间称为物理地址空间

    用户程序使用的地址称为逻辑地址 于逻辑基地址对应的存储空间称为逻辑地址空间

    3.2.2 重定位

    把逻辑地址转换成绝对地址的工作称之为重定位或者地址转换 重定位的方式有两种 静态重定位 动态重定位

    1 静态重定位

    在装入一个作业时 把作业中的指令地址和数据地址全部转换成绝对地址,由于地址转换工作是在作业执行前集中一次完成的

    所以在作业执行过程中无需在进行地址转换工作(在绝对地址的值上加法就行)

    2 动态重定位

    在作业执行过程中,由硬件的地址转换机构动态地进行地址转换 在执行指令时只要把逻辑地址与基址寄存器中的值相加就可以得到绝对 地址,这种定位方式只在指令执行过程中进行的成为动态cdx

    3动态重定位的硬件支撑

    动态重定位是由软件和硬件的相互配合来实现的 硬件设置一个基址寄存器 当存储管理为作业分配了一个主存区域后 装入程序原封不动的把作业装到所分配的区域中 然后把主存区域的起始地址存入基址寄存器

    3.3单用户联系存储管理

    1 存储空间的分配

    操作系统站了一部分存储器空间 其余剩下的主存储器空间都分配一个作业使用 任何时候主存储器中最多只用一个作业

    采用这种方式管理 处理器设置了一个界限寄存器 寄存器中内容为当前用个用户使用的主存储器区域的起始地址

    2 如何实现存储保护

    因为每次只允许一个作业装入主存储器 因此不必考虑作业在存储器中移动问题可以采用静态重定位的方式进行地址转换

    如果绝对地址在规定的范围内 则可执行 否则产生一个 地址越界的中断事件让操作系统处理 达到存储保护的目的

    存储保护:为了防止各存储区域的程序相互干扰 必须对它们采取保护措施 成为存储保护+

    3.4固定分区存储管理

      1存储器的分配

    把主存储器中可分配的用户区域先划分若干个连续区 每个连续区称为一个分区 一旦划分好后 分区个数确定 每个分区可以装入一个作业

    但是不允许搓个作业放在一个分区中 这种管理方式适用于多道程序设计系统

     2如何实现存储保护

    处理器设置了一对寄存器 成为上限寄存器和下限寄存器 下限地址<=等于绝对地址<上限地址 条件不成立 否则产生地址越界中断事件

    3如何提高主存空间的利用率

    1 根据经常出现的作业的大小和数量来划分分区,尽可能使各个分区被充分利用

    2 划分分区时候按照分区的大小,低地址部分都是较小的分区 *****大 各个分区按照大小次序存放在分区分配表 至少顺序查找这个表

    就能够找到满足作业要求内最小的分区 减少闲置空间 保留大空间利于大作业的装入

    3按照作业队主存空间的需求排成多个作业队列

    3.5 可变分区存储管理

    1可变分区存储管理的划分

     在作业要求装入主存储器时 根据作业需要的主存储器空间的大小和当时主存储器空间使用情况来决定是否为作业分配一个分区

                     根据作业实际需求来划分的 分区的个数也不是预先确定的 而是与装入作业数决定的

    2 可变分区存储管理是如何实现主存的分配

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

    3常用的分配算法

    1最先适应分配算法

    每次分配时总是顺序查找空闲区表,找到第一个能满足作业长度要求的空闲区,分割这个找到的空闲区一部分分给作业,另一部分仍为 空闲位 这种分配算法容易产生碎片

     2最优势适应分配算法

    按照作业要求从所有的空闲区中挑选一个能满足作业要求的最小空闲区,这样可以保证不去分割一个更大的分区

    3最坏使用分配算法

    总是挑选一个最大的空间区,分割一部分给作业使用,使剩下的部分不至于太小 仍可供分配使用,采用最坏使用分配算法、

    可以空闲区长度以递减顺序排序,表中第一个登记项所对应的空闲区总是最大的 同样 在收回一个分区时 必须吧空闲区表调整

    成按空闲区长度的递减顺序排列登记。

    4硬件的地址转入按机构以及地址转入的实现

    可变分区管理一般采用动态重定位方式装入作业,每读一条指令都要变化一次地址 需要硬件支持-基址寄存器 限长寄存器 以及一些加 法,比较线路等。当作业占用处理器执行时 进程调度便把该作业所占分区的起始地址送入基址寄存器 把作业所占分区的最大地址

    送到限长寄存器。取出一条指令后绝对地址若满足 基址寄存器内容 <=绝对地址  <= 限长寄存器内容,否则产生地址越界中断事件

    基址寄存器内容+偏移值=逻辑地地址

    5利用移动技术提高主存空间的利用率

    如果有两个空间区分别 20k 来了一个新的作业 需要 30k 利用移动技术能吧这两个空间合并成一个空间放下作业

    1 集中分散的空闲区 2使于作业动态扩充主存

    3.6 页式存储管理

    上面集中管理都是连续空间

    1分页和分块==就是把存储器分为若干大小相等的区,每个区就是一个块,对应的,在程序中 逻辑地址进行分页其大小和每个块一致

    2存储器分配==进行存储器分配的时候 总是以块为单位进行分配 一个作业的信息有多少页 装入主存就给他分配多少块,分配给作业的储存块可以使不连续的,即作业信息可以按页分散在主存空闲块中

    3页表的构造以及怎样利用页表进行地址转换

    每个被装入主存的作业都有一张页表 可以指出该作业逻辑地址中页号所占用的主存块号之间的对应关系 页表的长度由作业所占页数决定

    行号对应页号 行中记录的是主存中的块号
    页式存储管理也是动态重定位的方式装入作业 作业执行时由硬件的地址转换机构来完成从逻辑地址到绝对地址的转换工作 在作业执行的过程中 处理器每执行一条指令都要让地址转换器按照逻辑地址中的页号差得到该页对应的块号 再按页地址换算成绝对地址

    绝对地址 = 块号*块长+页内地址

    抖动/颠簸 在多道作业运行时 由于作业在主存中的页面不足 致使页面需要频繁的调进 调出 使cpu时间大量的耗费在调进调出上正常运算工作效率急剧下降 造成系统的颠簸或抖动

    4 页式存储管理的分配

    分页式存储管理吧贮存期的可分配区按页面大小分成若干块 分配主存储器空间按照块为单位 可用一张主存储器分配表来记录已分配

    的块 和尚未分配的块 以及当前剩余的空闲快 由于块的大小是固定的 所以可以用一张 位示图 来构建成主存储器分配表

    进行主存储器分配时,先查空闲快数能否满足作业要求 若不能满足 则作业不能装入 若能满足 找出对应的块号

    块号 = 字号 *字长+位号

    5页式存储的回收

    当一个作业执行执行结束 则应回收作业所占的主存储器块 根据归还的块号计算该块在块位图中对应的位置 将占用标志清为0

    把归还块加入到空闲快数中 字号 = I/字长 位号 = I mod 字长 (除以字长取余)

  • 相关阅读:
    【转】Oracle 查询每天执行慢的SQL
    【转】StringBuilder与String的区别
    【转】C#单例模式实现
    【转】设计模式
    【转】十大排序算法
    ASP.NET jQuery 随笔 从DropDownList获取选择的text和value值
    ASP.NET jQuery 随笔 显示CheckBoxList成员选中的内容
    ASP.NET jQuery 随笔 在TextBox里面阻止复制、剪切和粘贴事件
    ASP.NET JQuery 随笔-搜索框默认提示
    JS 某一区域内所有CheckBox全选和取消全选(.net)
  • 原文地址:https://www.cnblogs.com/nerdlerss/p/7721899.html
Copyright © 2011-2022 走看看