Linux内存,先看这篇文章
内存大小计算
我们拿32位系统来举个栗子
2^32 = 4,294,967,296 bytes
4,294,967,296 bytes / 1024 = 4,194,304 kbytes
4,194,304 kbytes / 1024= 4,096 M
4,096 M /1024 = 4G
物理内存如何分页?
分段和分页计算机内存管理的两种方式,这里我只讨论分页。
比如是 4G的内存,我们一个页的大小是 4K,那可以分成多少个页呢?
通过一系列复杂而且不为人知的计算
4,194,304 kbytes / 4 = 1,048,576
所以分页后的物理内存应该是这样排列的
MMU是什么?
如果操作系统是一家银行,那MMU就是这家银行的资金仓库管理员,所有要申请资金的人都要通过管理员才能拿到钱。
我们说的MMU就是内存管理单元,所有什么乱七八糟的虚拟地址最后都是都需要经过MMU这个内存管家把虚拟地址转换成物理地址来操作的。
顺便说一句,并不是所有的支票都可以转成钱的,有些也可能是空头支票,操作系统给应用的虚拟内存,这些虚拟内存并不是都能转换成相对应的物理内存的
分页模式下的虚拟地址转换成物理地址对应图
上面分页的问题
如果是32的系统,我们4G的内存,分成4KB一个页,那需要多少个页呢?
4,194,304 kbytes / 4 = 1,048,576
我们上面已经计算出来了,如果一个虚拟地址和物理地址的映射关系需要4个字节来存储,那我们需要多少空间呢?
1,048,576 x 4bytes = 4,194,304 bytes /1024 = 4,096 k / 1024 = 4M
就是说我们一个映射关系需要 4M的内存,我们操作系统开一个进程就需要开一个映射表,如果我我们开100个进程就需要400M内存,这样的话,我们的操作系统的内存会非常非常吃紧。
所以,操作系统的开发大牛们就发明了多级页表这个东西,多级页表的作用就是为了省空间,每当读到这里,我每每感叹,自己比别人是笨了多少个等级啊。
为什么需要4个字节来存一个页表项呢?因为是32为地址,一个字节是8位,4个字节刚好是32位,所以就需要4个字节存储页表项。
有人会问,这4K存的是物理地址还是虚拟地址呢?
大家想一下,物理地址的分页在系统启动的时候已经确定好了,物理地址是没有必要分多次的。所以这个存的是虚拟地址。
多级页表
然后,大神们就设计出这样的分页方式
我们上面说了,如果只用一级分页的话,导致一个问题是需要的太多的空间来存储映射关系了,那现在改成使用32bit不同的bit来寻址,需要多少内存来存储呢?
2^10 = 1024bytes = 1k
一个页表大小是 4 K ,我们是一个字节一个字节的偏移的,所以一个页我们一定需要 12个bit做偏移来获取页中的具体位置,所以我们必须要留12bits给页表偏移使用。
既然页表偏移使用12bit,那页目录和页表各分到10bits。
1024 * 1024 = 1,048,576
1,048,576 x 4 k = 4,194,304 k
4,194,304 k / 1024 = 4096M = 4G
这样分是不是很牛,计算出来就刚刚好等于 4G 内存
那页表项我们需要多少内存空间呢?
页目录一共是 2^10 = 1024 项,每一项代表一个页目录表的编号,一个页目录表我们需要4个字节来表示,所以占用的存储空间应该是 1024 * 4bytes = 4K 大小。
同理页表也是一样,需要4K大小的存储空间
偏移量这个是不需要存储的,我们只要知道了前面两个位置,再加上偏移量,就能准确知道内存的具体位置了
我们把这种分段方式想象成一本书,就很好理解了。比如,我们要在新华字典查某个字的时候,我们需要在目录里面找这个字在哪一页,这个就需要一个页目录表。然后,我们找到确定的页数后,再通过页表找到在哪一行。最后,我们通过偏移量找到这个字跟行首偏移多少个字。
我们这样就能找到确定的字了。
如下图
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
end
嵌入式Linux
微信扫描二维码,关注我的公众号
Linux内存,先看这篇文章相关推荐
- Vue开发入门看这篇文章就够了
摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...
- 好多人都说存储过程很难?认真看这篇文章就够了
何为存储过程? 存储过程是在数据库管理系统中保存的.预先编译的并能实现某种功能的sql程序,说直白点,java知道吧?和java的方法一样. 每遇到一个新的知识点时,我们都会看看它的优点,从而加深对它 ...
- 上海nas服务器_想要自己搭建NAS服务器?看这篇文章,小白也能学会!(一)
原标题:想要自己搭建NAS服务器?看这篇文章,小白也能学会!(一) NAS即网络附加存储(Network Attached Storage),通过网络提供数据访问服务. 本人不推荐自攒NAS,稳定性差 ...
- 如果有人问你数据库的原理,看这篇文章。(超长预警)
长文,相当的通透.以下为scrat进行总结后的删减版. 下面假定你已经知道时间复杂度 关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata .但很少有文章讲解数据 ...
- Android 8.0新特性(看这篇文章就够了)
2019独角兽企业重金招聘Python工程师标准>>> 在刚结束不久的谷歌 I/O2017开发者大会上发布的第二个Android O(安卓8.0)开发者预览,并且向普通用户开放了第二 ...
- 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下(转)...
本文转自http://blog.csdn.net/gs80140/article/details/51496925 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下: ...
- 使用分层网络模型的两个优点是什么_从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了...
从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了mp.weixin.qq.com 前言 今天和大家一起谈谈"网络",之前写的文章可能不太通俗易懂,有人就 ...
- python入门书籍推荐,看这篇文章就够,请!
python入门书籍推荐,看这篇文章就够,请! 事实上,有关python的书籍很多很多,就当当网就有50000件和python有关的书籍,我特地去了当地的新华书店,蹲了大半天,回来给大家推荐,适合想学 ...
- 男孩,请用几分钟看这篇文章(女孩别看,会哭)
[转] 男孩,请用几分钟看这篇文章(女孩别看,会哭) 这是一个真实的故事,从网上看到,我被女孩的行为感动了,所以才转到我的空间来.是男孩就一定必须要看,只用你几分钟的时间,看完后要深深的思考" ...
- i7处理器好吗_二手CPU值得买吗?购买二手CPU不想交智商税就看这篇文章
二手CPU值得买吗?众所周知,不少装机用户可能因为预算的原因,可能会考虑二手硬件,理论上二手CPU无疑相比全新更加便宜,但是CPU这玩意真的有很多例外,有些二手CPU还真的没有全新划算,较老型号的in ...
最新文章
- 图论 ---- DAG删点+枚举+暴力+离线前缀异或和 J Red-Black Paths (2021 icpc网络赛第一场)
- 嵌入式学习笔记之三 (uboot我来看)
- 登录首页时报错:java.lang.IllegalArgumentException (不合法的参数异常)
- spring的log4j listener(webAppRootKey)
- P3181-[HAOI2016]找相同字符【SAM】
- OpenSSL原理与实现
- 【福利】MySQL vs Postgre SQL: 5个你最关注的非技术维度的区别
- Pandas使用DataFrame进行数据分析比赛进阶之路(一)
- https 慢_dba+开源工具:可视化分析MongoDB慢查询日志
- 每个tabpage中都有一个dategridview_宇宙中每个原子里都隐藏着一个巨大的秘密
- sigar获取单个进程信息
- Docker bridge 模式 容器如何访问外部世界?
- 财务管理系统如何帮助企业实现财务自动化管理?
- 网络测试丢包软件,网络掉包率测试工具
- XMind思维导图使用详解
- 罗技推出可蓝牙连接的5.1环绕立体声扬声器
- python算24点穷举法_24点游戏7节课–第1节-游戏介绍与基本算法 | 学步园
- 怎样快速抠图ps图片?这些小妙招了解一下
- strtotime 用法
- 《UnityAPI.GUI界面》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+GUI+DrawTexture+FocusControl+Toggle+立钻哥哥++OK++)