刨根问底是科学实践的基本要求 - XXX
上节我们简单的描述了地址管理的几个基本点,包含页框,也大小,页表等。这一节我们站在这些基本概念上,升入了解一下内存使用的一些问题以及Linux Kernel 针对此问题的解决方法.
1、内存碎片- 内碎片 && 外碎片
大家可能都听过内存碎片,但是对于为什么出现这种问题并没有去深入研究,我简单的描述一下:
内存碎片分为内部碎片以及外部碎片 - 内部碎片就是已经被分配出去的内存地址空间不能被”利用”的内存空间,而外部碎片瞧好相反,只没有被分配出的,主要是因为太小无法分配给被申请者。
想象一下:
假如有一个进程在频繁的请求和释放不同大小的一组连续页框,那么肯定就会导致在已经分配的块内分散许多小块空闲页框,那么假如你现在像要一块连续且很大的页框,虽热有空闲的页框,但是由于是碎片而导致不能满足你的申请要求。
本质上的解决方法有两种:
- 1.利用页单元把一组非连续的页框映射到连续的线性地址空间。
- 2.开发一种适当的技术来记录现存的空闲页框块的情况,尽量的避免为满足小块的请求而分割大的空闲块。
那么显然我们内核使用了第二种解决方法。
基于什么考虑使得内核选用了第二种解决方法呢?
a.首先&