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

图解虚拟内存、物理内存、swap分区的工作与管理

gudong366 2025-04-21 23:45 6 浏览

首先,问大家一个很有趣的问题,有人玩过单片机吗?有人用过 Excel 表格吗?

相信很多人都没有把玩过单片机,但是 Excel 倒是玩得贼溜,是不是?

没玩过单片机,哪听说过单片机有操作系统吗?能同时运行多个程序吗?

没吃过猪肉,还没见过猪跑么?单片机是没有操作系统的,也不能同时运行多个程序!

因为单片机都是把写好的程序直接烧录到设备中去,一旦烧录了,就不能更改,而且同时只能让运行一个程序,不能运行多个。因为,刀片机中的程序是直接操作物理内存的。

你可以脑补一下,如果同一个物理内存地址被多个程序同时使用,会出现什么情况?那画面,简直不可入脑。 脑壳痛!!!

而我们现在用的 windows 系列、类 unix 系列操作系统,‘智能’ 的为我们设计了一套内存管理机制 MMU。

每个进程一运行,就会给他分配一个虚拟内存 VM 空间,和在内存条中分配一段物理内存 PM 空间。虚拟内存里面的信息告诉进程,自己要用的内存数据,在物理内存哪些地方。

每个进程都有分配自己的虚拟内存,虚拟内存中记录物理内存的位置信息,所以,每个进程的内存就被天然的隔离了,不会出现在内存条中,抢别的进程资源。

而一个进程要能正常运行,它的物理内存中,至少会包括:栈数据、堆数据、代码信息、数据信息,这些在物理内存中是分块存放的,也就是从某一个位置开始,连续一段空间,都是存着相同类型的数据,所以,虚拟内存中,要把这些数据的起始位和偏移量都存储好,这样,进程要使用某一类数据时,就能快速找到这类数据在内存中的位置,从而获取到数据。

说了一大堆,可能还有很多人没有明白,下面,整点明白的。

你平时工作中,是不是要整很多 Excel 表格,存储各种工作信息,你要某些工作信息时,就打开这个 Excel 文件,这个文件中有很多个工作表,你要某些数据时,就点击工作表的名称,打开对应表格,查看对应数据。

你可以把整个 Excel 文件,理解为进程运行需要的信息,每一个工作表名称,就相当于虚拟内存,告诉我们,需要的具体数据在哪儿?每一个工作表中信息,就相当于物理内存中存储的数据,点击工作表名,进入工作表,就能获得到数据位置。

这个例子,容易理解吧。然后,再对照上面的专业性内容看下,是不是容易理解了?

现在对虚拟内存和物理内存,是不是有了比较清楚的认识了。

但是,这还不是我们操作系统对内存管理的最优办法,因为,上面讲的方法,还存在容易产生内存碎片内存交换效率不高的问题。

当连续启动多个进程时,会在内存条上分配连续的内存空间块,但是,一旦中间某个进程停了,释放内存空间,就会出现内存块不连续,出现内存碎片。

此时,如果启动一个新的进程,如果申请的内存空间大于剩余内存空间碎片的大小,就无法申请到内存空间而报错,但是,内存的实际总剩余空间可能又是大于申请的内存空间的。

举个例子,就像你有一个工作表,你开始写东西时,从第一行开始往下写,连续行,密密麻麻的写了很多。结果,你发现其中有些信息是无效的,不用了,你就把整行信息删除,但是没有删除行,这样,这个工作表,就出现了零碎的空行。现在,你又想利用空行,往里面写数据,但是你要写的数据是多行,行数大于零碎的空行。

你怎么办呢?

你是不是想到了,先剪切有数据的行到黏贴板,然后从空行位置开始黏贴,这样,是不是就可以把空行整理到一起了?

其实,我们计算机内存管理,也有类似的办法。

磁盘上虚拟一块空间,叫 swap 分区,然后,把内存中一整段空间,剪切到 swap 分区,然后,再还原回内存,这样,就移动了原来的内存空间位置,把空闲的内存空间整理到了一起。这个,是不是很容易理解了。

理解是容易了,但是,这个办法真的很好吗?

swap 分区,是由磁盘虚拟而来的,它的速度远远慢于内存速度,而一个进程,它的内存空间一般都是几百兆,如果,一次拷贝一个或几个进程的内存资源到 swap 分区,然后再还原到内存,这个时间势必会很长,用户就会明显感觉卡顿,甚至操作无响应。

这又该怎么办呢?

如果是你,你会不会想,能不能一次不拷贝那么多、那么大,每次拷贝小点,分多次拷贝?

计算机也是这么想的,所以,就出现了一个内存分页管理。把整个虚拟内存和物理内存空间切成固定大小的页片,Linux 中,默认这个页片是 4K。若一个进程需要 256M 的内存空间,就把这个空间大小除以 4K,就得到了它的页片数,就分成这么多页。虚拟内存中,建立一个页表,记录页信息,需要的时候就去物理内存中获取,物理内存也不需要全部都存放,也可以在用的时候,内存再去其他设备上获取,因为每次都只获取几 K,量少,速度也会很快。

