Chinaunix首页 | 论坛 | 博客
  • 博客访问: 731941
  • 博文数量: 741
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-18 11:18
文章分类

全部博文(741)

文章存档

2011年(1)

2008年(740)

我的朋友
3

分类:

2008-09-18 11:24:24

谢谢大家的关心.我会继续读下去,把感慨发下去的。其实我只是想休息一两天,修整修整,看看电影,不亦乐乎.

通过这些天读内核管理,我感觉无论是内存的分配还是缓冲的管理,用的数据结构不是链表就是数组。而且为了更加有效的管理一群对象,采用的方式无外乎是
: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也不是什么神仙,他的以前的版本的算法有许多也是很烂的,只不过后来才改进的),一句话,本来是一级管理的本质问题.但若用一级索引,那文件不多如牛毛吗,所以才有了,按目录,按逻辑盘,按进程等等的多级层次。所以想通了它。那整个数据结构也就历历在目了。


请大家补充指正!
再次感谢大家对我的关心。      
--------------------next---------------------
2003.04.24读核日记--真的遇上了拦路虎

从今天开始,我开始学习VFS,结果发现:VFS只不过是文件系统的一张漂亮的面孔。与它相关的IO设备管理,磁盘高速缓存,内存交换,具体文件系统EXT2,及文件的映射与读写才是真正让人望而生畏的。它们所用的数据结构之多,数据结构联系千丝万缕,真让人不知所措。说真的,把人读睡着了好几次。

良好的性能将意味着复杂度的提高。高水平将意味着必须付出更大的代价。

贴个笑话给大家解解闷(我知道,这里本不合适贴笑话,就算我日记的一部分吧,请大家抱函)
三人同行(搞笑)  
一个中国人和一个美国人一个俄罗斯,三人在沙漠中相遇一块同行。走呀!走着忽然间遇到一个神仙,神仙告诉他们“我是幸运之神,你们遇到我是你们的福,你们每人有三个愿望我能给你们实现……”话没有说完美国人就开口啦!!!我先说……。神仙说到“好吧!!你有什么愿望你就说吧!”美国人就说啦“我在美国我穷呀!!我想要美圆”好神仙就给了他很多的美圆。神仙又问他了你的第二个愿望呢??美国说到“我还要很多很多的美圆”神仙又给他很多很多的美圆,我的第三个愿望是:给我一个很大的美丽的地方我去享受啦!!
美国人走啦!!!

中国人还没有来的急开口俄罗斯人说到“我很丑请你给我美女这是我第一个愿望”神仙给了他一位美女,俄罗斯人看看美女只流口水说到“我的第二个愿望是请你在给我很多的美女”神仙又给啦他很多的美女问到你第三个愿望呢??俄罗斯人想啦想说到“请你也给我一个人间天堂我带着美女享受去”神仙答应啦他。

俄罗斯人走啦!!

神仙看拉看中国人问到“你有什么愿望呀”

中国人想拉想说“给我一瓶二锅头”

神仙就给拉一瓶二锅头,中国人就喝开了

神仙又问他你的第二个愿望呢???在给我一瓶二锅头”神仙又给啦他一瓶二锅头,神仙心想中国人就是傻

中国人拿着二锅头喝啦个满面红光。

神仙问他了你的第三个愿望呢???

中国人想啦想说到“叫……叫他们俩回来”

神仙就叫美国人和俄罗斯人回来啦!!神仙就走啦!!!美国人和俄罗斯人心想叫中国人给操啦!!!

他们三人继续往前走。

走着走着又遇到一位神仙,神仙说“到我也是幸运之神,你们每个人也有两个愿望,你美国人和俄罗斯人们谁先说”。美国人和俄罗斯人心想这回叫中国人先说我们看他还这么操我们哈哈……

那好吧!!神仙说到“中国人你先说吧你的第一愿望是什么??”中国人说到“给我一瓶二锅头”

好的神仙给啦他一瓶二锅头,神仙又问到“那你的第二个愿望呢”

中国人喝拉一气二锅头对神仙说到:你可以走啦!……      
--------------------next---------------------
今天读了<<深入理解linux内核>>第14章磁盘高速缓存,对它的数据结构基本理解了。这使我对VFS这一块的阅读有了很大的信心。
现将理解表述如下(本来想画一张图,但觉得太费事)
1。高速缓存主要有3种:目录高速缓存,缓冲区高速缓存和页高速缓存。
其实我觉得书中称“缓冲区“及缓冲首部(buffer_head)这个词不好。我觉得应该换个名字更好:比如叫:块对象(block object)和块描述符(block descripter)。
2.缓冲区高速缓存的整个数据结构
1)创建一块”缓冲区”和“缓冲区首部”,两个来源不同
缓冲区来源于BUDDY,即BUDDY给分一个页框,它再把这个页框分成几个等大的缓冲区。而缓冲区首部来源于SLAB分配器。
每一个缓冲区都要有一个缓冲区首部来描述它。一个页框中的这几个缓冲区你可称它为兄弟,它们用一个链串起来的。
2)创建完后,它们是空闲的,就必须把它管理起来,用作”周转资金“,如何管理呢?
因为不同的设备可能定义不同的块大小,所以缓冲区的块大小是不统一的。方法是把相同大小的缓冲区的缓冲区描述符(即缓冲区首部,但我还是喜欢叫它缓冲区描述符)串成一条链,这样因为块大小的可能情况是:512,1024,2048,4096,8192,16384,32768,所以共生成7条链。但一个块大小不能超过一页,所以PC机只用前4条链。7条链的链头用一个数组free_list统一存放。好啦,空闲块已经管理起来了,以后用,就可先从这里取,若不够,再新创建。
3)把分配出去的管理起来:因为这些缓冲区可能是干净的,脏的,或正要写入磁盘。就把它们分成3条链串起来。3个链头放在一个数组lru_list中。好啦,分配出去的也管理起来了。但为了快速查找,再给它加个hash表,表为:hash_table
用hash就必须提供键,缓冲区的检索就是用设备号和块号来作键的。
至于那些函数,只要脑里有这个数据结构框架,则一看就懂。

3。页高速缓存的数据结构很相对简单。不说了,但要注意的是他是
用索引节点和文件偏移作hash键的.还有要注意的是缓冲页最终要分割成几个缓冲区,并给这些块缓冲区分配缓冲区描述符,利用缓冲区的写回和读取函数来完成磁盘的操作。(因为磁盘只认块,不认页),书中有几幅很好的图。能促进人理解这些结构。

欢迎指正。      
--------------------next---------------------

阅读(270) | 评论(0) | 转发(0) |
0

上一篇:2

下一篇:5

给主人留下些什么吧!~~