linux – 我的内存发生了什么变化?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 我的内存发生了什么变化?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2889字,纯文字阅读大概需要5分钟。
内容图文
![linux – 我的内存发生了什么变化?](/upload/InfoBanner/zyjiaocheng/959/bfa11101d9d947599ac06062e0d8f4f3.jpg)
我试图了解Linux操作系统的基础知识.我在64位CPU上运行64位Ubuntu 12.04.该系统有2GB的RAM.
cat /proc/meminfo
MemTotal: 2012040 kB
问题1:缺少85112KB的RAM在哪里?
2097152 (2 gb in kilobytes)
2012040 -
______________
85112
这是为其他东西保留还是硬件限制,系统不能使用4%的RAM?
问题2:我的初始读数告诉我用户内核空间有3:1的分割.为什么不是这里的情况?
(3/4)*2097152 =1572864 for user space
(1/4)*2097152 =524288 for kernel space
我知道Linux RAM缓存和缓冲区(我花了一些研究工作来了解至少),但这种情况与它无关,所以发生了什么?
解决方法:
你真的不应该在一个问两个问题,但……
问题1
一些内存用于内核代码本身,一些内存用于保留,等等.内核在系统引导消息中将其吐出:
[ 0.000000] Memory: 6106920k/7340032k available (3633k kernel code, 1057736k absent, 175376k reserved, 3104k data, 616k init)
“缺席”行是实际上不存在的内存(此机器目前安装了6GiB的RAM).内核也会吐出内存映射(这在引导消息中较早):
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000e2c00-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bf77ffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000bf780000-0x00000000bf797fff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x00000000bf798000-0x00000000bf7d9fff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x00000000bf7da000-0x00000000bfffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000ffe00000-0x00000000ffffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000001bfffffff] usable
然后内核对该映射执行各种修正,通常会保留更多内存.特别是当司机装载.
问题2
内核/用户拆分是虚拟地址空间,而不是内存.它在64位盒子上几乎无关紧要,因为它有很多地址空间可供使用.
在32位盒子上,虚拟地址0x00000000-0xBFFFFFFF用于用户地址空间.内核使用0xC0000000-0xFFFFFFFF(这是3:1分割,其他选项包括2:2分割.注意这些数字是千兆字节,所以它是2:2而不是1:1).虚拟地址也是特定于进程的(每个进程可以有一个页面位于0x00001000,它是一个不同的页面).
但是虚拟地址不对应于一个字节的内存.它可以基本上由四件事支持:
>没什么.该页面未使用.尝试访问它,获得段错误.
>物理RAM. MMU将虚拟地址转换为某个物理地址,实际上对应于某处DIMM上的电容.
>交换(或内存映射文件).如果您访问它,将会出现页面错误,并且内核将在将数据读入内存时暂停您的进程(并可能将其他数据写入磁盘,以腾出空间).然后内核更新页表,将其转换为#2.
>零页面.这是一个新分配的页面,尚未使用.如果是,内核将找到一个物理内存页面(可能会交换其他内容),用零填充(为了安全),然后是#2.
透明的大页面会产生更多案例.可能还有一些我已经忘记的不太重要的……
无论如何,我的64位芯片具有48位虚拟地址大小.我不确定内核使用什么分裂,但即使它的一半,即47位的空间,也远远超过了36位的物理地址大小.并且131,072 GiB的RAM太昂贵了……(并且,请记住,当它变得更便宜时,64中还剩下很多位,未来的处理器可能只允许更多的位).
内容总结
以上是互联网集市为您收集整理的linux – 我的内存发生了什么变化?全部内容,希望文章能够帮你解决linux – 我的内存发生了什么变化?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。