文件管理

文件系统:
    
长期存储信息:
    能够存储大量信息
    使用信息的进程终止时,信息仍旧存在。
    必须能使多个进程并发存储有关信息
    
磁盘(magnetic disk)
    读块k
    写块k

进程(与线程)、地址空间、文件
文件是进程创建的信息逻辑单元。可以把文件看成一种地址空间
文件受操作系统管理。构造,命名,存取,使用,保护,实现,和管理方法都是操作系统设计的主要内容。
windows用户可以在操作系统中注册扩展名,并且规定该程序拥有该扩展名
windows,unix所见的就是字节,其任何含义只有在用户程序中解释。

文件类型:
    普通文件,目录,字符文件(character special file),块特殊文件(block special file)。
    普通文件:包含用户信息
    目录:管理文件系统结构的系统文件。
普通文件一般分为ASCII和二进制。
只有文件的格式正确,操作系统才会执行这个文件。
unix文件实例:
头文件:    魔数
    正文长度
    数据长度
    BSS长度
    符号表长度
    入口点
    ..
    标志
    
    正文
    数据
    重定位位
    符号表

存档文件:    以编译好但没有链接的库过程(模块)集合而成。
    模块头-->模块名称,日期,所有者,保护,大小
    目标模块
    模块头
    目标模块
    。。。。

文件读取:
    顺序存取
    随机文件存取
    
文件属性:
    文件相关信息。
文件操作:
    create
    delete
    open
    close
    read
    write
    append
    seek
    get attributes
    set attributes
    rename

目录:
    一级目录系统
    层次目录系统
    路径名
        绝对路径:首字母是分隔符
        相对路径:
        ..父目录  .当前目录
目录操作:
    create
    delete
    opendir
    closedir
    readdir
    rename
    link
    unlink
    
文件系统布局:
    分区
MBR,分区表,磁盘分区(引导块,超级块,空闲空间管理,i节点,根目录,文件和目录),磁盘分区,...

文件实现:
    连续分配:把每个文件作为一连串数据块存储在磁盘上。:(简单)磁盘地址和文件数,(读操作性能好),空洞可能较多。cd dvd用。
    链表分配:链表首尾相连,随机存取麻烦。4字节指针大小影响存储。
    在内存中采用表的链表分配(file allocation table),磁盘大的话表占用空间大,FAT方案不适于大磁盘。
    i节点:i节点,记录文件属性和文件块的地址。只有在对应文件打开时i节点才进入内存。保留所有磁盘块的链接表的表大小正比于
        磁盘自身的大小。
    
目录系统:
    目录系统的主要功能是把ASCII文件名映射成定位文件数据所需的信息。
    文件属性直接存放在目录项中。
    i节点系统,还可以把文件属性存放在i节点中而不是目标项中。(win,unix)
    所有目录项大小一样。固定部分,其它属性。
    散列表
    指向目录的指针不能存储在i节点中,原因是可能有无数个目录。
    共享文件-->链接文件(软,硬)
    
unix创建文件:写该文件目录的i节点、目录块、文件的i节点以及文件本身。
日志结构文件系统
LFS系统即使对于一个大部分由零碎的随机写操作组成的任务,同样能够充分的利用磁盘带宽。将整个磁盘结构化为一个日志。每个一段时间
    ,或是有特殊需要时,被缓冲在内存中的所有未决的写操作都被放到一个单独的段中。作为在日志末尾的一个临阶段写入磁盘。i节点
    分散在整个日志中。
日志文件系统
    移除文件:在目录中删除文件,释放i节点到空闲i节点池,将所有磁盘块归还空闲磁盘块。
    只有当日志项被写入,不同的操作才可以进行。所有操作成功后,擦除日志项。
    
虚拟文件系统:
    同一个操作系统,可以包含多个文件系统(windows:ntfs,fat32,fat16)。windows打开一个文件,盘符隐式或者显式存在。
    unix将多个文件系统整合到一个统一的结构中。一个linux系统可以用ext2作为根文件系统,ext3分区装载在/home下,另一块采用
    ReiserFS文件系统的硬盘装载在/home下,以及一个ISO 9660的CD-ROM临时装载在/mnt下。
    VFS(virtual file system)尝试将多个文件系统统一成一个有序的框架。关键思想就在于抽象出所有文件系统共有部分
    ,并且将这部分代码放在单独的一层,该层调用底层的实际文件系统来具体管理数据。
    用户进程----->posix    posix(open,read,write,seek......)
    虚拟文件系统----->VFS接口
    文件系统:FS1,FS2,FS3
    高速缓冲区
    
    当创建一个新的文件系统和VFS一起工作时,新的文件系统的设计者就必须确定它提供VFS所需要的系统调用。明显例子就是从磁盘中
    读某个特定的块,把它放到文件系统的高速缓冲中,并返回指向它的指针。
    VFS两个不同的接口:上层给用户的接口,下层给实际文件系统的接口。
    大多数VFS面向对象:超块(描述文件系统),v节点(描述文件),目录(描述文件系统目录)
    VFS工作机理:系统启动时,根文件系统在VFS中注册。另外,当装载其它文件系统时,不管在启动时还是在操作过程中,它们也必须在VFS
    中注册。当一个文件系统注册时,它做的最基本的工作就是提供一个包含VFS所需要的函数地址列表,可以是一个长的调用矢量表,或者
    是许多这样的矢量,每个VFS一个。因此,只要一个文件系统在VFS注册,VFS就知道如何从它那里读一个块----它从文件系统提供的矢量
    中直接调用第4个或者任何一个功能。同样的,VFS也知道如何执行实际文件系统提供的每一个其它功能,它只需要调用某个功能,该功
    能所在的地址在文件系统注册时就提供了。
    从调用进程号开始和文件描述符开始,进而是v节点(ram中),读取功能指针,然后是实际文件系统的入口函数位置。
    open("/usr/include/unistd.h" , O_RDONLY);首先找到它所装载的文件的根目录,在那里查找,include/unistd.h。然后VFS创建一个
    v节点并调用实际文件系统,以返回所有的文件在i节点的信息。这个信息被和其它信息一起复制到v节点中(RAM中),而这些信息中最
    重要是指向包含调用v节点的操作的功能表的指针。

文件系统管理和优化
    磁盘空间管理:
    存储n个字节:分配n个字节的连续空间;把文件分成很多个连续的块。
    块大小:扇区,磁道,柱面。块小寻道时间长,块大浪费空间(1-4k)
    记录空闲块:采用磁盘块链表,1kB的磁盘块可以保存256个32位的磁盘块号。位图法。44
    磁盘配额:
    文件备份:从错误的灾难中恢复,从意外的操作中恢复。
    物理存储:从磁盘的第0块开始,将全部的磁盘块按序输出到磁带上,直到最后一块复制完毕。简单、快速。不能跳过,也不能选定目录。
    逻辑存储:从一个或几个选定的目录开始,递归的转储其自给定基准日期后所更改的全部文件和目录。
    
文件系统的一致性:块的一致性检查和文件的一致性检查。一个块或者文件对应一个计数器。硬链接计数符号链接不计数。
文件系统性能:高速缓存,块提前读,减少磁盘臂运动。

    读取文件:访问i节点,访问块。
磁盘碎片整理:
    移动文件使它们相邻,并把所有的空闲空间放在一个或者多个大的空间。
    
CD-ROM:  ISO 9660  CD-ROM没有和磁盘一样的同心柱面,而是一个连续的螺旋线来顺序存储信息。螺旋上的位序列被划分成大小为2352字节
    的逻辑块(逻辑扇区)。这些块有的用来引导,有的用来进行错误纠正或者其它用途。每个逻辑块有效部分是2048字节。
    ISO 9660目录项:字节:描述
    1:目录项长度,1:扩展属性记录长度,8:文件位置,8:文件大小,7:日期和时间,1:标志位,2:分隔,4:CD号,1:(L)基本名,4-15:文件名
    ,::填充,版本号,系统使用。
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值