background image

  上文件可能并不是以边疆的方式存放在磁盘上的,长于一块的文件通常将分散 
  地存放在盘上.然而当用户存取文件时,UNIX 文件系统将以正确的顺序取各块, 
  给用户提供文件的逻辑结构. 
      当然,在 UNIX 系统的某处一定会有一个表,告诉文件系统如何将物理结构 
  转换为逻辑结构.这就涉及到 i 节点了.i 节点是一个 64 字节长的表,含有有关一 
  个文件的信息,其中有文件大小,文件所有者,文件存取许可方式,以及文件为 
  普通文件,目录文件还是特别文件等.在 i 节点中最重要的一项是磁盘地址表. 
  该表中有 13 个块号.前 10 个块号是文件前 10 块的存放地址.这 10 个块号能给出 
  一个至多 10 块长的文件的逻辑结构,文件将以块号在磁盘地址表中出现的顺序 
  依次取相应的块. 
      当文件长于 10 块时又怎样呢?磁盘地址表中的第十一项给出一个块号,这 
  个块号指出的块中含有 256 个块号,至此,这种方法满足了至多长于 266 块的文 
  件(272,384 字节).如果文件大于 266 块,磁盘地址表的第十二项给出一个块号, 
  这个块号指出的块中含有 256 个块号,这 256 个块号的每一个块号又指出一块, 
  块中含 256 个块号,这些块号才用于取文件的内容.磁盘地址中和第十三项索引 
  寻址方式与第十二项类似,只是多一级间接索引. 
      这样,在 UNIX 系统中,文件的最大长度是 16,842,762 块,即 17,246,988,288 
  字节,有幸是是 UNIX 系统对文件的最大长度(一般为 1 到 2M 字节)加了更实际的 
  限制,使用户不会无意中建立一个用完整个磁盘窨所有块的文件. 
      文件系统将文件名转换为 i 节点的方法实际上相当简单.一个目录实际上 
  是一个含有目录表的文件:对于目录中的每个文件,在目录表中有一个入口项, 
  入口项中含有文件名和与文件相应的 i 节点号.当用户敲入 cat xxx 时,文件系 
  统就在当前目录表中查找名为 xxx 的入口项,得到与文件 xxx 相应的 i 节点号,然 
  后开始取含有文件 xxx 的内容的块. 

  (2)设备文件 
      UNIX 系统与边在本系统上的各种设备之间的通讯,通过特别文件来实现, 
  就程序而言,磁盘是文件,MODEM 是文件,甚至内存也是文件.所有连接到系统上 
  的设备都在/dev 目录中有一个文件与其对应.当在这些文件上执行 I/O 操作时, 
  由 UNIX 系统将 I/O 操作转换成实际设备的动作.例如,文件/dev/mem 是系统的内 
  存,如果 cat 这个文件,实际上是在终端显示系统的内存.为了安全起见,这个文 
  件对普通用户是不可读的.因为在任一给定时间,内存区可能含有用户登录口 
  令或运行程序的口令,某部分文件的编辑缓冲区,缓冲区可能含有用 ed -x 命令 
  解密后的文本,以及用户不愿让其他人存取的种种信息. 
      在/dev 中的文件通常称为设备文件,用 ls /dev 命令可以看看系统中的一 
  些设备: 
      acuo    呼叫自动拨号器 
      console 系统控制台 
      dsknn   块方式操作磁盘分区 
      kmem    核心内存 
      mem     内存 
      lp      打印机 
      mto     块方式操作磁带 
      rdsknn  流方式操作的磁盘分区