九、虚拟内存技术

简介: 九、虚拟内存技术

1、虚拟内存的起因


在程序运行过程之中,经常会出现内存不够用的情况,程序规模的增长速度远大于存储器规模的增长速度。我们理想之中的存储器是:更大,更快,更便宜的非易失性的存储器。但实际中的存储器的结构如下图所示:从上到下分别为寄存区,缓存,主存,磁盘,磁带。其中访问速度越开的内存里CPU越近,但是所具有的空间也越小。


e9edbcd48c3d46a0a8af2216db2fd148.png

从上述图中可以看出,内存的空间有限,但是磁盘的空间很大,为了将磁盘的空间利用起来,就想到了虚拟内存的方式。



2、覆盖技术


目标是在较小的可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。早期的DOS操作系统使用的就是这种覆盖技术。


原理是把程序按照其自身逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。


必要部分(常用功能)的代码和数据常驻内存;


可选部分(不常用功能)在其他程序模块中实现,平时存放在外存中,在需要用到时才装入内存;

·不存在调用关系的模块不腻同时装入到内存,从而可以相互覆盖,即这些模块公用一个分区。


下图是一个覆盖技术的实例:

108be0fef11142939e29a63b1c0eb342.png


上图之中一个190k的程序只需要110k的内存空间就可以运行了。但是还有一种更加节省空间的覆盖方式,将A独占一个分区内存为20k,将相互之间没有调用关系的模块B、E和F放到一个分区,所需空间大小为50k,将相互之间没有调用关系的模块C和D放到一个分区,所需要的空间大小为30k,这样总共值需要100k的内存空间就可以执行190k的应用程序了。


缺点:·由程序员来吧一个大的程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,费事费力,增加了编程的复杂度;


覆盖模块从外存装入内存,实际上是以时间延长来换取空间节省;



3、交换技术


目标: 是多道程序在内存中时,让正在运行的程序或许要运行的程序获得更多的内存资源,是早期UNIX操作系统提供的一种方法。


方法:


·可以将暂时不能运行的程序送到外存,从而获得空闲内存空间;·


·操作系统把一个进程的整个地址空间的内容保存到外存中(换出 swap out),而将外存中的某个进程的地址空间读入到内存中(换入swap in)。换入换出内容的大小为整个程序的地址空间。


交换技术示意图如下图所示:


13b112a230b04e57baf7c80e48cdb076.png




 

操作系统呢执行交换技术需要注意的几个问题?


交换时机的确定:何时才需要发生交换?只当内存空间不足或有不足的危险时换出;


·交换区的大小:必须的足够大已存放所有用户进程的所有内存映像的拷贝;必须能对这些内存映像进行直接存取;


·程序换入时的重定位:换出后在换入的内存位置一定要在原来的位置上吗?最好采用动态地址映射的方法。



覆盖与交换的比较?


覆盖只能发生在那些相互之间没有调用关系的程序模块之间,因此程序员必须给出程序内的各个模块之间的逻辑覆盖结构;


·交换技术示意在内存中的程序大小为单位而来进行的,他不需要程序员给出各个模块之间的逻辑覆盖结构。换言之,交换发生在内存中程序与管理程序或操作系统之间,而覆盖则发生在运行程序的内部。




4、虚存技术



**目标:**在内存不够的情形下,可以采用覆盖技术和交换技术,但是,**覆盖技术:**需要程序员自己把整个程序划分为若干个小的功能模块,并确实那个各个模块之间的覆盖关系,增加了程序员的负担;**交换技术:**以进程为交换的单位,需要把进程的整个地址空间都换进换出,增加了处理器的开销。**虚存技术:**包含覆盖技术的特点,但是不需要程序员干涉,由操作系统自动那个完成,也包含交换技术的特点,但是只对进程的部分内容在内存和外存之间进行交换。


虚存技术需要程序具有局部性的特征,程序的局部性指程序在执行过程中的一个较短的时期,所执行的指令地址和指令的操作数地址,分别局限于一定的区域。程序的局部性包含时间局部性和空间局部性。


时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短的时期内;


空间局部性:当前指令和临近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小的区域内。




4.1 在页式或者段式内存管理实现虚存技术


·在装入程序时,不必将全部程序装入到内存,而只需要将当前需要执行的部分页面或者段装入到内存,就可以让程序开始执行;


在程序执行过程之中,如果需要执行的指令或访问的数据尚未在内存(称之为缺页或者缺段),则由处理器统治操作系统将相应的页面或者段调入到内存,然后继续执行程序;


另一方面,OS将内存中暂时不使用的页面或者短调出保存在外存上,从哪儿腾出更多空闲空间存放将要装入的程序以及将要调入的页面或者段;



4.2 虚存技术的特征


·大的用户空间:通过把物理内存与外存相结合,提供给用户的虚拟化空间通常大于实际的物理内存,即实现了这两者的分离;


部分交换:与交换技术相比,虚拟储存的调入和调出是对部分虚拟地址空间进行的;


不连续性:物理内存分配的不连续性,虚拟地址空间使用的不连续性;




4.3 虚拟页式内存管理


大部分虚拟储存系统都采用虚拟页式存储管理技术,机载也是存储管理的基础上,增加请求调页和页面置换的功能。


其基本思路为:当一个用户程序要调入内存运行时,不是讲改程序的所有页面都装入内存,而是指装入部分的页面,就可以启动程序运行;


·在运行的过程中,如果法发现要运行的程序或要访问的数据不在内存中,则向系统发出缺页中断请求,系统在处理这个中断时,将外存中相应的页面调入内存,使得该程序能够继续运行。用于虚存管理的页表表项如下图所示:

7960e7f4c9674940841ac903b171e01e.png


驻留位表示该页在内存还是在外存,若该位等于0,则表名该页在外存中,若想要访问,则将导致缺页中断;保护位表示允许对该页进行的访问类型,包括读,写和执行等;修改位表示该页在内存中是否被修改过,当系统内回收改物理页面时,根据此位来决定是否需要把它的内容写会外存;最后访问位表示在一段时间内该页是否内访问过,用于页面置换时将不经常访问的页面置换出去。



4.4 缺页中断处理


产生缺页中断之后,会分两种情况,内存中有看空闲物理空间和内存中没有空闲的物理空间。


53394c46e2b94ea0ac77f117f6292543.png


当内存中有空闲的物理空间时,则OS会分配一个空闲的物理页帧 f f f,然后转到上图第4步;否则将采用某种页面置换算法,选择一个将被替换的页帧 f f f,其所对应的逻辑页号为 q q q,并判断是否需要将其内容写回到外存中;之后将 q q q对应的页表项进行修改,把驻留位置为0;将需要访问的页 p p p装入到物理页面 f f f中,修改 p p p所对应的页表项的内容,把驻留位置为1,把物理页帧号置为 f f f;最后重新运行你被中断的指令。



4.5 虚存技术的性能


为了便于理解分页的开销,使用有效存储器访问时间effective memery access time(EAT)。


EAT=访(10ns)+pagefault(5ms)pagefault



当  p充分小的时候,EAT可以很接近10ns,具有很高的效率,当程序具有局部性的特点时,p就会很小,虚存技术的性能就会很高。















