linux – 几乎是连续的与物理上连续的内存
几乎连续的记忆也总是在物理上连续吗?如果没有,如何在物理上非连续的RAM块上分配几乎连续的内存并进行内存映射?详细的答案表示赞赏.
解决方法
简短回答:您无需关心(除非您是内核/驱动程序开发人员).对你来说都是一样的.
更长的答案:相反,几乎连续的记忆通常不是物理上连续的(只是非常少量).除了巧合,或机器刚刚启动后不久.但是,这不是必要的. 分配大量物理连续RAM的唯一方法是使用大页面(因为一页内的内存需要是连续的).然而,这是一个无用的尝试,因为您的过程没有可观察到的差异,您认为它是连续的内存是否实际上是连续的,但使用大页面存在缺点. 在物理上非连续的RAM上的存储器映射不是特别“特殊”的方式.它遵循所有内存管理遵循的相同方法. 操作系统在“页面”中划分虚拟内存,并为您的进程创建页表条目.当您访问某个位置的内存时,相应的页面根本不存在,或者它存在并对应于RAM中的实际页面,或者它存在但与RAM中的实际页面不对应. 如果页面存在于RAM中,则不会发生任何事情.否则会生成故障并运行某些操作系统代码.如果事实证明页面根本不存在(或者没有正确的访问权限),则您的进程会因分段错误而终止. 否则,操作系统会选择一个未使用的任意页面(或者交换掉它认为最不重要的页面),然后将数据从磁盘加载到该页面中.在内存映射的情况下,数据来自映射文件,否则它来自交换(对于全新分配的内存,复制零页).然后操作系统将控制权返回给您的流程.你永远不会知道这件事. 如果您访问位于不同页面的“连续”(或者您认为!)内存区域中的另一个位置,则会运行完全相同的过程. 1实际上,它有点复杂,因为页面可能存在于RAM中但不是“正式”存在,是要回收的页面列表的一部分.但这太复杂了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |