本来想看完pagefault的处理的,不过实验室有事情了,只能先把这一半放上来了。
页面的分配与回收使用了一个叫做buddy allocator的机制,kernelnewbies上的解释The memory allocation scheme used in the kernel. A vector of lists of free pages is kept, ordered by the size of the chunk (in powers of two). When a chunk is allocated, it is removed from the relevant list. When a chunk is freed back to the free pages pool, it is placed in the relevant list, starting from the top. If it is physically contiguous with a present chunk, they are merged and placed in the list above (i.e. where the chunks are twice the size), and this operation percolates up the vector. As regions are merged whenever possible, this design helps to reduce memory fragmentation.首先在zone_struct{} 中保存了一个free_area_t数组,这个数组记录了各种大小的空闲内存块的信息。include/linux/mmzone.h:
Powered by: BlogJava Copyright © ZelluX