这个,我们怎么理解呢?

依然用 Excel 工作表举例,在一个表格中存了很多数据,我们可以根据某列的值进行分组,相同的为一组,那么,你要找某个数据时,是不是看下它的值,然后,直接找它那一组的数据,再从一组数据中找到你想要的数据,是不是要快很多。

但是,这个分组管理简单吗?

可能,想象中简单,但是实际工程中还是很复杂的。所以,这个页管理还是很复杂的。感兴趣的同学,可以自己再去学习研究。

好了,对于今天讲的虚拟内存、物理内存、swap 分区知识掌握了吗?

相关推荐

一文讲清怎么利用Python实现Linux系统日志检索分析管理系统

摘要:在现代IT运营与开发中,日志分析早已成为不可或缺的核心环节。无论是排查系统故障、进行安全审计,还是优化服务性能,日志文件始终是最真实、最权威的信息来源。Linux系统作为主流的服务器操作系统,其...

Linux 思维导图整理(建议收藏)(linux知识点总结思维导图)

今天整理了一下收集的Linux思维导图。Linux学习路径Linux桌面介绍FHS:文件系统目录标准Linux需要特别注意的目录Linux内核学习路线地址:https://www.jiansh...

什么是操作系统(什么叫做操作系统)

Linux也是众多操作系统之一,要想知道Linux是什么,首先得说一说什么是操作系统。计算机是一台机器,它按照用户的要求接收信息、存储数据、处理数据,然后再将处理结果输出(文字、图片、音频、视频...

Windows操作系统和Linux操作系统有什么不同?

每天一分钟,关注我学更多今天的内容是Windows操作系统和Linux操作系统在多个方面存在显著差异,主要体现在用户界面、开源性、稳定性和安全性等方面。用户界面:Windows操作系统提供直观高效的图...

每日学习“IT”是什么呢?(it学习网站)

IT是信息技术(InformationTechnology)的简称,它是一个广泛的领域,涉及到利用计算机、网络通信技术、软件等来存储、处理、传输和获取信息。计算机硬件硬件组成部分:包括中央处理器(...

CAD是什么?如何选择最适合你的CAD软件?

CAD(计算机辅助设计)是建筑、机械、电子等行业的核心工具,通过数字化手段实现高精度设计与协作。传统CAD软件如AutoCAD功能强大,但操作复杂、成本高昂,而轻量化工具又难以满足专业需求。元图CAD...

Linux是什么?(linux是什么意思)

在今天的时代,计算机系统已经成为了我们生活中不可或缺的一部分。而Linux则是目前世界上最为流行和免费的操作系统之一,它以其自由和开放源代码的特点,吸引了全球大量的程序员和开发者前来使用和修改。那么,...

牛人带你通透理解高可用网络基础架构的关键组件:负载均衡机制

上篇给大家介绍的内容是微服务网关:Zuul源码解析,相信大家已经领会并且贯通了;那么本文将给大家介绍的内容是负载均衡:负载均衡机制。负载均衡负载均衡(LoadBalance)是分布式网络环境中的重要...

Linux运维网络篇(linux运维网站)

Linux运维过程中,我们会遇到各种形形色色的网络问题,今天我们就常见的检测手段以及处理办法给大家做一下统一分享。第一节:网络探测首先,我们需要通过各种命令来探测网络是否畅通,进而跟踪锁定到实际...

Nginx正向代理、反向代理、负载均衡及性能优化

一、Nginx是什么Nginx是一款高性能的HTTP和反向代理服务器,由俄罗斯人IgorSysoev(伊戈尔·赛索耶夫)为俄罗斯网站Rambler.ru开发的,在Rambler.ru网站平稳的运...

nginx负载均衡配置(nginx负载均衡配置教程)

Nginx是什么没有听过Nginx?那么一定听过它的“同行”Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(UniformResources...

Springmvc使用Nginx负载均衡session共享

上一节,我们讲到nginx的结构组成,已经把模块、还有之前谈及负载均衡知识时候遗留的东西进行了讲解,那么今天我们继续把使用nginx做负载均衡的时候,如何处理session的方法做个解析,如何有需要对...

Linux 系统卡顿问题的排查思路(linux系统突然非常卡)

#Linux系统卡顿问题排查思路当Linux系统出现卡顿问题时,可以按照以下系统性排查思路进行分析和解决:##1.快速检查系统整体状态###查看系统负载```bashuptimetophto...

一文搞懂LVS负载均衡工作原理 :NAT、DR、TUN模式

大家好,我是IT售前工程师Bernie。LVS(LinuxVirtualServer)是企业中常用的负载均衡方案,是一种基于Linux虚拟服务器,也是Linux标准内核的一部分。它能够实现高性...

从零构建高性能 LVS + Keepalived 四层负载均衡集群实战指南

一、前言在大型网站架构中,四层负载均衡是流量调度的第一道防线。相比七层(如Nginx、HAProxy),四层(基于IP/端口转发)在性能上更具优势。LVS(LinuxVirtualServer...