【操作系统】第五章虚存技术

简介: 【操作系统】第五章虚存技术

5.1虚拟内存的起因


理想中的存储器:

更大,更快,更便宜的非易性存储器

image.png

  • 硬盘的速度远远的慢于内存的执行。
  • 磁带比硬盘的存储容量更加的庞大。
  • 现有的物理内存掉电之后数据还是会丢失的。

image.png

image.png

以上设计了三种技术:

1)手动覆盖技术:只把指令和数据保存在内存中

2)自动交换技术:将程序导出内存到硬盘上

3)虚拟内存技术(前两种是虚拟内存还没出现的情况下诞生的):以更小的力度把数据导出导入到内存中来,充分的利用了内存空间的手段


5.2覆盖技术


一、覆盖技术的基础

目标:

是在较小的可用内存中运行较大(相对而言的)的程序。常用与多道程序系统,与分区存储管理配合使用。


原理:

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


  • 必要部分(常用功能)的代码和数据常驻内存;
  • 可选部分(不常用内存)在其他程序模块中实现,平时存放在外存中,在需要用到时才装入内存;
  • 不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖,既这些模块共有一个分区。


二、应用例子

例子一:

image.png

1)bc是对等的,相互之间不会调用,所以分在一个区;A调用b的时候,c是不会执行的,所以只需要将b放在内存中即可。

2)def也是对等的,相互之间也不会调用,所以也分在一个区;当C调用e的时候,df通用是不会被调用的,所以也只需要将e放在内存中即可。


例子二:

image.png

所以覆盖技术是可以有多种方式选择的。


三、覆盖技术的优缺点

优点:

将一个大程序可以放在一个很小的内存里面通过交换技术执行。


缺点:

1)由程序员来把一个大的程序划分为若干个小功能模块,并确定各个模块之间的覆盖技术,费时费力,增加了编程的复杂度。

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


5.3交换技术


一、交换技术的基础

目标:

多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源。

方法:

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

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


  • 这个换入换出的交换技术是操作系统内存管理的重要组成部分。

image.png


二、交换技术实现的几个问题:

1)交换时机的确定:何时小发生交换?只当内存空间不够或有不够危险的时候才换出。

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

3)程序换入时的重定位:换出后再换入的内存位置一定要在原来的位置上吗,寻址可能会出现问题?最好采用动态地址映射的方法,建好页表就行。

ps:交换技术是可以由操作系统来完成的,对于程序员来说是透明的。


三、小结–覆盖与交换的比较

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

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


5.4虚存技术


(虚拟内存管理技术)

一、前诉

在内存不够用的情形下,可以采用覆盖技术和交换技术,但是:

覆盖技术:需要程序员自己把整个程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,增加了程序员的负担;

交换技术:以进程作为交换的单位,需要把进程的整个地址空间都换进换出,增加了处理器的开销。

希望通过一种更好的办法,能够充分的解决交换技术和覆盖技术出现的问题。


二、虚拟内存的基础

目标:

1)像覆盖技术那样,不是把程序的所有内容都放在内存中,因而能够运行比当前的空闲内存空间还要大的程序。但做得更好,由操作系统自动来完成,无须程序员的干涉;

2)像交换技术那样,能够实现进程在内存与外存之间的交换,因而获得更多的空闲内存空间。但做得更好,只对进程的部分内容在内存和外存之间进行交换。

image.png


二、虚拟技术–程序的局部性原理

定义:

程序的局部性原理(principle of locality),指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定的区域,这个可以表现为:


  • 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下一次访问都集中在一个较短时期内。
  • 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内。
  • 程序的局部性原理表明,从理论上说,虚拟存储技术是能够实现的,而且在实现了以后应该是能够取得一个满意的效果。访问的速度更快,并且可以提供一个很多的空间。


三、程序局部性的例子

image.png

可见:程序1是按照行来访问的,而程序2的按照列来访问的

image.png

结果分析:

由于程序1的没相邻的两次访问的地址差距较大,不满足时间局部性和空间局部性,所以会产生多次的缺页中断,对系统的开销较大。而程序2两个数据是相邻的,具有良好的时间局部性和空间局部性。

如果程序不具有局部性,这个高效的机制就很难的实现。


四、虚存技术的大致流程

前提:

