【操作系统】第五章:虚拟内存(Part1:交换[swapping]和覆盖[overlay]技术)

简介: 【操作系统】第五章:虚拟内存(Part1:交换[swapping]和覆盖[overlay]技术)

目录


  • 虚存的起源
  • 覆盖技术
  • 交换技术


正文


虚存的起源


(从二维方块到3D和动画CG)电子游戏所占的内存越来越大,对计算机要求的性能也就越来越过。也就说程序规模的增长远大于储存器容量增长的速度。

我们理想中的存储器:更大更快且非易失性存储器。实际的物理硬件是很难获取的。

b56d94bed4364ad0cfd5aebcdf08b5bd_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

如图所示,快速访问的存储器都靠近CPU但是容量低且造价高。从下往上,意味着价格越来越高,容量越来越小,速度越来越快。硬盘存储空间 够大,但是速度不够,所以我们只能把程序放到内存上去执行;那么有没有什么办法能够把硬盘空间用于执行程序?===>虚存【把不常用的数据放入硬盘,把常用的数据放入内存,使得有限的内存放经常访问的数据,形成一种虚拟的大内存的感觉】

这种方式需要硬件MMU(内存管理单元)和OS内核一起完成。

7f457fa4e16c72b54d7bbc07d2492c26_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

覆盖技术:常用的代码和数据放入内存,不常用的数据和代码放入硬盘

.交换:内存中会跑多个程序,把一些当前优先级不高的程序放到硬盘中,使当前执行的程序会有一个更大的内存去执行。交换技术可由OS完成,但是开销比较大,因为需要导出整个程序到硬盘和导入内存,程序越大,导入导出的代价越大。

虚存技术:只把程序的一部分数据导入导出硬盘,减少交换技术的开销。以页和段为粒度,来把数据和代码导入导出,从而有效使用有限的物理空间。


覆盖技术


目标:在较小的可用内存中运行较大的程序

依据程序逻辑结构,将程序划分为若干功能相对独立的模块;将不会同时执行的模块共享同一块内存区域。【在不同区间,这些程序块可以不同时运行】某一段时间某一个区间执行,另一个时间另一个区间执行。但是这些函数分时共享一个内存空间。

必要部分:一定要有的代码和数据常驻内存,他来负责决定某个时间段把相应区间的函数导入或者导出内存

可选部分(不常用功能):其他程序执行中放入外存中或放在其他程序模块中,只在需要用到时装入内存

不存在调用关系的模块可相互覆盖,共用同一块内存区域

就发火给.gif

如图所示,他们之间的逻辑关系是:A调用BC,B调用D;C调用E或者F

A是常驻内存,因为他要调用其他所有函数。B和C都被A调用,且BC不会相互调用,这说明他们是隔离且独立的,所有可以把BC分在一个区,同理DEF分为另一个区。

内存总110K,程序总容量190K,也就说想把这个程序全部装入内存,空间是不够的。此时根据覆盖技术:A作为常驻内存放入常驻区。然后调用B和C中的一个,必然存在先后顺序,且其中一个执行时,另一个一定不执行,则只在需要时进行导入和导出操作即可【代码是只读的,他只需要释放空间不需要其他开销】

同理根据相互独立原则,还可以找出多种不同的覆盖方式。比如B和EF相互独立,C和D相互独立的。即他们之间不会相互调用,所以他们可以共享一个覆盖区。则此时覆盖区0为50K空间(装BEF),覆盖区1为30K空间(装CD),则比着如图所示的分区方法,总内存使用空间量还要少10K。

20 K [ 常 驻 ] + ( 50 + 40 ) K [ 覆 盖 ] < 20 K [ 常 驻 ] + ( 30 + 50 ) K [ 覆 盖 ]

缺点:开销大。

1.设计的开销,程序猿需要考虑怎么把一个大的程序根据逻辑关系划分出一个个小的相互之间可以覆盖的功能模块,增加了程序猿的负担

