更长的答案:相反,几乎连续的记忆通常不是物理上连续的(只是非常少量).除了巧合,或机器刚刚启动后不久.但是,这不是必要的.
分配大量物理连续RAM的唯一方法是使用大页面(因为一页内的内存需要是连续的).然而,这是一个无用的尝试,因为您的过程没有可观察到的差异,您认为它是连续的内存是否实际上是连续的,但使用大页面存在缺点.
在物理上非连续的RAM上的存储器映射不是特别“特殊”的方式.它遵循所有内存管理遵循的相同方法.
*** 作系统在“页面”中划分虚拟内存,并为您的进程创建页表条目.当您访问某个位置的内存时,相应的页面根本不存在,或者它存在并对应于RAM中的实际页面,或者它存在但与RAM中的实际页面不对应.
如果页面存在于RAM中,则不会发生任何事情.否则会生成故障并运行某些 *** 作系统代码.如果事实证明页面根本不存在(或者没有正确的访问权限),则您的进程会因分段错误而终止.
否则, *** 作系统会选择一个未使用的任意页面(或者交换掉它认为最不重要的页面),然后将数据从磁盘加载到该页面中.在内存映射的情况下,数据来自映射文件,否则它来自交换(对于全新分配的内存,复制零页).然后 *** 作系统将控制权返回给您的流程.你永远不会知道这件事.
如果您访问位于不同页面的“连续”(或者您认为!)内存区域中的另一个位置,则会运行完全相同的过程.
1实际上,它有点复杂,因为页面可能存在于RAM中但不是“正式”存在,是要回收的页面列表的一部分.但这太复杂了.
总结以上是内存溢出为你收集整理的linux – 几乎是连续的与物理上连续的内存全部内容,希望文章能够帮你解决linux – 几乎是连续的与物理上连续的内存所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)