虚拟内存
前一章内存管理介绍了几种技术如分页分段把一个进程分成多个页,分开存放,在PCB中维持一个页表。进程执行的前提是进程的全部页都已经在内存中了。
虚拟内存技术就解决了这个问题,不需要一个进程把全部的页都放在内存才能执行。
动态载入虽然也解决了这个问题,但是需要程序员完成,非常麻烦。
其实我们发现,一个程序包含了很多条件语句还有异常处理等,这些代码肯定要选择执行的。所以全部调入会显得冗余,增加了磁盘到内存的传输时间。并且减少一个进程的空间可以使得内存容纳更多的进程,增加
多道程序的度。
虚拟地址空间就是一个逻辑视图,通过MMU映射到物理地址空间。
稀地址空间:进程的堆和栈之间的空白的虚拟地址空间。
进程虚拟地址空间内容:堆向上伸展,栈向下伸展,代码和数据。中间放共享库。
虚拟内存可以通过共享页将文件或内存共享给多个进程。每个进程都认为库位于自己的虚拟地址空间。
按需调页:一个进程分成多个页,在需要时调入相应的页,也称为懒惰交换。
按需调页对于性能的影响很大,因为会发生页错误,所以尽量减少页错误。
交换是将整个进程看成一个整体,通过交换程序进行交换,而懒惰交换是将一个进程看成多个页,通过调页程序进行交换。 /*pager VS swapper*/
而我们通过有一张页表维护有效-无效位来区分哪些页在内存,哪些页在磁盘。如果在内存且页号有效,则记为v,如果在磁盘上,则为i。
如果访问无效位的页,则通过页错误方式来解决即如果发现要访问的页不在内存,则:
1.终止进程,保存现场,并通知操作系统。
2.寻找空闲帧,如果没找到,用到页面置换技术。
3.将磁盘上的页调度到相应帧中。
4.重新开始指令。
纯粹按需调页:不断页错误,不断将页调入内存。
页错误发生也是有不同代价的,如果在取指时就发生,则只需要重新取指,如果在获得操作数时发生,则需要重新取指,译码,取操作数,代价就大了很多。
但是如果ADD A,B,A A+B->A,当写入A时出错,重新执行这条指令,但是A已经被改变了,所以结果会不对。解决方案是用临时的寄存器保存原来的值。
有效访问时间:(1-p)*内存访问时间+p*页错误时间。 /*考点*/
页错误的具体过程:
1.告知操作系统。
2.保存现场。
3.确定页表的i代表页错误,因为i可能代表页不存在。
4.磁盘读入空闲帧。
5.修改页表和帧表。
6.恢复。
页错误处理时间主要是:
1.处理页错误。
2.读入页。
3.恢复。
磁盘专门有个交换空间,用于交换数据,处理速度要快。可以在交换空间执行按页调度。
写时复制:创建进程的开始可能不需要按需调页,子进程共享父进程的资源和地址空间。当任何一个进程写入时,就为另一个进程创建一个页面副本。fork
分配空闲页当作页面副本也有技巧,可以通过空闲缓冲池,分配时采用按需填零即只在分配之时清零,清除以前内容。
增加多道程序的度数会有“过度分配”的情况,当页错误发生,需要调入页面,但是内存中没有空闲帧,那么必须页置换。页置换是将页错误的时间加倍了,因为要换入和换出。
基本页置换:
按需调页中需要在内存中有一块空闲帧来存放调入的页,如果没有空闲帧,就要发生页置换。
页置换过程:挑一个牺牲帧,并更新帧表和页表。
可以用修改位或脏位降低开销,当修改位被设置,则意味着这个页从磁盘读入后已被修改,那么就需要写回,如果修改位没被修改,则不需写回。
引用串用来评估一个页置换算法的性能:内存引用的页号序列。如1,2,3 表示引用页号1,2,3。
当不考虑内存帧的数量的情况下,只有页的第一次引用发生页错误,但是如果帧的数量限制,则会复杂的多。
1.FIFO页置换:
将内存的页看成是一个FIFO队列,替换的页是最旧的页即最先调入内存的页,加入的页放到队列的尾部。这不是一个好办法,因为最先进入的页可能是一直要用到的页,如果替换的是活动页,则此页会马上又一次页
错误,换回内存。
Belady 异常:页错误数随着内存帧数的增加而增加。
2.最优置换 OPT
不会产生Belady异常,并且页错误率是最低的。因为他替换的是将来最久才被用到的页。
3.LRU置换
选择的页是最近最少使用的页。
对于引用串,如果倒转,LRU置换和OPT置换的页错误率是一样的。
LRU实现需要硬件支持:
1.计数器。每个页帧会附带一个最近使用时间,置换出的页就是时间最小的。
2.栈。栈顶加入页,栈尾写出页。
4.近似LRU置换
因为LRU实现需要许多硬件支持,因此可能只能近似的实现LRU。
通过添加引用位,每当一个页被引用,该为就置1.通过检查该位,可以知道哪些页未被使用。
(1)附加引用位算法。
在一个页的引用位保留8位,初始为0000 0000,第一次被使用,则1000 0000,第二次未被使用,则0100 0000.以此类推。找到这8位化为10进制后最小的页置换。
(2)二次机会算法。
也是在页中保留一个引用位,如果为1,则给予第二次机会,如果为0,则直接置换。
(3)增强型二次机会算法。
将引用位和修改位作为有序对,(0,0)表示未被引用和修改,则说明是最佳的LRU置换页。
5.基于计数的页置换
(1)Least frequently used LFU:保留一个计数器,记录引用次数。缺点是以前一直用,但是现在不用,则仍会留在内存。
解决方法:定期将计数右移一位。
(2)MFU:最常使用页置换,即把计数最大的页换出。
6.页缓冲算法
7.应用程序:不需要提供虚拟内存。
生磁盘:没有文件系统的磁盘。
接下来讲帧分配,帧分配的最小数量是根据计算机体系结构,最大数量是根据物理内存数量。
分配方法:
1.平均分配。
2.比例分配。根据优先级和进程大小。
帧分配和页置换是相关联的。
全局置换:一个进程从任意帧中选择一个置换,不管该帧是否已分配。 缺点是不能控制页错误率。
局部置换:仅从自己的分配帧中置换。
颠簸:频繁调页。
颠簸发生情景:
当CPU使用率降低时,CPU导入更多进程,如果用全局置换,如果一个进程需要很多帧,因此发生页错误会从其他进程中拿一点,而如果其他进程也页错误,则会从其他进程中拿帧,因此进程都到进程的等待调页设备
队列,CPU使用率降低,恶性循环。
采用局部置换也不能防止系统颠簸。因此我们必须要预先就分配足够多的帧。因此引入了局部模型。
局部模型是那些经常使用的帧,因此进程分配的帧一定要大于局部模型的帧大小。
1.工作集合模型:working-set model 。基于局部性。
工作集合窗口:预设△是最近用到的页。对于△的取值很关键。
工作集合:在工作窗口中使用的页的集合。
如果总的可用帧数量为W,进程i的工作集合为WSi,则W-WSi为其余的可用帧,直到<0就不分配。
如果在内存中的进程的工作集合之和大于可用帧数量,则系统颠簸。
2.页错误频率PFF。
预先设定页错误率的上下界。当页错误率大于上界,则为进程分配更多的帧。这样非常直接。
当对于一个新的局部进行按需调页时,页错误率达到波峰。
如果调用open(),需要先找目录,再找文件,因此需要内存访问+磁盘访问。如果将文件I/O作为内存的普通访问,则称为文件的内存映射。
在内存中的文件可以修改就不立即写回。
前面讲到内存映射文件,下面是内存映射I/O,一组内存专门映射到设备寄存器,读取该块地址如同读取设备寄存器。
内核内存的分配与用户进程的分配内存不同,用户进程都是按页分配,但是内核分配需要从空闲内存池中获取,而不是通过空闲帧链表中获取。
1.Buddy系统。
通过对于连续物理页进行二分,以至于能够最小包容内核需求内存即可。如如果内核需求23KB空间,则最小得到的空间为32KB,因为要是2的幂。
优点:快速合并。
缺点:内部碎片。
2.slab分配。
slab是由一个或多个物理页组成。
cache都有一个或多个slab。而一个内核数据结构都有一个cache。
cache存储内核。内核需要空间就直接从cache中获得。
slab三种状态:满,空,部分满。
slab先从部分满的slab中分配,再从空的slab中分配。否则,分配新的slab,并赋给Cache。
slab没有内部碎片而且能够快速分配。因为已经Cache中创建好了空间。
分享到:
相关推荐
操作系统原理知识点总结 操作系统原理是计算机科学中的一门重要课程,涵盖了计算机系统的基本概念、操作系统的基本组件、进程管理、存储器管理、文件系统管理等方面的知识。本文将对操作系统原理的知识点进行总结和...
本笔记总结了NUDT操作系统试题的主要知识点,包括进程管理、存储管理、文件系统、输入/输出系统和进程同步等方面。 一、进程管理 * 进程的定义:进程是操作系统中的一种基本概念,表示一个正在运行的程序。可以...
- **内存管理**:实存管理和虚存管理是操作系统的重要组成部分,它们负责内存的分配、回收、地址映射等,以优化内存使用并提高系统性能。 - **文件管理**:操作系统管理文件的创建、删除、读写和保护,为用户提供...
操作系统是计算机科学的基础组成...总结来说,操作系统报告涵盖了操作系统核心的四个方面,对于理解和优化系统性能至关重要。了解并掌握这些概念,有助于深入理解操作系统的运行机制,从而更好地进行系统设计和优化。
操作系统实现请求分页存储管理页面Optimal、FIFO、LRU调度算法论文 在计算机科学中,请求分页存储管理是操作系统中的一种重要机制,用于管理计算机的虚拟存储器。为了更好地理解和掌握这种机制,需要实现请求分页...
### 重庆理工大学操作系统试题知识点解析 ...以上是基于题目提供的内容所总结的操作系统相关知识点,涵盖了死锁、进程管理、内存管理等多个方面,对于理解操作系统的基本原理和机制具有重要意义。
"操作系统课件:Lecture11 段式存储管理与...本资源总结了操作系统中存储管理的相关知识点,包括段式存储管理、虚存管理、段页式管理等概念,并对其进行了比较和分析。同时,本资源还介绍了内存扩充技术的概念和应用。
下面通过exam试题的形式,总结了操作系统的相关知识点。 一、选择题 1.不是基本的操作系统是(D.网络操作系统)。基本的操作系统包括批处理操作系统、分时操作系统和实时操作系统等。 2.现代 OS 具有并发性和...
操作系统实验报告——存储管理 本实验报告的主要目的是为了理解内存分配原理,特别是页式虚拟内存分配方法,并了解 Windows 2000/XP 的内存管理机制,掌握页式虚拟存储技术。 一、实验目的 1. 理解内存分配原理,...
【存储管理】是操作系统的重要组成部分,它涉及到计算机内存的有效利用和管理,确保多个进程能够高效地共享有限的物理内存资源。本次北邮操作系统第二次实验主要关注的是存储管理中的内存分配和页面置换算法。 **一...
操作系统是计算机科学的基础课程之一,对于软件学院的学生来说,掌握其核心概念和原理至关重要。这份“山东大学软件学院操作系统复习资料”无疑是学生们备考的理想资源。资料涵盖了丰富的知识点和历年试题,确保学生...
根据给定文件的信息,我们可以总结出以下相关的操作系统知识点: ### 操作系统实验:分页管理 #### 一、请求分页管理概述 请求分页管理是现代操作系统内存管理中的一个核心概念,它允许程序在执行时按需加载所需...
2. **计算机系统和操作系统的关系**:计算机系统是一个包含软件和硬件资源的整体,而操作系统是运行在硬件之上的一层软件,它管理和协调这些资源,使得其他软件和用户可以有效地使用计算机。 3. **进程状态**:进程...
操作系统实验报告中的存储管理实验主要关注的是请求页式存储管理技术,这是现代操作系统中实现虚拟存储的重要机制。实验目的是让学生理解和掌握虚拟存储技术的特点,特别是请求页式存储管理中的页面置换算法。 请求...
本文主要针对JMDX计算机工程学院操作系统课程第六章的知识点进行了总结,包括判断题和选择填空,旨在帮助学生复习和巩固对操作系统的理解。 1. **虚拟存储器**:虚拟存储器并非物理上扩充内存,而是逻辑上扩大了...
操作系统存储器管理实验报告主要涉及了虚拟存储技术的模拟,特别是请求页式虚存管理和页面置换算法。实验目的是深入理解虚拟存储技术以及FIFO(先进先出)和LRU(最近最少使用)这两种页面调度算法的工作原理。实验...
计算机操作系统储存管理实验报告 计算机操作系统储存管理实验报告是计算机科学与技术学院软件学院的实验报告,旨在通过请求页式存储管理中页面置换算法模拟程序,了解虚拟存储技术的特点,掌握请求页式存储管理的...
操作系统通过复用、虚拟和抽象技术有效地管理硬件资源,例如通过进程抽象、虚存抽象和文件抽象提供用户友好的接口。 在计算机系统中,操作系统占据了核心地位,它不仅管理硬件资源,还协调软件组件之间的交互。操作...
管理模拟 \t\t\n");printf("\t\t************************************...总结来说,这个实验提供了从理论到实践的桥梁,让学生通过编程实践掌握存储管理的关键概念和技术,这对于深入理解和应用操作系统原理至关重要。