文件系统

操作系统最爱问的就是:

    进程(进程和线程的区别)、内存管理(内存页的替换)、和文件系统(现在一点也不清楚。。。。。)

文件系统究竟是个什么东西呢?

  (我们打开 D盘,显示的就是一个个的文件或者目录,文件是相当重要的!  在linux系统中一切皆文件???)

  由于内存中的数据,断电后会丢失,所以需要进行持久化。

    数据项( 数据名、数据类型、值 )

    记录:多个数据项的集合。(其实就类似于 mysql的一个行)

    文件: 结构文件和无结构文件

      ( 文件名、文件类型、文件长度、最后修改的时间 )

      文件名和扩展名: 很好理解  就是文件的名字和文件名的后缀( .txt  .pdf等)

  对文件的操作:

  文件的结构: 逻辑结构  物理结构 

    按文件是否由结构分类: 有结构文件(比如mysql数据库)、无结构文件(通过读、写指针来执行写一个要操作的字符(准确说应该是: 地址))

  文件的组织方式:顺序文件、索引文件    (这指的是 文件中的 记录的数据结构! )

    顺序文件:指的是文件中的记录是有顺序的!或者按照插入的时间排序,或者按照指定的字段排序。(这不就是mysql吗???)

    索引文件:由于顺序索引需要从头开始遍历记录进行对比查找,可以通过记录的关键字建立一个索引表,索引表中有指针指向记录的磁盘地址,这样就可以达到快素的读取了。(尤其是每个记录的长度不是完全相同时!)(这不就是mysql中的索引吗!!!!)

      (额外创建了一个索引文件,为了更高效的查找!)

    索引顺序文件:(除了增加了 索引文件之外,还增加了 溢出文件,因为索引文件虽然是提高了查询效率,但是添加和删除操作还是不方便!【也是基于这个原因,mysql采用的是自增主键的方式!而且删除时,也不是真的删除了记录!!】)

    直接文件或hash文件:(类似于mysql的hash索引!)

【   文件是存储在外存中的,那就需要 对外存进行有效的管理(比如:提高对文件的检索速度),这样可以高效的操作文件,比如进行读写操作!

  电脑中存储着大量的文件,因此也需要对文件进行有效的管理!

    这就必须要谈到文件目录了!!! 

      文件目录是什么?

        文件目录是 FCB (文件控制块) 的有序集合!  ( 数据结构真的重要啊!一切的操作都是围绕着数据结构展开的啊! 对进程管理用到 PCB, 对文件管理用到 FCB)

  FCB 包含三类信息: 基本信息、存取控制信息、使用信息

    基本信息:文件名、文件物理位置(存在磁盘中的地址)、文件逻辑结构、文件的物理结构

    存取控制信息: 存取文件的权限。(即 读写权限的控制)

    使用信息:创建文件的日期和时候,上一次修改的日期和时候,当前打开该文件的进程数,是否被某个进程锁住,是否在内存中被修改但还没刷新回磁盘等

  ( 我们在查找文件的时候,就是通过 文件名来查找的某个文件!! 那么在 linux中怎么查找某个文件? 用到什么指令呢?? )

  目录也是存放在磁盘中的? 因此查找某个文件时,要根据目录中存储的文件名和要查找的文件名进行匹配,那么也要涉及到磁盘的IO. 将文件名和文件的描述信息分开,这就磁盘块中存储的文件数量就会更多,减少了磁盘的IO。用一个指针指向文件描述信息索引结点的数据结构。

  单级文件目录:(只实现了简单的按 名存取文件的功能 )

   (在新创建一个目录时,会先遍历该目录下的文件名是否已经存在这个要创建的文件名,然后再进行创建 )

    查找速度慢、不允许重名、不便于实现文件共享。

  两级文件目录:由于单级文件目录存在缺点,所以采用了两级文件目录,一个是主目录;一个是用户文件目录。(linux 是不是就是采用的类似的结构?,来保证多个用户的操作  在 /home文件下面创建自己的文件目录)

  树形结构目录:(主要用的就是这个,linux中的目录也是树形结构目录!那么用的是什么树呢?B树吗???)

   路径名:  在树形结构目录中,从树目录到任何数据文件都只有一条唯一的通路。 路径名就是  全部的目录名和文件组成的,中间含有分隔符 / 

   当前目录:查找的时候不用从 主目录开始,从当前目录开始查找即可。这样,也就有了相对路径。

  目录查询的方式:查找文件的时候,现根据文件名和目录下面的文件名进行比较,然后找到索引结点,然后得到了物理位置,调用磁盘驱动程序进行磁盘的IO操作。对目录进行查询,主要有 线性检索法 和 hash方法 。(发现了没有,基本就是这几种方式再用来用去!!!)

  

 

 

文件共享

  ( 文件共享真的是一个伟大的思想,可以大大的减少存储量。可是文件共享也是有前提的对不,那就是不会对文件进行修改! 如果对文件进行了修改,那么修改后的文件和修改前的文件其实就不是同一个文件了。所以文件 共享的情况就是 文件是只读的???? )

  (文件共享并不是要求文件是只读的,而是不同的目录中的文件的指向都指向了同一个物理地址,这样对A目录中对文件进行了修改,如果B目录中也指向了这个文件,那么它就能看到这个修改。在 windows下,好像没有见到过这种情况啊。。。windows不支持文件共享吗?? linux的软连接是不是就是文件共享呢??)

        树形结构其实是不适合文件共享的! 想一想为什么?也就是要想文件共享需要满足什么?  

(linux中的软连接  是不是就是文件共享的意思????  》》》》》》》》》)

  有向无循环图: 允许每一个文件有多个父目录。

    (B  C目录指向同一个文件!!!)

 

   符号链接:创建一个链接文件,文件中存储的要链接的文件的路径名。这样当文件的属主目录删除了这个文件后,链接文件也就不起作用了!

    (linux中用的就是符号链接吧!!!)

文件保护:

  对文件加入了操作权限!

  

 

 

  发现了操作系统还是很重要的啊!  学完了文件系统对文件有了更好的理解了!!  好好学习操作系统!!!!

 

linux中的文件系统:

  

 

posted @ 2020-07-26 11:40  你眼里的星辰  阅读(282)  评论(0)    收藏  举报