文件:一组有意义的信息集合

文件名:又创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下补允许有重名文件。
标识符:每一个文件都有一个唯一的标识符用来区分文件,但是对用户来说无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
文件类型:指明文件的类型(txt,jpg…)
位置:文件存放的路径(用户看到的),在外存中的路径(操作系统用的,用户不可见)
大小:指明文件大小
创建时间、修改时间
文件所有者信息
保护信息:对文件进行保护的访问控制信息

无结构文件:文本文件,有一些二进制或字符流组成,又称流式文件
有结构文件:由一组相似的记录组成,记录时一组相关数据的集合

树形结构

创建文件:create系统调用
读文件:将文件数据读入内存,才能让CPU处理,提供read系统调用
写文件:将更改过的文件数据写回外存,我们在记事本上编辑完数据内容后,点击保存后,记事本会通过操作系统的write系统调用将文件从内存写回外存。
删除文件:delete系统调用将文件从外存中删除
打开文件:open系统调用
关闭文件:close系统调用
复制文件:先创建一个新文件,在把源文件读入内存,再将内存中的数据写回到新文件中。

连续存放还是离散存放?


进行create 系统调用时,需要提供的参数
操作系统处理create系统调用:



当我们打开了一个文件在删除发现删除不了,这是为啥?
系统的打开文件表中记录了每个文件被打开的次数,当想要删除这个文件时,需要先检查打开记录表中这个文件有没有被打开,如果有则不能被删除。


将编辑过的文件写回外存,这个文件先是保留在内存中的。



以用户为单位进行控制
这样会导致访问控制列表会很大

以组为单位进行控制

逻辑结构:指用户看来,文件内部的数据应该是如何组织起来的
物理结构:指的是在操作系统看来,文件的数据是如何存放在外存的。

由一组相似的记录组成,每条记录由若干个数据项组成。每条记录有一个数据项可作为关键字。
根据各条记录的长度,可分为定长记录和可变长记录。
定长记录

可变长记录

串结构:记录之间的顺序与关键字无关
顺序结构:记录之间的顺序按关键字顺序排列

数组和链表的区别

对于不定长记录,可以在弄一个索引表,将每个记录的地址都记录在索引表中,这样就可以实现随机存取了, 如果按关键字顺序排列,还可以使用折半查找。

为了加快查找,可以将索引表中一个索引项记录一组记录,节约了很多资源,也加快了查找速度



磁盘是按块来分配的,一个文件会分为好几个块进行存储。


优点:


缺点:


链表的形式链接,只能从表头指针一直往下找,只支持顺序访问,效率低。但很方便拓展,不会产生外部碎片。


用一个表记录每个物理块以及它的下一个块的地址。
这样就可以在查找的过程中不去在磁盘上查找而是在表上查找,可以很大地提高查找效率。

这里为什么可以实现随机访问?


数组的形式记录了每个逻辑块对应的物理块。


若一个磁盘块1KB,一个索引项4B,则一个磁盘块只能存256个索引项。
如果一个文件的大小操作过了256块,那么一个磁盘是装不下的,如何解决呢?
如果索引表太大,一个索引块放不下,那么可以将多个索引块链接起来存放。


前面两种的混合方案

总结









树形结构很难实现文件共享


操作系统为用户提供文件共享功能,可以让多个用户共享地使用同一个文件。
复制是将一个文件复制多份,各个文件是独立地,互不影响。
每个用户拥有不同的目录,不同文件名的索引节点指针可以指向同一个文件。

一个用户想要共享某个文件可以用一个文件记录想要共享文件的存放路径,这样通过存储路径去目录中查找,也可以实现共享。


如果文件被删除的话,快捷方式就没用了。


总结



存储空间的划分:将物理磁盘划分为一个个文件卷(C盘,D盘)
初始化:将各个文件卷划分为目录区、文件区
目录区存放文件目录信息,用于磁盘存储空间管理的信息
文件区存放文件数据

空闲表存储每个连续空闲块的第一个空闲块的地址以及这个连续空闲块的大小。


和队列一样,从队头出去,队尾进来。