操作系统有了硬件支持分段/分页机制,在此内存管理基础之上来实现一个以页或者是段为单位的虚存管理。


过程:

1)在装入程序的时候,不必将所有的程序和数据装入内存中去,而只需将当前需要执行的部分的代码数据放在相关的段或者是页中,这样可以是的一小部分的代码放在内存中去了。

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

3)另一方面。操作系统将内存中暂时不使用的页面或段调出保存在外存上,从而腾出更多空闲空间存放将要装入的程序以及将要调入的页面或段。

image.png

如图所示:程序只有少部分在内存中,而大部分都是在外存中存储。


五、虚拟内存的基本特征

1)较大的用户空间:

通过把物理内存与外存结合,提供给用户的虚拟内存空间通常大于实际的物理内存,既实现了这两者的分离。如32位的虚拟地址理论上可以访问4GB,而可能计算机上仅有256M的物理内存,但硬盘的容量大于4GB


2)部分交换:

与交换技术相比较,虚拟存储的调入和调出是对部分虚拟地址空间进行的,其每次的换入换出是非常规整的,要么是段或者是页。不需要将整个程序交换出去。力度更小,但是效率更高。


3)不连续性:

物理内存分配不连续,虚拟地址空间使用也是不连续的。本来所有的数据都是连续的放在虚拟内存中的,但是操作系统要把某些数据换出去,而造成的不连续。操作系统会弥补好,正常的访问。


六、虚拟内存技术的具体实现

基于页式虚拟内存管理,与前诉的一样。

image.png

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


基本思路:

1)当一个用户程序要调入内存运行时,不是将该程序的所以页面都装入内存,而是只装入部分的页面,就可以启动程序运行。

2)在运行的过程中,如果发现要运行的程序或要访问数据不在内存,则向系统发出缺页中断请求,系统在处理这个中断时,将外存中相应的页面调入内存,使得该程序能够继续运行。


七、页表表项的设定

image.png

  • 驻留位:表示该页是在内存还是外存。如果该位等于1,表示该页位于内存当中,既该页表项是有效的,可以使用;如果改为为0,表示该页当前还在外存当中,如果访问该页表项,将导致缺页中断。
  • 保护位:表示允许对该页做何种类型的访问,如只读,可读写,可执行等。
  • 修改位:表面此页面在内存中是否被修改过,当系统回收该物理页面时,根据此位来决定是否把他的内容写回外存。位为0就表示数据一样的,不需要写回外存中。
  • 访问位:如果该页面被访问过(包括读操作或写操作),则设定词尾,用于页面的置换算法。


示例:

image.png

(左边是虚存页表的映射关系,每一个页表项有4K的物理页,X代表驻留位为0,如果是一个具体的数,就代表驻留位为1,映射关系有效。)


示例1:

MOV REG, 0 //将0地址的内容赋值给一个寄存器

可以看见,0地址是在最底下,有一个2,这表示驻留位是1,且页帧号是2。而一个页的大小是4096,既4k,所以2*4k为8k。也就是所将对应的8k的地址8192的内容给寄存器。

MOV REG, 0 ---------> MOV REG, 8192


示例2:

MOV REG, 32780

可以看见32780对应的页表项是32k,其驻留位的设置是0,没有对应的一个页帧号,意味着访问这一页会产生缺页(缺页异常)

MOV REG, 32780 ---------> MOV REG, 缺页中断


八、缺页中断处理过程

image.png

当cpu执行一条指令load一个内存地址,如果这个内存地址没有一个对应的关系,也就是说没有一个存在位,这时就会产生一个缺页异常,接来下操作系统就会完成一些列缺页中断的处理:

1)如果在内存中有空闲的物理页面,则分配一空闲的物理页帧f,然后转第4步;否者转第2步。

2)采用某种页面置换算法,选择一个将被替换的物理页帧f,他所对应的逻辑页为q。如果该页在内存期间被修改过,则需把他写回外存。

3)对q所对应的页表项进行修改,把驻留位置置0。

4)将需要访问的页p装入到物理页面f当中。也就是把页所需要访问的地址对应的硬盘中的数据,以页为单位,从硬盘读到内存中去,读到刚分配到的那个内存地址。

5)修改p所对应的页表项的内容,把驻留位置1,把物理页帧号置为f。

6)重新运行被中断的指令。


九、后备存储(Backing Store)

在何处保存未被映射的页?

能够简单地识别在二级存储器中的页

交换空间(磁盘或者文件):特殊格式,用于存储未被映射的页面


概念:

一个虚拟地址空间的页面可以被映射到一个文件(在二级存储中)中的某个位置


代码段:映射到可执行二进制文件


动态加载的共享程序段:映射到动态调用的库文件


其他段:可能被映射到交换文件(swap file)

有了这个后背存储/二级存储,可以充分保证了虚存空间的有效性。


十、虚拟内存性能

为了便于理解分页的开销,使用有效存储器访问时间effective memory access

image.png

其实取决参数p,如果p足够小,就可以使平均的执行时间接近10nm,但是如果程序有局部性特点,就表面产生缺页的次数会很少,这是效率就会很高。

目录
相关文章
|
3月前
|
存储 安全 物联网
操作系统的心脏:深入理解现代操作系统架构与核心技术
本文旨在为读者提供一个关于现代操作系统(OS)架构和核心技术的全面概述。通过分析OS的主要组件、功能以及它们如何协同工作,本文揭示了操作系统在计算机系统中的核心地位及其复杂性。我们将探讨进程管理、内存管理、文件系统和输入/输出(I/O)等关键技术,并讨论它们对系统性能的影响。此外,本文还将涵盖一些最新的操作系统趋势和技术,如云计算、虚拟化和物联网(IoT)。通过阅读本文,读者将获得对操作系统内部运作方式的深刻理解,这对于软件开发人员、IT专业人士以及对计算机科学感兴趣的任何人来说都是宝贵的知识。
|
21天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
46 4
|
2月前
|
机器学习/深度学习 人工智能 Android开发
移动应用开发与操作系统的协同进化:探索现代技术融合之道###
随着移动互联网的迅猛发展,移动应用已成为人们日常生活中不可或缺的一部分。本文深入探讨了移动应用开发的最新趋势、关键技术以及移动操作系统的发展如何相互促进,共同推动移动互联网的创新与变革。通过分析当前市场动态和技术挑战,本文旨在为开发者提供有价值的见解和指导,帮助他们在竞争激烈的市场中脱颖而出。
|
3月前
|
安全 Android开发 iOS开发
安卓vs iOS:探索两种操作系统的独特魅力与技术深度###
【10月更文挑战第16天】 本文旨在深入浅出地探讨安卓(Android)与iOS这两种主流移动操作系统的特色、优势及背后的技术理念。通过对比分析,揭示它们各自如何塑造了移动互联网的生态,并为用户提供丰富多彩的智能体验。无论您是科技爱好者还是普通用户,都能从这篇文章中感受到技术创新带来的无限可能。 ###
74 2
|
4月前
|
人工智能 Linux 云栖大会
看过来!2024 云栖大会操作系统技术 Workshop 怎么玩?
报名倒计时2天啦,欢迎大家来“操作系统技术Workshop”打卡。专家讲解原理、现场实战演练,AI、C++ 20专场任选。
看过来!2024 云栖大会操作系统技术 Workshop 怎么玩?
|
2月前
|
人工智能 Anolis 开发者
|
4月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
118 12
|
4月前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
142 6
|
4月前
|
人工智能 vr&ar Android开发
探索安卓与iOS的无限可能:移动操作系统的技术革新与未来展望
本文旨在探讨安卓和iOS这两大主流移动操作系统在技术上的创新与突破,以及它们如何塑造我们的数字生活。通过深入分析两者的最新进展、面临的挑战以及未来的发展趋势,文章揭示了移动操作系统在推动科技进步和满足用户需求方面的关键作用。我们将从技术角度出发,解读安卓的开放性与iOS的封闭性如何影响应用生态和用户体验,并探讨这些差异背后的设计理念和商业考量。同时,我们还将关注两大系统在安全性、隐私保护、人工智能集成等方面的最新动态,以及它们如何应对日益增长的网络安全威胁和用户对隐私保护的需求。此外,文章还将展望未来移动操作系统的发展,分析5G、物联网等新兴技术如何为安卓和iOS带来新的机遇和挑战,以及这两大
95 6
|
3月前
|
存储 前端开发 Java
MacOS环境-手写操作系统-18-图片分层技术
MacOS环境-手写操作系统-18-图片分层技术
33 0