win10非分页缓冲区占用好多内存怎么解决?

求打求打啦啦啦啦


看了一下,底下的答复都是错误的。

首先搞清楚一个问题,什么是非分页内存。

Intel从80386芯片开始,支持保护模式,在保护模式下,可以寻址32位内存地址,共计4GB大小。那个年代物理内存其实是没有那么大的,为了以示区别,把前者称为虚拟地址。为了在两者之间进行映射转换,操作系统和CPU一起配合,通过VMM(虚拟内存管理器)来实现。VMM将虚拟内存地址按照一页一页分组、将物理内存也按照一页一页进行分组,来进行两者映射。

当虚拟地址的内容尚未加载到对应物理内存中、但该虚拟地址又被访问时,VMM就需要根据既定的算法,将某个已被占用的物理地址所在页面内容先存到外存(如硬盘)上(硬盘上这个临时用来存放内容的地方叫作"页交换文件"),腾出空间来加载被访问的虚拟内存所在的页面内容。这个腾出放入的过程,整个过程被称为"分页交换"。

分页交换实际是通过中断机制来完成的。所以这里暗含了一个问题,如果当前将要被腾出的内容(比方说代码)本身又不能被中断(比方说执行这个腾出放入的代码本身),那么就会发生死锁。

为了解决上面这个矛盾,设计出了非分页内存的概念。简单来说,就是强制标识某些虚拟内存对应的物理页面是不能被交换到外存上的,这样就可以避免上述死锁问题。

根据上面的讲解,你应该不难看出:在物理内存一定的前提下,你指示系统分配的非分页内存越多,那么剩下来可作分页内存的量就越少,这样能利用虚拟内存的优势就越弱。如果有大量需要进行腾出放入的页面需求,而能用来做分页交换的物理页面又比较少时,整个系统就会变现出反应很慢的现象——大家都排着长队等交换嘛!

那么怎么可以减少非分页内存的需求量呢?答案就在于少开一些不能被中断的关键服务,掌握平衡的艺术。


分享到:


相關文章: