GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
最近的几次学习笔记的整理都有一点拿不准,不是很确定自己所做的是否准确。不过,如果战线跨得太长,可能整个新建立的知识体系会垮掉。因此,还是一步步做梳理,做记录。即便是后面发现了错误重新修改,暂时也得让部分学习整理的信息定稿。
这一次来看一下page_init()接口的实现,这个是在boot_alloc()接口发挥作用之后进行的。
本来还想借助于boot_map_region()和page_insert()接口来辅助理解,但是看到后面发现这俩接口其实是没有实现的,需要后续去实现。
这里的这部分注释比较有价值,值得注意的有几点:第一,pages的信息主要是对引用的页面进行统计,而没有引用的界面则在链表中进行维护;第二,boot_alloc接口在这个接口调用之后,基本就完成使命了,不会再使用了;第三,说明了后续的存储管理该使用什么接口。
这里的注释讲解了接下来的设计的思路和要求,说明了哪一些存储是不能够设置为可用也就是不可以在存储分配中分配给软件做存储申请应用的。
这个是按照上面的4条要求做的一个简单的设计实现,其中结构体的pp_ref成员可能有多种数值,但是当这个数值为0的时候应该是没有被引用的时候,这个也是最初给出来的示范代码的设计。不过代码跟实际的情况并不相符,因此删除了之后进行了上面的修改。
而前面看过的这个调用,也是这个接口在整个系统中的唯一一次调度。接下来,存储的管理可能得基于这个链表的操作来实施了。继续往下的分析,应该暂停下面接口的分析,先去把上面提到的boot_map_region()以及page_insert()接口的实现。感觉上,这两个接口中应该能够体会到更多链表设计的意图。
这一次的梳理暂且到此,后面,先完成上面两个接口的实现与分析。
标签:存储,JOS,实现,boot,接口,链表,init,page From: https://blog.51cto.com/greyzhang/6178703