‘壹’ 在存储管理中,地址重i定位的目的是什么
源程序时,由于程序没有装入内存,没有地址,因此使用变量名替代地址。如上图所示,load a data1指令是将data1中的3456送寄存器a。
当编译链接后生产目标代码,此时,程序仍然没有装入内存,没有地址。而目标代码中无法再使用变量。编译器生成逻辑地址,以程序头为0地址进行编址。
在程序运行时,程序装入内存,但由于地胡档址为0的举清地方被操作系统使用。程序中的逻辑地址与实际裤答乱的物理地址不一致。而地址重定位就是将程序中的逻辑地址调整为物理地址。
‘贰’ 内存管理
在一段时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
局部性原理的 分类 :
将编译后的目标模块装配成一个可执行程序。
可执行程序以 二进制可执行文件 的形式存储在磁盘上。
链接程序的 任务 :
程序的链接,可划分为:
重定位 :将逻辑地址(相对地址)转换为物理地址(绝对地址)的过程。
物理地址 = 逻辑地址 + 程序在内存中的起始地址
程序的装入,可划分为:
任何时刻主存储器 最多只有一个作业 。
每个分区 大小固定不变 :分区大小相等、分区大小不等。
每个分区可以且 仅可以装入一个作业 。
使用 下限寄存器 和 上限寄存器 来保存当前作业的起始位置和结束位置。
使用 固定分区说明表 区分各分区的状态。
分区 大小不是预先固定的 ,而是按作业(进程)的实际需求来划分的。
分区 个数也不是预先固定的 ,而是由装入的作业数决定的。
使用 空闲分区表 说明空闲分区的位置。
使用 空闲分区链 说明空闲分区的位置。
首次适应算法的 过程 :
外部碎片:空闲内存 没有在 分配的 进程 中。
内部碎片:空闲内存 在 分配的 进程 中。
从 上次找到的 空闲分区的 下一个 空闲分区开始查找。
优点:空闲区分布均匀、查找开销较小。
缺点:缺乏大空闲区。
最佳适应算法的 过程 :
优点:提高内存利用率。
注意点:每次在进行空闲区的修改前,需要先进行 分区大小递增 的排序。
页 :将一个 进程 的 逻辑地址空间 分成若干个 大小相等 的 片 。
页框 :将 物理内存空间 分成与页大小相同的若干个 存储块 。
分页存储 :将进程的若干 页 分别装入多个 可以不相邻 的 页框 中。
页内碎片 :进程 最后一页 一般装不满一个页框,形成 页内碎片 。
页表 :记录描述页的各种数据,实现从 页号 到 页框号 的映射。
注意: 页内偏移量 的单位是 字节 。
分页地址变换指是: 逻辑地址 通过 地址变换机构 变换为 物理地址 。
分页地址变换的 过程 :
操作系统在修改或装入页表寄存器的值时,使用的是 特权级 指令。
页大小:512B ~ 4KB,目前的计算机系统中,大多选择 4KB 大小的页。
页大小的 选择因素 :
快表也称为“转换后援缓冲”,是为了提高CPU访问速度而采用的专用缓存,用来存放 最近被访问过的页表项 。
英文缩写:TLB。
组成: 键和值 。
在TLB中找到某一个页号对应的页表项的百分比称为 TLB命中率 。
当 能 在TLB中找到所需要的页表项时:
有效访问时间 = 一次访问TLB 的时间 + 一次访问内存 的时间(访问内存读写数据或指令)
当 不能 在TLB中找到所需要的页表项时:
有效访问时间 = 一次访问TLB 的时间 + 两次访问内存 的时间(一次访问内存页表,一次访问内存读写数据或指令)
将页表再分页,形成两级或多级页表,将页表离散地存放在物理内存中。
在进程切换时,要运行的进程的页目录表歧视地址被写入 页表寄存器 。
在二级分页系统中,为页表再建立一个页目录表的目的是为了能在地址映射时得到页表在物理内存中的地址,在页目录表的表项中存放了每一个 页表 在物理内存中所在的 页框号 。
虚拟存储器 :是指具有 请求调入功能 和 置换功能 ,能 从逻辑上对内存容量进行扩充 的一种存储系统。
请求调入 :就是说,先将进程一部分装入内存,其余的部分什么时候需要,什么时候请求系统装入。
置换 :如果请求调入时,没有足够的内存,则由操作系统选择一部分内存中的进程内容移到外存,以腾出空间把当前需要装入的内存调入。
为了实现请求分页,需要:
保证进程正常运行的所需要的最小页框数。
最小页框数与进程的大小没有关系,它与计算机的 硬件结构 有关,取决于 指令的格式、功能和寻址方式 。
内存不够时,从进程本身选择淘汰页,还是从系统中所有进程中选择?:
采用什么样的算法为不同进程分配页框?:
常用的两种 置换策略 : 局部置换 和 全局置换 。
从分配给进程的页框数量上看,常使用的两种 分配策略 : 固定分配 和 可变分配 。
用新调入的页替换 最长时间没有访问 的页面。
找到 未来最晚被访问 的那个页换出。
,P为缺页率。
有效访问时间与缺页率成 正比 ,缺页率越高,有效访问时间越长,访问效率越低。
工作集 :某段时间间隔里,进程实际要访问的页的集合。
引入工作集的 目的 :降低缺页率,提高访问内存效率。
抖动 :运行进程的大部分时间都用于页的换入换出,几乎不能完成任何有效果工作的状态。
抖动的 产生原因 :
抖动的 预防方法 :
在分段存储管理的系统中,程序使用 二维 的逻辑地址,一个数用来表示 段 ,另一个数用来表示 段内偏移量 。
引入分段的 目的 :
引入分段的 优点 :
进程的地址空间被划分成 若干个段 。
每个段定义了一组逻辑信息,每个段的大小由相应的逻辑信息组的长度确定, 段的大小不一样 ,每个段的逻辑地址从0开始,采用一段 连续的地址空间 。
系统为每个段分配一个 连续的物理内存区域 ,各个 不同的段可以离散 地放入物理内存不同的区域。
系统为 每个进程建立一张段表 ,段表的每一个表项记录的信息包括: 段号、段长和该段的基址 ,段表存放在内存中。
分段的 逻辑地址结构 :
段表是由操作系统维护的用于支持分段存储管理 地址映射 的数据结构。
每个进程有一个段表,段表由段表项构成。每个段表项包括: 段号、段长(段的大小)和该段的基址(段的起始地址) 。
若已知逻辑单元的地址为 S:D (段号:段内偏移量),求相应物理地址的步骤如下:
相同点 :分页和分段都属于 离散 分配方式,都要通过数据结构与硬件的配合来实现 逻辑地址到物理地址 的映射。
不同点 :
将用户进程的逻辑空间 先划分为若干个段 , 每个段再划分成若干个页 。
进程以页为单位在物理内存中 离散 存放,每个段中被离散存放的页具有 逻辑相关性 。
为了实现地址映射,操作系统为 每个进程建立一个段表 ,再为 每个段建立一个页表 。
进程段表的段表项组成:
满足以下条件的两个块称为 伙伴 :
‘叁’ 基本分页存储管理
假设是按字节编址
考虑支持多道程序的两种连续分配方式
原因:连续分配要求进程占有的必须是一块连续的内存区域
能否讲一个进程分散地装入到许多不相邻的分区,便可充分利用内存
基本分页存储管理的思想:把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分
页框/页帧:内存空间分成的一个个大小相等的分区(比如4KB)
页框号:页框的编号,从0开始,从低地址开始
页/页面:用户进程的地址空间分为和页框大小相等的一个个区域
页号:页/页面的编号,从0开始
进程的最后一个页面可能没有一个页框那么大,页框不能太大,否则可能产生过大的内部碎片
操作系统以页框为单位为各个进程分配内存空间。进程的每个页面分别放入一个页框中,也就是说,进程的页面与内存的页框有一一对应的关系
每个页面不必连续存放,也不必按照先后顺序,可以放到不相邻的各个页框中
进程在内存中连续存放时,通过动态重定位实现逻辑地址到物理地址的转换。在装入模块之后,内存中指令使用的依然是逻辑地址,直到指令执行的时候才会进行地址转换。系统会设置一个重定位寄存器,用来存放装入模块存放的起始位置,重定位寄存器中的值加上逻辑地址就是该逻辑地址实际对应的物理地址
如果采用分页技术
页框大小为4KB,地址空间为4GB的系统
页号为前20位,页内偏移量为后12位
页表:为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表
一个进程对应一张页表
进程的每一页对应一个页表项
每个页表项由页号和页框号组成
页表记录进程页面和实际存放的页框之间的对应关系
每个页表项的长度是相同的,页号是隐含的
各页表项会按顺序连续存放在内存中,如果该页表在内存中的起始地址是X,4GB/4KB系统的页框有
用于实现逻辑地址到物理地址转换的一组硬件机构
通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M(M个页表项)
进程未执行时,页表的起始地址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把他们放到页表寄存器中
基本分页存储管理中地址是一维的,即只要给出一个逻辑地址,系统就可以自动计算出页号、偏移量,不需要显式告诉系统偏移量是多少
理论上,页表项长度为3即可表示内存块号的范围,但是为了方便页表查询,会让页面恰好能装得下整数个页表项,令每个页表项占4字节
4KB页面,可以放4096/3 =1365个页表项,有4096%3 =1B的碎片,访问1365及之后的页表项时,还要考虑前面的页框中的碎片,才能得到页表项的物理地址,比较麻烦
进程页表通常存放在连续的页框中,这样就能用统一的计算方式得到想要得到的页表项存储的位置
地址变换过程中有两次访存操作:查询页表、访问目标内存单元
局部性原理
如果这个程序将程序对应的指令存放在10号内存块,将程序中定义的变量存放在23号内存块,当这个程序执行时,会很频繁地反问10、23号内存块
时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能被再次执行;如果某个数据被访问过,不久之后该数据很有可能再次被访问(因为程序存在大量循环)
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问(因为很多数据在内存中连续存放)
基本地址变换机构中,每次要访问一个逻辑地址,都要查询页表,由于局部性原理,可能连续多次查询同一个页表项
快表:又称联想寄存器(TLB),是一种访问速度比内存块很多的高速缓存,用来存放当前访问的若干页表项,以加速地址变换的过程。内存中的页表常称为慢表
引入快表后地址的变换过程
一般来说,快表的命中率可以达到90%以上
单级页表存在的问题
对问题1
可将页表进行分组,使每个内存块刚好可以放入一个分组。为离散分配的页表再建立一张页表,称为页目录表,或外层页表
各级页表的大小不能超过一个页面
针对两级页表
对问题2
可以在需要访问页面时,才把页面调入内存(虚拟存储技术),可以在页表项中增加一个标志位,用于表示该页面是否已经调入内存
若想访问的页面不在内存中,会产生缺页中断(内中断),然后将目标页面从外存调入内存
之后的文章会有展开
两级页表访存次数分析:如果没有TLB,第一次访存是访问内存中的页目录表,第二次访存是访问内存中的二级页表,第三次访存是访问目标内存单元
‘肆’ 分区存储管理中常用哪些分配策略
1、固定分区存储管理
其基本思想是将内存划分成若干固定大小的分区,每个分区中最多只能装入一个作业。当作业申请内存时,系统按一定的算法为其选择一个适当的分区,并装入内存运行。由于分区大小是事先固定的,因而可容纳作业的大小受到限制,而且当用户作业的地址空间小于分区的存储空间时,造成存储空间浪费。
一、空间的分配与回收
系统设置一张“分区分配表”来描述各分区的使用情况,登记的内容应包括:分区号、起始地址、长度和占用标志。其中占用标志为“0”时,表示目前该分区空闲;否则登记占用作业名(或作业号)。有了“分区分配表”,空间分配与回收工作是比较简单的。
二、地址转换和存储保护
固定分区管理可以采用静态重定位方式进行地址映射。
为了实现存储保护,处理器设置了一对“下限寄存器”和“上限寄存器”。当一个已经被装入主存储器的作业能够得到处理器运行时,进程调度应记录当前运行作业所在的分区号,且把该分区的下限地址和上限地址分别送入下限寄存器和上限寄存器中。处理器执行该作业的指令时必须核对其要访问的绝对地址是否越界。
三、多作业队列的固定分区管理
为避免小作业被分配到大的分区中造成空间的浪费,可采用多作业队列的方法。即系统按分区数设置多个作业队列,将作业按其大小排到不同的队列中,一个队列对应某一个分区,以提高内存利用率。
2、可变分区存储管理
可变分区存储管理不是预先将内存划分分区,而是在作业装入内存时建立分区,使分区的大小正好与作业要求的存储空间相等。这种处理方式使内存分配有较大的灵活性,也提高了内存利用率。但是随着对内存不断地分配、释放操作会引起存储碎片的产生。
一、空间的分配与回收
采用可变分区存储管理,系统中的分区个数与分区的大小都在不断地变化,系统利用“空闲区表”来管理内存中的空闲分区,其中登记空闲区的起始地址、长度和状态。当有作业要进入内存时,在“空闲区表”中查找状态为“未分配”且长度大于或等于作业的空闲分区分配给作业,并做适当调整;当一个作业运行完成时,应将该作业占用的空间作为空闲区归还给系统。
可以采用首先适应算法、最佳(优)适应算法和最坏适应算法三种分配策略之一进行内存分配。
二、地址转换和存储保护
可变分区存储管理一般采用动态重定位的方式,为实现地址重定位和存储保护,系统设置相应的硬件:基址/限长寄存器(或上界/下界寄存器)、加法器、比较线路等。
基址寄存器用来存放程序在内存的起始地址,限长寄存器用来存放程序的长度。处理机在执行时,用程序中的相对地址加上基址寄存器中的基地址,形成一个绝对地址,并将相对地址与限长寄存器进行计算比较,检查是否发生地址越界。
三、存储碎片与程序的移动
所谓碎片是指内存中出现的一些零散的小空闲区域。由于碎片都很小,无法再利用。如果内存中碎片很多,将会造成严重的存储资源浪费。解决碎片的方法是移动所有的占用区域,使所有的空闲区合并成一片连续区域,这一技术称为移动技术(紧凑技术)。移动技术除了可解决碎片问题还使内存中的作业进行扩充。显然,移动带来系统开销加大,并且当一个作业如果正与外设进行I/O时,该作业是无法移动的。
3、页式存储管理
基本原理
1.等分内存
页式存储管理将内存空间划分成等长的若干区域,每个区域的大小一般取2的整数幂,称为一个物理页面有时称为块。内存的所有物理页面从0开始编号,称作物理页号。
2.逻辑地址
系统将程序的逻辑空间按照同样大小也划分成若干页面,称为逻辑页面也称为页。程序的各个逻辑页面从0开始依次编号,称作逻辑页号或相对页号。每个页面内从0开始编址,称为页内地址。程序中的逻辑地址由两部分组成:
逻辑地址
页号p
页内地址 d
3.内存分配
系统可用一张“位示图”来登记内存中各块的分配情况,存储分配时以页面(块)为单位,并按程序的页数多少进行分配。相邻的页面在内存中不一定相邻,即分配给程序的内存块之间不一定连续。
对程序地址空间的分页是系统自动进行的,即对用户是透明的。由于页面尺寸为2的整数次幂,故相对地址中的高位部分即为页号,低位部分为页内地址。
3.5.2实现原理
1.页表
系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列,形如:
逻辑页号
主存块号
0
B0
1
B1
2
B2
3
B3
2.地址映射过程
页式存储管理采用动态重定位,即在程序的执行过程中完成地址转换。处理器每执行一条指令,就将指令中的逻辑地址(p,d)取来从中得到逻辑页号(p),硬件机构按此页号查页表,得到内存的块号B’,便形成绝对地址(B’,d),处理器即按此地址访问主存。
3.页面的共享与保护
当多个不同进程中需要有相同页面信息时,可以在主存中只保留一个副本,只要让这些进程各自的有关项中指向内存同一块号即可。同时在页表中设置相应的“存取权限”,对不同进程的访问权限进行各种必要的限制。
4、段式存储管理
基本原理
1.逻辑地址空间
程序按逻辑上有完整意义的段来划分,称为逻辑段。例如主程序、子程序、数据等都可各成一段。将一个程序的所有逻辑段从0开始编号,称为段号。每一个逻辑段都是从0开始编址,称为段内地址。
2.逻辑地址
程序中的逻辑地址由段号和段内地址(s,d)两部分组成。
3.内存分配
系统不进行预先划分,而是以段为单位进行内存分配,为每一个逻辑段分配一个连续的内存区(物理段)。逻辑上连续的段在内存不一定连续存放。
3.6.2实现方法
1.段表
系统为每个进程建立一张段表,用于记录进程的逻辑段与内存物理段之间的对应关系,至少应包括逻辑段号、物理段首地址和该段长度三项内容。
2.建立空闲区表
系统中设立一张内存空闲区表,记录内存中空闲区域情况,用于段的分配和回收内存。
3.地址映射过程
段式存储管理采用动态重定位,处理器每执行一条指令,就将指令中的逻辑地址(s,d)取来从中得到逻辑段号(s),硬件机构按此段号查段表,得到该段在内存的首地址S’, 该段在内存的首地址S’加上段内地址d,便形成绝对地址(S’+d),处理器即按此地址访问主存。
5、段页式存储管理
页式存储管理的特征是等分内存,解决了碎片问题;段式存储管理的特征是逻辑分段,便于实现共享。为了保持页式和段式上的优点,结合两种存储管理方案,形成了段页式存储管理。
段页式存储管理的基本思想是:把内存划分为大小相等的页面;将程序按其逻辑关系划分为若干段;再按照页面的大小,把每一段划分成若干页面。程序的逻辑地址由三部分组成,形式如下:
逻辑地址
段号s
页号p
页内地址d
内存是以页为基本单位分配给每个程序的,在逻辑上相邻的页面内存不一定相邻。
系统为每个进程建立一张段表,为进程的每一段各建立一张页表。地址转换过程,要经过查段表、页表后才能得到最终的物理地址。
‘伍’ 操作系统中 存储器对什么进行管理
存储管理即是对主存的管理,它是操作系统的重要功能之一。主存储器是计算机系统中的一种宝贵资源,对主存的管理和有效使用是操作系统中十分重要的内容。为了便于对主存进行有效的管理,应该将主存分成若干个区域,以便同时存放多个用户程序和系统软件。因此,存储管理应具有如下功能:主存的分配和回收、提高主存的利用率、“扩充”主存容量和存储保护。存储分配主要解决多道作业之间划分主存空间的问题,存储分配有三种主要方式:直接分配方式、静态分配方式和动态分配方式。绝大多数计算机系统都采用静态分配方式或动态分配方式。为了实现静态和动态两种存储分配策略,需要采用将逻辑地址与物理地址分开,并对逻辑地址实施地址重定位技术。所谓重定位是由于一个作业装入到与其地址空间不一致的存储空间时所引起的有关地址调整过程,实质上,这是一个地址变换过程,地址变换也称为地址映射。根据地址变换进行的时间及采用的技术手段不同,可以把重定位分为两类:静态重定位和动态重定位。所谓静态重定位是在程序运行之前,由链接装配程序进行的重定位。静态重定位的特点是无需增加硬件地址变换机构,但要求为每个程序分配一个连续的存储区,且在程序执行期间不能移动,故难于做到程序和数据的共享;动态重定位是在程序的执行过程中,每当访问到指令或数据时,将要访问的程序或数据的逻辑地址转换成物理地址。动态重定位的实现需要依靠硬件地址变换机构。最简单的实现方法是利用一个重定位寄存器。动态重定位的特点是需要附加硬件的支持,优点是可以将程序分配到不连续的存储区中,在程序运行之前可以只装入部分代码即可运行,然后在程序运行期间,根据需要动态地申请分配内存,所以,便以程序段的共享,并且可向用户提供一个比主存的存储空间大得多的地址空间,该地址空间也称为虚拟存储器。
‘陆’ 存储管理的目的
存储管理的目的如下:
1、确保计算机有足够的内存处理数据。
2、确保程序可以从可用内存中获取一部分内存使用。
3、确保程序可以归还使用后的内存以供其他程序使用。
存储器管理
存储器管理的对象是主存,也称内存。它的主要功能包括分配和回收主存空间、提高主存利用率、扩充主存、对主存信息实现有效保护。存储管理方案的主要目的是解决多个用户使用主存的问题。
其存返世储管理方案主要包括分区存储管理、分页存储管理、分段存储管理、段页式存储管理以及虚拟存储管理。分区存储管理又有三种不同的方式:静态分区、可变分区、可重定位分区 。静态分区存储管理是预先把可分配的主存储器空间分割成若干个连禅世友续区域。
每个区域的大小可以相同,也可以不同。为了说明各分区的分配和使用情况,存储管理需设置一张“主存分配表”。主存分配表指出各分区的起始地址和长度,表中的占用标志位用来指示该分区是否被占用了,当占用的标志位为“0”时,表示该分区尚未被占用。
进行主存分配时总是选择那些标志为“0”的分区,当某一贺槐分区分配给一个作业后,则在占用标志栏填上占用该分区的作业名。采用静态分区存储管理,主存空间的利用不高。
‘柒’ 重定位寄存器主要用于哪种存储管理方式
段页式存储管理方式。重定位胡唤寄存器的储存方式与其他的储存方式不同,它属于段页式存储管理方式,使储存的文件更佳御举的安全镇做碧可靠。
‘捌’ (存储管理)01.分页式存储管理
将内存划分为若干个大小相等的分区,叫做块;将逻辑空间划分出与块大小一致的分区,叫做页。作业运行时,通过地址重定位技术,实现页与块的对应。这样就以页的方式来管理存储块,就叫分页式存储管理。
在分配存储块时,会根据作业的逻辑地址的大小计算所需要多少个存储块,然后查找空闲块并更新空闲块的状态为占用;回收存储块时,会将作业关联的所有空闲块的状态设置为空闲。记录空闲块状态的方法有两种:位图法和链表法。
在分配存储块之后,就在页表中,增加页和块对应关系的记录;同理,回收存储块时,就会删除对应记录。
访问存储块时,就会根据逻辑地址的页号,在页表找到对应的块号,然后再通过块号计算出物理地址,找到对应的存储块。如下图:
补充
页表:记录页号与块号对应关系的表,包含页号和块号两个字段。
逻辑地址:由 “页号” 和 “页内地址” 组成。其中页内地址是通过页大小来决定。
例如:逻辑地址长度为 16 位,页大小是 1kb (二的十次幂),那么页内地址占低十位,高六位是页号。如下:
在重定位存储块时,需要访问页表。为了加快重定位,就会通过快表(联想存储器,记录常用的页号和块号的对应关系)来快速通过页号找到对应的块号。但是如果不能通过快表找到对应的块号,那么就会按照查找页表的方式来完成重定位。
‘玖’ 在存储器管理中,经常使用哪一种数据结构管理内存的使用情况
使用静态重定位数据结构管理内存。
又称可重定位装入。编译链接后的装入模块的地址都是从0开始的,指令中使用的地址、数据存放的地址都是相对于起始地址而言的逻辑地址。
内存是用于存放数据的硬件,程序执行前需要先放到内存中才能被CPU处理。