精华内容
下载资源
问答
  • 文章目录非连续分配管理基本分页存储管理如何实现地址转换页表总结基本地址变换机构(页表寄存器)总结具有快表地址变换机构局部性原理快表引入快表后, 地址变换过程总结两级页表单级页表存在问题两级页表 (解决...

    非连续分配管理

    • 支持多道程序的两种连续分配方式的缺点
      • 固定分区分配 : 缺乏灵活性, 产生了许多无法利用的内部碎片
      • 动态分区分配 : 当产生了许多外部碎片时, 需要采用"紧凑"技术, 时间代价高

    如果允许将一个进程分散地装入到许多不相邻的分区中, 便可充分利用内存, 而无需再进行“紧凑” ---- 分连续分配方式

    在这里插入图片描述

    基本分页存储管理

    • 思想 : 把内存划分为一个个相等的小分区, 然后按照分区大小将进程拆分成一个个小部分.
      在这里插入图片描述
    • 页框 : 内存空间划分的一个个大小相等的分区
    • 页框号 : 每个页框的编号, 从0开始 (低地址开始)
    • 页面 : 将用户进程的地址空间划分为和页框大小相等的一个个区域
    • 页号 : 页面的编号, 从0开始
    • 进程的最后一个页面可能没有页框大, 因此页框不能太大, 否则可能产生过大的内部碎片
    • 进程的页面, 和内存的页框一一对应, 页面不必连续存放, 也不必按先后顺序.
      在这里插入图片描述

    如何实现地址转换

    • 采用分页技术后, 进程的地址空间会被分为一个个页面, 这些页面离散的, 不按顺序地放入内存的各个页框当中. 因此逻辑地址->物理地址的转换, 成了需要解决的第一个问题

    • 连续分配中采用动态重定位进行地址转换

      • 运行时进行地址转换, 一个重定位寄存器记录进程的物理首地址. 实际地址 = 逻辑地址 + 重定位寄存器中的物理首地址
      • 模块在内存中的起始地址 + 目标内存单元相对于起始位置的偏移量

    在这里插入图片描述
    在这里插入图片描述

    • 前20位对应页号, 后12位对应页内偏移量
      在这里插入图片描述
      在这里插入图片描述

    • 如果每个页面大小为2^kB, 用二进制表示逻辑地址时, 末尾k位是 页内偏移量 , 其余部分就是页号

    在这里插入图片描述

    页表

    • 为了能知道进程的每个页面在内存中的存放位置, 操作系统要为每个进程建立一张页表
      • 一个进程对应一张页表
      • 一个页面对应页表中的一个页表项
      • 每个页表项由“页号” 和 “块号” 组成
      • 页表记录进程页面实际存放的内存块之间的关系
      • 每个页表项的长度是相同的, 页号是"隐含"的

    在这里插入图片描述
    为什么每个页表项的长度相同, 页号是隐含的

    • “隐含” 是指不需要显示存储页号, 第几个页块也就对应了第几个页号, 所以内存页表中只存储了块号地址. 想要直到M号页面对应的物理起始地址, 直接用M*3+页表起始地址, 找到M号页面所属的页表项的位置, 然后读取其中的块号, 然后用 块号 * 页面(页框)大小, 即可知道该页面实际存放的物理地址.
    • 在这里插入图片描述

    总结

    在这里插入图片描述

    基本地址变换机构(页表寄存器)

    • 分页存储管理 : 将内存划分为一个个大小相同的分区, 称为“页框”, 将进程的地址空间划分为相同大小的一个个模块, 称为“页面”, 页面和页框一一对应, 这些页面离散的, 不按顺序地存储在也页框中. 寻址的时候, 只需要根据逻辑地址, 计算出所在的页号, 然后查找页表取出该页号的页面在内存中存放的物理首地址. 然后求出逻辑地址在该页面的偏移量. 用首地址+偏移量. 就是该逻辑地址的物理地址. 一个进程对应一个页表, 一个页面对应一个页表项. 页表项由页号和块号组成. 页号是隐含的. 逻辑地址对应的页号 由 逻辑地址 / 页面大小. 偏移量 逻辑地址 % 页面大小.
    • 系统中会设置一个 页表寄存器(PTR), 存放页表在内存中的起始地址F 和 页表长度M,
      • 进程未执行时, 页表的起始地址 和 页表的长度(多少个页面) 放在进程控制块(PCB)中, 当进程被调度时, 操作系统内核会把他们放到页表寄存器中
        • (因为是动态重定位的方式进行地址转换)
          • (所以说页表寄存器也只有一个, 所有继承共享, 运行的进程才能占用)

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 因为页内偏移量是末尾多少位, 块号是前面多少位, 两个可以直接拼接在一起.
    • 1023 是 011 11111111; 1024 是 100 00000000

    在这里插入图片描述

    • 页内偏移量占10位, 说明最大是 11 11111111个存储单元, 所以一个页面大小100 00000000存储单元. 因为按字节寻址, 所以一个存储单元大小是一个字节. 所以一个页面大小1kB. 如果是按字存储, 那么一个页面大小就是2kB.

    • 分页存储管理, 只需要知道页面大小, 就可以知道逻辑地址对应的物理地址. 所以说地址是一维的.

      • 页号 : 逻辑地址 / 页面大小
      • 偏移量 : 逻辑地址 % 页面大小
      • 块大小 : 页面大小
      • 页表起始地址系统分配,
      • 块号 : 页表起始地址 + 块大小 + 页号
      • 物理地址 : 块号 * 块大小(页面大小)
    • 需要注意对页号的越界检查 (页号和页表长度进行比较, 只有小于 才合法)

    • 页表也是存储在内存中的, 也需要考虑碎片问题

      • 如果一个页表项长度3B, 而页面大小4kB, 会有1B的内部碎片. 同时对页表项存放的物理地址的寻址也会进行特殊处理
      • 所以为了寻址方便, 通常会让一个页表项占更多的字节.
        在这里插入图片描述

    总结

    • 整个寻址过程中, 两次访问内存
      • 第一次 : 查询页表
      • 第二次 : 访问目标存储单元
        在这里插入图片描述

    具有快表的地址变换机构

    在这里插入图片描述

    局部性原理

    • 时间局部性 : 如果执行了程序的某条指令, 不久将来, 这条指令很可能再次被执行. 如果访问了某个数据, 不久将来, 这个数据会再次被访问. ( 因为程序中存在大量循环 )

    • 空间局部性 : 一旦程序访问了某个存储单元, 不久之后, 其附近的存储单元也很有可能被访问 (因为很多数据在内存中是连续存放的)

    • 在基本地址变换机构中, 每次访问一个逻辑地址, 都需要查询内存中的页表, 由于局部性原理, 可能连续多次查到的都是同一个页表项. 既然如此, 能否利用这个特性减少访问页表的次数?

    在这里插入图片描述

    快表

    • 快表: 联想寄存器(TLB), 是一种访问速度比内存快很多的高速缓冲存储器. 用来存放当前访问的若干页表项, 以加速地址变换的过程. 与此对应, 内存中的页表常称为 慢表

    在这里插入图片描述

    引入快表后, 地址变换过程

    • 默认先查询快表, 失败后在查询慢表
      在这里插入图片描述

    总结

    • 如果快表查询没有命中, 需要查询慢表, 同时把对应的页表项复制一份到快表
    • 访问内存速度是比访问快表慢的

    在这里插入图片描述

    两级页表

    在这里插入图片描述

    单级页表存在的问题

    在这里插入图片描述
    在这里插入图片描述

    • 页表必须连续存放(方便根据页号查询), 因此当页表很大时, 需要占用很多个连续的页框

    • 没有必要让整个页表常驻内存, 因为进程在一段时间内可能只需要访问某几个特定页面(局部性原理)

    • 我们是如何解决进程在内存中必须连续存放的问题的

      • 将进程地址空间分页, 用一个页表记录个页面的位置
    • 同样思路, 用于解决“页表必须在内存中连续存放的问题”, 把连续存放的页表再也页. 然后用一个数据结构, 记录页表在内存中的位置

      • 将长长的页表进行分组, 使每个内存块刚好放入一个分组 (上个例子中, 每个页面4kB, 每个页表想4B, 每个页框可存放1k个页表项, 因此每1k个连续的页表项为一组, 每组刚好占用一个内存块, 再将各组离散地放到不同内存块)
      • 要为离散存储的页表再建立一张页表, 称为页目录表, 外层页表, 顶层页表

    两级页表 (解决连续占用内存问题)


    在这里插入图片描述
    在这里插入图片描述

    • 一级页表内存块号 指的是 对应的二级页表在内存中存放的位置. 取出来后, 继续在这个二级页表中查询指令存放的块号.

    虚拟存储技术 (解决整个表常驻内存的问题)

    在这里插入图片描述

    需要注意的细节

    • 若采用多级页表机制, 各级页表的大小不能超过一个页面
    • 单级页表只需要进行两次内存访问
    • 两级页表需要进行三次, 虽然解决了单级页表的存在的两个问题, 使得内存利用率提升, 相对应付出的代价是, 多一次访问内存, 花费更长的时间
      • 没有快表, n级页表, 需要访问n+1次内存
        在这里插入图片描述

    总结

    在这里插入图片描述

    基本分段存储管理

    在这里插入图片描述

    分段

    • 进程的地址空间, 按照程序自身的逻辑关系划分为若干个段, 每个段都有一个段名(低级语言中, 程序员使用段名来编程), 每段从0开始编址
    • 内存分配规则 : 以段为单位进行内存分配, 每个段在内存中占据连续存储空间, 但各段之间可以不相邻

    在这里插入图片描述

    • 段号的位数 决定了 每个进程最多可几个段
    • 段内地址的位数 决定了 每个段的最大长度是多少

    在这里插入图片描述

    段表

    • 程序分为多个段, 各段离散存储在内存中, 为了保证程序的正常运行, 就必须能从内存中找到各逻辑段存放的位置, 为此需要一张段映射表, 简称“段表”
      • 每个段对应一个段表项, 其中记录了该段在内存中的起始位置(基址) 和 段的长度
      • 各个段表项的长度是相同的, 因此段号可以隐含, 不占存储空间.

    在这里插入图片描述

    地址变换

    • 进程未上处理机运行时, 段表在内存的起始地址 和 段表长度 存放在PCB中. 进程上处理机运行后, 这些信息会转移到段表寄存器中(一个物理硬件)
    • 分页存储中, 各页大小一样, 不需要对页内偏移量是否越界进行检查; 而分段存储中, 各段大小不同, 需要对段内偏移量是否越界进行检查 (和段长比较)
      在这里插入图片描述
      在这里插入图片描述

    分段, 分页管理的对比

    • 分页地址转换是一维的 : 只需要一个页面大小
    • 分段地址转换是二维的 : 需要段号, 和段内偏移量 (段名 和 助记符)

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结

    在这里插入图片描述

    段页式管理

    在这里插入图片描述

    分页, 分段的优缺点分析

    在这里插入图片描述

    分段 + 分页 = 段页式

    • 地址结构也是二维的 : 用户只需要提供段号 和 段内地址 (系统自动将段内地址 拆分成 页号, 页内偏移量)
      在这里插入图片描述
      在这里插入图片描述

    段表, 页表

    在这里插入图片描述

    • 一个进程对应一个段表, 多个页表

    地址转换过程

    • 需要检查页号是否越界, 因为各段长度不等, 页表程度也就不同.
      在这里插入图片描述

    总结

    展开全文
  • 段页式管理方式

    2020-12-18 15:02:53
    在前面文章基本分页存储管理方式和分段存储管理方式中介绍了非连续分配管理方式的基本分页存储管理方式。 接下来,本文将介绍非连续分配管理的第三种方式——段页式存储管理方式 分页、分段的优缺点 分页 优点:...

    前言

    在前面文章基本分页存储管理方式分段存储管理方式中介绍了非连续分配管理方式的基本分页存储管理方式。

    接下来,本文将介绍非连续分配管理的第三种方式——段页式存储管理方式

    分页、分段的优缺点

    • 分页

    优点:内存空间利用率高,不会产生外部 碎片,只会有少量的页内碎片

    缺点:不方便按照逻辑模块实现信息的共享和保护

    • 分段

    优点:很方便按照逻辑模块实现信息的共享和保护

    缺点:如果段长过大,为其分配很大的连续空间会很不方 便。另外,段式管理会产生外部碎片

    分段管理中产生的外部碎片也 可以用“紧凑”来解决,只是 需要付出较大的时间代价

    分段与分页管理方式都有自己的各自优缺点,分页管理方式能有效提高内存空间利用率、分段管理方式能更好地满足用户的需要,结合两种方式的优点,一种新的管理方式——段页式管理方式。

    基本原理

    段页式管理方式的基本原理是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。

    在这里插入图片描述
    上图出了一个作业地址空间的结构。该作业有三个段:主程序段、子程序段和数据段;页面大小为 4 KB。

    在段页式系统中,其地址结构由段号段内页号页内地址三部分所组成。

    在这里插入图片描述

    段表与页表

    在段页式系统中,为了实现从逻辑地址到物理地址的变换,系统中需要同时配置段表和页表。段表的内容与分段系统略有不同,它不再是内存始址和段长,而是页表始址页表长度

    在这里插入图片描述

    地址交换过程

    1、根据逻辑地址得到段 号、页号、页内偏移量

    2、判断段号是否越界。 若S≥M,则产生越界 中断,否则继续执行

    3、查询段表, 找到对应的段 表项,段表项 的存放地址为 F+S*段表项长 度

    4、检查页号是否越界,若 页号≥页表长度,则发生越 界中断,否则继续执行

    5、根据页表存放块 号、页号查询页表, 找到对应页表项

    6、根据内存块号、 页内偏移量得到最 终的物理地址

    7、访问目标 内存单元

    在这里插入图片描述

    需要三次访存。

    在这里插入图片描述
    【参考文献】
    汤小丹、汤子瀛《计算机操作系统(第4版)》

    王道

    展开全文
  • 文章目录OS- -请求分页系统、请求分段系统和请求段页式系统(二)一、基本分段存储管理方式1.分段系统的组成:2.段表3.查找过程4.分段和分页的对比二、段页式内存管理方式1.分页, 分段管理的优缺点分析2.段页式管理的...

    OS- -请求分页系统、请求分段系统和请求段页式系统(二)

    一、基本分段存储管理方式

    • 分段 : 进程的地址空间会按照自身的逻辑关系划分为若干个段, 每个段都有一个段名, 每段从0开始编址
    • 内存分配规则 : 以段为单位进行分配, 每个段在内存中占据连续空间, 但各段之间可以不相邻

    1.分段系统的组成:

    • 段号------ 段号的位数决定了每个进程最多可以分为几个段
    • 段内地址------段内地址的位数决定了每个段的最大长度是多少

    在这里插入图片描述

    2.段表

    • 程序分为多个段, 各个段离散地装入内存, 为了保证程序能正常运行, 就必须能从物理内存中找到各个逻辑段的存放位置. 为此,需为每个进程建立一张段映射表, 简称 " 段表 " .
      在这里插入图片描述
    • 关于段表 :
    • 每个段对应一个段表项, 记录着该段在内存中的起始位置 ( 基址 ) 和 段长
    • 各个段表项的长度是相同的, 因此和页号一样, 段号是" 隐含"的, 不占据存储空间

    3.查找过程

    在这里插入图片描述

    4.分段和分页的对比

    • 页是信息的物理单位, 分页的主要目的是为了实现离散分配, 提高内存利用率. 分页仅仅是系统管理上的需要, 完全是系统行为,对用户是不可见的
    • 段是信息的逻辑单位, 分段的主要目的是更好地满足用户需求. 一个段通常包含着一组属于一个逻辑模块的信息, 分段对用户是可见的,用户编程时需要显式地给出段名
    • 页的大小是固定且由系统决定, 段的长度却不固定, 决定于用户编写的程序
    • 分页的用户进程地址空间是一维的, 分段的用户进程是二维的.
      在这里插入图片描述
    • 分段比分页更容易实现信息的共享和保护

    二、段页式内存管理方式

    1.分页, 分段管理的优缺点分析

    在这里插入图片描述

    2.段页式管理的结构

    • 先分段 , 再分页
      在这里插入图片描述
    • 段页式管理的逻辑地址结构 :由段号, 页号, 页内偏移 组成
      在这里插入图片描述
    • 段号的位数决定了每个进程最多可以分为几个段
    • 页号位数决定了每个段最大有多少页
    • 页内偏移量决定了页面大小和内存块的大小
    • 注意 :

    • "分段"对用户是可见的, 而将各段"分页"对用户是不可见的, 系统会根据段内地址自动划分页号和段内偏移量,

    • 因此段页式管理的地址结构是"二维"的.

    3.段表, 页表

    • 每一个进程对应一个段表, 每一个段又对应一个页表, 因此一个进程可能对应多个页表.
      在这里插入图片描述

    4.查找过程

    在这里插入图片描述

    1. 逻辑地址得到段号, 页号, 页内偏移
    2. 段号与段表寄存器的段长度比较, 检查是否越界
    3. 由段表始址, 段号找到对应段表项 ---- ( 一次访存)
    4. 根据段表中记录的页表长度, 检查页号是否越界
    5. 由段表中的页表地址, 页号得到查询页表, 找到相应页表项 ---- ( 二次访存)
    6. 由页面存放的内存块号, 页内偏移得到最终的物理地址
    7. 访问目标单元 ---- ( 三次访存)

    三、虚拟内存

    • 传统存储管理方式的特征, 缺点:
      在这里插入图片描述
    • 一次性 : 作业必须一次性全部装入内存才能开始运行
    • 作业很大时, 无法装入导致大作业无法运行
    • 大量作业要求运行时内存无法容纳所有作业, 导致多道程序并发度下降
    • 驻留性 : 一旦作业被装入内存, 就会一直驻留在内存中, 直到作业运行结束, 这样会导致内存中驻留大量的, 暂时用不到的数据,浪费内存资源

    虚拟内存—基于局部性原理

    1. 在程序装入时, 将程序中很快会用到的部分装入内存, 暂时用不到的部分留在外存, 就可以让程序开始执行.
    2. 在程序执行过程中, 当所访问的信息不在内存时, 由操作系统负责将所需信息由外存调入内存, 然后继续执行程序.
    3. 内存空间不够时, 操作系统负责将内存中暂时用不到的信息换出到外存
    4. 在用户看来, 就有一个比实际内存大很多的内存, 这就叫虚拟内存

    注意 :

    • 虚拟内存的最大容量是由计算机的地址结构 ( CPU的寻址范围 ) 确定的,
    • 虚拟内存的实际容量 = 𝑚𝑖𝑛(内存容量+外存容量,𝐶𝑃𝑈寻址范围)
      在这里插入图片描述
    • 虚拟内存的实现 :

    • 请求分页存储管理

    • 请求分段存储管理

    • 请求段页式存储管理

    • 操作系统需要提供的功能 :

    • 请求调页 ( 段 )

    • 页面置换 ( 段置换 )

    • 缺页时请求掉页不一定页面置换, 若还有可用的内存块, 就不用进行页面置换

    四、请求分页管理方式

    1.页表机制

    在这里插入图片描述

    2.缺页中断机构

    • 在请求分页操作系统中, 每当要访问的页面不在内存时, 便产生一个缺页中断, 然后由操作系统的缺页中断处理程序处理中断

    • 此时缺页的进程阻塞, 放入阻塞队列, 调页完成后再将其唤醒, 放回就绪队列

    • 如果内存中有空闲块, 则为进程分配一个空闲块, 将所缺页面装入该块, 并修改页表中相应的页表项

    • 如果内存中没有空闲块, 则由页面置换算法选择一个页面淘汰, 若该页面在内存期间被修改过, 则要将其写回外存, 未修改过的页面不用写回外存

    • 缺页中断是因为当前执行的指令想要访问目标页面未调入内存而产生的, 因此属于内中断 :
      在这里插入图片描述

    3.页面置换算法

    • 最佳置换算法OPT

    • 每次选择淘汰的页面是以后永不使用或者在最长时间内不会使用的页面, 保证最低的缺页率 . 但是操作系统无法预判页面访问序列, 这种算法是无法实现的

    • 先进先出置换算法 FIFO

    • 每次淘汰的页面是最早进入内存的页面

    • 实现 : 将调入内存的页面根据调入的先后顺序排成一个队列, 需要置换页面的时候选择队首的页面.

    • 实现简单, 算法性能差, 不适应进程实际运行时的规律

    • 最近最久未使用算法 LRU
      在这里插入图片描述

    • 当需要淘汰一个页面的时候, 选择现有页面中t值最大的, 即最近最久未使用的页面.

    • 需要淘汰页面时, 逆向检查此时在内存中的几个页面号, 最后一个出现的页号就是需要被淘汰的

    • LRU算法的特点 : 性能好, 但实现起来需要专门的硬件支持, 算法开销大

    • 时钟置换算法 ( CLOCK ) / 最近未用算法 ( NRU )

    他们是同一种算法.

    • 简单的CLOCK算法的实现方法 :
      在这里插入图片描述
    • 简单的时钟置换算法仅考虑到了一个页面最近是否被访问过
    • 但是事实上, 如果被淘汰的页面没有被修改过, 就不需要执行I/O操作写回外存. 只有被淘汰的页面被修改过时, 才需要写回外存
    • 因此, 除了考虑一个页面最近有没有被访问过之外, 操作系统还应该考虑页面有没有被修改过.
    • 在其他条件都相同时, 应该优先淘汰没有修改过的页面, 避免I/O操作, 这就是改进型的时钟置换算法的思想.

    利用 (访问位, 修改位) 的形式表示各页面状态

    在这里插入图片描述

    • 特点 : 开销小, 性能也不错

    四、页面分配策略

    1.驻留集

    • 请求分页存储管理器中给进程分配的物理块的集合. ( 系统给进程分配了n各物理块 ----的另一种表述 : 驻留集大小为n)

    • 在采用虚拟存储技术的系统中, 驻留集的大小一般小于进程的总大小

    • 如果驻留集太小, 会导致缺页频繁, 系统要花大量的时间来处理缺页, 实际用于进程推进的时间很少

    • 如果驻留集太大, 会导致多道程序并发度下降, 资源利用率降低

    2.几种分配策略

    在这里插入图片描述

    • 固定分配全局置换不存在, 因为进程物理块固定后不会再分配给别人
      在这里插入图片描述
    • 可变分配全局置换 : 只要缺页就给分配新物理块
    • 可变分配局部置换 : 根据发生缺页的频率来动态地增加或减少进程的物理块

    3.何时调入页面

    • 预调页策略
    • 请求调页策略
      在这里插入图片描述
      在这里插入图片描述

    4.何处调入页面

    在这里插入图片描述

    • 文件区用于调入不会被修改的数据, 对换区用用于调入可能被修改的数据

    5.抖动(颠簸)现象

    在这里插入图片描述

    6.工作集

    在这里插入图片描述

    • 一般来说 驻留集的大小不能小于工作集的大小, 否则进程运行过程中将频繁缺页.
    展开全文
  • 存储管理方式 分区存储管理 单一分区存储管理 固定分区存储管理 地址转换和存储保护 固定分区管理要解决主要问题 固定分区主要优缺点。 可变分区存储管理 地址转换和存储保护 常用分配算法。 页式存储管理 ...

    存储管理的基本任务

    存储管理的对象

    存储管理的对象是内存储器及其扩展的外存储器。

    内存空间被划分成两个部分:操作系统区和用户程序区,

    • 操作系统区用以存放操作系统以及系统所需要的各种信息,这个区间用户是不能访问的;
    • 用户区间用于多道程序共享,每个用户程序占有一部分空间,所谓存储管理,则是指用户区间的管理,而不包括系统空间,
    • 外存储器为虚拟存储器的实现提供物质基础,因此,也是存储管理的工作范围。

    存储管理的任务

    1. 主存空间的分配和回收。在 “主存空间分配表” 中记录主存空间的分配状况,作为主存分配的依据,及时回收作业撤离或主动归还时的主存空间。
    2. 实现逻辑地址到绝对地址的转换。存储管理把用户程序中使用的逻辑地址转换成CPU执行时能用以访问主存的绝对地址,这种转换必须与硬件配合完成。
    3. 主存空间的共享和保护。管理多道程序欲访问的主存区,必须保证每道程序都在自己的空间中运行,互不干扰,信息不被破坏。
    4. 主存空间的扩充。操作系统采用二级存储、覆盖等技术,在逻辑上扩充主存的容量,使用户感到计算机系统提供了容量极大的主存空间,即为用户提供了一个虚拟存储器。

    重定位

    重定位中的地址名词

    1. 逻辑地址空间
      在多道程序设计中,往往会有多个作业同时存放在内存中,而每个用户预先无法知道他的作业被装在主存的什么位置,为了方便编程,每个用户可以认为自己的程序和数据放在从 0 地址开始的一组连续地址空间中,该地址空间就是逻辑地址空间。
    2. 逻辑地址
      逻辑地址空间中,地址单元的编号称为逻辑地址。
    3. 绝对地址空间
      绝对地址空间就是主存中一系列连续存储信息的物理单元的集合,也称存储地址空间或物理地址空间。
    4. 绝对地址
      对地址空间中物理单元的编号称为绝对地址。

    重定位

    由于程序中的逻辑地址和实际分配后主存储器的绝对地址不一致,为使处理器能按实际地址正确地访问主存,必须进行地址转换。逻辑地址转换成绝对地址的过程称为重定位, 也称为地址转换。

    ---------------定位的方式有静态定位和动态定位两种--------------------

    1. 静态重定位。
      所谓静态重定位是在装入一个作业的时候、把作业中的指令地址和 数据地址全部一次性地转换成绝对地址,由于地址转换是在作业执行一次完成的,装入主存中的作业信息已经是用绝对地址指示的,所以作业在执行过程中,无需再进行地址转换,且不能移动位置。
    2. 动态重定位。
      所谓动态重定位是指在装入作业时,不进行地址转换 ,而是直接把作业装入到分配的主存区域中。在作业执行过程中、每当执行一条指令时由硬件的地址转换机构将指令中的逻辑地址转换成绝对地址。
      动态重定位是由软件和硬件相配合来实现的。硬件有一个地址转换机构,该机构由一个基址寄存器和一个地址转换线路组成。基地址寄存器中存放作业所占主存的起始地址。所以地址转换公式为:
      绝对地址=基地址寄存器的值+逻辑地址

    动态重定位的优点

    程序可在内存中移动,当程序移动后,只要将新的主存区域的首地址放进基址寄存器中就可以了;
    易实现程序共享;
    有可能提供虚拟存储空间。
    采用动态重定位的系统支持程序浮动,而采用静态重定位的系统不支持程序浮动。
    

    存储管理方式

    分区存储管理

    分区存储管理是一种简单实用的存储管理方法,其基本思想是把主存空间分成若干个大小不同的连续区域,每个用户作业分配一个区域,用户作业一次整体装入到这个区域中,并限制只能在这个区域中运行。要注意的是区域的连续和作业的整体装入 ,这是分区存储管理不同于其他管理方法的根本特征 。

    单一分区的存储管理

    单一分区的存储管理只能用于单用户、单任务的操作系统。内存分为系统区和用户区。 系统区仅提供给操作系统使用;用户区指除系统区以外的全部内存空间,提供给用户使用。

    • 地址转换
      用界限寄存器存放当前可供用户使用的主存区域的起始地址、地址转换时采用公式。
      绝对地址=界限寄存器值+逻辑地址
    • 存储的保护
      作业执行,处理器会对每条指令的绝对地址进行检查,如果:界限寄存器值<=绝对地址<=主存最大地址,则正常执行,否则出错。
    • 覆盖与对换技术。
    1. 覆盖技术 覆盖技术是在程序运行过程中,把同一存储区在不同时刻分配给不同的程序段或数据段来共享的一种存储分配技术。

      使用覆盖技术要求程序员小心地设计程序及其数据结构,使得要覆盖的程序段或数据具有相对独立性,不存在直接联系或相互交叉访问。

    2. 对换技术 对换技术是指把内存中暂时不能运行的进程或暂时不用的程序和数据, 换出到外存上 ,以腾出足够的内存空间 。把已具备运行条件的进程或进程所需要的程序和数据换入内存的一种存储分配技术。采用对换技术后,可以显著提高内存的利用率,从而增加并发进程数目,提高系统效率。
      对换技术通常以进程为单位整体交换。为实现交换,系统必须实现对换空间的管理及进程的换出与换进的功能。

    固定分区存储管理

    基本思想:将内存空间划分为若干个固定大小的区域 (所有分区可以大小相等,也可以大小不等),在每个分区中载入一道作业。这样当内存中划分成几个分区时,便允许几道作业并发运行;当有一个分区空闲时,便可以从外存的后备队列中,选择一个适当大小的作业装入该分区 ;当该作业运行结束时,又可从后备队列中找出另一个作业调入该分区。

    地址转换和存储保护

    • 地址转换
      固定分区管理采用静态重定位方式做地址转换。进程调度程序把该作业的下限地址和上限地址存入处理器的下限寄存器和上限寄存器中。
      地址转换公式:绝对地址=下限寄存器+逻辑地址。
    • 存储保护
      存储保护采用如下关系式:分区起始地址<=绝对地址<分区始址+分区长度;或下限地址<=绝对地址<上限地址。一旦出错,产生地址错误中断。

    固定分区管理要解决的主要问题

    固定分区管理要解决的主要问题是:
    如何划分区和确定每个分区的大小,这要根据作业的类型和规模决定。一般会给出若干大小不同的分区,以适应不同的作业的要求。

    固定分区的主要优缺点。

    固定分区的主要优点是简单易行,特别是对于作业的大小预先可以知道的专用系统比较实用,缺点是内存利用不充分,作业的大小受到分区大小的限制。

    可变分区存储管理

    基本思想。可变分区管理与固定分区的主要区别是其并不事先划分内存区间,而是在作业装入时根据作业的实际需要动态地划分内存空间。当某些作业运行完毕释放内存分区后,只要可能,便将较小的分区合并成较大的分区。按照这种方法,内存分区的数量、 分区的大小、每个分区的位置、装入内存的作业的数量等都会随着时间的变化而变化

    地址转换和存储保护

    采用可变分区管理时,一般采用动态重定位方式装入作业。 硬件地址机构含基址寄存器和限长寄存器,前者存放所占分区起始地址,后者存放分区长度。
    • 地址转换公式:绝对地址=基址寄存器值+逻辑地址;
    • 存储保护关系式:逻辑地址<=限长寄存器值

    常用的分配算法。

    按照可变分区管理,一般采用下面 3 种内存分配算法:

    1. 最先适应算法(First Fit )。把自由块表 FBT (Free Blocks Table)或自由块链FBC( Free Blocks Chain )按照地址从小到大的顺序排列。当实施分配时,总是从表头开始查找,直到有一个空闲块满足要求为止。
    2. 最佳适应算法(Best Fit )。将FBT或 FBC 按照空闲区长度从小到大的顺序 排列,当实施分配时,从长度小的一端开始查找,直到有一个空闲块满足要求;也可以从表的当前的指示位置查找,这样避免在内存的低端留下较多过小的外碎片。
    3. 最差适应算法 (Worst Fit )。将 FBT 或 FBC 按照空闲区长度从小到大的顺序排列。当实施分配时,从长度大的一端开始查找,第一个空闲块满足要求,则分配;如不能满足,则无法分配。
    • 移动技术。
      采用移动技术可把分散的区集中起来,以容纳新的作业。
      - 移动技术的优点。移动技术可集中分散的空闲区,提高主存空间的利用率,也为作业动态扩充主存空间提供了方便。
      -
      - 采用移动技术应注意的问题。
      • 移动会增加系统开销;
      • 移动是有条件的。

    页式存储管理

    为了实现将进程离散分配到存储区中,将用户程序的地址空间分为若干个大小相同的区域(称为页),相应地将内存空间分成若干个物理块,而页和块相等。

    地址分配

    将一个进程的逻辑地址空间分成若干个大小相等的页(或称页面),内存空间分成与页相同大小的物理块(或称页框)。在为进程分配内存时,以块为单位进行分配,每页分配一块。系统为每个进程建立一张页面映射表(简称页表),记录相应页在内存中对应的物理块号。

    地址转换

    当进程访问某逻辑地址时,地址变换机构自动地将逻辑地址分为页号和页内地址两部分,再以页号为索引去检索页表,得到该页的物理块号,把该物理块号与页内地址拼接成物理地址,完成地址变换过程。
    绝对地址转换公式为:绝对地址=块号×块长+页内地址

    存储空间的分配和回收

    用位示图构成内存分配表,其中每一位与一个主存块对应。 0 表示空闲,1表示己占用,最后一个字节为当前剩余的空闲块数。
    主存分配时,计算块号公式:
    块号 =字号×字长+位号

    存储共享与保护

    页的共享是将各自页表有关表目指向同一个主存块来实现。页的共享可以节省主存空间。在多道程序设计系统中,编译程序、编辑程序、解释程序、公共子程序、公用数据等都属于可共享的。
    存储保护是在页表中加上各页的访问权限,满足访问权限的才可访问。

    段式存储管理

    基本思想: 将用户程序的地址空间分成若干个大小不等的段,每段定义一组相对完整的逻辑信息。

    地址空间

    程序的地址空间被分成若干个段,每段采用一个地址空间,这样程序的逻辑地址就形成一个二维地址,由段号和段内地址两部分组成。系统为每段分配一个连续区域(相当于一个分区),各段可以存放在不同的分区中。系统为每个进程建立一张段表,记录该段在内存中的起始地址和段长。

    地址转换和存储保护

    当进程访问某逻辑地址时,地址转换机构以段号为索引去检索段表 (以段表寄存器的段表起始地址和段号相加),得到该段的起始地址和段长。然后以段起始地址加上段内偏移就可以得到该逻辑地址对应的物理地址,完成地址转换过程。
    在进行地址转换的过程中,要判断地址越界,若段号大于段表长度 (段表寄存器的一部分)或段内偏移大于段长(从段表中读出)都产生越界中断。地址转换公式:
    绝对地址=段始地址+段内地址

    分段与分页的区别

    页是信息的物理单位;段是信息的逻辑单位;
    页的大小固定而且由系统确定,硬件实现;段的长度不固定,决定于用户编写的程序。
    分页的程序地址空间是一维的;分段的程序地址空间是二维的。
    

    段页式存储管理

    段页式系统是分页和分段的结合,用户程序分成若干段,每个段划分成若干页,每段赋予一个段名,为了实现地址转换,必须同时配置段表和页表。

    虚拟存储器

    虚拟存储器的基本概念

    程序局部性原理。

    程序局部性原理是指程序在执行时呈现出局部性规律,即在一较短时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
    局部性又表现为时间局部性和空间局部性。

    • 时间局部性是指如果程序中的某条指令一旦执行,则该指令可能再次执行。如果某数据结构被访问,则该数据结构可能再次被访问。
    • 空间局部性是指一旦程序访问了某个存储单元,程序执行后,其附近的存储单元也将被访问

    虚拟存储器

    基于程序局部性原理,一个作业在运行之前,不必全部装入内存, 而仅将当前要运行的页面或段先装入内存,就可以启动运行。这样使一个较大的程序在较小的内存空间中运行,同时还可以装入更多的程序并发执行。通常把这样的存储器称为虚拟存储器。

    所谓虚拟存储器是指把作业的一部分调入内存便可运行作业的存储管理系统。它具有请求调入功能和替换功能,能从逻辑上对内存容量进行扩充。

    虚拟存储器最基本的特征是离散性,在此基础上又形成了多次性对换性的特征,所表现出来的最重要的特征是虚拟性。
    虚拟存储器的容量取决于主存与辅存的容量之和 。一个虚拟存储器的最大容量是由计算机的地址结构确定的。实现虚拟存储器应有一定的硬件基础 ,即应有相当容量的辅存,一定容量的主存和地址转换机构

    页式虚拟存储管理

    页式虚拟存储管理是在页式存储管理基础上实现的。先把作业信息放在磁盘上作为副本作业执行时,把作业信息的部分页面装入主存,

    • 若作业执行时所访问的页面已在主存中,则按页式存储管理方式进行地址转换,得到访问的主存绝对地址:
    • 若访问的页面不在内存中,则产生一个缺页中断,由操作系统把当前所需要的页面装入主存储器中。
      为实现页式虚拟存储 ,页表中应有指示位表明对应页是否在主存 ,另外还应该指明该页副本在磁盘内的位置。

    页面分配

    在进行页式管理时,如何合理地分配页面是一个关键,这里有两个基本问题必须解决——如何定义好最小的物理块数以及执行怎样的页面分配与替换策略。

    • 最小物理块数:能保证进程正常运行所需要的最小物理块数;
    • 页面分配与替换策略:分配策略分为固定分配和可变分配;替换策略分为全局替换和部分替换,于是可以组合出3种策略,即固定分配局部替换,可变分配全局替换,可变分配局部替换。

    页面替换算法

    • 先进先出(FIFO)算法。该算法是一种最简单的算法,当需要选择一个页面淘汰时,总是选择最先进入内存空间的那一个页面。该算法简单易行,只要在系统中建立一个 FIFO 队列,以反映页面的活动情况即可。被选择的页面总是处于队列的最前头,而最近调入的页面永远存放在队列的尾部。
    • 最近最久未使用 (LRU) 算法。该算法的基本思想是用最近的过去估计最近的将来,假定在内存中的某个页面,在最近的一段时间内未被使用的时间最长,那么在最近的将来也可能不再被使用。
    • 最近最少使用 (LFU ) 算法。该算法是把在最近的一段时间内使用次数最少的页面置换掉。

    抖动与工作集

    在页式虚拟存储管理中 ,可能会出现这样的情况,即对于刚被替换出去的页,立即又要被访问,需要将它调入,因无空闲内存又要替换另一页,而后者是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低, 严重时导致系统瘫痪,这种现象称为抖动现象。

    防止抖动现象有多种办法。例如,采取局部替换策略,引入工作集算法,挂起若干进程等。

    所谓工作集是指在某段时间间隔里,进程实际要访问的页面的集合,引入虚拟存储器后,程序只需有少量的内存就可运行,但为了使程序有效运行,较少产生缺页,必须使程序的工作集全部在内存中。

    段式虚拟存储管理

    段式虚拟存储管理是在段式存储管理基础上实现的。当要访问的段不在主存时,会产生一个缺段中断。

    操作系统处理缺段中断的方法是:

    • 查主存分配表,找出一个足够大的连续区以容纳该分段,如果找不到,则检查空闲区总和,若空闲区总和能满足该段要求,那么进行适当移动将分散的空闲区集中。
    • 若空闲区总和不能满足要求,可把主存中一段或几段调出 ,然后把当前要访问的段装入主存。
    • 段被移动、调出和装入后,都要对段表中的相应表目做修改。
    • 新的段装入后,让作业重新执行被中断的指令。 段表中增设了该段是否已在主存的标志,以及各段在磁盘上的位置。

    一个人最大的恶意,就是把自己的理解强加于别人,把所有的结果理所当然用自己的过程来解释,并一直认为自己是正确的。

    如果你喜欢这篇文章,
    欢迎点赞,关注加收藏!

    展开全文
  • 操作系统:段页存储

    2019-12-08 20:34:48
    分页与分段的优缺点 段页存储 作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小相等的页。对于主存空间也分成大小相等的页,主存的分配以页为单位,这种是 段页存储管理...
  • Intel 80386保护模式

    千次阅读 2010-10-04 23:41:00
    保护模式   80386提供分段和分页两种存储管理模式   ●分段管理特点:对存储空间逻辑划分,优点:对模块化(结构化)程序设计方式提供了很好支持;缺点:①段长可变不固定, 管理更复杂、...
  • 包含了精心挑选数据库诊断案例与性能优化实践经验,内容涉及oracle典型错误分析和诊断,各种sql优化方法(包括调整索引,处理表碎片,优化分页查询,改善执行计划等),以及优化系统性能经验。  作者不仅强调...
  • (4)页式存储管理的优缺点 优点: •虛存量大,适合多道程序运行,用户不必担心内存不够的调度操作; •内存利用率高,不常用的页面尽量不留在内存; •不要求作业连续存放,有效地解决了...
  • asp.net知识库

    2015-06-18 08:45:45
    可按任意字段排序的分页存储过程(不用临时表方法,不看全文会后悔) 常用sql存储过程集锦 存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向表结构 将数据库表中数据生成Insert脚本存储过程!!! ...
  • 总结目前博客网站一些优缺点 思考整个项目有哪些可以优化地方,以及有哪些可增加功能 页面展示 首页展示 文章编辑 后台管理 用户个人中心 项目需求 项目背景 对于初学Springboot朋友来说,...
  • java面试宝典

    2013-02-28 16:04:01
    203、编程用JAVA解析XML的方式. 49 204、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1区别? 51 205、EJB与JAVA BEAN区别? 51 206、EJB基本架构 51 207、MVC各个部分都有那些技术来实现?如何实现? 52...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 11、iBatis与Hibernate有什么不同? 12、写Hibernate的一对多和多对一双向关联的orm配置? 9、hibernate的inverse属性的作用? 13、在DAO...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? ...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    67、说出ArrayList,Vector, LinkedList的存储性能和特性 17 68、java中有几种类型流?JDK为每种类型流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写基本类 17 70、多线程有几种实现...
  • 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? ...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    13. 解释归档和非归档模式之间的不同和它们各自的优缺点 31 14. 如何建立一个备份控制文件? 32 15. 给出数据库正常启动所经历的几种状态 ? 32 16. 哪个column可以用来区别V$视图和GV$视图? 32 17. 如何生成explain ...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    4.cmp与bmp的优缺点 5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一个connect pool,然后再调用它, 8.j2ee平台与dotnet平台的区别 9.ejb的life cycle 10.session bean 和 entity bean的区别 11.ejb...
  • 数据库(Database)是按照数据结构来组织、存储管理数据仓库,它产生于距今五十年前。简单来说是本身可视为电子化文件柜——存储电子文件处所,用户可以对文件中数据运行新增、截取、更新、删除等操作。 ...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题29 请描述一下你自己的优缺点 34 面试题30 你对本公司的了解有多少 34 面试题31 对这份工作的期望与目标何在 34 面试题32 你为什么要离职 34 面试题33 选择这份工作的原因是什么 35 面试题34 你认为相关产业的...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    72 <br>0102 将字符串首字母转换大写 72 <br>0103 如何进行字节数组和字符串相互转换 72 <br>0104 如何把一个按空格分割字符串存储在一个ArrayList数组中 73 <br>4.2 获取字符串信息 73 ...
  • Java 面试宝典

    2013-02-01 10:02:08
    38、try {}里有一个 return 语句,那么紧跟在这个 try 后 finally {}里 code 会不 会被执行,什么时候被执行,在 return 前还是后? .................................................... 25 39、下面程序...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

分页存储管理方式的优缺点