⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000003.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;BlueOcean&nbsp;(Blue),&nbsp;信区:&nbsp;Unix&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;好书共赏-《Unix&nbsp;Internels》(三)&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Mon&nbsp;Apr&nbsp;27&nbsp;13:20:24&nbsp;1998)&nbsp;m2mWWW-POST0m0m&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>Chapter&nbsp;8&nbsp;File&nbsp;System&nbsp;Interface&nbsp;and&nbsp;Framework&nbsp;<BR>&nbsp;<BR>本节前半段讨论(复习)跟filesystem有关的系统呼叫.&nbsp;後半段讨论mordern&nbsp;<BR>Unix的VFS&nbsp;(vnode)架构,&nbsp;亦即,&nbsp;kernel处理file&nbsp;system的方法.&nbsp;下一个chapter&nbsp;<BR>主要讨论file&nbsp;system在disk上的layout.&nbsp;<BR>&nbsp;<BR>s5fs是unix早期(System&nbsp;V&nbsp;r4以前)档案系统,特色是简单但功能尚可,最大&nbsp;<BR>的缺点是有14个字的档名限制.&nbsp;4.2BSD设计了Fast&nbsp;File&nbsp;System,&nbsp;FFS,&nbsp;<BR>提供了较优的performance和功能.&nbsp;FFS受到广大的欢迎,&nbsp;最後被SVR4&nbsp;<BR>所采用.&nbsp;FFS又称为UFS&nbsp;(UNIX&nbsp;File&nbsp;System)&nbsp;<BR>&nbsp;<BR>早期的Unix&nbsp;kernel不能同时支援两种以上的档案系统.&nbsp;各家&nbsp;<BR>都有解决之道.&nbsp;AT&amp;T用file&nbsp;system&nbsp;switch,&nbsp;DEC用gnode/gfs,&nbsp;Sun&nbsp;<BR>所提出的vnode/vfs最广为接受,&nbsp;最後赢得胜利,成为SVR4的&nbsp;<BR>一部份.&nbsp;<BR>&nbsp;<BR>inode&nbsp;是Unix特有的观念.&nbsp;Unix&nbsp;kernel利用inode来作为他对档案的介面.&nbsp;<BR>一个inode代表一个档案,&nbsp;记录了kernel存取该档案所需要用到的资料,&nbsp;<BR>以及该档案的属性等等.名叫inode的原因是因为本资料结构的大部份&nbsp;<BR>内容皆由on-disk的inode而来.Unix&nbsp;file&nbsp;system&nbsp;在disk上的image不用档名&nbsp;<BR>而用整数(i-number)来表示每一个档案.&nbsp;目录只是一个较为特别的档案,&nbsp;<BR>记录i-number和档名的对照而已.有了i-number,kernel才找得到inode,&nbsp;<BR>也就是记录档案存放位置与属性的地方.一般称在disk上的inode为on-disk&nbsp;<BR>inode,被kernel读进记忆体,使用中的inode为in-core&nbsp;inode.&nbsp;<BR>&nbsp;<BR>vnode/vfs的概念是把原来in-core&nbsp;inode物件化成为&nbsp;virtual&nbsp;class.&nbsp;<BR>vnode提供一个抽象化的介面.&nbsp;kernel要对档案的所有操作接&nbsp;<BR>透过vnode所定义的虚拟函式来达成.&nbsp;一个vnode&nbsp;初始化後,就&nbsp;<BR>会有个指标指向file&nbsp;system&nbsp;dependant&nbsp;part.所以不管底下的档案&nbsp;<BR>系统格式为何,&nbsp;kernel皆能呼叫到正确的函数.&nbsp;VFS的架构使得&nbsp;<BR>Unix可以支援多重档案系统,&nbsp;kernel经由vnode提供档案系统的&nbsp;<BR>发展者一个标准的介面.&nbsp;七月号的InfoMac介绍狂想曲的&nbsp;<BR>一篇文章说VFS可以有档案压缩,解压缩,线上防毒的功能,&nbsp;&nbsp;<BR>真的是颇为奇怪..&nbsp;<BR>&nbsp;<BR>比较特别的是Unix的实作和定义有点不太一样.&nbsp;<BR>定义说:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;vnode&nbsp;{&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public_data1,2,3,....&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caddr_t&nbsp;v_data;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;vnode;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;vnode.v_data&nbsp;=&nbsp;(caddr_t&nbsp;*)&amp;ffs_data;&nbsp;<BR>&nbsp;<BR>而实作作成这样,把interface和file&nbsp;system&nbsp;dependant&nbsp;data放在一起:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;ffs_node&nbsp;{&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public_data1,2,3,...&nbsp;/*和struct&nbsp;vnode顺序一样*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;caddr_t&nbsp;v_data;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private_data1,2,3....&nbsp;/*&nbsp;ffs&nbsp;private&nbsp;data&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;vnode;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;vnode.v_data&nbsp;=&nbsp;(caddr_t&nbsp;*)&amp;vnode;&nbsp;<BR>&nbsp;<BR>Understand?不懂就去看书吧!书上是用图示法的,见图知意.&nbsp;<BR>&nbsp;<BR>vnode/vfs有个地方和原本的unix不一样,会导致race&nbsp;condition.我想这是&nbsp;<BR>许多security&nbsp;hole的泉源.就是file&nbsp;name&nbsp;lookup不一样.以前只有一个&nbsp;<BR>filesystem的时候(看Bach的书)&nbsp;Unix是传一个路径给namei(),就可以找到&nbsp;<BR>inode.&nbsp;vnode的方法要把一个路径切碎,一段一段找.这也使performance&nbsp;<BR>降低不少.&nbsp;(unix&nbsp;filesystem瓶颈之一在file&nbsp;name&nbsp;lookup,每次lookup都会&nbsp;<BR>碰到路径上每一个目录的inode....4.4BSD和OSF/1都有提出解决的对策.&nbsp;<BR>(自己看书,太琐碎了)&nbsp;<BR>&nbsp;<BR>有了vnode/vfs,&nbsp;则可以鼓励出更多的创意,&nbsp;更多的档案系统可以被提出来.&nbsp;<BR>比较有趣的有NFS,&nbsp;specfs,&nbsp;fifofs,&nbsp;/proc&nbsp;fs.这里顺便提一下後三者.本书是在&nbsp;<BR>稍後的章节才提到.&nbsp;<BR>&nbsp;<BR>specfs在干什麽的呢?以前s5fs的时代,有些特别的inode不表示实体的档案,&nbsp;<BR>而是用来表示周边装置.现在假设我们的ffs上有个/dev/tty1的档案.&nbsp;利用&nbsp;<BR>刚刚提到的vnode/vfs的方式,&nbsp;kernel会去呼叫到ffs的函式,而这些函式并不能&nbsp;<BR>知道怎样驱动tty&nbsp;driver.解决的方式是设计一个specfs.只要kernel发现&nbsp;<BR>inode是个device&nbsp;file的话,就不去呼叫vnode的open,而是呼叫specvp(),把&nbsp;<BR>该vnode传给他.specvp就会把适当的virtual&nbsp;function和指标填到vnode去,&nbsp;<BR>而得到所希望的操作.这就是specfs存在的目的.&nbsp;Chapter&nbsp;16有更详细的资料.&nbsp;<BR>并讨论到不同device&nbsp;file&nbsp;major/minor&nbsp;device&nbsp;number都一样,也就是指到&nbsp;<BR>相同device的问题解法.&nbsp;<BR>&nbsp;<BR>fifofs和specfs一样.用来把ffs的某个vnode换成有fifo作用的named&nbsp;pipe.&nbsp;<BR>&nbsp;<BR>/proc&nbsp;file&nbsp;system则是把process在记忆体中的状态,转换为file&nbsp;system的方式&nbsp;<BR>方便存取.这样子debugger得以更方便的控制process,提供更多的功能,&nbsp;<BR>也可以debugger执行到一半的process.&nbsp;(前面提到在旧的Unix下,这是不可行的)&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>Chapter&nbsp;9&nbsp;File&nbsp;System&nbsp;Implementations&nbsp;<BR>&nbsp;<BR>本章主要讨论on&nbsp;disk&nbsp;&nbsp;file&nbsp;system&nbsp;layout,&nbsp;和一些其他的file&nbsp;system.&nbsp;<BR>前面没有提到vnode在kernel如何组织,所以这章也补齐.&nbsp;<BR>&nbsp;<BR>首先是s5fs.其实这还是自己看比较快,看图说故事就对了.&nbsp;<BR>&nbsp;<BR>比较特别的是file&nbsp;system如何处理free&nbsp;block.&nbsp;s5fs用free&nbsp;block&nbsp;<BR>list来管理free&nbsp;block.这个list会很占空间吗?不会的,因为此&nbsp;<BR>list在free&nbsp;block上,也就是借用没有用的的空间.free&nbsp;block&nbsp;list&nbsp;<BR>的大小和所剩的空间成正比.如果没有空间了,也不需要&nbsp;<BR>free&nbsp;block&nbsp;list了;&nbsp;free&nbsp;block&nbsp;list原先占用的空间就&nbsp;<BR>会释出来当作free&nbsp;block用.&nbsp;<BR>&nbsp;<BR>其实前面没说清楚.&nbsp;free&nbsp;block&nbsp;list分成两部份.在super&nbsp;block&nbsp;<BR>内有一小节,剩下的才放在free&nbsp;data&nbsp;block上.&nbsp;super&nbsp;block的&nbsp;<BR>free&nbsp;list用完了就会从free&nbsp;data&nbsp;block上的list调借.&nbsp;所以&nbsp;<BR>free&nbsp;block&nbsp;list占用data&nbsp;block的空间会在data&nbsp;block用完前释出.&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>Berkeley&nbsp;Fast&nbsp;File&nbsp;System&nbsp;<BR>&nbsp;<BR>s5fs有许多限制,&nbsp;performance是一个问题.比如说ls&nbsp;-l&nbsp;dir,就会在inode和dir&nbsp;<BR>的档案间来回奔跑.&nbsp;(inode才有file&nbsp;attribute.)&nbsp;s5fs把inode&nbsp;table放在disk&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -