4.1 文件系统基础+ 4.2 目录
4.1.1 初识文件管理
1、文件的属性
文件名
标识符
类型
位置
创建时间
上次修改时间
文件所有者信息
保护信息
2、文件内部数据的组织
3、文件之间如何组织起来?
4、操作系统向上层提供的功能
5、从上往下看,文件如何存放在外存?
小结:
4.1.2 文件的逻辑结构
1、无结构文件(流式文件)
文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows操作系统中的.txt文件。
------>文件内部的数据其实就是一系列字符流,没有明显的结构特性。所以不用讨论无结构文件的“逻辑结构”问题。
2、有结构文件(记录式文件)
根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种
但是可变长记录是最常用的方式
3、有结构文件的逻辑结构
顺序文件
顺序文件的缺点:
增加/删除一个记录比较困难(如果是串结构则相对简单)
索引文件
索引顺序文件
索引顺序文件(检索效率分析)
多级索引顺序文件
小结:
4.1.3 文件目录(对应王道书4.2)
1、文件控制块(FCB)
最重要,最基本的还是文件名、文件存放的物理地址。
需要对目录进行的操作?
2、目录结构
单级目录结构
两级目录结构
多级目录结构
---->又称树型目录结构
当前目录:
无环图目录结构
3、索引结点(FCB的改进)
小结:
4.1.4 文件的物理结构(上)
补充:
1、文件块、磁盘块
2、文件分配方式
连续分配
只要有逻辑块号就可以算出物理块号
连续分配的文件在顺序读/写时速度最快
优点:
- 支持顺序访问和直接访问(即随机访问)
- 连续分配的文件在顺序访问时速度最快
缺点:
- 物理上采用连续分配的文件不方便文件拓展
- 物理上采用连续分配,存储空间利用率低,会产生难以利用的磁盘碎片,可以用紧凑来处理碎片,但是需要耗费很大的时间代价。
链接分配
采用离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。
4.1.4 文件的物理结构(下)
1、文件分配方式–索引分配
如何实现文件的逻辑块号到物理块号的转换?
链接方案
如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放
多层索引
混合索引
索引分配小结:
小结:
4.1.5 逻辑结构与物理结构
1、创建无结构文件
FTLE *fp = fopen("text.txt","w");//打开文件
if(fp == NULL){
printf("打开文件失败!");
exit(0);
}
//写入1w个Hello world
for(int i = 0;i<10000;i++)
fputs("Hello world!",fp);
fclose(fp); //关闭文件
逻辑结构(从用户视角看)
如果用户想要找到第16个字符(编号从0开始)
物理结构(从操作系统视角看)
然后利用文件分配方式:三种
2、创建顺序文件
typedef struct{
int number; //学号
char name[30]; //姓名
char major[30]; //专业
}Student_into;
//以“写”的方式打开文件
FTLE *fp = fopen("students.info","w");
if(fp == NULL){
printf("打开文件失败!");
exit(0);
}
Student_info student[N]; //用数组保存N个学生信息
for(int i = 0;i<N;i++){ //生成N个学生信息
student[i].number = i;
student[i].name[0] = '?';
student[i].major[0] = '?';
}
//将N个学生的信息写入文件
fwrite(student,sizeof(Student_info),N,fp);
fclose(fp);
用户视角
操作系统视角
然后利用那三种方式
3、顺序文件采用顺序存储/链式存储
用户视角
4、链式存储的顺序文件采用链接分配
链式存储是用户关心的
链接分配是操作系统关系的
5、逻辑结构:索引文件
操作系统视角:
利用三种分配方式进行分配
小结:
4.1.6 文件存储空间管理
对空闲磁盘块的管理
1、存储空间的划分与初始化
2、存储空间管理–空闲表法
适用于“连续分配方式”
3、存储空间管理–空闲链表法
空闲盘块链
操作系统保存链头、链尾指针
空闲盘区链
盘区---->指的是连续的盘区组成的
保存链头、链尾指针
4、存储空间管理–位示图法
连续分配、离散分配都适用
如何分配:
如何回收
5、存储空间管理–成组链接法
小结:
4.1.7 文件的基本操作
1、创建文件
2、删除文件
3、打开文件
进程的打开文件表
系统的打开文件表只有一个
4、关闭文件
5、读文件
先读前,要先打开
在支持“打开文件”操作的系统中,只需要提供文件在打开文件表中的索引号即可
6、写文件
小结:
4.1.8 文件共享
1、硬链接
2、软链接
小结:
4.1.9 文件保护
保护文件数据的安全
1、口令保护
口令一般存在文件对应的FCB或索引结点中。
2、加密保护
使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密。
例如:异或加密
3、访问控制
精简的访问列表:
小结:
4.3 文件系统(新增考点)
4.3.1 文件系统的层次结构
4.3.2 文件系统的全局结构(布局)
1、文件系统在磁盘中的结构
磁盘刚生产出来需要被初始化
即物理格式化
------>也叫低级格式化———,划分扇区,检测坏扇区,并用备用扇区替换坏扇区
坏扇区对操作系统来说是透明的
之后开始逻辑格式化
2、文件系统在内存中的结构
近期访问过的目录文件会缓存在内存中不用每次都从磁盘读入,这样可以加速目录检索速度
例子:
4.3.3 虚拟文件系统
1、普通的文件系统
2、虚拟文件系统
vnode和inode的区别:
- vnode只存在主存中,inode既会被调入主存,也会在外存中存储。
- vnode中的函数功能指针,不同的文件系统对应不同的函数功能
3、文件系统挂载
即系统操作安装/装载–如何将一个文件系统挂载到操作系统中