操作系统——第四章(文件管理与文件的逻辑结构)
一、文件系统基础
1.文件的属性
- 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件
- 标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性。因此标识符只是操作系统用于区分各个文件的一种内部名称。
- 类型:指明文件的类型
- 位置:文件存放的路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见)
- 大小:指明文件大小
- 创建时间、上次修改时间
- 文件所有者信息
- 保护信息:对文件进行保护的访问控制信息
2..文件内部的数据怎样组织起来?
对于记录式文件,记录就是一种相关数据项的集合。而数据项是文件系统中最基本的数据单位。(数据项可以分为基本数据项和组合数据项)
- 文件的结构自底向上包括数据项、记录和文件。
3.文件之间应该怎样被组织起来?
文件通过目录把数据有结构的组织起来。
4.操作系统应该向上层提供哪些功能?
5.从上往下看,文件应该如何存放在外存?
6.其他由操作系统实现的文件管理功能
7.知识图谱
二、文件的逻辑结构
知识概览
1.有结构文件
按文件是否有结构分类,可以分为无结构文件、有结构文件两种。
无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:
Windows操作系统中的.txt文件。
有结构文件:由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成。如:
数据库表文件。一般来说,每条记录有一个数据项可作为关键字。根据各条记录的长度(占用的
存储空间)是否相等,又可分为定长记录和可变长记录两种。
2.有结构文件的逻辑结构
(1)顺序文件
结论:定长记录的顺序文件,若物理上采用顺序存储,则可实现随机存取:若能再保证记录的顺结构,则可实现快速检索(即根据关键字快速找到对应记录)
【注】一般来说,考试题目中所说的“顺序文件”指的是物理上顺序存储的顺序文件。可见,顺序文件的缺点是增加/删除一个记录比较困难(如果是串结构则相对简单)
(2)索引文件
【拓展】SQL语句中某个数据项建立索引的功能代码
在SQL语句中,可以使用以下代码来为某个数据项建立索引:
CREATE INDEX index_name ON table_name (column_name);
在上面的代码中,index_name
是索引的名称,table_name
是数据表的名称,column_name
是要建立索引的列名。通过建立索引,可以加快数据库的查询速度,特别是对于频繁查询的列。
折半查找:
折半查找(Binary Search)是一种在有序数组中查找特定元素的算法。其原理是通过不断将查找范围缩小为原来的一半,直到找到目标元素或者确定目标元素不存在为止。
以下是折半查找的C语言代码实现:
#include <stdio.h>int binarySearch(int arr[], int left, int right, int target) {while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) {return mid;} else if (arr[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return -1;
}int main() {int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int target = 7;int n = sizeof(arr) / sizeof(arr[0]);int result = binarySearch(arr, 0, n - 1, target);if (result != -1) {printf("目标元素在数组中的索引为:%d\n", result);} else {printf("目标元素不存在于数组中\n");}return 0;
}
在上面的代码中,binarySearch
函数接受一个有序数组arr
、左边界left
、右边界right
和目标元素target
,并返回目标元素在数组中的索引,如果目标元素不存在则返回-1。函数通过不断更新左右边界left
和right
来缩小查找范围,直到找到目标元素或者左边界超过右边界为止。在main
函数中,我们定义一个有序数组arr
,设置目标元素为7,并调用binarySearch
函数进行查找。
(3)索引顺序文件(定长结构的串结构文件)
索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。
思考 若文件共有105个记录,则可分为1000个分组,每个分组1000个记录根据关键字检索一个记录平均需要查找500+500=1000次。这个查找次数依然很多,如何解决呢?
答:需要建立多级索引顺序文件。
3.知识回顾