清华大学操作系统公开课(十一)文件系统


1.总体介绍


  文件系统是操作系统一个重要的子系统,方便读写磁盘上的数据。主要讲述三方面内容,第一方面是从用户角度介绍如何进行文件读写操作,第二方面是介绍文件读写操作系统如何实现,最后一部分是介绍多磁盘管理。

2.文件系统和文件


  文件系统是一种用于持久性存储的系统抽象,也就是断电后数据不会丢失,比如说磁盘。

  •   要让用户组织、控制、导航、访问和检索数据
  •   大多数的计算机系统包含文件系统,以及个人电脑、服务器、笔记本电脑、ipod,机顶盒等都有文件系统
  •   Google也是由一个文件系统构成的(GFS)

  文件是具有符号名,由字节序列构成的数据项集合。

  •   文件是文件系统的基本数据单位
  •   文件名是文件的表示符号

3.文件系统的功能


4.文件和块


  文件的属性是用来表征文件的一些基本信息,储存在文件头里面。

5.文件描述符


 

  从编程者的角度来看,通过字符串的名字打开文件,返回一个整形的文件描述符f,read(f)把f文件的内容读出来,最后close(f),大致就是这样一个模式。这里面最重要的就是这个整数形式的文件描述符,它代表文件给我们应用程序做各种各样的访问和控制,那整数如何代表呢?

  其实文件描述符不仅仅是一个简单的数字,操作系统维护了一个打开文件表,文件描述符其实是一个index,指出了在打开文件表中的第几项代表这个文件,而每一项是包含了很多文件的描述信息,之后操作系统根据这些信息执行读和写操作。

  管理文件数据需要以下东西:

  从不同的视角看文件

访问模式

文件的结构

文件共享和访问控制

  有文件访问控制列表来控制用户能否访问。Unix对三种不同的用户给予不同的权限。

语义一致性

  语义其实简单来说就是,写的数据什么时候能够读到?能不能读?

6.目录


  为什么要有目录?因为要组织文件,如果把所有文件堆在一个一维面上的话,用户很难找到想要的文件。所以通过分层的方式,通过目录,便于查找和组织文件。

  目录的典型操作(结合日常使用计算机的经验)

  目录的操作应该结合操作系统完成。

目录设计

  那么怎么来存目录里的文件,其实比较容易实现,把目录想成一个集合,这个集合里有很多文件,只要有不同的文件名就可以存在这个文件当中。

  文件的数据结构设计:

名字解析(路径遍历)

  可以从根目录逐一解析,直到找到文件,当然也可以设计缓存加快寻找的效率,后面会提到。

文件系统挂载

  在我们的操作系统中,有不同的文件系统,不同的文件系统要挂在不同的目录下,来形成一个分层次的跨文件系统的访问,把不同系统根目录的位置称为挂载点。

7.文件别名


  有可能多个文件名关联一个文件,也就是一个文件有多个名字,在操作系统中有两种实现方式:硬链接和软连接。

  如果删除一个有别名的文件,这个别名会成为一个“悬空指针”。  

  如果有别名机制,就有可能出现潜在的循环

文件目录中的循环

8.文件系统种类


9.虚拟文件系统


  操作系统就是解决复杂问题,提供接口给用户以便用户简单使用,不用顾忌底层实现。

目的

  虚拟文件系统(VFS)的目的是对所有不同文件系统做抽象,给上层提供接口。

功能 

虚拟文件系统数据结构

文件系统的组织视图

文件系统的存储结构

 

10.数据缓存


   访问硬盘的速度比访问内存的速度慢很多,为了提高速度,需要在内存中放一个缓存,把经常用到的或者经常访问到的数据存储在内存中,提高下次访问的效率。

  我们希望能将前面所讲的分页机制和缓存机制相结合:

11.打开文件的数据结构


  文件是一个共享的资源,可能存在锁的保护机制,操作系统和文件系统会调节对文件的访问。

12.文件分配


  如果打开文件后执行写操作,就要涉及到文件空间管理,如何对文件空间的增加或减少进行分配。

  评价文件分配方式的指标是是否高效,存储效率是否高效,读写性能是否高效,空间利用率高不高。

连续分配

  数据是用数组方式组织起来的,因为分配是连续的,缺点是要做扩展的话需要把后面的数据挪位置。也有适合的场景,比如说只读的光盘就很适合它应用。但要灵活地添加、删除、扩展,就会造成很大的开销。

链式分配

  数据是用链表方式组织起来的,缺点是访问是一种串式访问的方式,不能实现高效的随机访问,除此之外链被破坏数据容易丢失。  

索引分配

  缺点在于文件比较小时(甚至小于索引大小),存储索引信息的冗余会比较大;文件比较大时,一个索引块能够描述的数据块的个数是有限的,如果文件很大,那么可能一个索引块就不够了,如果要扩增索引块,就退化到了数组的方式。

  大文件利用分级索引实现:

 

  修改后的多级索引机制可以应对大文件、小文件,是一种比数组和链表更有效的组织方式。

13.空闲空间链表


  操作系统需要跟踪在存储中的所有未分配的数据块,会遇到以下问题:

  •   空闲空间列表存储在哪里?
  •   空闲空间列表的最佳数据结构是什么样子?

 

 

14.多磁盘管理-RAID


      

  分区:硬件磁盘的一种适合操作系统指定格式的划分

  卷:一个拥有一个文件系统实例的可访问的存储空间,通常常驻在磁盘的单个分区上

  利用多个并行磁盘可增加吞吐量、可靠性和可用性。

多磁盘目的

  吞吐量:把数据放在独立的磁盘上,通过并行的工作,实现并行的数据访问,可以增大吞吐量。

  可靠性:在执行写操作的时候,对两个硬盘执行同样的写操作,如果一个硬盘崩了,第二个硬盘可以替换第一个,容错,写入代价增高。

各种RAID

  下图是各个RAID比较,图来自https://www.cnblogs.com/cishi/p/692097e3540da2c23fe8a250afc97cc1.html

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值