2003.04.25读核日记--感谢大家的关心
谢谢大家的关心.我会继续读下去,把感慨发下去的。其实我只是想休息一两天,修整修整,看看电影,不亦乐乎.
通过这些天读内核管理,我感觉无论是内存的分配还是缓冲的管理,用的数据结构不是链表就是数组。而且为了更加有效的管理一群对象,采用的方式无外乎是
:1。通过增加索引级数。如slab分配器:就通过3级来管理,最高一级是kmem_cache_s,接下来是kmem_slab_t,再下来是kmem_bufctl_s,最后是对象本身.(试想它为什么会用3级,其实本来可以用一级的,即用hash或一条链串起来便可它最终就是要取个对象,中间级对外是隐藏的)只要能想通了这个,以后一看到要讲数据结构,我就首先看看它是用几级索引。然后我就能推断出它的基本组织结构,即不同级别之间如何关联。
2。在同一级别的组织,采用的形式也无外乎:要么是用链表串起来,要么是数组,要么用hash,要么用树(如AVL)。前两种是基本形式,后两种只不过为了增加速度。
注意到数组和链表的不同效果没有?比如串数组是用偏移作指针,而链表却只能用地址作指针啦。
3。对分配来的空间进行二次分割时,也有两种基本策略,一种是管理空闲块法,即把空间离散块串起来,典型的就是buddy,slab,别一种是把分配出去的串起来,典型的就是vma_area_struct,vma_struct;
再说vfs吧,说白了,系统根本目的就是为了实现按名存取(为了提高效率那叫改进,linux为了提高效率都改进了好几年啦,所以不要指望马上就学会人家的效率,所以我感觉一个软件能实现它是第一步,其次才是改进它,cpu本身不也改进了好多年吗?还在改进中。看看linux以前的版本,你就知道linus也不是什么神仙,他的以前的版本的算法有许多也是很烂的,只不过后来才改进的),一句话,本来是一级管理的本质问题.但若用一级索引,那文件不多如牛毛吗,所以才有了,按目录,按逻辑盘,按进程等等的多级层次。所以想通了它。那整个数据结构也就历历在目了。
请大家补充指正!
再次感谢大家对我的关心。