(计算机系统结构专业论文)网络镜像块设备驱动研究与实现.pdf_第1页
(计算机系统结构专业论文)网络镜像块设备驱动研究与实现.pdf_第2页
(计算机系统结构专业论文)网络镜像块设备驱动研究与实现.pdf_第3页
(计算机系统结构专业论文)网络镜像块设备驱动研究与实现.pdf_第4页
(计算机系统结构专业论文)网络镜像块设备驱动研究与实现.pdf_第5页
已阅读5页,还剩73页未读 继续免费阅读

(计算机系统结构专业论文)网络镜像块设备驱动研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 本文先简要介绍l i n u x 文件系统的整体结构及主要数据结构,然后着重介绍 l i n u x 对缓冲块的管理,最后再给出系统调用安装或卸载文件系统的实现流程及 相关的数据结构。然后在以上基础上仔细分析了网络存储镜像的实现方法,举了 几个例子来分析如何有效的截获用户读写数据。因为在网络镜像中使用了 t c p i p 协议栈和网络编程,所以文章中也对这部分进行了分析研究。最后分析 了一下内核中的一些提高性能的关键机制。 这时就来到了本文最重要的地方,就是l i n u x 系统下的驱动程序的编写部 分,因为我们重点关注的是块设备驱动程序,所以简单的介绍了一下如何编写驱 动程序,然后就重点分析了块设备驱动程序的重要数据结构,重要的函数,这里 面有r e q u e s t 队列的数据结构和操作函数等等。最后为了保证可移植性,我采用 的不是更改l i n u x 源代码树的方法,而是加载内核模块的方法,所以也详细分 析了如何编写内核模块的方法。 然后详细分析了l i n u x 系统下用软件实现磁盘镜像和n a s 的方法,这里面 包括软件r a i d 和n b d 的一些内核代码,从这里得出网络镜像系统可以充分参 考借鉴这两类不同的块设备驱动程序的一部分实现代码,即从r a i d 中学习块设 备镜像的方法,再从n b d 中学习到数据块在网络中传递的一些技巧。其实我们 如果仔细的研究l i n u x 内核源代码,就可以实现很多东西,这也是它比 w i n d o w s 系统更受h a c k e r 们欢迎的原因。 最后就到了n m b d 驱动程序设计和实现的方法,从代码中可以看出l i n u x 的源代码树对我有多大的帮助。而且在实现的过程中发现一些问题,比如不同应 用程序对数据块的一致性有不同的需求,比如发送端和接收端之间读写数据块的 一些影响。那么在n m b d 中都仔细考虑并提出了一些算法解决。 通过对本系统的初步测试,表明该系统初步实现了设计目标。 关键词:网络附属存储,l i n u x 内核,l i n u x 核心模块程序,网络镜像 a b s t r a c t t h ep a p e rf i r s ti n t r o d u c e st h ea r e h i t e e t u r ea n dm a i nd a t as t r u c t u r eo f 血el i n u x f i l es y s t e mw i t ht h ef o c u so nl i n u x m a n a g e m e n to fb u f f e rc a c h e a n dw i t ha d e s c r i p t i o no ft h ei m p l e m e n tp r o c e d u r e sa n dr e l a t e dd a t as t r u c t u r eo ff i l es y s t e m m o u n t i n g a n dd i s m o u n t i n go nt h es y s t e m sc a l f i tt h e ne l a b o r a t e sont h e i m p l e m e n t a t i o no fn e t w o r ks t o r a g em i l t o r , g i v i n gs e v e r a le x a m p l e st oi l l u s t r a t eh o w t oe f f i c i e n t l yi n t e r c e p ta n dc a p t u r et h ea c c e s sd a t ao fu s e r l i n u x s u p p o r tt oi ti s p a r t i c u l a r l ya n a l y z e db e c a u s et c p i pn e t w o r ks t a c ka n dn e t w o r kp r o g r a m m i n gi s u s e df o rm i r r o r i n g , a n ds o m em a j o rm e c h a n i s m si nk e m e la i m i n ga tp e r f o r m a n c e i m p r o v e m e n ta r ea l s oa d d r e s s e d c h a p t e rt h r e ef i n d st h em o s ti m p o r t a n tp a r to f t h ep a p e r , w h e r et h ed r i v e rc o d i n g f o rl i n u xi se x p a t i a t e d f i r s tw eg i v eab r i e f s u m m a r yo f d r i v e rc o d i n gi ng e n e r a l ,a n d t h e ng o e so nt oe x mo u rm a j o rc o n c e r n , t h ed a t as t r u c t u r ea n dk e yf u n c t i o n so f b l o c k d e v i c ed r i v e r ( e g t h ed a t as t r u c t u r eo fr e q u e s tq u e u e ,a n dt h eo p e r a t i o nf u n c t i o n ) t h ec o d i n go fl i n u xk e r n e lm o d u l ei sa l s oi n c l u d e dh e r ea st h ek e r n e lm o d u l em e t h o d , i n s t e a do f t h el i n u xk e r n e lt r e em e t h o d , i sa p p l i e df o rp o r t a b i | i t y c h a p t e rf o u ro f f e r sad e t a i l e da n a l y s i so ft h ei m p l e m e n t a t i o no fd i s km i r r o ra n d n a st h r o u g hs o f t w a r e i n c l u d i n gp a r to fk e r n e lc o d e sf o rr a i da n dn b d n l c r e f l e c t i o nh e r ei st h a tt h eb l o c kd e v i c ed r i v e rc o d e so fe i t h e rc a nb ep a r t i a l l yu s e df o r r e f e r e n c ei nn e t w o r km i r r o rs y s t e m i e w ec a nb o r r o wm e t h o d so fb l o c kd e v i c e m i r r o rf r o mr a i da n ds k i l l so fd a t ab l o c kt r a n s m i s s i o na r o u n dn e t w o r kf r o mn b d m u c hm o r ec a nb ea c h i e v e dw h e nw es t u d ym o r eo fl i n u x k e r n e l ,w h i c hm i g h tb e o n er e a s o nw h yh a c k e r sp r e f e rl i n u xt ow i n d o w s o u rf u l la t t e n t i o ni n c h a p t e rf i v ei sg i v e nt on m b dd r i v e rc o d i n ga n d i m p l e m e n t a t i o n ,f r o mw h i c hw ec a ne a s i l yt e l lh o wm u c hw eb e n e f i tf r o ml i n u x s o u r c ec o d et r e e s e v e r a lp r o b l e m sw h i c ho c c u r r e dd u r i n gi m p l e m e n t a t i o n ,e g d i f f e r e n td e m a n d so fd i f f e r e n ta p p l i c a t i o n sf o rd a t ab l o c kc o h e r e n c e ,a n ds e q u e n c e r e s t r i c t i o no nd a t ab l o c kb e t w e e ns e n d e ra n dr e c e i v e r , a r ea l s or e v i e w e dw i t hs o m e p o s s i b l ea l g o r i t h m so f s o l u t i o ns u g g e s t e d f i n a l l y , t h es y s t e m sg o a li sp r o v e da c h i e v e dt h r o u g hb a s i ct e s to ff u n c t i o n a l i t y k e y w o r d s :n a s ,k e r n e l ,l i n u xk e r n e lm o d u l e ,m i r r o r i f 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得电子科技大学或其它教育机 构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献 均已在论文中作了明确的说明并表示谢意。 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文的规定,有 权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借 阅。本人授权电子科技大学可以将学位论文的全部或部分内容编入有关数据库进 行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:磕送 导师签名: 网络镜像块设备驱动研究与实现 网络存储技术现况 第一章引言绪论 数据存储技术起源于7 0 年代的终端主机计算模式。当时数据集中存放 在主机上,因此数据存储的关键核心机制是主机上高效率的文件系统。 随着8 0 年代以后客户机n 务器计算模式的普及,网络上的文件服务器 和数据库服务器通常成为核心数据聚集的地方。同时,在网络上分布的客户 机也会存放一些数据。这种模式导致了数据的分散性,从一定程度上推动了 数据存储技术向网络数据存储发展。 后来随着i n t e m e t 的出现和大规模普及,数据存储技术发生了革命性的 变化。这种变化主要表现在以下三个方面: ( 1 ) 数据存储的地域空间更加广阔。i n t e m e t 是连接着全世界的网络,它 的出现可以使在世界上任何地方的用户去访问世界另一个角落的数据,这直 接导致了数据存储的地域空间空前扩大。同样,一个跨国企业也可能使用 i n t e m e t 技术来构建企业内部的分布于全世界的i n t r a n e t ,这也导致企业必须 能够处理分布于全球范围内的数据。 ( 2 ) 数据的存储量非常巨大。由于i n t e m e t 和宽带网应用的出现和迅速 普及,使数据存储量急剧扩大。这要求各种存储系统不仅应该具有巨大的存 储容量,更为重要的是存储系统应该具备灵活的可扩展能力,这样才能保证 存储系统不会滞后于存储容量发展的要求。 ( 3 ) 网络存储需要更高的性能。在网络应用中,核心数据存储在关键服 务器上,大量的客户通过网络访问这些数据。如何提高核心关键数据存储系 统的性能,是提高各种网络服务质量的关键因素之一。集群文件系统、并行 文件系统、分布式文件系统等技术方案都是可行的解决方法。 网络存储技术简介 随着计算机网络技术的飞速发展,计算机系统需要处理的数据大量增 加。同时,这些数据还需要有效地,安全地保存在存储系统中,为以后的数 据分析和处理提供保障和方便。网络存储是一种全新的数据存储方式,随着 计算机技术和网络技术的不断发展和创新,网络存储技术本身也在飞速地发 展。 网络镜像块设备驱动研究与实现 下面简要介绍几种常见的网络存储技术。 ( 1 ) 直接附属存储( d i r e c ta t t a c h e ds t o r a g e d a s ) 在d a s 方式中,存储设备通过电缆( 通常是s c s i 接口电缆) 直接连 接到服务器,文件服务器的读写i 0 请求通过电缆直接发送到存储设备。 d a s 的优点是:费用低。缺点是:存储容量扩大困难,难以集中管理。 ( 2 ) 存储区域网络( s t o r a g ea r e an e t w o r k s a n ) s a n 中存储设备通过光纤组成单独的网络,服务器和存储设备之间可 以任意连接,读写i 0 请求直接可以发送到存储设备。s a n 的优点是:服 务器和存储设备之间可以远距离连接、高可靠性、高性能、存储容量共享、 集中管理。缺点是:费用昂贵。 ( 3 ) 网络附属存储( n e t w o r ka t t a c h e ds t o r a g e n a s ) n a s 是集成了操作系统和存储设备的一种专用网络服务器,可以连接 到网络上,通过文件存取协议存取数据。客户端通过f i l ei ,o 方式发送文件 存取请求到n a s ,n a s 通过操作系统将f i l ei 0 转换成b l o c ki o ,发送到 内部磁盘。n a s 是极具发展前途的一种存储技术,具有安装简单、易于管 理、文件共享、高扩展性等优点。 n a s 本质上可以说是网络中的一个专用文件服务器,但机内只安装简 化的微内核程序操作系统和文件系统,只是处理输入输出请求,仅仅支持常 用的文件共享协议,如n f s 和s m b c i f s 。由于网络方面使用传统的局域网 协议如以太网和t c p i p ,所以n a s 的设各安装和添加设备非常简便迅速, 只需要插接到网络插座或网关之中就成,一般几分钟就能升级容量。也因为 是在文件层面的存储模式,使得n a s 允许多用户共享文件,而不需要额外 拷贝数据,许多工程设计人员可以在同一时间对同一文件工作。n a s 的速 度取决于局域网的传输速度。相对而言,n a s 的成本较低。 n a s 在构成上主要有两个突出特点:其一,在物理连接上,将n a s 直 接连到网络上,不再挂接到某个服务器后端,避免增加服务器的i 0 负载; 其二,通过专用软件策略进行数据块调度,减少磁头臂机械移动的次数。 通过分析n a s 的构成,以及对n f s 和s m b c i f s 这些在文件系统层的 n a s 的实现的研究,发现同样也可以在操作系统的设备驱动层实现n a s , 这样可以提高读写1 0 的效率性能,并且允许客户端的用户可以使用各种自 己熟悉的文件系统,并且借鉴了n a s 的一些设计思路。 本文研究的就是一个设备驱动子系统,即网络镜像块设备驱动程序的设 计与实现的相关问题。 网络镜像块设备驱动研究与实现 第二章基础理论和相关技术 2 1 操作系统相关技术 2 1 1l i n u x 文件系统简介 l i n u x 操作系统支持很多不同的文件系统:e x t ,e x t 2 ,m i n i x ,u m s d o s , n c p ,i s 0 9 6 6 0 ,h p f s ,m s d o s ,x i a ,f h t ,v f a t ,p r o c ,n f s ,s m b ,s y s v ,a f f s 以及u f s 。每一种文件系统都有它自己的组织结构和文件操作函数,互相之 间差别很大。l i n u x 对以上文件系统的支持是通过虚拟文件系统v f s 来实现 的。 2 1 1 1 文件系统管理 l i n u x 文件系统管理的最上层模块是文件系统。系统启动时,必须首先 装入“根”文件系统,然后根据e t c f s t a b 中指定,逐个建立文件系统。此外, 有权限用户也可以通过m o u n t 、m o u n t 操作,随时安装或卸载文件系统。 当新装入一个文件系统时,应首先向操作系统核心注册该文件系统及其 类型。当卸载一个不再使用的文件系统时,应向核心申请注销该文件系统及 类型。文件系统的注册和注销反映在以v f s m n t l i s t 为链表头,v f s m n t t a i l 为 链表尾,以v f s m o u n t 为节点的一个单向链表中。从链表中的每一个v f s m o u n t 节点可找出一个已注册文件系统的信息。文件系统类型的注册和注销反映在 以f i l e _ s y s t e m s 为链表头,以f i l e _ s y s t e m _ t y p e 为节点的单向链表中。链表的 每一个f i l e _ s y s t e m _ t y p e 节点描述一个已注册的文件系统类型。它们的数据 结构如下描述: 网络镜像块设蠢驱魂磷究与实瑗 系统管理可从v f s m n t l i s t 开始,遍历整个文件系统链表,获得任何一个 基安装文孛 系统豹v f s m o u n t 。由v f s m o u n t 孛豹攒钟m ts b ,获褥该文 件系统的s u p e r , b l o c k ( s u p e rb l o c k s 】数组中个元素,s u p e r _ b l o c k 将在 下瑟分缓) 。嚣从s u p e r _ b l o c k 褥到文传系统的具体傣息,如st y p e 指囱文 件系统类型链装,sm o u n t e d 指向第一个v f si n o d e ,sc o v e r e d 指向安 装点鬟渌项的v f si n o d e 。如下图2 1 所示: 蚕2 - 1 已接搂兹文转系统节患、超级块结构积文搏系绞类型甍患豹关系爨示 2 1 1 2 虚拟文件系统v f s v f s 是秘瑾文件系统与黻务之丽懿一个接口屡,它对l i n u x 黯每个文 d 网络镜像块设备驱动研究与实现 件系统的所有细节进行抽象,使得不同的文件系统在l i n u x 核心以及系统 中运行的其他进程看来,都是相同的。严格说来,v f s 并不是一种实际的 物理文件系统。它只存在于内存中,不存在于任何外存空间。v f s 在系统 启动时建立,在系统关闭时消亡。 v f s 的功能包括: 记录可用的文件系统的类型 将设备同对应的文件系统联系起来 处理一些面向文件的通用操作 涉及到用户针对文件系统的操作时,v f s 把他们映射到与控制文件、 目录、以及i n o d e 相关的物理文件系统。 当某个进程发布了一个面向文件的系统调用时,比如说读写一个文件, 核心将调用v f s 中相应的函数,这个函数处理一些与物理结构无关的操 作,并且把它重定向为真实物理文件系统中相应的函数调用,而这些函数调 用则用来处理那些与物理结构相关的操作。下图2 - 2 显示了v f s 与各种文 件系统之间的关系。 图2 - 2v f s 与具体文件系统之间的关系图示 v f s 的源代码集中在u s r s r c l i n u x f s 目录下,关于它的数据结构的描 述是在文件u s r s r c l i n u x i n c l u d e l i n u x f s h 中,v f s 可能是内核实现中代码 网络镜像块设备驱动研究与实现 量最大的部分之一。 2 i 1 3v f s 的s u p e r _ b l o c k 结构 v f s 描述系统文件使用s u p e r b l o c k 和i n o d e 的方式。在系统启动时,所 有被初始化的文件系统( f i l e s y s t e m _ t y p e ) 都要向v f s ( f i l e s y s t e m s ) 登 记。每种文件系统类型的读超级块子例程( r e a d _ s u p e r ) 必须识别该文件系 统的结构并且将其信息映射到一个v f s 的超级块数据结构上。 为了改善文件系统的性能,设备上的超级块( 或f a t 表等索引信息1 必 须驻留在内存空问。v f s 的s u p e rb l o c k 数据结构即提供了这样的内存空 间。其中,聚合类型成员s u p e rb l o c k u 是实现的关键。例如,e x t 2 类型 的文件系统一旦安装,磁盘上的超级块信息即会复制到一个e x t 2s bi n f o 结构,s u p e rb l o c k u e x t 2s b 将指向该结构。 v f s 超级块包含了一个指向文件系统巾的第一个i n o d e 的指针 s m o u n t e d 。对于根文件系统,它就是代表根目录的i n o d e 节点( i n o d e 结 构将在下文描述) 。 网络镜像块设备驱动研究与实现 v f s 超级块也包含一个指向该文件系统安装点的i n o d e ( 止li n o d e 属 于另一文件系统) 的指针s c o v e r e d 。对于根文件系统, s c o v e r e d 无效。 利用v f s 超级块的s _ m o u n t e d 和s c o v e r e d ,以及i n o d e ,i 叮以构 造包容所有已安装文件系统的树型目录结构,如下图2 3 所示: 图2 - 3 已安装文件系统的树形目录结构图示 2 1 1 4v f s 的i n o d e 结构 文件系统出目录和文件构成。每个目录或文件只能由唯一的i n o d e 描 述。i n o d e 是l i n u x 管理文件系统的最基本单位,也是文件系统连接任何目 录、任何文件的桥梁。 网络镜像块设备驱动研究与实现 v f s 的i n o d e 同v f s 的s u p e r一样,是物理设备上文件或日block 录在内存中的统一封装。其中,聚合类型成员i n o d e u 是实现的关键。例如, 对于e x t 2 类型的文件系统,其磁盘上的i n o d e 信息e x t 2i n o d e 复制到内 存中就是一个e x t 2i n o d ei n f o 结构,i n o d e u e x t 2i 将指向该结构。 2 1 1 5e x 2 文件系统的s u p e rb l o c k 结构 超级块主要用来描述目录和文件在磁盘上的静态分布。超级块对于文件 系统的维护管理至关重要,在系统运行期问,要将超级块复制到内存系统缓 网络镜像块设备驱动研究与实现 冲区内,形成s u p e r _ b l o c k u e x t 2 一s b 结构。 外存中的e x t 2 超级块: 内存中的e x t 2 超级块: s t r u c te x t 2 一s b _ i n f oc 善曩一量、! _ 一垂曩。量“ = 篓量童曩薯曩。 曩 1 ; u n s j ;n e dl o n gs _ f r a g _ s i z e ;j i 曩搀s i z ei o fa 纳g m e n ti nb y t e s 1 u n s i 【g , , n e dl o n gs _ f r a g s _ p e r _ b l o c k ;:* n j u m jb e ro f f r a g m e n t sp e rb l o c k4 , u n s i g n e dl o n gs _ i n o d e sp e rb l o c k ;* n u m b e ro fi n o d e sp e rb l o c k u n s l g n e di o n 影s _ f r a g sp e t g r o u p 董; 董* n 。u 。m b e ro f f r a g m | ;e n 。t si nag r o u p * 曩 u n s i g n e dt o 鸭s _ 哆b l o c k s 目蔓r o 遥u p 蠢;l * 。n u m b e ro f b l o c k s “i ”na g r o u p + | u n s i g n e dl o n gs _ i n o d e s _ p e r _ g r o u p ;j n u m b e ro f i n o d e si nag r o u p f u n s i g n e dl o n gs _ i t bp e r _ g r o u p ;净n u m b e ro f i n o d et a b l eb l o c k sp e rg r o u p | u n s i g n e dl o n gs _ d bo e r _ g r o u p ;* n u m b e ro f d e s c r i p t o rb l o c k sp e rg r o u p + r u n s i g n e dl o n gs _ d e s ct m r _ b l o c k ; pn u m b e ro fg r o u pd e s c r i p t o r sp e rb l o c k4 u n s l 。n e dl o n gs _ g r o u p s _ c o u n t ;+ n u m b e ro f g r o u p si nt h ef s + 掣捌篡蠹舞篓薯矗曩? 量鬟毫曩毒曩j 网络镜像块设备驱动研究与实现 2 1 1 6e x t 2 文件系统的i n o d e 结构 外存中的e x t 2i n o d e : 一u 3 2 凹a g s ; u n i o n s t r u c t f 一 ff i l e f l a g s - :眠,j1 1j 1 10 网络镜像块设符驱动研究与实现 一u l 6 h j 二g i d _ 1 i g h ; j : u 3 2 i jh u r d 2 ; $ t r u c t u 8 u 8 u 1 6 h _ i _ a u t h o r ;。- 一i 、 。”= ;l ;_ ;二 一叠i 董叠 一i 董誊蓦 霉: 一薯誊毫j j _ j m _ i _ f l a g ; pf r a g m e n tn u m b e r * , m _ i _ f s i z e ; 1 f r a g m e n ts i z e * jj m 二p a d i ; “_ i i 参 _ ; 量u 3 2 m _ i _ r e s e r v e d 2 1 2 ; ) m a s i x 2 ; o s d 2 ; ,奉o sd e p e n d e n t2 + 网络镜像块殴备驱动研究与实现 内存中的e x t 2i n o d e 2 1 1 7e x t 2 文件系统及其组描述符( g r o u pd i s c r i p t o r ) e x t 2 是l i n u x 中的一个可扩展的强有力的文件系统。通过v f s 的超 级块f s t r u c te x t 2s bi n f oe x t 2s b ) 可以访问e x t 2 的超级块,通过v f s 的 i n o d e ( s t r u c te x t 2 一i n o d e _ i n f oe x t 2 - i ) 可以访问e x t 2 的i n o d e 。 在e x t 2 中,文件也是由逻辑块的序列组成。所有的数据块的长度相 同,但是对于不同的e x t 2 文件系统,其长度可以变化。当然,对于给定 的e x t 2 文件系统,其块的大小在创建时就会固定下来。所有文件的大小 都用整数块来表示。 e x t 2 文件系统中的每个文件都用一个单独的i n o d e ( 即s t r u c t e x t 2i n o d e 结构) 来描述,而每个i n o d e 都有一个唯一的标志号。e x t 2 通 过使用i n o d e 对系统中的每个文件的描述来定义文件系统的结构。e x q 、2 文件系统将它所占用的逻辑分区划分成块组( b l o c kg r o u p ) 。 每个块组中保存着关于文件系统的备份信息( 超级块和所有组描述符) 。 当某个组的超级块或i n o d e 受损时,这些信息可以用来恢复文件系统。 组描述符中块位图r b l o c kb i t m a p ) 汜录本组内各个数据块的使用情况, 其中每一位( b i t ) 对应于一个数据块,0 表示窄闲,非0 表示已分配。 l n o d e 位图( i n o d eb i t m a p ) 的作用类似于块化图,它记录i n o d c 表中i n o d c 的使j j 情况。i n o d e 表( i n o d ct a b l e ) 保存了本组所有的i n o d e 。数掘块 嗍络镜像块设备驱动研究与实现 ( d a t ab l o c k s ) 则是真正的文件数掘区。 s t r u c te x t 2 _ g r o u p _ d e s c 0 。 曩 b g _ b l o c kb i t m a p ;j 严该块组的块位图位置+ b g i n o d e _ b i t m a p ;一一一产该块组的i n o d e 位图位置+ b gi n o d et a b l e ;产该块组的i n o d e 表的位置+ b g f r e e _ b l o c k s _ c o u n t ;产该块组的空闲块数 b g _ f r e e _ i n o d e sc o u n t ;,+ :该块组的i n o d e 数+ , _ b g _ u s e d _ d i r s e o u n t ; * d i r e c t o r i e sc o u n t 瓤 b 咖唆:薰 | 1 垂;蘩i 薹囊1 ;i | ;。 j量 b g _ r e s e r v e d 。3 ;。;。:。i 誊_ 1 | _ 一。i 量j j | 。萎蠹鎏;誊薯薹篓- 麓= 篝蠹董崔i 誊薯;1 | :、j 。叠曩 。 组描述符是一个挨一个存放,构成了组描述符表。每个块组在它所包含 的超级块的拷贝之后,存放了整个组描述符表。事实上,e x t 2 文件系统 只使用了在块组0 中的第一个拷贝。其他块组中的拷贝是在主拷贝被破坏 时,用来恢复主拷贝的。其作用如同超级块的拷贝。下图2 - 4 显示了块组、 超级块与组描述符的结构。 s a m e f o re v e r yg r o u pd i s t i n c t f o re v e r yg r o u p 图2 - 4块组、超级块与组描述符的结构图示 2 i 2l i n u x 系统对缓冲区( b u f f e r ) 的管理 b u f f e r 缓冲建立在v f s 系统中,它不与任何具体的文件系统相关联, 文件系统中凡是涉及读写磁盘的操作,几乎都要用到b u f f e r 缓冲。有些 重要数据结构,如e x t 2 文件系统的超级块在内存中的映像 e x t 2s bi n f o ,甚至直接利用b u f f e r 缓冲来保存信息( e x t 2 超级块的磁 盘映像) 。b u f f e r 缓冲是建立于操作系统与磁盘设备之问的过渡,它处于 其他缓冲系统的最下层。b u f f e r 缓冲系统的性能高低,直接影响肴整个操 靼弛让m m_拍强曩_,。一。一。焉-鎏参攀鬻_|。 网络镜像块设备驱动研究与实现 作糸统的性能。 l i n u x 核心对于b u f f e r 的管理是通过管理b u f f e r _ h e a d 结构来进行的, 在b u f f e r h e a d 结构中有一个数据成员指明了b u f f e r 的所处位置。下面 依次会介绍b u f f e r h e a d 的结构,管理b u f f e r 与b u f f e r h e a d 的链表,以 及b u f f e r 与b u f f e rh e a d 在链表中的迁移。 2 1 2 1b u f f e rh e a d 结构 s t r u c tb u f f e r h e a d 以1 6 字节为单位( 行) 组织,目的仍是提高访问效 率。第一行是最常用的数据,第二行是次常用的数据,然后是其它非关键性 ( 仅对性能而言) 数据。其中b d a t a 是指向缓冲区数据的指针,l i n u x 一是 通过它将b u f f e r h e a d 和b u f f e r 连接在一起的。 l i n u x 文件系统所管理的b u f f e r 与b u f l h rh e a d 链表 l i n u x 的缓冲系统由一个h a s h 表s t a t i cs t r u c tb u f f e rh e a d + + h a s ht a b l e , 和四个s t r u c tb u f f e rh e a d 链表构成: 网络镜像块设备驱动研究与实现 最近最少使用b u f f e r 链表s t a t i cs t r u c tb u f f e rh e a d + l r u _ l i s t i n r _ l i s t 】2 n u l l ,) ; 空闲b u f f e r 链表,s t a t i cs t r u c tb u f f e r h e a d + f r e e l i s t n rs i z e s 2 n u l l ,) ; 未使用b u f f e r 链表,s t a t i cs t r u c tb u f f e r h e a d + u n u s e d l i s t = n u l l ; 重用b u f f e r 链表,s t a t i cs t r u e tb u f f e rh e a d + r e u s el i s t = n u l l : r e u s el i s t 接收从i o 设备中断服务程序返还的缓冲区对应的 b u f f e r h e a d 。这个缓冲区本为了数据的传输而申请的。在数据传输完毕, 中断服务即将返回前,设备驱动程序的e n d _ r e q u e s t 函数仍需访问该缓冲 区。所以该缓冲区对应的b u f f e r h e a d 不能直接挂到u n u s e d _ l i s t ,而是先挂 到r e u s e _ l i s t ,然后由r e c o v e r _ r e u s a b l e _ b u f f e r _ h e a d s o 改挂到u n u s e d 一1 i s t 。 u n u s e dl i s t 保存刚从内存管理模块申请到的尚未使用的b u f f e rh e a d , 或由r e c o v e r _ r e u s a b l e _ b u f f e r _ h e a d s ( ) 函数从r e u s e l i s t 恢复b u f f e r _ h e a d 。 f r e el i s t 回收来自l r ul i s t 或u n u s e dl i s t 的b u f f e rh e a d 。f r e el i s t 是 个共有7 个元素的关于缓冲区链表指针的数组。7 个链表中,每个链表内 各节点描述的缓冲区长度是一样的,分别是2 0 5 1 2 字节、2 1 5 1 2 字节、 2 2 + 5 1 2 字节、2 3 + 5 1 2 字节、2 4 + 5 1 2 字节、25 + 5 1 2 字节、2 6 * 5 1 2 字 节。 l r ul i s t 保存正在使用的缓冲区,它们可以向 f r e el i s t 申请得到。 写回设备操作的缓冲区数组共有4 个指针元素,分别指向一个缓冲区链 表: l r u _ l i s t 0 】,b u f c l e a n 链表,保存内容尚未改写的缓冲区 l r u l i s t 1 】,b u f l o c k e d 链表,保存正在进行写设备操作的缓冲 忧 l r u _ l i s t 2 】 冲区 l r u l i s t 3 】 的缓冲区 b u f l o c k e d l 链表,保存用于超级块或i n o d e 的缓 b u f d i r t y 链表,保存已改写但尚未安排写设备操作 在上述的几个链表中, r e u s e d l i s t 和u n u s e d l i s t 保存的仅是 b u f f e r h e a d ,并没有真实的b u f f e r ,即b u f f e r h c a d 的b d a t a 是无效的。 而在l r u l i s t 口和f r e e l i s t 【 的几个链表中的b u f f e r h e a d 的b d a t a 是有效 的,它们真实对应了一缓冲区。 网络镜像块设备驱动研究与实现 2 1 2 2b u f f e r 及b u f f e r h e a d 在链表中的迁移 b u f f e r h e a d 和b u f f e r 在各个链表中迁移过程如下图2 5 所示 图2 - 5b u f f e r 与b u f f e rh e a d 的迁移图 图2 5 中各转换函数如下: l g e t b l k ,2r e f i l l _ f r e e l i s t ,3g r o w _ b u f f e r s ,4t r y _ t of r e eb u f f e r , 5 一g e t _ f r e e _ _ p a g e ,6g e l u n u s e d _ b u f f e r _ h e a d , 7 r e c o v e r r e u s a b l e b u f f e r l h e a d s , 8g e t _ m o r e _ b u f f e r _ h e a d s ( 调用了k m a l l o c ) ,11f r e e _ p a g e 12r e f i l e b u f f e r 下面说明一些函数的功能及流程。 s t r u c tb u f f e r _ h e a d + g e t b l k ( k d e v _ td e v ,i n tb l o c k ,i n ts i z e l g e t b l k 函数获取一个缓冲区用于读写操作,它先在b u f f e rh e a d 的h a s h 表中寻找对应给定设备和块号的缓冲区,找到说明已分配,则返回h a s h 表 中的缓冲区对应的b u f f e rh e a d ;找不到则检查缓冲区大小为s i z e 的空闲链表。 若链表不为空,则取表头b u f f e r _ h e a d 作为返回值;否则调用函数r e f i l lf r e e l i s t 填充空闲链表,再取出表头作为返回值。流程图见图2 - 6 。 网络镜像块设备驱动研究与实现 g e t b l k ( ) 图2 - 6 g e t b l k o 流程图 s t a t i cv o i dr e f i l l _ f r e e l i s t ( i n ts i z e ) r e f i l lf r e e l i s t 函数为了提高效率,一次试图分配一定数量内存用作缓冲, 这个数值保存在一个参数表中( b d f 为欲分配内存的大p r mbu nn r e f i l l * s i z e 小1 。它主要分三步来满足需求: 调用g r o wb u f f e r s 从未用内存中来进行分配。若需求得到满足则返回, 否则执行b 。 尝试从b u fc l e a n ,b u f l o c k e d 和b u f l o c k e d l 三个链表中 取出一个合适的缓冲区移入f r e el i s t 链( 包括b u f f e r 和b u f f e rh e a d ) 。对于这 个缓冲区的要求是不脏,没被加锁,没有保护标志及引用数为0 等。然后在 这个缓冲区所在链表重复找这样的缓冲区移入f r e el i s t 。若找完这个链还不 能满足需求,就重新在三个链表中找。这时如果满足了要求,则返回。否

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论