相关文章
|
2月前
|
KVM 虚拟化
KVM的热添加技术之内存
文章介绍了KVM虚拟化技术中如何通过命令行调整虚拟机内存配置,包括调小和调大内存的步骤,以及一些相关的注意事项。
74 4
KVM的热添加技术之内存
|
2月前
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
|
4月前
|
机器学习/深度学习 存储 缓存
操作系统中的内存管理技术
在数字世界的复杂架构中,操作系统扮演着枢纽的角色,其中内存管理作为其核心组件之一,保障了计算资源的高效利用与稳定运行。本文将深入探讨操作系统中内存管理的关键技术,包括虚拟内存、分页和分段机制,以及现代操作系统如何通过这些技术优化性能和提高系统稳定性。通过具体实例和数据分析,我们将揭示这些技术如何在实际应用中发挥作用,并讨论它们面临的挑战及未来发展方向。 【7月更文挑战第16天】
85 6
|
4月前
|
存储 缓存 Java
Android性能优化:内存管理与LeakCanary技术详解
【7月更文挑战第21天】内存管理是Android性能优化的关键部分,而LeakCanary则是进行内存泄漏检测和修复的强大工具。
|
4月前
|
物联网 云计算
操作系统中的内存管理技术解析
【7月更文挑战第13天】本文将深入探讨操作系统中至关重要的内存管理技术,包括虚拟内存、分页和分段机制等核心概念。我们将从内存管理的基本原理出发,逐步过渡到高级技术如交换空间和文件映射,最后讨论现代操作系统中内存管理面临的挑战与未来发展方向。文章旨在为读者提供对操作系统内存管理全面而深入的理解。
66 7
|
4月前
|
存储 缓存 NoSQL
Java中的内存数据库与缓存技术
Java中的内存数据库与缓存技术
|
5月前
|
存储 算法
探索现代操作系统中的虚拟内存管理技术
在数字时代的浪潮中,操作系统的心脏——虚拟内存管理技术,正以它独有的韵律跳动。本文将带你穿梭于操作系统的迷宫,揭开虚拟内存如何巧妙地扩展有限的物理内存之谜。从分页机制的精妙设计到交换空间的策略运用,我们将一探究竟。你将看到,虚拟内存不仅仅是一个存储数据的地方,它是速度与效率的协调者,是多任务处理的幕后英雄。随着技术的演进,虚拟内存管理不断优化,为应用程序提供了一片更为广阔的运行天地。让我们一同走进这个充满智慧的世界,感受操作系统中虚拟内存管理的魅力所在。
52 1
|
4月前
|
存储 缓存 安全
操作系统中的内存管理:技术与挑战
在数字化时代,操作系统的内存管理成为计算机科学领域中一个至关重要的技术环节。本文将深入探讨现代操作系统中内存管理的基本原理、关键技术及其面临的挑战。通过对分页、分段、虚拟存储和缓存策略等核心概念的介绍,我们旨在揭示内存管理如何优化系统性能,保障数据安全,并提高资源利用率。同时,文章还将讨论内存泄漏、碎片化以及安全性问题等当前内存管理技术所面临的主要挑战。
67 0
|
4月前
|
存储 监控 安全
探索现代操作系统中的内存管理技术
【7月更文挑战第12天】在数字世界的心脏,操作系统扮演着至关重要的角色。本文将深入探讨内存管理技术,这一操作系统中的核心组件。我们将从基础的内存结构入手,逐步解析虚拟内存、分页和分段等高级概念。文章旨在为读者提供一个清晰的内存管理机制视图,并讨论其在性能优化和系统安全中的应用。通过分析现代操作系统如Linux和Windows的内存管理策略,我们可以更好地理解这些复杂系统的内部工作原理及其对计算领域的影响。
|
5月前
|
存储 消息中间件 缓存
Redis:内存数据存储与缓存系统的技术探索
**Redis 概述与最佳实践** Redis,全称Remote Dictionary Server,是流行的内存数据结构存储系统,常用于数据库、缓存和消息中介。它支持字符串、哈希、列表等数据结构,并具备持久化、主从复制、集群部署及发布/订阅功能。Redis适用于缓存系统、计数器、消息队列、分布式锁和实时系统等场景。最佳实践包括选择合适的数据结构、优化缓存策略、监控调优、主从复制与集群部署以及确保安全配置。
104 3