外部碎片、进程描述符、内部碎片
外部碎片:
是由于用户进程向内存频繁申请和释放内存空间所产出的空闲内存容量。伙伴算法解决的就是这个问题,解决的方法其实就是有伙伴算法的算法设计方法来决定,比如伙伴算法中的合并和切割方式,不够则申请大的空间,但会先切割后再分配出去,剩余的有可能因伙伴关系合并,并成更大的空闲空间,这是一种解决碎片的方式,另一种方式是释放时,也会因为释放后的空闲空间有可能形成伙伴而继续合并,这样就将零零碎碎的空闲空间内存慢慢合并成大的空闲空间,事外部碎片尽量减少。
进程描述符:
即task_struct进程结构体,每一个进程一创建,首先必须创建一个task_struct,因为系统每时每刻都会有大量的进程存在,即会有大量的进程随时会被创建(申请内存)或者消亡(释放内存),因此,每个task_struct的创建与释放是很频繁的。
内部碎片:类似task_struct这样的进程结构体,所需的内存容量是非常小的,一页4kb,而一个task_struct一般是甚至有些才1-2kb,甚至有些只需要几十或几百b,离一页远远不足,这么小的内存申请,而次数又那样的频繁,则会形成的碎片称为内碎片,因为碎片的容量较小,但如果次数过于频繁,积少成多形成的碎片容量也是不容小看的。
进程结构体的存在着很多相同或类似的操作,这些操作其实没有必要每次每一个进程一创建就得重头去创建。