• 《现代操作系统》—— 第7章 存储模型(一)


      本章介绍硬件方面的存储管理机制,主要内容为:页式存储管理系统中的物理页面管理方案——页框、页表、页目录

    1. 地址重定位(也叫作:地址转换、地址变换、地址翻译、地址重映射等)
      • 背景知识:
        • 程序装载到内存才能够运行
        • 多道程序设计模型——允许多个程序同时进入内存
        • 每个进程有自己的地址空间——一个进程执行时不能访问另一个进程的地址空间
      • 本章主题——存储模型要解决的问题:如何将进程地址空间的内容装载入内存,并合理地分配内存使每个进程能够正确地执行
      • 为什么需要地址重定位:
        • 进程中的地址不是最终的物理地址,而是叫做逻辑地址或相对地址
        • 在进程运行前无法确定物理地址——因为不能确定进程到底被加载到内存的什么地方
      • 逻辑地址与物理地址:
        • 逻辑地址:也叫相对地址、虚拟地址。用户程序经过编译、汇编后形成的目标代码通常采用相对地址,其首地址为0,其余地址都相对于首地址进行编址
        • 物理地址:也叫绝对地址、实际地址,是内存中存储单元的地址
      • 地址重定位的概念:为了保证CPU在执行时可以正确的访问内存单元,需要将用户程序中的逻辑地址转换成运行时可由机器直接寻址的物理地址,这一过程称为地址重定位。重定位分为静态重定位和动态重定位。
      • 重定位的实现示意:


    2. 物理内存管理
      • 空闲内存管理的数据结构:(1)位图:位为0表空闲,位为1表占用;(2)空闲区表、已分配区表:表中每一项记录空闲区(或已分配区)的起始地址、长度、标志;(3)空闲块链表
      • 基于空闲区表的内存分配算法:
        • 首次适配:在空闲区表找到第一个满足进程要求的空闲区
        • 下次适配:从上次找到的空闲区处接着查找——对首次适配算法的改进
        • 最佳适配:查找整个空闲区表,找到能满足进程要求的最小空闲区
        • 最差适配:查找整个空闲区表,找到能满足进程要求的最大空闲区
        • 一般查找到空闲区后,拿出一部分分配给进程使用,另一部分形成新的空闲区
        • 内存分配示例:


      • 内存的回收:当某一块内存区被进程归还后,前后空闲空间合并,形成新的一块空闲区,并修改空闲区表。
      • 伙伴系统:
        • 概念:Linux底层内存管理采用的一种特殊的“分离适配”算法,是一种经典的内存分配方案
        • 主要思想:将内存按2的幂次划分,组成若干空闲块链表,查找该链表找到满足进程要求的最佳匹配块
        • 算法:
          • 首先将整个可用内存空间看做一块:2^u
          • 假设进程申请的空间大小为s,则如果满足2^(u-1) < s < 2^u,则分配整个块;否则将块划分为两个大小相等的伙伴,大小为2^(u-1)
          • 一直划分下去直到产生大于等于s的最小块
        • 实例:


    3. 基本内存管理方案(一)—— 整个进程进入内存中一片连续区域——单一连续区、固定分区、可变分区
      • 单一连续区:
        • 一段时间内只有一个进程在内存中
        • 简单,但内存利用率低
      • 固定分区:
        • 每个内存分区的大小可以相同也可以不同
        • 分区大小固定不变
        • 每个分区只能装载一个进程
      • 可变分区:
        • 根据进程需要,把内存空闲空间分割出一个分区,分配给该进程
        • 剩余部分称为新的空闲区
        • 容易产生外碎片,导致内存利用率降低
      • 内存碎片:很小的,不易利用的空闲区
        • 解决方案:紧缩技术——在内存中移动程序,将所有小的空闲区合并为较大的空闲区,又称为压缩技术、搬家技术。
    4. 基本内存管理方案(二)——一个进程进入内存中若干个不连续区域——页式、段式、段页式
      • 页是存储管理方案:
        • 设计思想:
          • 用户进程地址空间被划分为大小相等的部分,称为页或页面(Page),从0开始编号
          • 内存空间按同样大小划分成大小相等的区域,称为页框(Page Frame),从0开始编号。页框也称作:物理页面、页帧、内存块
          • 内存分配规则:以页为单位进行分配,并按进程需要的页数来分配;逻辑上相邻的页,物理上不一定相邻
          • 典型页面尺寸:4K或4M
        • 逻辑地址:在地址重映射时被划分为两个部分:页号和页内偏移,通过页号可以在页表中查找到页框号,再将页框号和页内偏移组合就得到了物理地址


        • 逻辑地址到物理地址的映射示意:


        • 页表:
          • 页表项:记录逻辑页号与页框号的对应关系
          • 每个进程一个页表,存放在内存。页表的起始地址存放在相应的寄存器中供CPU查询用。(一个进程的页表和起始地址应该是存放在PCB中的,进程运行时分别加载到内存和寄存器)
        • 页式存储管理方案中,物理内存的空闲内存管理:位图
        • 地址转换过程(硬件支持):CPU取到逻辑地址,自动将其划分为页号和页内偏移,用页号查找页表得到页框号,再与页内偏移拼接为物理地址
      • 段式存储管理方案:
        • 设计思想:
          • 用户进程地址空间按程序自身的逻辑关系划分为若干个程序段,每个程序段都有一个段名
          • 内存空间被划分成若干长度不相等的区域(固定分区中的不等划分方式),称为物理段,每个物理段由起始地址和长度确定
        • 内存分配规则:以段为单位进行划分,每段在内存中占据连续空间,各段之间不一定相邻
        • 逻辑地址:与页式存储管理方案类似,由两部分组成:段号+段内地址。但与页式存储方案不同的是这两部分不是自动划分的,必须显式给出(准确地说是不能自动划分,因为在段的长度不是固定的,因此段内偏移的范围也就不是固定的,从而导致无法确定段内偏移需要占用多少位的宽度。相比之下,页式存储方案中一页一般为4K大小,页内偏移为0~4K,因此页内偏移占用12位)
        • 段表
          • 每项记录了短号、段首地址和段长度之间的关系
          • 每个进程一个段表,存放在内存
        • 段式存储管理方案中的物理内存管理:可以用空闲区表来管理
        • 地址转换过程(硬件支持):CPU取到逻辑地址,用段号查找段表得到该段在内存中的起始地址,再与段内偏移地址计算出物理地址。注意前面说过段号和段内偏移不是自动划分而是显式给出的,因此这里说的硬件支持应该指的是由段号去查段表的过程。
      • 段页式存储管理方案:
        • 产生背景:综合页式、段式方案的优点,克服二者的缺点
        • 设计思想:
          • 用户进程划分:先按段划分,每一段再按页划分
          • 逻辑地址:


          • 内存划分:用页式存储方案的划分方式——相同大小分页
          • 内存分配:以页为单位进行分配
    5. 内存“扩充”技术——解决在较小的内存空间中运行较大的进程
      • 内存紧缩技术 
      • 覆盖技术:程序执行过程中,程序的不同部分在内存中相互覆盖
      • 交换技术:在内存空间紧张时,将内存中某些进程暂时移到外存(换出),把外存中某些进程换进内存(换入)
        • 交换的是进程中哪些内容?——运行时创建或修改的进程内容:栈和堆
        • 在什么位置保存被换出的进程?——交换区:一般系统会指定一块特殊的磁盘区域作为交换空间,包含连续的磁道,操作系统可以使用底层的磁盘读写操作对齐高效访问,对交换区的访问不经过文件系统,因此更加高效。
        • 交换时机?——(1)只要不用就换出;(2)内存空间快要不够时换出
        • 如何选择被换出进程?
        • 如何处理进程空间增长?在进程之间预留一块空间供内存增长
      • 虚拟存储技术——见下半部分
  • 相关阅读:
    spring注入原型bean
    按时间间隔查询
    Qconf安装文档
    HttpEnum
    MyIfmHttpClient
    enum StatCode
    Linux修改war包中文件
    maven settings.xml windows
    maven settings.xml linux
    docker报错
  • 原文地址:https://www.cnblogs.com/uestcliming666/p/13246165.html
Copyright © 2020-2023  润新知