大家好,欢迎来到IT知识分享网。
目录
操作系统通过某种技术在逻辑上堆内存进行扩充。
覆盖技术
设计思想:将程序分为多个段(模块),常用的段会常驻内存,而不常用的只有在使用时调入内存,使用完毕后调至外存(硬盘)。
内存也分为固定区和覆盖区。常用的程序段就会在固定区中,不调出内存(除非进程运行结束),不常用的段存放在覆盖区中,使用后就会调出,在调入其他程序段。
也就是说后来的程序段将原本的程序员覆盖了,通过这种让不常用且不同时运行的程序段重复利用内存空间的方式扩充内存。
缺点:操作系统并不知道程序的结构以及程序段的使用频率,因此需要程序员声明程序的覆盖结构,告诉操作系统哪些程序是常用的,哪些不常用,哪些程序段之间不会同时运行… ,因此,不利于程序员编程。
交换技术
当内存紧张时,将部分进程暂时换出外存,把外存中已经具备运行条件的进程调入内存。
这种技术实际上就是进程调度中的中级调度(内存调度)。
思考1:被换出的进程应该保存在磁盘的什么位置?
具有交换功能的操作系统一般将磁盘分为对换区和文件区俩部分,其中文件区主要存放交换出来进程的文件,主要追求其利用率,通常采用离散分配方式。而对换区中主要存放进程的数据,占磁盘的很小一部分,追求交换速度,因此采用连续分配方式。对换区的I/O速度比文件区的要更快。
思考2:什么时候应该交换进程?
在内存非常吃紧的时候进行交换,当当内存充足的时候就可以停止交换了。比如缺页率比较频繁地时候交换进程,当缺页率明显下降时就可以停止交换了。
思考3:应该将那些进程换出外存?
可以考虑已经阻塞的进程、优先级较低的进程等
PS:进程的PCB是常驻内存的。
即使进程交换至外存,也需要被操作系统管理(因为还要换回来),因此进程的PCB依然存放至内存方便操作系统的管理。补充计组知识:CPU不能直接访问硬盘,而是通过内存(主存储器)的间接访问。
覆盖技术与交换技术的区别
覆盖技术是在同一个进程中进行的,将一个进程的程序分为几个段,这些短在循环重复的利用内存。
交换技术是在不同进程之间的。将不着急的进程先换出外存,让其他进程使用这些内存空间减少缺页率。
虚拟存储技术
传统存储管理方式的特征、缺点
传统的存储管理方式就是指上面的连续分配管理方式和非连续分配管理方式中的所有存储管理方式。
他们都有共同的特点:
- 一次性:作业必须一次性全部装入内存后才能开始运行。
当作业很大时,内存无法满足作业全部装入内存,就导致作业无法正常运行。
当大量的作业请求时,由于内存的不足,导致部分作业不能运行,降低了并发度。
- 驻留性:一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束。事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源。
虚拟内存的定义和特征
基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。
在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存。
虚拟内存有一下三个主要特征:
多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存。
对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出。
虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量。
虚拟内存技术,允许一个作业分多次调入内存。如果采用连续分配方式,会不方便实现。因此, 虚拟内存的实现需要建立在离散分配的内存管理方式基础上。
请求分页管理方式
请求分页存储管理与基本分页存储管理的主要区别:
在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。
页表机制
与基本分页管理相比,请求分页管理中,为了实现“请求调页”,操作系统需要知道每个页面是否已经调入内存;如果还没调入,那么也需要知道该页面在外存中存放的位置。
当内存空间不够时,要实现“页面置换”,操作系统需要通过某些指标来决定到底换出哪个页面;有的页面没有被修改过,就不用再浪费时间写回外存。有的页面修改过,就需要将外存中的旧数据覆盖,因此,操作系统也需要记录各个页面是否被修改的信息。
缺页中断机构
在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。
此时缺页的进程阻塞(需要I/O,时间较长),放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。
如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。
如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。
缺页中断是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断 。
一条指令在执行期间,可能产生多次缺页中断。
如:copy A to B,即将逻辑地址A中的数据复制到逻辑地址B,而A、B属于不同的页面,则有可能产生两次中断。
地址变换机构
与基本分页存储管理相比:
- 请求调页
查到页表项时进行判断,如果没被调入内存中时就需要请求调页。
- 页面置换
需要调入页面,但没有空闲内存块时进行
- 需要修改请求页表中新增的表项
页面置换算法
当发生缺页并且内存不足时,需要将内存中的某些页面先换出外存,给缺少的页腾空间。但是该如何选择要替换的页面呢?——- 使用页面置换算法选择
页面置换算法应该保证一个基本原则:保证更少的缺页率。
因为置换页面需要I/O操作,会有很大的开销。
最佳置换算法(OPT)
算法思想:每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
最佳置换算法是一种理想型算法(实现不了),虽然可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法ᨀ 前预判页面访问序列。因此,最佳置换算法是无法实现的。
先进先出置换算法(FIFO)
算法思想:每次选择淘汰的页面是最早进入内存的页面。
实现方式:把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可。
Belady异常:当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。
页面置换算法中,只有先进先出算法会导致Belady异常。
最近最久未使用置换算法(LRU)
算法思想:每次淘汰的页面是最近最久未使用的页面。
实现方法:赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t。当需要淘汰一个页面时,选择现有页面中 t 值最大的,即最近最久未使用的页面。
优点:性能较好。
缺点:需要专门硬件的支持(记录时间),实现困难,开销较大。
时钟置换算法(CLOCK)
时钟置换算法是一种性能和开销较均衡的算法,又称CLOCK算法,或最近未用算法(NRU,Not Recently Used)
实现方法:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。
当某页被访问时,其访问位 设置为1。当需要淘汰一个页面时,只需检查页的访问位。 如果是0,就选择该页换出;如果是1,则将它置为0,暂不换出,继续检查下一个页面;
若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为0后,再进行第二轮扫描。
第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK 算法选择一个淘汰页面最多会经过两轮扫描。
改进型时钟置换算法
简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。
因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。这就是改进型的时钟置换算法的思想。修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。
算法规则:将所有可能被置换的页面排成一个循环队列
第一轮:从当前位置开始扫描到第一个(0, 0)的帧用于替换。本轮扫描不修改任何标志位
第二轮:若第一轮扫描失败,则重新扫描,查找第一个(0, 1)的帧用于替换。本轮将所有扫描过的帧访问位设为0。
第三轮:若第二轮扫描失败,则重新扫描,查找第一个(0, 0)的帧用于替换。本轮扫描不修改任何标志位
第四轮:若第三轮扫描失败,则重新扫描,查找第一个(0, 1)的帧用于替换。
由于第二轮已将所有帧的访问位设为0,因此经过第三轮、第四轮扫᧿ 一定会有一个帧被选中,因此改进型CLOCK置换算法选择一个淘汰页面最多进行四轮扫᧿
改进版的时钟置换算法的核心思想就是优先置换最近未被访问并且未修改的页面,如果没有则会置换最近没访问过但有修改过的页面,如果还没有,就会置换最近访问过但没修改过的页面,如果前面的都没有,最后才会置换最近访问过并且有修改过的页面。
优先级:最近未被访问并且未修改的 > 最近没访问过但有修改过的 > 最近访问过但没修改过的 > 最近访问过并且有修改过的
这种算法的性能较好,开销也不大。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141211.html