4.1.1 文件管理
一、文件的属性
1、文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名 文件
2、标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,
因此标识符只是操作系统用于区分各个文件的一种内部名称
3、类型:指明文件的类型 txt pdf
4、位置:文件存放的路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见)
5、大小:指明文件大小
6、创建时间、上次修改时间文件所有者信息
7、保护信息:对文件进行保护的访问控制信息
二、文件内部的数据应该怎样组织起来?
三、文件之间应该怎样组织起来?
四、操作系统应该向上提供哪些功能?
五、从上往下看,文件应该如何存放在外存
| (1)与内存一样,外存也是由一个个存储单元组成的,每个存储单元可以存储一定量的数据 每个存储单元对应一个物理地址
(2)类似于内存分为一个个“内存块”,外存会分为一个个“块/磁盘块/物理块” 每个磁盘块的大小是相等的,每块一般包含2的整数幂个地址 (如本例中,一块包含2^10个地址,即1KB) 同样类似的是,文件的逻辑地址也可以分为(逻辑块号,块内地址), 操作系统同样需要将逻辑地址转换为外存的物理地址(物理块号,块内地址)的形式 块内地址的位数取决于磁盘块的大小
(3)操作系统以“块”为单位为文件分配存储空间,因此即使一个文件大小只有10B, 但它依然需要占用1KB的磁盘块 外存中的数据读入内存时同样以块为单位
|
六、其他需要由操作系统实现的文件管理功能
1、文件共享: 使多个用户可以共享使用一个文件
2、文件保护: 如何保证不同的用户对文件有不同的操作权限
4.1.2 文件的逻辑结构
一、概述
(1)“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的
“物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中的
(2)类似于数据结构的“逻辑结构”和“物理结构”
“线性表”就是一种逻辑结构,在用户角度看来,线性表就是一组有先后关系的元素序列,如: a,b,c…
“线性表”这种逻辑结构可以用不同的物理结构实现,如:顺序表/链表
顺序表的各个元素在逻辑上相邻,在物理上也相邻;
而链表的各个元素在物理上可以是不相邻的
(3)因此,顺序表可以实现“随机访问”,而“链表”无法实现随机访问
二、无结构文件
文件内部的数据就是一系列二进制流or字符流组成,又称“流式文件”
如:Windows操作系统中的.txt文件
三、有结构文件
1、定义
由一组相似的记录组成,又称“记录式文件”
每条记录由若干个数据项组成; 如:数据库表文件
一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)
根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录and可变长记录两种
2、逻辑结构
(1)顺序文件
Δ1、定义:文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的or可变长的
各个记录在物理上可以顺序存储or链式存储
Δ2、分类:串结构 ---- 记录之间的顺序与关键字无关(通常根据存入事件排序)
顺序结构 -- 记录之间的顺序按关键字顺序排列
(2)索引文件
对于可变长记录文件,要找到第i个记录,必须先顺序第查找前i-1个记录,
但是很多应用场景中又必须使用可变长记录,如何解决这个问题?
| 索引表本身是定长记录的顺序文件 因此可以快速找到第i个记录对应的索引项
可将关键字作为索引号内容 若按关键字顺序排列,则还可以支持按照关键字折半查找
每当要增加/删除一个记录时,需要对索引表进行修改 由于索引文件有很快的检索速度, 因此主要用于对信息处理的及时性要求比较高的场合
另外,可以用不同的数据项建立多个索引表 如:学生信息表中,可用关键字“学号”建立一张索引表,也可用“姓名” 这样就可以根据“姓名”快速地检索文件了 (Eg: SQL就支持根据某个数据项建立索引的功能) |
(3)索引顺序文件
Δ1、思考索引文件的缺点
每个记录对应一个索引表项,因此索引表可能会很大
比如:文件的每个记录平均只占8B,而每个索引表项占32个字节,那么索引表都要比文件内容本身大4
倍,这样对存储空间的利用率就太低了
Δ2、索引顺序文件是索引文件和顺序文件思想的结合
索引顺序文件中,同样会为文件建立一张索引表,
但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项