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

    逻辑地址和虚拟地址

    逻辑地址

    •逻辑地址:又称相对地址,即用户编程所使用的地址空间

    •逻辑地址从0开始编号,有两种形式:

      •一维逻辑地址(地址)

      •二维逻辑地址(段号:段内地址)

    段式程序设计

    •把一个程序设计成多个段

      •代码段、数据段、堆栈段、等等

    •用户可以自己应用段覆盖技术扩充内存空间使用量

      •这一技术是程序设计技术,不是OS存储管理的功能

    物理地址

    •物理地址:又称绝对地址,即程序执行所使用的地址空间

    •处理器执行指令时按照物理地址进行

    存储管理的主要模式

    主存储器的复用

    •多道程序设计需要复用主存

    •按照分区复用:

      •主存划分为多个固定/可变尺寸的分区

      •一个程序/程序段占用一个分区

    •按照页架复用:

      •主存划分成多个固定大小的页架

      •一个程序/程序段占用多个页架

    存储管理的基本模式

    •单连续存储管理:一维逻辑地址空间的程序占用一个主存固定分区或可变分区

    •段式存储管理:段式二维逻辑地址空间的程序占用多个主存可变分区

    •页式存储管理:一维逻辑地址空间的程序占用多个主存页架区

    •段页式存储管理:段式二维逻辑地址空间的程序占用多个主存页架区

    存储管理模式示意图

     

    存储管理的功能

    地址转换

    •地址转换:又称重定位,即把逻辑地址转换成绝对地址

      •静态重定位:在程序装入内存时进行地址转换

        •由装入程序执行,早期小型OS使用

      •动态重地位:在CPU执行程序时进行地址转换

        •从效率出发,依赖硬件地址转换机构

    主存储器空间的分配与去配

    •分配:进程装入主存时,存储管理软件进行具体的主存分配操作,并设置一个表格记录主存空间的分配情况

    •去配:当某个进程撤离或主动归还主存资源时,存储管理软件要收回它所占用的全部或者部分存储空间,调整主存分配表信息

    主存储器空间的共享

    •多个进程共享主存储器资源:多道程序设计技术使若干个程序同时进入主存储器,各自占用一定数量的存储空间,共同使用一个主存储器

    •多个进程共享主存储器的某些区域:若干个协作进 有共同的主存程序块或者主存数据块

    存储保护

    •为避免主存中的多个进程相互干扰,必须对主存中的程序和数据进行保护

      •私有主存区中的信息:可读可写

      •公共区中的共享信息:根据授权

      •非本进程信息:不可读写

    •这一功能需要软硬件协同完成

      •CPU检查是否允许访问,不允许则产生地址保护异常,由OS进行相应处理

    主存储器空间的扩充

    • 存储扩充:把磁盘作为主存扩充,只把部分进程或进程的部分内容装入内存

      1.对换技术:把部分不运行的进程调出

      2.虚拟技术:只调入进程的部分内容

    •这一工作需要软硬件协作完成

      1.对换进程决定对换,硬件机构调入

      2.CPU处理到不在主存的地址,发出虚拟地址异常,OS将其调入,重执指令

    虚拟存储器

    虚拟存储器思想的提出

    •主存容量限制带来诸多不便

      •用户编写程序必须考虑主存容量限制

      •多道程序设计的道数受到限制

    •用户编程行为分析

      •全面考虑各种情况,执行时有互斥性

      •顺序性和循环性等空间局部性行为

      •某一阶段执行的时间局部性行为

    •因此可以考虑部分调入进程内容

    虚拟存储器的基本思想

    •存储管理把进程全部信息放在辅存中,执行时先将其中一部分装入主存,以后根据执行行为随用随调 入

    •如主存中没有足够的空闲空间,存储管理需要根据执行行为把主存中暂时不用的信息调出到辅存上去

    虚拟存储器的实现思路

    •需要建立与自动管理两个地址空间

      •(辅存)虚拟地址空间:容纳进程装入

      •(主存)实际地址空间:承载进程执行

    •对于用户,计算机系统具有一个容量大得多的主存空间,即虚拟存储器

    •虚拟存储器是一种地址空间扩展技术, 通常意义上对用户编程是透明的,除非用户需要进行高性能的程序设计

    虚拟存储器示意

    存储管理的硬件支撑

    存储器的组织层次

    存储管理涉及的存储对象

    •存储管理是OS管理主存储器的软件部分

    •为获得更好的处理性能,部分主存程序与数据(特别是关键性能数据)被调入 Cache,存储管理需要对其进行管理,甚 包括对联想存储器的管理

    •为获得更大的虚拟地址空间,存储管理需要对存放在硬盘、固态硬盘、甚至网络硬盘上的虚拟存储器文件进行管理

    高速缓存存储器(Cache)

    •Cache是介于CPU和主存储器间的高速小容量存储器,由静态存储芯片SRAM 组成,容量较小但比主存DRAM技术更加昂贵而快速, 接近于CPU的速度

    •CPU往往需要重复读取同样的数据块, Cache的引入与缓存容量的增大,可以大幅提升CPU内部读取数据的命中率, 从而提高系统性能

    高速缓存存储器的构成

    •高速缓冲存储器通常由高速存储器、联想存储器、地址转换部件、替换逻辑等组成

      •联想存储器:根据内容进行寻址的存储器

      •地址转换部件:通过联想存储器建立目录表以实现快速地址转换。命中时直接访问 Cache;未命中时从内存读取放入Cache

      •替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件

    地址转换/存储保护的硬件支撑

    单连续分区存储管理

    单连续分区存储管理

    •每个进程占用一个物理上完全连续的存储空间(区域)
    •单用户连续存储管理

    •固定分区存储管理

    •可变分区存储管理

    单用户连续分区存储管理

    •主存区域划分为系统区与用户区

    •设置一个栅栏寄存器界分两个区域,硬件用它在执行时进行存储保护

    •一般采用静态重定位进行地址转换

    •硬件实现代价低

    •适用于单用户单任务操作系统,如DOS

    单用户连续分区存储管理示意

    •静态重定位:在装入一个作业时,把该作业中程序的指令地址和数据地址全部转换成绝对地址

    固定分区存储管理的基本思想

    固定分区方式的主存分配

    •主存分配表

    •主存分配与去配

    固定分区方式的地址转换

    •硬件实现机制与动态重定位

    缺点

    •固定分区存储管理不够灵活,既不适应大尺寸程序, 又存在内存内零头,有浪费

    •能否按照进程实际内存需求动态划分分区,并允许分区个数可变

    •这就是可变分区存储管理

    可变分区存储管理

    可变分区存储管理

    •按进程的内存需求来动态划分分区

    •创建一个进程时,根据进程所需主存量查看主存中是否有足够的空闲空间

      •若有,则按需要量分割一个分区

      •若无,则令该进程等待主存资源

    •由于分区大小按照进程实际需要量来确定,因此分区个数是随机变化的

    可变分区方式的内存分配示例

    可变分区方式的主存分配表

     •已分配区表与未分配区表,采用链表

     

    可变分区方式的内存分配

    •最先适应分配算法

    •邻近适应分配算法

    •最优适应分配算法

    •最坏适应分配算法

    可变分区方式的内存零头

    •固定分区方式会产生内存内零头

    •可变分区方式也会随着进程的内存分配产生一些小的不可用的内存分区,称为内存外零头

    •最优适配算法最容易产生外零头

    •任何适配算法都不能避免产生外零头

    移动技术(程序浮动技术)

    •移动分区以解决内存外零头

    •需要动态重定位支撑

    移动技术的工作流程

    页式存储管理

    页式存储管理的基本原理

    •分页存储器将主存划分成多个大小相等的页架

    •受页架尺寸限制,程序的逻辑地址也自然分成页

    •不同的页可以放在不同页架中,不需要连续

    •页表用于维系进程的主存完整性

    页式存储管理中的地址

    页式存储管理的地址转换思路

    页式存储管理的内存分配/去配

    •可用一张位示图来记录主存分配情况

    •建立进程页表维护主存逻辑完整性

    页的共享

    •页式存储管理能够实现多个进程共享程序和数据

    数据共享:不同进程可以使用不同页号共享数据页

    程序共享:不同进程必须使用相同页号共享代码页

      •共享代码页中的(JMP <页内地址>)指令,使用不同页号是做不到

    页式存储管理的地址转换代价

    •页表放在主存:  每次地址转换必须访问两次主存

      1.按页号读出页表中的相应页架号

      2.按计算出来的绝对地址进行读写

    •存在问题:降低了存取速度

    •解决办法:利用Cache存放部分页表

    页式存储管理的快表

    •为提高地址转换速度,设置一个专用的高速存储器,用来存放页表的一部分

    •快表:存放在高速存储器中的部分页表

    •快表表项:页号,页架号

    •这种高速存储器是联想存储器,即按照内容寻址,而非按照地址访问

    引入快表后的地址转换代价

    •采用快表后,可以加快地址转换速度

    •假定主存访问时间为200毫微秒,快表访问时间为40毫微秒,查快表的命中率 是90%,平均地址转换代价为 (200+40) *90%+(200+200)*10%=256毫微秒,比两次访问主存的时间(400毫微秒) 下降了36%

    基于快表的地址转换流程

    •按逻辑地址中的页号查快表

    •若该页已在快表中,则由页架号和单元号形成绝对地址

    •若该页不在快表中,则再查主存页表形成绝对地址,同时将该页登记到快表中

    •当快表填满后,又要登记新页时,则需在快表中按一定策略淘汰一个旧登记项

    多道程序环境下的进程表

    •进程表中登记了每个进程的页表

    •进程占有处理器运行时,其页表起始地址和长度送入页表控制寄存器

    多道程序环境下的地址转换

    参考资料

    https://www.icourse163.org/course/NJU-1001571004

  • 相关阅读:
    打开App显示文件已损坏,打不开,您应该将它移到废纸篓,怎么办?
    Mac下制作openwrt U盘启动盘
    iOS 修改打包后的.ipa应用名字
    使用Aria2+Aria2Ng+OneIndex+OneDrive建立不限流量/离线BT下载/在线观看网盘/在线存储分享平台
    使用微软易升安装纯净版win10
    Mac 配置adb环境变量(为了开Appium)亲测
    CocoaPods 安装及使用(亲测有效)
    1.6 MySQL 基础教程
    Rhythmk 一步一步学 JAVA (19) JAVA IO 文件常用操作
    Rhythmk 一步一步学 JAVA (18) Axis2 创建 WebService
  • 原文地址:https://www.cnblogs.com/xumaomao/p/12864406.html
Copyright © 2011-2022 走看看