Chinaunix

标题: linux系统能跑在低于1G的内存吗? [打印本页]

作者: _nosay    时间: 2016-01-15 19:09
标题: linux系统能跑在低于1G的内存吗?
题外话:
刚开始自学内核时,有种无从下手的感觉,后来硬着头皮看《Linux内核源代码情况分析》一段时间,虽然很晕,但发现自己渐渐的会问了。
“会问了”是个很重要的起点,“提问”其实是对“神秘感”的最好描述。另外,实际问题是客观存在的、“固定”的,我们大脑里存的问题是“爆炸→收敛”的,实际剩余问题是“收敛”的。在实际剩余问题收敛到0之前(每个人根据自己的情况定义这个“0”),不要轻易认为自己懂了,因为一个更深层的问题,可能会推翻之前的好多理解。不要太宠着自己的大脑,拼命的问问自己还在疑惑什么吧。


1. 3G-4G用户空间统一映射到0-1G内核空间,由于用户程序没有权限访问内核空间,那么linux系统如果安装在512M内存上,那些应用程序还能跑得起来吗?
我是学习了好长一段时间,才“爆炸”到这个问题上的,而且这个问题对于内核的理解有很大帮助,所以拿出来分享和讨论一下:
用户态无权使用这段编号,是受内核限制,比如do_page_falut()处理用户空间的缺页异常时,如果发现虚拟地址在这个范围,就会让用户进程段错误,而硬件并没有限制只有内核指令才可以访问0-1G的实际内存。
所以用户态访问0-1G实际内存需要满足2个条件:
① 内核愿意;
② 使用0-3G区间的虚拟地址进行映射。

2. 实际内存大小的意义是什么,为什么越大越好?
同一时刻所有进程“代码所占空间+静态数据所占空间+栈空间+malloc()总和-free()总和”,超过实际内存时,就会分配失败,这样程序就不能完成希望做的事了。

3. “公共场所”帮某个用户进程盖座“私人别墅”,不会误占了其它进程正在使用的地盘吗,别人不会误闯进来吗?
每个进程的3G-4G虚拟空间“天然”就映射到了0-1G物理空间,但是否可以访问的判断标准,不是是否已经有映射关系,而是是否已经分配,另外,用户进程访问0-1G物理地址,还要判断是否进入内核态,这样很自然的,公共场所的使用就“汇总”给内核1份代码处理了,自然就可以避免冲突了。

4. “用户态→内核态”是不是指“用户进程→内核进程”的意思?
不是。“态”和“进程”,对于CPU来说,是2种不同的环境划分,“态”反映在段寄存器的rpl字段值,“进程”反映当前使用的task_struct结构信息。

“用户态→内核态”伴随着2个主要切换(通过int指令完成):
① 段寄存器rpl切换
  用户进程不可以直接使用“特权指令”随意修改,但可以使用内核的接口规规矩矩的修改。
② 指令跳转、堆栈切换
  中断函数的地址是“固定”的,并且在内核空间(公共空间),所以从“用户程序内存镜像”跳转到“内核程序内存镜像”是没问题的,内核管理着每个用户进程的信息,从内核态返回用户态也是没问题的。
  另外,这一点很容易被当作判断进程切换的标准。然而,虽然EIP、ESP的指向,也属于进程的一种环境,而且看起来进程的切换,也就是变化EIP、ESP去做另一件事,但是即使执行同一个进程,EIP、ESP也在不断变化,所以它们并不能用于判断进程的切换,哪怕执行到“别的可执行文件”加载到内存的指令。进程环境其实记录在task_struct结构,所以当前使用的task_struct结构切换,才说明进程切换了,并且与dpl切换相互独立。

5. 内核代码执行时,正使用的task_struct结构,可能对应着一个用户进程的上下文环境,内核怎么能预测这个环境是什么样?
进程上下文环境,和程序本身的功能(逻辑)没有关系,因为内核只关心如何顺利执行完用户指令的环境,用户程序的逻辑不影响这个环境。


作者: qxhgd    时间: 2016-01-16 14:12
当然可以!!!!!!!!!
作者: Godbach    时间: 2016-01-18 16:08
回复 1# _nosay

感谢分享。


   
作者: _nosay    时间: 2016-01-18 19:18
Godbach 发表于 2016-01-18 16:08
回复 1# _nosay

感谢分享。


谢谢鼓励,表达的很差,不过正在锻炼中。。
作者: nswcfd    时间: 2016-01-19 18:28
标签“白电县”是啥意思
作者: _nosay    时间: 2016-01-20 09:27
nswcfd 发表于 2016-01-19 18:28
标签“白电县”是啥意思


电白县,位于广东省茂名市电白区,总是打雷,电压特别高,电呈白色。
作者: Linux傻鸟    时间: 2016-06-21 19:49
谢谢分享。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2