存储器管理了
存储器管理的主要模式
逻辑地址:又称相对地址,即用户编程所使用的地址空间,逻辑地址从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
- 替换部件:在缓存已满时按一定策略进行数据块替换,并修改地址转换部件
高速缓存存储器的分级
- L1Cache:分为数据缓存和指令缓存;内置;其成本最高,对CPU的性能影响最大;通常在32KB-256KB之间
- L2Cache:分内置和外置两种,后者性能低一些;通常在512KB-8MB之间
- L3Cache:多为外置,在游戏和服务器领域有效;但对很多应用来说,总线改善比设置L3更加有利于提升系统性能
地址转换/存储保护的硬件支撑
存储管理与硬件支撑
- 鉴于程序执行与数据访问的局部性原理,存储管理软件使用cache可以大幅提高程序执行效率
- 动态重定位,存储保护等,若无硬件的支撑在效率上是为无意义的,即无实现价值
- 无虚拟地址中断,虚拟存储器无法实现
- 无页面替换的硬件支撑机制,虚拟存储其在效率上无意义
单连续分区
- 每个进程占用一个物理上完全连续的存储空间(区域)
- 单用户连续存储管理
- 固定分区存储管理
- 可变分区存储管理
单用户连续分区存储管理
主存区域划分为系统区与用户区,设置一个栅栏寄存器界分两个区域,硬件用它在执行时进行存储保护,一般采用静态重定位进行地址转换,硬件实现代价低,适用于单用户单任务操作系统,如DOS
静态重定位:在装入一个作业时,把该作业中程序的指令地址和数据地址全部转换成绝对地址
固定分区存储管理的基本思想
- 支持多个分区
- 分区数量固定
- 分区大小固定
- 可用静态重定位
- 硬件实现代价低
- 早期OS采用
可变分区存储管理概述
固定分区存储管理不够灵活,既不适应大尺寸程序,又存在内存内零头,有浪费,能否按照进程实际内存需求动态划分分区,并允许分区个数可变,这就是可变分区存储管理
可变分区存储管理
按进程的内存需求来动态划分分区,创建一个进程时,根据进程所需主存量查看主存中是否有足够的空闲空间,若有,则按需要量分割一个分区,若无,则令该进程等待主存资源,由于分区大小按照进程实际需要量来确定,因此分区个数是随机变化的
可变分区方式的内存分配
- 最先适应分配算法
- 邻近适应分配算法
- 最优适应分配算法
- 最坏适应分配算法
可变分区方式的内存零头
固定分区方式会产生内存内零头,可变分区方式也会随着进程的内存分配产生一些小的不可用的内存分区,称为内存外零头,最优适配算法最容易产生外零头,任何适配算法都不能避免产生外零头
移动技术(程序浮动技术)
移动分区以解决内存外零头,需要动态重定位支撑