_nosay 发表于 2016-08-10 17:25

struct page -- 先有鸡,先有蛋?

系统启动时,为每个物理页面建立一个page结构,从而为内存管理建立了依据。
而分配这些pages所占的内存时,还没有这些“依据”,即建立“依据”需要“依据”,没有退出条件的递归{:qq23:} 。

应该是跟bootmem_data这个东西有关吧?

Buddy_Zhang1 发表于 2016-08-10 19:32

系统启动时,第一个内存分配器是 bootmem,它通过 bitmap 的方式分配内存。
此时内核将大小为 4K 的内存分给一个 page 管理,而存储这些 page 的内存由 bootmem 分配。
等待 bootmem 分配器使命完成之后,存储 page 的内存位置信息会通过 struct zone 传递给 buddy system 进行管理。

bootmem 的分配采用自顶而下的分配方式。
bootmem_data 是内核初期物理内存信息的结构体

Buddy_Zhang1 发表于 2016-08-10 19:37

所以是先有存储 struct page 的地方,后有 struct page。

_nosay 发表于 2016-08-10 20:49

回复 3# Buddy_Zhang1

{:yxh22:} 哦,那struct page是鸡还是蛋:emn31: ?

Buddy_Zhang1 发表于 2016-08-10 21:12

回复 4# _nosay


    没看出来 structpage 的逻辑存在什么鸡和蛋的关系

剑魂箫心 发表于 2016-08-11 10:02

内核初始化阶段SLAB分配器未启动,所以使用了极其简单粗暴的方式,就是用位图直接标示内存哪一页被占了,在初始化后期会根据位图建立起page结构体数组,每一个page结构体代表一页物理内存。

_nosay 发表于 2016-08-11 10:03

回复 6# 剑魂箫心

哦,:em09:
页: [1]
查看完整版本: struct page -- 先有鸡,先有蛋?