[已软注销]对《Understanding the Linux Virtual Memory Manager》的笔记(2)

Understanding the Linux Virtual Memory Manager
  • 书名: Understanding the Linux Virtual Memory Manager
  • 作者: Mel Gorman
  • 页数: 768
  • 出版社: Prentice Hall
  • 出版年: 2004-5-9
  • 第106页 Avoiding Fragmentation

    外部碎片是无法满足大的分配要求,因为只存在小的内存块。 内部碎片是对于小的请求也只能分配大的内存块。 linux的外部碎片问题并不严重,因为大的请求可以通过vmalloc()分配一个物理地址上不连续但是虚拟地址上连续的内存块。只是伙伴系统的内部碎片问题非常严重,因为伙伴系统的最小单位也是页,这个单位对于直接分配结构体太大,所以内核还使用了slab分配器来解决这个问题。

    2013-01-16 21:45:12 回应
  • 第424页 Function: __alloc_pages() (mm/page_alloc.c)

    __alloc_pages()分三个部分: 一。看是否能在不达到zone->pages_low水位的情况下满足分配要求,如能则直接分配。 二。否则zone需要balance,唤醒kswapd,并看能否在不达到zone->pages_min水位的情况下满足分配要求,如能则分配。 三。否则进入slow path,先看自己是否是即将被OOM killer杀掉的进程,如是则不管水位直接分配,否则自己同步地做kswapd该做的事。

    2013-01-17 11:45:31 1人喜欢 回应