@[toc]
4.1.1 文件管理
文件:一组有意义的信息集合
- 问题1:文件内部的数据怎样组织起来?
- 问题2:文件之间又应该怎样组织起来?
- 问题3:操作系统应该提供哪些功能,才能方便用户、应用程序使用文件?
- 问题4:文件数据应该怎么存放在外存上?
文件的属性
文件名:又创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下补允许有重名文件。
标识符:每一个文件都有一个唯一的标识符用来区分文件,但是对用户来说无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
文件类型:指明文件的类型(txt,jpg..)
位置:文件存放的路径(用户看到的),在外存中的路径(操作系统用的,用户不可见)
大小:指明文件大小
创建时间、修改时间
文件所有者信息
保护信息:对文件进行保护的访问控制信息
文件内部的数据如何组织?
无结构文件:文本文件,有一些二进制或字符流组成,又称流式文件
有结构文件:由一组相似的记录组成,记录时一组相关数据的集合
文件之间如何组织?
树形结构
操作系统为上层提供哪些功能
创建文件:create系统调用
读文件:将文件数据读入内存,才能让CPU处理,提供read
系统调用
写文件:将更改过的文件数据写回外存,我们在记事本上编辑完数据内容后,点击保存后,记事本会通过操作系统的write系统调用
将文件从内存写回外存。
删除文件:delete系统调用
将文件从外存中删除
打开文件:open系统调用
关闭文件:close系统调用
复制文件:先创建一个新文件,在把源文件读入内存,再将内存中的数据写回到新文件中。
文件如何存放在外存?
连续存放还是离散存放?
4.1.2 文件的基础操作
创建文件
进行create 系统调用时
,需要提供的参数
- 所需的外存空间大小
- 文件存放路径
- 文件名
操作系统处理create系统调用
:
- 为新文件分配必要的外存空间
- 在文件目录中创建一个目录项,包含这个文件的文件名以及在外存中的地址等属性。
删除文件
- 从目录中找到要删除文件的目录项,使之为空项
- 回收该文件所占用的存储空间
打开文件
- 在目录中找到对应的文件
- 将文件复制到内存中的打开文件表中,并将对应表的编号返回给用户
当我们打开了一个文件在删除发现删除不了,这是为啥?
系统的打开文件表中记录了每个文件被打开的次数,当想要删除这个文件时,需要先检查打开记录表中这个文件有没有被打开,如果有则不能被删除。
关闭文件
- 将进程的打开文件表相应表项删除
- 回收分配给该文件的内存空间等资源
- 系统打开文件表的打开计数器减1,为0时删掉对应表项
读文件
- 根据文件名查找目录,得到被读文件在外存中的地址
- 在目标项中,还有一个指针用于对文件进行读操作,读到内存中去
写文件
- 根据文件名查找目录
- 找到指定文件的目标项
- 利用目录中的写指针进行写操作
将编辑过的文件写回外存,这个文件先是保留在内存中的。
4.1.3 文件保护
口令保护
加密保护
访问控制
以用户为单位进行控制
这样会导致访问控制列表会很大
以组为单位进行控制
4.1.4 文件的逻辑结构
逻辑结构:指用户看来,文件内部的数据应该是如何组织起来的
物理结构:指的是在操作系统看来,文件的数据是如何存放在外存的。
无结构文件
有结构文件
由一组相似的记录组成,每条记录由若干个数据项组成。每条记录有一个数据项可作为关键字。
根据各条记录的长度,可分为定长记录和可变长记录。
定长记录
可变长记录
顺序文件
串结构:记录之间的顺序与关键字无关
顺序结构:记录之间的顺序按关键字顺序排列
数组和链表的区别
索引文件
对于不定长记录,可以在弄一个索引表,将每个记录的地址都记录在索引表中,这样就可以实现随机存取了, 如果按关键字顺序排列,还可以使用折半查找。
索引顺序文件
为了加快查找,可以将索引表中一个索引项记录一组记录,节约了很多资源,也加快了查找速度
多级索引文件
4.1.5 文件的物理结构
文件块、磁盘块
磁盘是按块来分配的,一个文件会分为好几个块进行存储。
文件分配方式--连续分配
优点:
- 可以实现顺序访问和随机访问
- 读/写速度快
缺点:
- 当文件想要拓展时,发现连续的物理块已经被占用了,只能将整个文件迁徙到其他连续的物理块
- 当有多个空闲块,但不是连续的时,一个文件就无法存储在磁盘中,浪费了很多资源,会产生磁盘碎片
链接分配--隐式链接
链表的形式链接,只能从表头指针一直往下找,只支持顺序访问,效率低。但很方便拓展,不会产生外部碎片。
链接分配--显示连接
用一个表记录每个物理块以及它的下一个块的地址。
这样就可以在查找的过程中不去在磁盘上查找而是在表上查找,可以很大地提高查找效率。
这里为什么可以实现随机访问?
索引分配
数组的形式记录了每个逻辑块对应的物理块。
若一个磁盘块1KB
,一个索引项4B
,则一个磁盘块只能存256
个索引项。
如果一个文件的大小操作过了256
块,那么一个磁盘是装不下的,如何解决呢?
链接方案
如果索引表太大,一个索引块放不下,那么可以将多个索引块链接起来存放。
多级索引方案
混合索引
前面两种的混合方案
总结
4.2.1 文件目录
文件控制块
单级文件目录
两级文件目录
多级目录结构(树形目录结构)
无环图目录结构
树形结构很难实现文件共享
索引节点
4.2.2 文件共享
操作系统为用户提供文件共享功能,可以让多个用户共享地使用同一个文件。
复制是将一个文件复制多份,各个文件是独立地,互不影响。
基于索引节点地共享方式(硬链接)
每个用户拥有不同的目录,不同文件名的索引节点指针可以指向同一个文件。
基于符号链的共享方式(软连接)
一个用户想要共享某个文件可以用一个文件记录想要共享文件的存放路径,这样通过存储路径去目录中查找,也可以实现共享。
如果文件被删除的话,快捷方式就没用了。
总结
4.3.1 文件系统的层次结构
4.3.2 文件存储路径管理
存储空间的划分与初始化
存储空间的划分:将物理磁盘划分为一个个文件卷(C盘,D盘)
初始化:将各个文件卷划分为目录区、文件区
目录区存放文件目录信息,用于磁盘存储空间管理的信息
文件区存放文件数据
存储空间管理--空闲表法
空闲表存储每个连续空闲块的第一个空闲块的地址以及这个连续空闲块的大小。
存储空间管理--空闲链表法
和队列一样,从队头出去,队尾进来。