百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

为什么linux需要虚拟内存,虚拟内存对操作系统有哪些作用

ahcoder 2025-05-07 22:32 12 浏览

操作系统中的CPU和主存都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的CPU和内存资源,操作系统会使用CPU调度器分配CPU事件并引入虚拟内存管理物理内存。

虚拟内存是操作系统物理内存和进程之间的中间层,它为进程隐藏了物理内存这一概念,为进程提供了更加简洁和易用的接口以及更加复杂的功能。

早期的操作系统中,进程会直接使用目标内存的物理地址直接访问主存中的内容,然而现代的操作系统都引入了虚拟内存,进程持有的虚拟地址会经过内存管理单元(MMU)的转换为物理地址,然后通过物理地址访问内存

主存是相对比较稀缺的资源,虽然顺序读取只比磁盘快1个数量级,但是它能提供极快的随机访问速度,从内存上随机读取数据的速度是磁盘的100000倍。

操作系统以页作为单位管理内存,当进程发现需要访问的数据不在内存时,操作系统会以页的方式加载到内存中,这个过程是MMU完成的。

虚拟内存起到了以下三个非常关键的作用:

  • 虚拟内存可以利用磁盘起到缓存的作用,提高进程访问指定内存的速度。
  • 虚拟内存可以为进程提供独立的内存空间,简化程序的链接、加载过程并通过动态库共享内存。
  • 虚拟内存可以控制进程对物理内存的访问,隔离不同进程的访问权限,提高系统的安全性。

更多Linux内核视频教程文档资料免费领取后台私信【内核】自行获取。


内核学习网站:

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

缓存

我们可以把虚拟内存看作是磁盘上的一片空间,当这片空间的一部分访问比较频繁时,这部分数据会以页为单位缓存到主存中以加速CPU访问数据的性能,虚拟内存利用空间较大的磁盘存储作为内存并是使用主存缓存进行加速,让上层认为操作系统的内存很大而且很快,然而区域很大的磁盘并不快,而很快的内存也并不大。

虚拟内存中的虚拟页可能处于以下三中状况——未分配、未缓存和已缓存,其中未分配的内存页是没有被进程申请使用的,也就是空闲的虚拟内存,不占用虚拟内存磁盘的任何空间,未缓存和已缓存的内存页分别表示已经加载到主存中的内存页和仅加载到磁盘中的内存页。

当用户程序访问未被缓存的虚拟页的时候=,硬件就会触发缺页中断,在部分情况下,被访问的页面已经加载到物理内存中,但是用户程序的页表并不存在该对应关系,这时候我们只需要在页表中建立虚拟内存到物理内存的关系;在其他情况下,操作系统需要把磁盘上未被缓存的虚拟页加载到物理内存中。

因为主内存的空间是有限的,当主内存中不包含可以使用的空间时,操作系统会选择合适的物理内存去除回磁盘,为新的内存让出位置,选择待驱除的页的过程在操作系统中叫做页面替换。缺页中断和页面替换都是操作系统调页算法的一部分。

内存管理

虚拟内存可以为正在运行的进程提供独立的内存空间,制造一种每个进程的内存都是独立的假象。在64位的操作系统上,每个进程都由256TiB的内存空间,内核和用户空间分别占128TiB。因为每个进程的虚拟内存空间是完全独立的。

虚拟内存只是操作系统中的逻辑结构,应用程序最终还是需要访问物理内存或磁盘上的内容,因为操作系统加了一个虚拟内存的中间层,所以我们也需要为进程实现地址翻译器,实现从虚拟地址到物理地址的转换,页表是虚拟内存系统中重要的数据结构,每一个进程的页表中都存储了从虚拟内存到物理内存的映射关系,为了存储64位系统中128TiB虚拟内存的映射数据,Linux在2.6.10中引入了四层的页表来辅助虚拟地址的转换,在4.11中引入了五层的页表结构。

在上图所示的四层页表结构中,操作系统会使用最低的12位作为页面的偏移量,剩下的32位会分四组分别表示当前层级在上一层的索引,所有的虚拟地址都可以用上述的多层页表查找到对应的物理地址。

所以多个进程可以通过虚拟内存共享物理内存。在Linux中调用fork的时候,实际上只复制了父进程的页表。父子进程会通过不同的页表指向相同的物理内存。

虚拟内存不仅可以在fork时用于共享进程的物理内存,提供写时复制的机制。还能共享一些常见的动态库减少物理内存的占用、所有的进程都可能调用相同的操作系统内核代码,而C语言也会调用相同的标准库。

除了能够共享内存之外,独立的虚拟内存空间也会简化内存的分配过程,当用户程序向操作系统申请堆内存时,操作系统可以分配几个连续的虚拟页,但是这些虚拟页对应到物理内存中不连续的页。

内存保护

操作系统中的用户程序不应该修改只读的代码段,也不应该读取或修改内核中的代码和数据结构或者访问私有的的以及其他的进程的内存,如果无法对用户程序的内存访问进行限制,攻击者就可以访问和修改其他进程的内存影响系统的安全。

如果每一个进程都持有独立的虚拟空间,那么虚拟内存中页表可以理解为进程和物理空间的连接表,其中可以存储进程和物理页之间的访问关系,包括读权限、写权限和执行权限:

