1.让有意义的事情变得有趣2.物理内存,虚拟内存3.Linux中的分页机制1.让有意义的事情变得有趣昨天看到下面这句话,送给你:让有趣的事情变得有意义,并使有意义的事有趣!我不敢说这是一种人生哲理,但是我们可以从这句话中找到我们做一件事的指导。比如:在学习Linux操作系统的过程中,很多枯燥的知识点并不是好玩的、没有意义的东西。但是为什么我们还要强迫自己静下心来读那些大部头的书呢?因为这件事很有意义!所以,如果我们能够把这个有意义的事情变得更加有趣,那么我们就可以调动我们很多潜在的热情。在这篇文章中,我们用一种简单轻松的方式来谈谈常见的虚拟内核和物理内存。二、物理内存和虚拟内存1、从x86硬件的角度来看在x86平台上,主存(也就是我们说的内存)负责存储指令和数据,其作用仅次于CPU.没有内存,即使是最好的CPU也无法工作。就像人脑一样,如果没有记忆功能,再聪明也用不上。内存被分成若干个存储单元,编号从0到最大的存储单元。CPU通过地址总线定位到内存空间,通过数据总线从内存中读取数据,或者向内存中写入数据。我们都知道,同一个x86平台的硬件,可以安装Windows操作系统,也可以安装Linux操作系统。也就是说,当硬件生产出来的时候,它并不知道自己的硬件上会运行什么样的程序。可能有些高手会直接写一个强大的程序,直接管理各种硬件资源,实现自己的特定功能!?不管怎样,x86平台处理器架构定义了自己的一套访问内存的规则。因此,从x86平台硬件的角度来看,只有(物理)内存,它根本不知道什么是虚拟内存。2、从操作系统的角度来看,操作系统最重要的功能是:为应用程序屏蔽各种硬件资源,提供更友好的界面,使程序开发更容易。因此,操作系统会充分利用硬件的各种运行机制,然后进行抽象和封装,为应用程序开发者提供一个稳定的环境。所以对于内存,操作系统向下管理物理内存,向上为应用程序提供虚拟内存。虚拟内存是操作系统在应用程序和物理内存之间添加的抽象层。加入这个抽象层后,好处多多。3、从应用程序开发人员的角度来看,很久以前,在各种单片机和嵌入式MCU上编写应用程序时,经常会面临内存非常吃紧的情况,因此需要优化自己的A利用有限的硬件资源来实现某些功能的程序。(突然想起多年前老工程师跟我说过,面对如此有限的资源,我会哭!)硬件发展日新月异,这种硬件资源吃紧的情况似乎很少遇到。是的:我可以随心所欲地使用内存,并且可以随心所欲地分配内存。当然,操作系统也会给一些限制,这只是操作系统层面的限制,因为它有自己的考虑。当应用程序请求一块内存空间时,操作系统为了满足应用程序的需要,会从虚拟内存中“划分”出一块空间,然后将这块空间的起始地址返回给应用程序。所以,从应用开发的角度来说,我们不关心物理内存,虚拟内存。只要我malloc,操作系统就会给我足够的空间!至于这个空间分配到哪里,我无所谓!也就是说,应用程序是为虚拟内存编写的,而不是为物理内存编写的。.当然,数据的最终存储必须是物理内存。至于虚拟内存和物理内存之间如何建立对应的映射关系,这是操作系统关心的事情。每个应用程序只能看到自己的虚拟内存空间,这是一个连续的空间,从而保证不同应用程序之间的隔离,达到安全目的。3、Linux中的分页机制现在我们去组装PC,内存条至少要有8G或者16G!但是在很多年前,这是一件非常非常奢侈的事情,主要是价格因素。记得之前做毕业设计的时候,为了省代码,去南京珠江路买了个U盘,64G,好像70块钱。与内存相比,硬盘的价格要便宜很多!因此,Linux操作系统充分利用硬盘来欺骗应用程序,让应用程序认为有永远用不完的内存资源。在32位系统中,一个应用程序可以访问的最大内存空间是2的32次方,也就是4GB,即使此时实际物理内存没有那么大。实际上,这类似于酒店。假设有一个老板,他开了一家旅馆,共有1000间客房。同时,老板还有一个空间更大的仓库,可以容纳10000张床位。老板很聪明,他明白两个事实:旅行团或客人只能看到酒店的大门和大堂,不知道酒店房间的布局;旅行团不同时间来同时住宿;所以老板在对外宣传的时候说:我的酒店很大,有10000间客房,欢迎前来入住!为了简化问题,我们假设每个旅游团有100人。有一次,第一批3个旅行团入住时,老板觉得房间够了,就把300人全部安排在了酒店房间。不一会儿,第二批4个旅行团来了,此时入住的总人数变成了700人。老板开始计算:房间一共只有1000间,现在已经消耗了700间,还剩300间,还能撑一阵子。没多久,第三批客人来了,这次是5个旅游团:500人。因为老板宣传有10000间房间,还是比较够用的。老板面对新来的500人时,只见他从容地将第一批和第二批700人从房间调到仓库。我们假设客户处于睡眠状态,只需要一张床,不需要消耗其他资源。然后安排新的500人入住房间。至此,共有300+400+500=1200人入住酒店。虽然酒店只有1000间客房,但通过借用仓库暂时存放睡觉的顾客,此时酒店内还有500间空闲房间。可以继续接待客人。.等到前三个旅行团结账的时候,老板偷偷把300人从仓库调到了酒店房间。这些客人醒来的时候,还是和我睡着时一样的环境,很好。..上面的过程和linux系统中虚拟内存的分页方式很相似:虚拟内存=广告10000个房间;物理内存=实际1000个房间;硬盘=只有床的仓库。当物理内存不够用时,操作系统会将部分物理内存页的内存暂时存放在空间更大、价格更便宜的硬盘上,然后可以回收物理内存继续使用。怎么样,通过这个类比,是不是对Linux系统中的虚拟内存有了更感性的认识呢?最后再跟大家说一下文章开头的那句话:当你面对一件有意义但无聊的事情时,不妨考虑为其增加一些意义;而当你面对有趣但毫无意义的事情时,你也可以赋予它一些意义!本文转载自微信♂“IOT物联网小镇”,可以使用二维码关注。转载本文请联系物联小镇公众号。
