0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于虚拟内核和物理内存的那些事

Linux阅码场 来源:唯美学编程 作者:唯美学编程 2021-05-28 15:25 次阅读

一、让有意义的事情变的有意思

二、物理内存、虚拟内存

三、Linux 中的换页机制

一、让有意义的事情变的有意思昨天,看到下面这句话,送给您:

让有意思的事情变的有意义,让有意义的事情变的有意思!

不敢说这是一句人生哲学,但是我们可以从这句话中找到我们做一件事情时的导向。

比如:在学习 Linux 操作系统的过程中,很多枯燥无味的知识点,都是不好玩、没有意思的事情。

但是为什么我们还要逼着自己,静下心来啃那些大部头书籍呢?因为这件事情有意义!

所以啊,如果能够在这件有意义的事情上,再变得更有意思,那就可以调动我们潜在的很多积极性。

这篇文章,我们用简单、轻松的方式,来聊一下老生常谈的虚拟内核和物理内存的那些事。

二、物理内存、虚拟内存1. 从 x86 硬件角度看

在 x86 平台上,主存储器(也就是我们说说的内存)负责存储指令和数据,它的作用仅次于 CPU

离开了内存,性能再好的 CPU 也无法工作。

就像人类的大脑一样,如果没有了记忆功能,再怎么聪明都无法施展。

内存被划分为若干个存储单元,从 0 开始编号,一直到最大的那个存储单元。

CPU 通过地址总线来定位一个内存的空间,通过数据总线从内存中读取数据、或者向内存中写入数据。

我们都知道,同一个 x86 平台的硬件,既可以安装 Windows 操作系统,也可以安装 Linux 操作系统。

也就是说,在生产硬件的时候,它并不知道: 在自己的硬件之上,将会运行什么样的程序。

也许会有高手直接写一个牛逼的程序,直接来管理各种硬件资源、实现自己特定的功能呢!?

不管如何,x86 平台处理器架构定义了自己的一套规则来访问内存。

因此,从 x86 平台硬件角度看,只有(物理)内存这个东西,它压根不知道什么是虚拟内存。

2. 从操作系统的角度看

操作系统最重要的功能就是:向应用程序屏蔽了各种硬件资源,提供更加友好的接口,让程序开发变得更容易。

所以,操作系统会充分利用硬件的各种运行机制,然后进行抽象、包装,面向应用程序开发者提供一个稳定的环境。

那么对于内存来说,操作系统向下对物理内存进行管理,向上对应用程序提供虚拟内存。

虚拟内存,就是操作系统在应用程序与物理内存之间加入的一层抽象,加入这个抽象层之后,有很多的好处。

3. 从应用程序开发者的角度看

在很久以前,各种单片机嵌入式 MCU 上,编写应用程序的时候,经常会面对内存很紧张的情况,这是就要很好的来优化自己的程序,利用有限的硬件资源来实现一些功能。

(突然想起多年之前的以为老工程师对我说,面对那么有限的一点资源,都会想哭!)

随着硬件的快速发展,这种硬件资源紧张的情况好像很少遇到了,给我们的感觉是:内存我可以随便用,想要多少就 malloc 多少。

当然了,操作系统会给出一些限制的,这只是操作系统层面的限制,因为它有自己的考量因素。

当应用程序提出申请一块内存空间时,操作系统为了满足应用程序的需求,就会从虚拟内存中“划分”出一块空间,然后把这个空间的开始地址返回给应用程序。

因此,从应用程序开发的角度看,我们并不关心物理内存、虚拟内存。

只要我 malloc 了,操作系统给我一个足够的空间就行!至于这个空间是从哪里分配的,I don‘t care!

也就是说,应用程序是面向虚拟内存编写的,而不是面向物理内存编写的。

当然了,最终存储数据的肯定是物理内存,至于虚拟内存如何与物理内存建立对应的映射关系,这就是由操作系统操心的事情了。

每个应用程序只能看到自己的虚拟内存空间,这是一块连续的空间,从而保证了不同应用程序之间的隔离,达到安全目的。

三、Linux 中的换页机制如今,我们去攒一台 PC 机,内存条最少都是 8G、16G吧!但是在多年之前,这是非常、非常奢侈的一件事情,主要还是价格的因素。

