Linux 内存管理 pt.1
哈喽大家好,我是咸鱼
今天我们来学习一下 Linux 操作系统核心之一:内存
跟 CPU 一样,内存也是操作系统最核心的功能之一,内存主要用来存储系统和程序的指令、数据、缓存等
关于内存的学习,我会尽量以通俗易懂的方式且分成多篇文章去讲解
那么今天在 pt.1 文章中,我们来学习一下 Linux 中的虚拟内存、物理内存和内存映射
Linux 内存

只有内核才可以直接访问物理内存,进程是无法直接访问物理内存的
那么进程是如何访问物理内存?
Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个空间是连续的,这样进程就可以很方便的访问到内存,准确来说是访问到虚拟内存
又因为这个虚拟地址空间(虚拟内存)与物理内存相关联,进程则是通过虚拟内存去访问物理内存的

虚拟地址空间又被分成内核空间和用户空间,进程在用户态时只能访问虚拟用户空间地址,在内核态可以访问虚拟内核空间地址
对于不同位数字长(单个 CPU 指令可以处理数据的最大长度)的处理器(32位系统、64位系统),地址空间的范围也不同

由上图可以看到,32 位系统的内核空间占 1G,位于最高处;剩下的 3G 是用户空间
而 64 位系统的内核空间和用户空间都是 128T,分别占据整个内存空间的最高和最低处,剩下的中间部分是未定义的
虽然每个进程都有虚拟内核空间,但每个进程的虚拟内核空间内存关联的都是相同的物理内存,方便进程切换到内核态后去访问物理内存

物理地址空间是物理内存的范围,虚拟地址空间是虚拟内存的范围,物理地址空间中的每个物理地址都是实打实地指向了具体的存储单元
虚拟地址空间中每个虚拟地址指向哪里有 3 种情况:
未分配,这个虚拟地址仅仅是个数字而已,没有任何指向
未缓冲,这个虚拟地址指向了磁盘的某个字节存储单元,里面存储了指令或者数据
已缓冲,这个虚拟地址指向了物理内存的某个字节存储单元,里面存储了指令或者数据。
虚拟内存的好处:
避免用户直接访问物理内存,防止一些破坏性操作,保护操作系统
每个进程都被分配了 4GB 的 虚拟地址空间,用户可使用比实力物理内存更大的地址空间(用的时候才分配)

那么当进程实际使用的时候,进程的虚拟内存是怎么分配到物理内存的呢?
1.内存映射
并不是所有的虚拟内存都会被分配物理内存,只有那些实际使用的虚拟内存才分配物理内存,并且分配后的物理内存,是通过内存映射来管理的
内存映射,其实就是将虚拟内存地址映射到物理内存地址
为了完成内存映射,内核为每个进程都维护了一张页表,用来记录虚拟内存与物理内存的映射关系
页表实际上存储在 CPU 的内存管理单元 MMU 中。这样,正常情况下,CPU 就可以直接通过硬件,找出要访问的内存

