存储器的层次
目前,计算机系统均采用分层结构的存储子系统,以便在容量大小、速度快慢、价格高低诸因素中取得平衡点,获得较好的性能价格比。计算机系统的存储器可以分为
- 寄存器
- 高速缓存
- 主存储器
- 磁盘缓存
- 固定磁盘
- 可移动存储介质
越往上,存储介质的访问速度越快,价格也越高。
- 其中,寄存器、高速缓存、主存储器和磁盘缓存均属于操作系统存储管理的管辖范畴,掉电后它们存储的信息不再存在。
固定磁盘和可移动存储介质属于设备管理的管辖范畴,它们存储的信息将被长期保存。
而磁盘缓存本身并不是一种实际存在的存储介质,它依托于固定磁盘,提供对主存储器存储空间的扩充。
可执行的程序必须被保存在计算机的主存储器中,与外围设备交换的信息一般也依托于主存储器地址空间。由于处理器在执行指令时主存访问时间远大于其处理时间,寄存器和高速缓存被引入来加快指令的执行。
寄存器是访问速度最快但最昂贵的存储器,它的容量小,一般以字(word)为单位。一个计算机系统可能包括几十个甚至上百个寄存器,用于加速存储访问速度,如:寄存器存放操作数,或用地址寄存器加快地址转换速度。
高速缓存的容量稍大,其访问速度快于主存储器,利用它存放主存中一些经常访问的信息可以大幅
。例如,主存访问速度为 1us,高速缓存为0.1us,假使访问信息在高速缓存中的几率为 50%,那么存储器访问速度可以提高到 0.55us。
地址转换和存储保护
😄 逻辑地址(相对地址)
用户编写应用程序时,是从0地址开始编排用户地址空间的,我们把用户编程时使用的地址称为逻辑地址(相对地址)。32位系统进程逻辑地址空间可达4GB.
😊 物理地址(绝对地址)
而当程序运行时,它将被装入主存储器地址空间的某些部分,此时程序和数据的实际地址一般不可能同原来的逻辑地址一致,我们把程序在内存中的实际地址称为物理地址(绝对地址)
😗 地址转换(重定位)
地址转换有两种方式:
- 静态重定位:在作业装入时由作业装入程序实现地址转换
- 动态重定位:
在程序执行时实现地址转换。动态重定位必须借助于硬件的地址转换机构实现
😜 存储保护
在计算机系统中可能同时存在操作系统程序和多道用户程序,操作系统程序和各个用户程序在主存储器中各有自己的存储区域,各道程序只能访问自己的工作区而不能互相干扰,因此操作系统必须对主存中的程序和数据进行保护,称为存储保护。同样存储保护的工作也必须借助硬件来完成。计算机中使用的存储保护硬件主要有:界地址和存储键方式等
😝 存储空间管理
存储空间管理存在多种方式,简单可分为连续存储空间和非连续存储空间,++连续存储空间管理包括:单用户连续存储管理、固定分区存储管理、可变分区存储管理++等方式,非连续存储空间包括分页式存储管理、分段式存储管理和虚拟存储管理等方式
😳 单用户连续存储管理
采用单连续存储管理时主存分配十分简单,主存储器中的用户区域全部归一个用户作业所占用。在这种情况管理方式下,在任一时刻主存储器最多只有一道程序,各个作业的程序只能按次序一个个地装入主存储器。
单用户连续存储管理的地址转换可采用两种方式:静态定位和动态定位
🙈 静态定位
静态地址定位是指程序执行之前(由装配程序)完成逻辑地址到物理地址的转换工作=。
在具体操作中,会设置一个栅栏寄存器(Fence Register )用来指出主存中的系统区和用户区的地址界限,当程序被装入主存时,装入程序必须对它的指令和数据进行重定位。
存储保护也由装入程序负责检查其绝对地址是否超过栅栏地址,若是,则可以装入 ,否则,产生地址错误,不能装入,于是一个被装入的程序执行时,总是在它自己的区域内进行,而不会破坏系统区的信息
🙉 动态定位
动态地址定位是指程序执行过程中,在CPU访问主存前,把要访问的程序和数据的逻辑地址转换成物理地址的转换工作
- 在具体操作中,会设置一个定位寄存器,它既用来指出主存中的系统区和用户区的地址界限,又作为用户区的基地址,通过装入程序把程序装入到从界限地址开始的区域,但不同时进行地址转换
程序执行过程中动态地将逻辑地址与定位寄存器中的值相加就可得到绝对地址;存储保护的实现容易,程序执行中由硬件的地址转换机构根据逻辑地址和定位寄存器的值产生绝对地址,且检查该绝对地址是否存在所分配的存储区域内,若超出所分配的区域,则产生地址错误,不允许访问该单元中的信息。
😠 固定分区存储管理
分区存储管理的基本思想是给进入主存的用户进程划分一块连续存储区域,把进程装入该连续存储区域,使各进程能并发执行。
固定分区(fixed partition)存储管理是预先把可分配的主存储器空间分割成若干个连续区域,每个区域的大小可以相同,也可以不同。
主存分配表指出各分区的起始地址和长度,表中的占用标志位用来指示该分区是否被占用了,当占用的标志位为“0”时,表示该分区尚未被占用。进行主存分配时总是选择那些标志为“0”的分区,当某一分区分配给一个作业后,则在占用标志栏填上占用该分区的作业名
固定分区存储管理的地址转换可采用两种方式:静态定位和动态定位
😻 静态定位
装入程序在进行地址转换时检查其绝对地址是否在指定的分区中,若是,则可把程序装入,否则不能装入,且应归还所分得的存储区域。固定分区方式的主存去配很简单,只需将主存分配表中相应分区的占用标志位置成“0”即可。
😽 动态定位
系统专门设置一对地址寄存器——上限/下限寄存器;当一个进程占有 CPU 执行时,操作系统就从主存分配表中取出相应的地址占有上限/下限寄存器;硬件的地址转换机构根据下限寄存器中保存的基地址B与逻辑地址得到绝对地址;硬件的地址转换机构同时把绝对地址和上限/下限寄存器中保存的相应地址进行比较,而实现存储保护。
这里写图片描述
💩 可变分区存储管理
可变分区(variable partition)存储管理是按作业的大小来划分分区。系统在作业装入主存执行之前并不建立分区,当要装入一个作业时,根据作业需要的主存量查看主存中是否有足够的空间,若有,则按需要量分割一个分区分配给该作业;若无,则令该作业等待主存空间。由于分区的大小是按作业的实际需要量来定的,且分区的个数也是随机的,所以可以克服固定分区方式中的主存空间的浪费,有利于多道程序设计,实现了多个作业对内存的共享,进一步提高了内存资源利用率。
随着作业的装入、撤离,主存空间被分成许多个分区,有的分区被作业占用,而有的分区是空闲的 。当一个新的作业要求装入时,必须找一个足够大的空闲区,把作业装入该区,如果找到的空闲区大于作业需要量,则作业装入后又把原来的空闲区分成两部分,一部分给作业占用了;另一部分又分成为一个较小的空闲区。当一个作业运行结束撤离时,归还的区域如果与其它空闲区相邻,则可合成一个较大的空闲区,以利大作业的装入。
从图中可以看出,主存中分区的数目和大小随作业的执行而不断改变。为了方便主存的分配和去配 ,
主存分配表可由两张表格组成,一张称”已分配区表”,另一张是”未分配区表”
💩 可变分区管理的分配算法
对于不同进程,我们可以通过不同策略为其分配内存,简单可分下面几种
👲 最先适用分配算法
每次分配时,总是顺序查找未分配表或链表,找到第一个能满足长度要求的空闲区为止。分割这个找到的未分配区,一部分分配给作业,另一部分仍为空闲区。这种分配算法可能将大的空间分割成小区,造成较多的主存“碎片”
😗 最优适应分配算法
它是从空闲区中挑选一个能满足作业要求的最小分区,这样可保证不去分割一个更大的区域,使装入大作业时比较容易得到满足。采用这种分配算法时可把空闲区按长度以递增顺利排列,查找时总是从最小的一个区开始,直到找到一个满足要求的分区为止。
😆 最坏适应分配算法
最坏适应分配算法是挑选一个最大的空闲区分割给作业使用.在处理某种作业序列时,最坏适应分配算法可能性能最佳,因为它选择最大空闲区,使得分配后剩余下来的空闲区不会太小,仍能用于再分配。
😇 动态定位
对可变分区方式采用动态定位装入作业,作业程序和数据的地址转换是硬件完成的。硬件设置两个专门控制寄存器:基址寄存器和限长寄存器。基址寄存器存放分配给作业使用的分区的最小绝对地址值,限长寄存器存放作业占用的连续存储空间长度。
当作业占有 CPU 运行后,操作系统可把该区的始址和长度送入基址寄存器和限长寄存器,启动作业执行时由硬件根据基址寄存器进行地址转换得到绝对地址,当逻辑地址小于限长值时,则逻辑地址加基址寄存器值就可获得绝对值地址;当逻辑地址大于限长值时,表示作业欲访问的地址超出了所分得的区域,这时,不允许访问,达到了保护的目的地址关系
😏 移动技术
当在未分配表中找不到一个足够大的空闲区来装入作业时,可采用移动技术把在主存中的作业改变存放区域,同时修改它们的基址/限长值,从而使分散的空闲区汇集成一片而有利于作业的装入。
移动虽可汇集主存的空闲区,但也增加了系统的开销,而且不是任何时候都能对一道程序进行移动的。由于外围设备与主存储器交换信息时,通道总是按已经确定的主存绝对地址完成信息传输 ,所以当一道程序正在与外围设备交换数据时往往不能移动,故应尽量设法减少移动。比如,当要装入一道作业时总是先挑选不经移动就可装入的作业;在不得不移动时力求移动的道数最少。
分页存储管理
页框的划分
- 将内存空间被划分为等长的区域,每一个区域称为一个页框
- 大小用硬件决定,但是基本为2i,地址范围由0~2i,起始地址为0,每一个页框从0开始编号,这个就是页框号
页的划分
- 逻辑空间被划分为若干等长区域,每一一个区域被称为页
- 不在需要连续存储空间 其他类似
例题
- 十进制地址8340页框大小2^10B,求该地址的页框号和业内地址?
^210=1023B 8340/1024=[^8]:页框号 …[^148]: 页内地址
**如果是二进制那么 业内地址占10位**
页与页框的对应关系
😄 页框中的碎片问题
😫 页框大小
😨 页表
😑总页表
硬件结构
🐱 1.地址转换机制(动态重定位)
=主要工作:将进程的页号转换成内存的页框号=
- 详细过程
先由CPU产生逻辑地址,划分系统页号和页内地址,有页号为进程页表的索引找到页框号,然后判断转换打字是不是超出范围,如果大于就是越界将会中断,小于将页框号和业内地址合并得到物理地址。
🐱 2.存储分配过程
- 将内存页框大小按逻辑存储空间划分出相应的大小页
看一下它的详细过程:
🐱 3.有快表的地址转换
- 特点:访问速度比内存要快,具备一定的判断能力,可以实现内容检索,但是造价比较高
检索中的内容:
Bool flag; //表示是不是在快表中
true:命中
false:失误
- 该页已经登记在快表中(flag==tue ans++):符合访问条件直接取出,形成相应的物理地址。
- 没有在快表中(flag==false res++):读出页框号,形成物理地址,同时将页内地址形成相应的物理地址
命中率=(res/(res+ans))*100%
注意:快表长度与页框命中率成加速度减小的运动曲线
🐱 4.页的共享与保护
数据共享:允许不同进程对共享数据页使用不同的页号,让其指向共享页框
保护:保护权限位,保护键