-
对换空间的管理
-
进程的换入
-
进程的换出
对换空间管理的主要目标:
-
对文件区管理的主要目标:提高文件存储空间的利用率, 其次:提高对文件的访问速度(采用离散分配的方式进行管理)
-
对对换空间管理的主要目标:提高进程换入换出速度, 其次:提高文件存储空间利用率
进程的换出:
对换进程在实现进程换出时,是将内存中的某些进程调出至对换区,以便腾出内存空间。换出过程可分为以下两步:
-
(1)选择被换出的进程
-
(2)进程换出过程。
进程的换入:
对换进程将定时执行换入操作,它首先查看PCB集合中所有进程的状态,从中找出“就绪”状态但已换出的进程。当有许多这样的进程时,它将选择其中已换出到磁盘上时间最久(必须大于规定时间,如2s)的进程作为换入进程,为它申请内存。如果申请成功,可直接将进程从外存调入内存;如果失败,则需先将内存中的某些进程换出,腾出足够的内存空间后,再将进程调入。
根据离散分配时所分配地址空间的基本单位不同,又可将离散分配分为以下三种:
-
分页存储管理方式: 将用户地址空间分为若干个固定大小的区域,称为“页”,相应地也将内存空间分为若干个物理块或页框(frame),页和块的大小相等,用户可以在任一页放入任一物理块,实现离散分配
-
分段存储管理方式: 为了满足用户要求(编程和使用)形成的一种存储方式,把用户程序地址分为若干个大小不同的段,每段可以定义一组相对完整的信息。(段在内存中可以不相连接)
-
段页式存储管理方式: 分页与分段相结合的产物,目前应用较广泛。
分页地址中的地址结构:
页表:
在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。(页表的作用是实现页号到物理块号的地址映射)
基本地址变换机构:
当未出现越界错误时,页表始址与页号和页表项长度的乘积相加,可以得到该表在页表中的位置,于是可以从中得到该页的物理块号。
具有快表的地址变换机构:
由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近1/2。
为了提高地址变换速度,可以在地址变换机构中增设一个具有并行查询能力的特殊高速缓冲寄存器(联想寄存器:Associative Memory),也叫做快表,在IBM系统中取名为:TLB(Translation Look aside Buffer),用以存放当前访问的那些页表项。
访问内存的有效时间(EAT):
没有引入块表:EAT=2t
引入块表:EAT = a_λ + (t+λ) (1-a) + t = 2t+λ-t_a
a:命中率
t:访问一次所需时间
λ:快表访问时间
虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加依扩充的一种存储系统,其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近外存。(牺牲时间换取空间)
引入虚拟存储器的原因:较大的作业无法一次性装入内存大量作业要求运行时,没有足够的内存。
常规存储器的特征:
-
一次性:作业在运行之前需要一次性全部装入内存。但是并非全部的程序和数据都需要用到。一次性装入是对内存空间的浪费
-
驻留性:作业装入内存后,便一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。
虚拟存储器的特征:
-
多次性:最重要的特征。
-
对换性:提高了内存的利用率。
-
虚拟性:能够从逻辑上扩充内存的容量。只是虚拟存储器所表现出来的最重要的特征,也是实现虚拟存储器的最重要的目标。(离散分配)虚拟性是以多次性和对换性为基础的;而多次性和对换性又必须建立在离散分配的基础上。
虚拟存储器的实现都建立在离散的存储管理方式的基础上。
请求分页中的内存分配:
最小物理块数:能保证进程正常运行所需的最小物理块数
内存分配策略:
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换。于是可组合出以下三种适用的策略。
- 固定分配局部置换( Fixed Allocation, LocalReplacement): 每个进程分配一组固定数目的物理块,在进程运行期间不再改变。局部置换是指:如果进程在运行中发生缺页,则只能从分配给该进程的n个页面中选择一个页面换出,然后再调入一页。
实现时的困难:每个进程分配多少物理块难以确定,太少,会频繁出现缺页,降低系统吞吐量,太多,必然使内存中驻留的进程数目减少,可能造成CPU空闲或其他资源空闲。
- 可变分配全局置换( Variable allocation, GlobalReplacement): 全局置换是指:进程再运行中发生缺页,则将OS所保留的空闲物理块取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块,换入。
最易实现的一种物理块分配,会导致进程缺页率增加
- 可变分配局部置换( Variable allocation, LocalReplacement),实现较复杂
物理块分配算法:
-
平均分配算法
-
按比例分配算法
-
考虑优先权的分配算法
请求分页系统:
在分页系统的基础上增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。硬件支持:请求分页的页表机制,缺页中断机构,地址变化机构。软件支持:请求掉页的软件和实现页面置换的软件。
请求分段系统:
在分段系统的基础上,增加请求调段及段置换功能所形成的虚拟存储系统。置换单位为:段
硬件支持:请求分段的段表机制、缺段中断机构、地址变换机构。软件支持:请求调段的软件和实现段置换的软件。
请求分页每次调换的页面大小固定,分段不固定类似于动态分区,常用请求分页。
请求分页的页表机制:
-
状态位P: 指示该页是否已调入内存,以供程序在运行时参考;
-
访问字段A:记录该页在一段时间内被访问的次数,或记录该页最近有多长时间未被访问,以供系统在换出页面时参考。
-
修改位M: 表示该页在调入内存后是否被修改过。
-
外存地址:指出该页在外存上的地址,通常是物理块号/盘块号。
内存分配策略和分配算法:最小物理块数的确定、物理块的分配策略、物理块的分配算法
在请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换页面的对换区。通常,由于对换区是采用连续分配方式,而文件区是采用离散分配方式。
影响缺页因素:
-
页面大小
-
进程所分配物理块的数目
-
页面置换算法
-
程序固有属性
缺页率
假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m<=n)。如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A=S+F,那么该进程在其运行过程中的缺页率即为f=F/A
抖动:刚被换出的页很快又被访问
1. 最佳( Optimal)置换算法
选择的被淘汰页面将是最长(未来)时间内不再被访问的页面。采用最佳置换算法通常可保证获得最低的缺页率。但由于人们目前还无法预知,一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。
2.先进先出(FIFO)页面置换算法
淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,但与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰
3.最久未使用LRU( Least recent ly Used)置换算法的描述
FIFO置换算法的性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况做出决策的。(实现代价很高,需要软件与硬件方面的支持)
4.最少使用( Least frequent ly Used),LFU置换算法
在采用LFU算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近时期使用最少的页面作为淘汰页。
5.转轮(Clock)置换算法:近似LRU算法,为每页设置一位访问位,再将内存中所有的页面通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置成1。置换算法在选择淘汰页面时,只需要检查页的访问位。如果是0,就选择该页换出;若为1,则重新将它置0,暂不换出,给该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面。
6.页面缓冲算法PBA
PBA算法的主要特点是:
①显著地降低了页面换进、换出的频率,使磁盘ⅣO的操作次数大为减少,因而减少了页面换进、换出的开销;
②正是由于换入换出的开销大幅度减小,才能使其采用一种较简单的置换策略,如先进先出(FIFO算法,它不需要特殊硬件的支持,实现起来非常简单(空闲页面链表、修改页面链表)
段表:
-
存取方式:只执行、只读,读/写
-
存在位:表示该页在不主存
-
访问字段:表示该页最近被访问的频繁程度
-
修改位:表示该页内容是否被修改
-
增补位:请求分段管理中所特有的字段(固定长/可扩充 )
分段管理的优缺点:
-
便于动态申请内存
-
管理和使用统一化
-
便于共享
-
便于动态链接
-
产生碎片
一、单项选择题
1、存储管理的目的是( ) 。
A、方便用户 B、提高主存空间利用率
C、方便用户和提高主存利用率 D、增加主存实际容量
2、存储器管理中,下列说法正确的是( )
A、无论采用哪种存储管理方式,用户程序的逻辑地址均是连续的
B、地址映射需要有硬件支撑地址变换
C、段表和页表都是由用户根据进程情况而建立的
D、采用静态重定位可实现程序浮动
3、动态重定位是在作业的( )中进行的。
A、编译过程 B、装入过程 C、修改过程 D、执行过程
4、( )要求存储分配时具有连续性。
A、固定分区存储管理 B、页式存储管理
C、段式存储管理 D、段页式存储管理
5、( )存储管理支持多道程序设计,算法简单,但内部碎片多。
A、段式 B、页式 C、固定分区 D、段页式
6、提高主存利用率主要是通过( )实现的。
A、内存分配 B、内存保护 C、地址转换 D、内存扩充
7、动态分区管理方式按作业需求量分配主存分区,所以( )。
A、分区的长度是固定
B、分区的个数是确定的
C、分区长度和个数都是确定
D、分区的长度不是预先固定的,分区的个数是不确定的
8、( )存储管理不适合多道程序系统。
A、单一连续分配 B、固定分区 C、可变分区 D、段页式
9、碎片现象的存在使( )。
A、主存空间利用率降低 B、主存空间利用率提高
C、主存空间利用率得以改善 D、主存空间利用率不受影响
10、较好地解决了外部碎片问题的存储管理方法是( )。
A、动态分区管理 B、段式存储管理
C、固定分区管理 D、页式存储管理
11、下列选项中,不会产生内部碎片问题的存储管理方法是( )。
A、分页存储管理 B、分段存储管理
C、固定分区存储管理 D、段页式存储管理
12、最佳适应分配算法把空闲区( )。
A、按地址递增顺序登记在空闲区表中
B、按地址递减顺序登记在空闲区表个
C、按长度以递增顺序登记在空闲区表中
D、按长度以递减顺序登记在空闲区表中
13、某基于动态分区存储管理的计算机,其主存容量为 55MB(初始为空闲),采用最佳适配算法,分配和释放的顺序为:分配 15MB,分配 30MB,释放 15MB,分配 8MB,分配 6MB,此时主存中最大空闲分区的大小是( )。
A、7MB B、9MB C、10MB D、15MB
14、在未引入快表的分页存储管理时,每读写一个数据,要访问( )主存。
A、1次 B、2次 C、3次 D、4次
15、动态分区存储管理的( )总是按作业要求挑选一个最大的空闲区。
A、顺序分配算法 B、最先适应分配算法
C、最优适应分配算法 D、最坏适应分配算法
16、一个分段存储管理系统中,地址长度为 32 位,其中段号占 8 位,则最大段长是 ( )。
A、28 B B、216B C、224B D、232B
17、抖动是指( )。
A、使用机器时,造成屏幕闪烁的现象
B、刚被调出的页面又立即被装入所形成的频繁装入\调出的现象
C、系统盘有问题,造成系统不稳定的现象
D、由于主存分配不当,偶然造成主存不够的现象
18、虚拟存储管理系统的基础是程序的( )理论。
A、动态性 B、全局性
C、局部性 D、虚拟性
19、在段式存储管理中,( )。
A、段间绝对地址一定不连续
B、段间逻辑地址必定连续
C、以段为单位分配,每段分配一个连续主存区
D、每段是等长的
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/2851eb00f6e2bcd00004887cc6fede7d.jpeg)
最后
手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/2851eb00f6e2bcd00004887cc6fede7d.jpeg)
最后
手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友
[外链图片转存中…(img-C6hBYIds-1712511805239)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!