我记得自己在做毕业设计的时候,为了保存代码,去南京珠江路买了一个 U 盘,64G,好像是 70 块钱。

相比内存来说,硬盘的价格就便宜多了!

因此,Linux 操作系统就充分利用硬盘来糊弄应用程序,让应用程序觉得有永远也用不完的内存资源。

在一个 32 位的系统中,应用程序可以访问的最大内存空间是 2 的 32 次方,也就是 4 GB,即使此时实际的物理内存并没有这么大。

其实这就类似于一家旅馆,假如有一个老板,开了一家旅馆,一共有 1000 个房间。

同时,老板还有一个空间更大的仓库,仓库里可以放 10000 个床铺。这个老板很聪明,他明白 2 个事实情况:

旅行团或顾客只能看到这个旅馆的门头和大厅,并不知道旅馆里面的房间布局;

旅行团并不会在同一时刻、扎堆的同时来住宿;

因此老板在对外宣传的时候,就说:我的旅馆很大,有 10000 个房间,欢迎前来入住!

为了简化问题,我们假设每个旅行团有 100 人。

在某个时间,当有第一批的 3 个旅行团入住的时候,老板觉得房间足够,于是把这 300 人都安排在旅馆的房间中。

过了一会,又来了第二批 4 个旅行团,此时总的住宿人数变成了 700 人。

老板开始计算:一共就 1000 个房间,现在消耗掉 700 个了,还剩 300 个,还能撑一会。

没多久,第三批顾客上门了,这回是 5 个旅行团的人数:500 人 。因为老板宣传说:有 10000 个房间,充足的很。

老板在面对这新的 500 个人时,只见他从容的把第一批和第二批的 700 个人,从房间中转移到仓库。

我们假设顾客都处于睡眠状态,仅仅需要一张床而已,不需要消耗其他的资源。

然后把这新的 500 人,安排在房间中入住。

此时,一共入住了 300 + 400 + 500 = 1200 人,虽然旅馆只有 1000 个房间,但是通过借用仓库去暂时存放处于睡眠状态的顾客,此时旅馆中还剩下 500 个空闲的房间。

还可以继续接待客人。。

当到了 第一批的 3 个旅行团退房的时间时,老板再把这 300 人从仓库中 偷偷地转移到旅馆的房间中。这些客人醒来一看,还是我入睡时的那个环境,很好很好。。。

以上这个过程,就非常类似 Linux 系统中虚拟内存的换页方式:

虚拟内存 = 对外宣传的 10000 个房间;

物理内存 = 实际的 1000 个房间;

硬盘 = 只有床铺的仓库。

当物理内存不够的时候,操作系统把一些物理内存页的内存暂时存储到空间更大、价格更便宜的硬盘上,然后就可以回收这些物理内存继续使用了。

怎么样,通过这样的类比方式,是不是对 Linux 系统中的虚拟内存有更加感性的认识?

最后,再向你安利一下文章开头的那句话:

当你面对一件有意义、但是没意思的事情时,不妨考虑给它加点意思;而当你面对有意思、但是没意义的事情时,也可以给它赋予一些意义!

原文标题:Linux系统是如何用虚拟内存来欺骗应用程序的?

文章出处:【微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11229

    浏览量

    208927
  • 内存
    +关注

    关注

    8

    文章

    3002

    浏览量

    73884
  • 操作系统
    +关注

    关注

    37

    文章

    6738

    浏览量

    123190

原文标题:Linux系统是如何用虚拟内存来欺骗应用程序的?

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何优化RAM内存使用

    :使用任务管理器查看当前运行的程序和服务,关闭那些不需要的。 禁用启动程序 :减少开机启动项,只保留必要的程序。 2. 优化操作系统设置 调整虚拟内存 :合理设置虚拟内存,避免过多占用硬盘空间。 清理磁盘 :定期进行磁盘清理,
    的头像 发表于 11-11 09:58 174次阅读

    京准时钟科普:关于北斗卫星同步时钟的那些

    京准时钟科普:关于北斗卫星同步时钟的那些
    的头像 发表于 10-29 09:28 223次阅读
    京准时钟科普:<b class='flag-5'>关于</b>北斗卫星同步时钟的<b class='flag-5'>那些</b><b class='flag-5'>事</b>?

    逻辑内存物理内存的区别

    逻辑内存物理内存是计算机系统中两个重要的概念,它们在计算机的运行和数据处理中起着至关重要的作用。 1. 物理内存(Physical Mem
    的头像 发表于 09-27 15:38 453次阅读

    辊压机轴承位磨损修复你不知道的那些

    电子发烧友网站提供《辊压机轴承位磨损修复你不知道的那些.docx》资料免费下载
    发表于 03-12 15:10 0次下载

    【鸿蒙】(一)Vmware虚拟机和Ubuntu安装

    代码和编译非常缓慢; 例如;我的电脑是 8 核,16 个逻辑处理器,虚拟机的处理器数量选择 1,每个处理器的内核数量选择 12; 3.虚拟机内存配置不得超过电脑内存 根据经验,
    的头像 发表于 02-26 21:27 3250次阅读
    【鸿蒙】(一)Vmware<b class='flag-5'>虚拟</b>机和Ubuntu安装

    物理内存模型的演变

    内存管理概述中,主要是以Linux v2.6.11为例进行分析的,但是计算技术在不断发展,新的存储架构、新的指令集架构、新的SoC架构等都对物理内存模型的抽象提出了更高要求。为此,必须抽象一种完全独立于硬件架构的
    的头像 发表于 02-25 10:35 439次阅读

    Linux内核内存管理之内核非连续物理内存分配

    的主要优点是避免了外部碎片,而缺点是需要修改内核页表。显然,非连续内存区域的大小必须是4096的倍数。Linux使用非连续物理内存区的场景有几种:(1)为swap区分配数据结构;(2)
    的头像 发表于 02-23 09:44 871次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>内存</b>管理之<b class='flag-5'>内核</b>非连续<b class='flag-5'>物理</b><b class='flag-5'>内存</b>分配

    Linux内核内存管理之ZONE内存分配器

    内核中使用ZONE分配器满足内存分配请求。该分配器必须具有足够的空闲页帧,以便满足各种内存大小请求。
    的头像 发表于 02-21 09:29 865次阅读

    拆解mmap内存映射的本质!

    mmap 内存映射里所谓的内存其实指的是虚拟内存,在调用 mmap 进行匿名映射的时候(比如进行堆内存的分配),是将进程虚拟内存空间中的某一
    的头像 发表于 01-24 14:30 1490次阅读
    拆解mmap<b class='flag-5'>内存</b>映射的本质!

    linux内核主要由哪几个部分组成,作用是什么

    内存。它将内存划分为不同的区域,并通过内存管理算法来分配和回收内存。它还提供了虚拟内存功能,允许多个进程共享系统的
    的头像 发表于 01-22 14:34 2605次阅读

    Linux内核内存管理架构解析

    内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高
    的头像 发表于 01-04 09:24 635次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>内存</b>管理架构解析

    Windows服务器虚拟内存的设置建议

    虚拟内存是计算机操作系统用于扩展物理内存的一种机制。在Windows服务器上,虚拟内存的设置对系统性能和稳定性至关重要。以下是关于Windo
    的头像 发表于 12-25 17:03 2353次阅读

    关于射频微机电系统开关的那些事儿

    关于射频微机电系统开关的那些事儿
    的头像 发表于 12-06 14:58 488次阅读
    <b class='flag-5'>关于</b>射频微机电系统开关的<b class='flag-5'>那些</b>事儿

    java虚拟机内存包括远空间内存

    Java虚拟机(JVM)内存是Java程序执行时所使用的内存空间的总称,包括了Java堆、方法区、本地方法栈、虚拟机栈和程序计数器等多个部分。在这些
    的头像 发表于 12-05 14:15 379次阅读

    关于MLCC(多层陶瓷电容)替代Film Cap (薄膜电容)的那些

    关于MLCC(多层陶瓷电容)替代Film Cap (薄膜电容)的那些
    的头像 发表于 12-04 17:35 1933次阅读
    有<b class='flag-5'>关于</b>MLCC(多层陶瓷电容)替代Film Cap (薄膜电容)的<b class='flag-5'>那些</b><b class='flag-5'>事</b>