文件系统
:操作系统中处理文件的部分,有关文件的构造,命名,存取,使用,实现和管理都是操作系统文件系统设计的主要内容
文件可以有多种构造方式。
Linux中分为
普通文件(regular)
:存在于外部存储器中,用于存储普通文件。目录文件(directory)
:用于存放目录项,是文件系统管理的重要文件类型。管道文件(pipe)
:一种用于进程间通信的特殊文件,也称为命名管道FIFO。套接字文件(socket)
:一种用于网络间通信的特殊文件。链接文件(link)
;用于间接访问另外一个目标文件,相当于widows快捷方式。字符设备文件(character)
:字符设备在应用层的访问结构。块设备文件(block)
:块设备在应用层的访问接口。操作系统常用的文件属性
属性 | 含义 | 备注 |
---|---|---|
保护 | 谁可以存取文件,以什么方式 | |
口令 | 存取文件需要的口令 | 有一些系统中,用户必须给出口令才能存取文件 |
创建者 | 创建文件者ID | |
所有者 | 当前所有者 |
属性 | 含义 | 备注 |
---|---|---|
只读标志 | ||
隐藏标志 | ||
系统标志 | 0表普通文件,1表示系统文件 | |
存档标志 | 0表示已经备份,1表示需要备份 | |
ASCII/二进制标志 | 0表示ASCII文件,1表示二进制文件 | |
随机存取标志 | 0表示只允许顺序存取,1表示随机存取 | |
临时标志 | 0表示正常,1表示进程退出时删除文件 | |
加锁标志 | 0表示未加锁,非零表示加锁 |
属性 | 含义 | 备注 |
---|---|---|
记录长度 | 一个记录中的字节数 | |
键的位置 | 每个记录中键的偏移量 | |
键的长度 | 键字段的字节数 | |
当前大小 | 文件字节数 | |
最大长度 | 文件可能增长到的字节数 |
属性 | 含义 | 备注 |
---|---|---|
创建时间 | ||
最后一次存取时间 | ||
最后一次修改时间 |
最常用的一些系统调用(不限制系统的总结)
Linux文件IO函数,通常包括 open,read,write,lseek,close这五个函数。
文件系统存放
:文件系统存放在外存上。多数磁盘划分为一个或者多个分区,每个而分区有一个独立的文件系统。主引导记录(master boot record,MBR)
:磁盘的0号扇区称为主引导记录,用来引导计算机,MBR之后挨着的是分区表
,该表给出了每一个分区的起始和结束地址。
在计算机被引导时,BIOS读入并执行MBR。MBR执行的第一件事情是确定活动分区,读入活动分区的第一个块,称为引导块(boot block)
,并执行之。引导块中的程序将装载该分区中的操作系统。为了统一,每个分区都从一个启动块开始,即使它不含一个可以启动的操作系统。不过,在将来这个分区也许会有一个操作系统的。
文件存储实现的关键问题是记录各个文件分别用到哪些磁盘块。不同的操作系统采用不同的方法。
最简单的分配方案:把每个文件座位一连串连续数据存储在磁盘上。所以,在块大小为1KB的磁盘上,50KB的文件要分配50个连续大小的块。
优点
缺点
链表分配
:为每个文件构造磁盘块列表,每一个块的第一个字作为指向下一块的指针,块的其他部分存放数据。
优点
缺点
A:我们可以知道上面链表分配的不足,那么如何解决呢?
B: 可以取出每个磁盘块的指针字,把它放在内存的一个表里面,就可以解决链表分配的两个不足。
文件分配表(FAT,File Allocation Table)
:这个表实现了链表的操作。文件分配表的每一个表项存放着文件数据的下一个块的块号
优点
缺点
A:我们可以知道上面链表分配的不足,那么如何解决呢?
B: 既然整张文件分配表太大了,我们就拆分成小的放,实现一个新的数据结构i节点。
i节点(index-node)
:每个文件都赋予了一个称为i节点的数据结构,其中列出了文件属性和文件块的磁盘地址。
优点:
缺点与解决方案:
每个目录项只引用i节点的目录
共享文件
:当几个用户在同一个项目里面工作时候,他们常常需要共享文件。其结果是,如果一个共享文件同时出现在属于不同用户的不同目录下面,工作起来就很方便。连接(link)
:原本属于C目录下的文件也出现在B目录下的话,B的目录与该共享文件的联系称为一个连接(link)
。这样文件系统本身也成为了一个有向无环图(DAG)
。
共享文件的问题:
解决方案:
i节点方法
:磁盘块不列入目录,而是列入一个与文件本身关联的小型数据结构中,目录指向这个数据结构(Linux中的i节点)(硬连接)所有者计数机制
,当B连接到共享文件时,i节点记录文件的所有者是C,建立一个连接并不会改变所有关系,但是它将i节点的连接技术加1,所以系统知道当前有多少目录项指向这个文件。符号链接方法(symbolic linking)
:让系统建立一个类型为Link的新文件,并把该文件放在B目录下,使得B与C的一个文件存在链接。链接文件只包含了它所连接的文件的路径名。(软连接)tips:
还有一个由连接带来的问题,在符号连接和其他方式中都存在。如果允许连接,文件有两个或多个路径。查找一指定目录及其子目录下的全部文件的程序将多次定位到被连接的文件。例如,一个将某一目录及其子目录下的文件转存到磁带上的程序有可能多次复制一个被连接的文件。进而,如果接着把磁带读入另一台机器,除非转出程序具有智能,否则被连接的文件将被两次复制到磁盘上,而不是只是被链接起来。
Update your browser to view this website correctly. Update my browser now