MMU可以决定当前进程是否是否有权限访问目标的物理内存,这样我们就最终将权限管理的功能全部收敛到虚拟内存系统中。

总结

Linux中为什么需要虚拟内存:

  • 虚拟内存可以结合磁盘和物理内存的优势为进程提供看起来速度足够快并且容量足够大的存储
  • 虚拟内存可以为进程提供独立的内存空间并引入多层的页表结构将虚拟内存翻译为物理内存,进程之间可以互相共享物理内存减少开销,也能简化程序的链接、装载以及内存分配过程
  • 虚拟内存可以控制进程对物理内存的访问、隔离不同进程的访问权限,提高系统的安全性

相关推荐

卡巴斯基实验室成功将Linux系统的驱动程序移植到“KasperskyOS”

据os.kaspersky.com网站8月8日报道,俄罗斯卡巴斯基实验室启动了一个研究项目,将Linux驱动程序移植到卡巴斯基公司自主研发的操作系统KasperskyOS——这是该实验室创建的“安全...

服务器程序从 Windows 系统移植到 Linux/x86_64 平台时总是崩溃?

清华大学出版社的《高效C/C++调试》一书给出了回答:我们的服务器程序最初是为Windows系统开发的,第一次将它移植到Linux/x86_64平台时,它在回归测试中十次会崩溃八次,且仅在...

Linux系统的移植和裁剪(linux移植lvgl)

本节将嵌入式Linux系统按需求裁剪后移植到ARM处理器中。通过对Linux系统的了解和认识,我们在这里选择Linux4.1.15版本,该版本支持64位处理器,相对于前面几代Linux版本有了更大的提...

搭建RISC-V模拟环境(搭建虚拟环境)

现在RISC-V在主流操作系统上基本都能模拟了,不过我还是觉得Linux下好用。之前在Mac上想用Linux,基本就是在VirtualBox上创建一个虚拟机,从网上下一个Ubuntu的安装iso,安...

CPU虚拟化:陷入和模拟(cpu虚拟模式是什么)

导读:本文摘自于王柏生、谢广军撰写的《深度探索Linux系统虚拟化:原理与实现》一书,重点讨论了虚拟CPU在Guest模式下运行时,由于运行敏感指令而触发虚拟机退出的典型情况。作者:王柏生、谢广军来源...

《模拟山羊》恶搞僵尸主题DLC公布 《DayZ》躺枪!

近日,开发商CoffeeStain为我们带来了一个好消息,那就是奇葩游戏《模拟山羊(GoatSIMulator)》僵尸主题DLC“GoatZ”将于5月7日登陆PC,Mac,Linux,iOS和安卓...

「精品课程」模拟IC设计进阶(模拟ic设计师怎么样)

课程导语模拟集成电路设计最重要的是基础理论知识,基础理论的重要性很多人一开始并没有意识到,工作一段时间,做过几个项目以后就会深有感触。除此之外就是个人的学习能力和分析问题、解决问题的能力,其实这些能力...

跨平台神器:在Linux上轻松运行Windows软件的方法大揭秘!

Wine始于30年前的一个业余爱好项目,当时Windows3.1及其16位API出现了。在一个简单的“HelloWorld”程序之后,它很快就成功地让Solitaire运行起来。...

LAMMPS 模拟教程全新发布,助力科研入门分子模拟世界

https://arxiv.org/html/2503.14020v1本研究发布了8个层层递进的LAMMPS模拟教学教程,并配套开发了专属图形界面LAMMPS–GUI,显著降低了分子模拟的入门门槛。...

Linux趣味命令,每一个都能产生炫酷效果(示例)

Linux趣味命令,每一个都能产生炫酷的效果:cmatrix:模拟《黑客帝国》中的字符矩阵效果。bashCopycodecmatrixfortune:随机显示一句有趣的引语或笑话。bashCopy...

「免费!免费!Chris老师经典模拟课程」CMOS模拟电路设计流程

创芯大讲堂为广大学员发福利各位创芯大讲堂的同学们,即日起,凡当月购买大讲堂课程达到300元的同学可以享受创芯大讲堂全场课程8折优惠,凡当月购买创芯大讲堂课程达到500元的同学可以享受创芯大讲堂全场课程...

Gromacs基本模拟流程(gromacs运行命令)

GROMACS是一个使用经典分子动力学理论研究蛋白质动力学的高端的高效的工具。GROMACS是遵守GNU许可的免费软件,可以从以下站点下载:http://www.gromacs.org,并且可以在l...

国外友人开创Python模拟登陆神库,完美修改它为咱们所用

Awesome-python-login-model是一个国人开发的模拟登陆仓库,在这个仓库上有20几个网站的模拟登陆脚本,你可以基于这个仓库实现的代码做简易的修改,以实现自己的自动化功能。仓库地址...

并发模拟的四种方式+工具,超级实用

原文链接:https://mp.weixin.qq.com/s/jJDJ8YwmzkKS9KvfMamLWA一、PostmanPostman是一个款http请求模拟工具首先演示一下postman最基本...

精选模拟IC设计仿真课程(精选模拟ic设计仿真课程怎么样)

课程介绍本系列课程采用屏幕录制视频及操作解说的形式,注重于模拟芯片设计流程中的电路原理图设计、仿真及优化方法、版图设计、寄生参数提取及后仿真优化等的实际操作,在电路设计过程中学习模拟IC设计和验证方法...