这张页表里面有很多页表项,每个页表项的大小为 4KB。当进程访问的虚拟内存被分配了物理内存之后,系统就会更新页表,在页表项中添加虚拟内存与物理内存的映射关系
缺页异常
如果进程要访问的虚拟内存没有被分配物理内存(即在页表中找不到映射关系),就会产生一个缺页异常中断
这时候系统会进入内核空间分配物理内存、然后更新进程页表,最后再返回用户空间,恢复进程的运行
MMU 中有一个高速缓存 TLB((Translation Lookaside Buffer,转译后备缓冲器),TLB 访问速度要比 MMU 快得多
通过提高 TLB 缓存使用率,可以提高 CPU 的内存访问性能
总结
在 Linux 中,为了提高内存利用率和系统可靠性,同时也为了不同进程之间的内存隔离,进程不能直接访问到物理内存
Linux 为每一个进程都分配了一个虚拟内存,当进程实际使用的时候,虚拟内存才会被分配物理内存
Linux 通过内存映射的方式来实现通过虚拟内存去访问物理内存,为了完成内存映射,内核为每个进程都维护了一张页表,用来记录虚拟内存与物理内存的映射关系
如果进程要访问的虚拟内存没有被分配物理内存(即在页表中找不到映射关系),就会产生一个缺页异常中断
这时候系统会进入内核空间分配物理内存、然后更新进程页表,最后再返回用户空间,恢复进程的运行
感谢阅读,喜欢作者就动动小手[一键三连],这是我写作最大的动力
Linux 内存管理 pt.1的更多相关文章
- linux内存管理---物理地址、线性地址、虚拟地址、逻辑地址之间的转换
linux内存管理---虚拟地址.逻辑地址.线性地址.物理地址的区别(一) 这篇文章中介绍了四个名词的概念,下面针对四个地址的转换进行分析 CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步 ...
- 浅谈Linux内存管理机制
经常遇到一些刚接触Linux的新手会问内存占用怎么那么多?在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这 ...
- linux内存管理
一.Linux 进程在内存中的数据结构 一个可执行程序在存储(没有调入内存)时分为代码段,数据段,未初始化数据段三部分: 1) 代码段:存放CPU执行的机器指令.通常代码区是共享的,即其它执行程 ...
- Linux内存管理原理
本文以32位机器为准,串讲一些内存管理的知识点. 1. 虚拟地址.物理地址.逻辑地址.线性地址 虚拟地址又叫线性地址.linux没有采用分段机制,所以逻辑地址和虚拟地址(线性地址)(在用户态,内核态逻 ...
- 了解linux内存管理机制(转)
今天了解了下linux内存管理机制,在这里记录下,原文在这里http://ixdba.blog.51cto.com/2895551/541355 根据自己的理解画了张图: 下面是转载的内容: 一 物理 ...
- Linux内存管理原理【转】
转自:http://www.cnblogs.com/zhaoyl/p/3695517.html 本文以32位机器为准,串讲一些内存管理的知识点. 1. 虚拟地址.物理地址.逻辑地址.线性地址 虚拟地址 ...
- Windows内存管理和linux内存管理
windows内存管理 windows 内存管理方式主要分为:页式管理,段式管理,段页式管理. 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页:页式管理把内存空间按照页的大小划分成片或 ...
- linux 内存管理——内核的shmall 和shmmax 参数
内核的 shmall 和 shmmax 参数 SHMMAX= 配置了最大的内存segment的大小 ------>这个设置的比SGA_MAX_SIZE大比较好. SHMMIN= 最小的内存seg ...
- linux内存管理子系统
一.Linux内存管理模型 1.虚拟地址与物理地址的映射 2.物理地址的分配二.虚拟地址与物理地址的映射 1.虚拟地址空间分布 32位处理器有32根地址总线,可访问4G的物理空间.其中有0-3G为用户 ...
- Linux内核分析(三)----初识linux内存管理子系统
原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...
随机推荐
- shell命令查找文件
1.find命令的参数下面是find命令一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看论坛里其它贴子有find命令手册使用name选项文件 ...
- find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
- RAID 磁盘阵列 RAID0,RAID1,RAID5,RAID10 软RAID创建以及数据恢复
软raid 做 raid 0 raid 1 raid 5 冗余备份以及数据恢复测试 如果 raid1 磁盘中有一块磁盘损坏,sdi1磁盘会补充上去 RAID 10 创建和使用 1.进行格式话 ...
- 几种C#实现播放声音的方法 DirectX、SoundPlayer等
第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSou ...
- OSPF故障诊断
- 后台运行&和nohup使用
这里首先先介绍一下 ctrl+z bg fg jobs 命令 下面为了观察效果,test1.sh脚本不停的输出hello ctrl + z ,会使一个正在运行的进程挂起(暂停)到后台,而且执行jobs ...
- windows微信如何双开
生活中存在同时使用两个微信的情况,一个工作一个生活,这时希望同时在电脑上登录两个账号.如何做到呢?步骤如下: 右键单击"微信"图标,选择属性,目标框内的路径就是微信安装路径,复制目 ...
- pat乙级自我回顾:一般错误出现原因
在obsidian里面写的有些引用没用,需要的可以评论区或者私信我呦~ 对于错误,末尾的换行不影响格式, 段错误: 一般是设置的数组小于题目给定的要求,循环条件i--写成i++,数组下标写错,也有可能 ...
- Scanner进阶用法
Scanner进阶用法 判断是否为整数,浮点数 package charpter2; import java.util.Scanner; public class Scanner3 { public ...
- 获得New Bing资格后,在Ubuntu环境下使用New Bing
技术背景 如今基于GPT-4的New Bing,结合搜索引擎的功能,可以说已经达到了非常高的智力水平.虽说ChatGPT的出现打击了很多的行业,但是对我们来说也未必不是一种机遇.合理的使用ChatGP ...