如文本文件, 由一些二进制或字符流组成
如数据库表, 由一组相似的记录组成, 又称 "记录式文件"
记录 : 一组相关数据项的集合
创建文件---create系统调用
读文件---read系统调用
删除文件---delete系统调用
写文件---write系统调用
打开文件---open系统调用
关闭文件---close系统调用
这里重点讨论有结构文件
有结构文件由一组相似的记录组成, 又称记录式文件 . 每条记录又由若干个数据项组成, 如数据库表文件. 一般来说, 每条记录有一个数据项可作为关键字. 根据各条记录的长度是否相等, 可分为定长记录和可变长记录两种.
文件中的记录一个接一个地顺序排列( 逻辑上 ) , 记录可以是定长的或可变长的. 各个记录在物理上可以顺序存储或链式存储.
索引顺序文件是索引文件和顺序文件思想的结合. 索引顺序文件中, 同样会为文件建立一张索引表, 但不同的是, 并不是每个记录都对应一个索引表, 而是一组记录对应一个索引表项
早期的操作系统并不支持多级目录, 整个系统只建立一张目录表, 每个文件占一个目录项
单级目录实现了"按名存取", 但是不允许文件重名
单级目录不支持多用户操作系统
早期的多用户操作系统采用两级目录结构, 分为主文件目录和用户文件目录.
将fcb除了文件名之外的所有信息放入索引结点存在外存, 只有找到对应的目录项时才将索引节点调入内存.
在内存管理中, 进程的逻辑地址空间被分为一个个的页面
同样的, 在外存管理中, 为了方便对文件数据的管理, 文件的逻辑地址空间也被分为了一个个的文件块
于是文件的逻辑地址也可以表示为 (逻辑块号, 块内地址)的形式
连续分配方式要求每个文件在磁盘上占有一组连续的块
操作系统可以直接算出逻辑块号对应的物理块号, 因此连续分配支持顺序访问和直接访问( 随机访问 )
优点 :
连续分配的文件在顺序读/写时速度最快
缺点 :
采用连续分配的文件不方便拓展
存储利用率低, 会产生难以利用的磁盘碎片. ( 可以采用紧凑的方法来处理碎片, 但是需要耗费很大的时间代价 )
采用隐式链接的链接分配方式, 很方便文件拓展 , 另外, 所有的空闲磁盘块都可以被利用, 不会有碎片问题, 外存利用率高
文件离散地分配在各个磁盘块中, 系统为每个文件建立一张索引表, 索引表中记录了文件的各个逻辑块对应的物理块. 索引表存放的磁盘块称为索引块, 文件数据存放的磁盘块称为数据块 .
K层索引访问一个数据块需要K+1次读磁盘操作
多层索引的各层索引大小不能超过一个磁盘块
会计算文件的长度
混合索引是多种分配方式的结合
e.g.
一个文件的顶级索引表中既包含直接地址索引 , 又包含一级间接索引 ,还包含两级间接索引 ...
好处 : 对于小文件来说只需要很少的读磁盘操作
空闲表记录空闲盘块号的起始地址和空闲块数
要求 : 连续的存储空间
如何分配磁盘块 : 与内存管理的动态分区类似, 为一个文件分配连续的存储空间. 同样可以采用首次适应 , 最佳适应 , 最坏适应等算法.
如何回收磁盘块 :
UNIX系统采用了成组链接法对空闲块进行管理
使用 "create系统调用"
使用 "delete系统调用"
打开文件表
打开文件时不会把文件的数据直接读入内存 ( 读文件时才读入内存 )
多个用户共享同一个文件, 意味着系统中只有 "一份" 文件数据 . 并且只要某个用户改了该文件的数据, 其他用户也可以看到文件数据的变化.
删除 :
e.g.
windows下的快捷方式
口令保护 ( 口令放在系统中, 不太安全 )
加密保护 ( 安全性高, 但加密 / 解密 需要耗费一定的时间
访问控制
e.g.
原文:https://www.cnblogs.com/roccoshi/p/13155746.html