2.不同执行阶段的对内存的导入和导出其实就是对硬盘的读写操作,这个过程时间开销也很大。


交换技术


189e432b94be1096b8852442af584682_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

导入导出的开销相对来说是比较大的,一般最小粒度也大于了一个页。逻辑如下:

监督法耶特.gif

交换存在的问题:

1.交换时机:如果程序执行过程中频繁交换,其实对整个系统的负荷很大。每一次的硬盘操作会有较长的时间开销,会耽误程序的快速执行,所以只有当且仅当内存空间不够用时,才会进行交换操作,而且要尽量减少这种操作。

2.所需空间[交换区的大小]:必须足够大以存放所有用户进程的所有内存映像的拷贝,必须对这些内存映像直接存取。假设一个内存中可以跑10程序,那么极端的情况下可能会把9个程序导出去,所以所需空间的预设计就要求比较大。

3.程序的重定位:程序执行时换出再换入后,内存位置可能发生了变化,这时候当前空闲空间和换出位置不同,那么寻址就可能出现问题。一般来说,采取动态映射的方法可以比较好的处理这个问题。【类似上一章讲解的虚拟地址和物理地址之间的映射表】

交换技术由操作系统来完成,对程序猿是透明的,程序猿不需要了解什么时候换入和换出,由OS自主管理。

交换和覆盖的比较

8be6d245b0bfe84380427db7dc2afe01_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

简单概括:

覆盖:小范围一个程序内

交换:大范围多个程序间


目录
相关文章
|
1月前
|
运维 Linux 测试技术
操作系统迁移技术
本次分享的主题是操作系统迁移方案,由阿里云路延文分享。 1. 迁移背景:CentOS停更危机 2. KeyarchOS迁移方案 3. 操作系统测试 4. 迁移评估
|
1月前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
2月前
|
人工智能 物联网 C语言
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
SVDQuant是由MIT研究团队推出的扩散模型后训练量化技术,通过将模型的权重和激活值量化至4位,显著减少了内存占用并加速了推理过程。该技术引入了高精度的低秩分支来吸收量化过程中的异常值,支持多种架构,并能无缝集成低秩适配器(LoRAs),为资源受限设备上的大型扩散模型部署提供了有效的解决方案。
92 5
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
|
2月前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
75 4
|
3月前
|
机器学习/深度学习 人工智能 Android开发
移动应用开发与操作系统的协同进化:探索现代技术融合之道###
随着移动互联网的迅猛发展,移动应用已成为人们日常生活中不可或缺的一部分。本文深入探讨了移动应用开发的最新趋势、关键技术以及移动操作系统的发展如何相互促进,共同推动移动互联网的创新与变革。通过分析当前市场动态和技术挑战,本文旨在为开发者提供有价值的见解和指导,帮助他们在竞争激烈的市场中脱颖而出。
|
2月前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
2月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
2月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
3月前
|
算法 调度 开发者
深入理解操作系统:从进程管理到内存分配
本文旨在为读者提供一个深入浅出的操作系统知识之旅,从进程管理的基础概念出发,探索内存分配的策略与技巧。我们将通过实际代码示例,揭示操作系统背后的逻辑与奥秘,帮助读者构建起对操作系统工作原理的直观理解。文章不仅涵盖理论知识,还提供实践操作的指导,使读者能够将抽象的概念转化为具体的技能。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到有价值的信息和启发。
|
3月前
|
算法 调度 C++
深入理解操作系统:从进程管理到内存分配
【10月更文挑战第42天】本文将带你进入操作系统的神秘世界,探索其核心概念和关键技术。我们将从进程管理开始,了解操作系统如何协调和管理多个程序的运行;然后,我们将深入研究内存分配,看看操作系统如何有效地分配和管理计算机的内存资源。通过这篇文章,你将获得对操作系统工作原理的深入理解,并学会如何编写高效的代码来利用这些原理。