操作系统第八堂课20210425

文件系统

文件系统架构在硬盘,以前的机械硬盘、固态硬盘,可以抽象为分块的存储区域。从文件系统来看,在文件系统存储介质,和内存是相似的,用来存介质,尽管介质不同。

但是也有区别,主要是内存是意识性的,固态硬盘是非意识性的。内存是随机访问,硬盘读写的时候读写的时候,不是字节或者字。硬盘读写是安装块为单位进行读写,对应一个扇区。固态硬盘容量有1T。所以,硬盘不能确定是否事随机访问的,是介于随机访问和确定访问之间的。

访问速度不同,速度的差异,计算机访问GPU和内存的差异,所以有CACHE。随着新的存储硬件的出现,会导致当前存储体系的改变。这是介绍硬盘存储和内存的区别。

在软件层面,在逻辑层面,进程和文件进行对比。进程有逻辑地址空间和物理地址空间。文件也有逻辑和物理地址空间。read函数的偏移,是文件的逻辑空间的偏移,实际上存的时候是不一定的。可以看出,进程和文件有一定的相似性,把物理空间映射到逻辑空间。

很多的技术,本质上是一致的,只是换了一个名字而已。

文件是一个具有符号的一组相关联元素的有序序列。文件可以包含范围非常广泛的内容。系统和用户都可以将具有一定独立功能的程序模块、一组数据或一组文字命名为一个文件。

 文件有一些操作:比如文件的创建、文件的打开、文件的读写、文件的查找、文件的删除。

在学习C语言的时候,打开一个文件,返回一个整形的值,为什么是一个整形的值,是一个文件句柄?了解了操作系统后,在于OS把他变成一个进程后,会打开一个系统的文件信息表,有文件的原信息,返回的句柄是文件打开表里面的索引号。在文件进行操作,EAD传进去,在进程里面没有文件的信息,信息在文件打开表里面才有。在执行文件打开,返回文件句柄是进程打开表的索引。

元数据:数据的数据。数据实际包含的一些内容。描述和管理这些文件的一些其他数据。常用的采用一个目录进行组织。目录有层次化和扁平的结构物。

怎么维护一个进程:进程在内存的那些地方,怎么找到空闲的内存区域。文件和进程有很大的相似性。

块和分页内存管理非常相似。寻道和旋转会花费很多的时间。

请求分页,调页,需要在磁盘里面读取,块的大小和页的大小是一样的,只需要调用一次。

 文件系统的功能:新建文件,需要找到啊一块内存进行存储。

文件系统的实现:会有一个文件云数据,描述文件的基本信息,放在INode里面,叫做I节点,属于谁,有多大、数据块放在内存的哪些地方。INode节点和PCB的作用相似。文件系统里面,有I信息。最大的区别,PCB在内存里面,属于内核,为创建进程创建的数据结构;INode结点不在内存,放在硬盘(磁盘)上面,需要修改、创建、删除文件信息的时候才会在内存,完成任务后,也会再次放入磁盘(硬盘)中。

为了实现文件系统:有超级块(描述整个文件系统的信息,INode节点描述一个文件的信息)等等部分。大部分文件都是比较小的,使得我们必须支持大量的小文件,程序和文档都需要支持大量的小文件。使得块的大小不能太大,会有内部碎片,浪费内存空间,例如块的大小定义为4K,则文件都是4K的,所以不要把块的大小定义太大了。我们支持大的文件的访问,而且需要高效地访问。关注大量的小文件如何高效地访问。

社交网络、Facebook、微博等上传大量的小文件,如何高效地管理。

高效:I/O操作的次数,传统的文件系统,访问一个文件系统,需要做多次I/O访问硬盘,因为读取INode信息、文件的数据块在不同的地方进行多次读取。当有大量的小文件的时候,需要有缓存,但是微博不能把这么多的文都缓存起来,那要怎么做呢?

注意:Hadoop是大文件。

如何查找和管理文件?有文件的元数据,元数据里面有数据块在磁盘的位置,描述位置的方法是块族,有编号,从0,1,2,3,4开始编号。机械硬盘不是一维结构,是三维结构,盘片是上下存储,还有磁道、扇区。CHS(磁道、盘片、扇区)三维的结构,把逻辑的盘号转化为助眠、磁片和扇区。块组为逻辑编号。有一个简单的映射关系。逻辑的可以找到具体的真实位置。

文件分配方法:

一、连续分配,和内存的连续分配是相似的,蓝色的是空闲的 ,其他的是占用的。I节点存储了文件的基本信息,有一个指针,文件开头指向第几块,文件包含多少块,即文件的大小是多少块。适合只读的文件系统。

二、链接分配,FAT文件系统。缺点:可靠性有一些问题。

采用位图的方式是很高效地 ,例如1TB 的硬盘有4KB块,是2^28bits或者是32MB。找首次遇到是你全1的位置。

文件数据的分配方法:可以通过索引的方式、连续的放在一起的方式,表示空闲的数据块和空闲的空间。

如何删除文件:删除文件需要把数据块返回、索引块返回、清除I节点信息,更新目录的数据块。同时目录的元数据信息发生了变化,有大量的工作需要做。

分区是按照不同的柱面分区的。

 期末考试:::~!!!!!!!!

EXT2磁盘的布局:一块里面有很多的扇区,有编号,通过映射的关系把逻辑的映射成物理的磁盘、盘片和扇区。文件系统的所有的快都是相同大小的,没有所谓的不同大小块的需求。如果需要做一个支持不同大小块的文件系统理论生没有问题,可以尝试。若干块划分成很多的组,有编号0,1,2,3等,一个块组有很多的块。每个块组的快的数量是不同的。采用可变块组的方式效率低,所以快组的包含的快的数量和大小是相同的。每个块组里面有超级快,描述整个文件系统的原信息,超级快作用是快速进行恢复,信息一旦被损坏只有一份,则通过超级快可以提高文件系统的可靠性,是通过冗余实现的,这里有多个冗余,比一个冗余更可靠。超级块里,有文件的信息,EXT2,EXT3还有块的大小,索引块的个数、索引节点的个数、总的块个数。组描述符:有块位图的位置,由指针想指向这些位置,用位的方式表示位被占用还是空闲的,描述组的情况。块位图:占用1,空闲对应0,分配文件的时候,可以看块位决定,计算机擅长做位运算。索引节点表:一系列的INode可以在多个块组里分布,在一个块组里面是连续,很方便。一个索引节点对应一个文件,每个文件有它自己的ID,unix把目录也当成文件。索引节点属于管理的开销,放在磁盘上面。

文件的索引节点包含的信息有:文件的模式、文件的ID和文件的大小等等。

目录:也是一种文件,有固定的格式。目录中每个文件,都对应了一个目录项。若干个目录项构成了目录文件的内容。

软盘的元数据布局:软盘现在不常见了。

20MB EXxt2文件系统的磁盘组织:位图、i节点表 等等内容。

如何在ext2文件系统中找到一个文件?假设查找文件/root/test;假设/root的索引节点号已知。

找文件的方法:知道root目录索引节点号,通过索引节点的数目,知道在哪个块组里面,找到对应的索引节点,找到索引节点的起始点,知道在索引节点表里面的第几个,读出来,有关于目录文件的数据块,读进来,有目录项,都是关于文件名和索引节点号等信息,找到了!

网络和分布式文件系统

远程的文件,在另一台机器上的文件读取、创建、删除。

网络之间消息的传递:本地消息传递基于网络的方式的一种扩展。

 RPC:远程过程调用,是静态指定、自动寻找,通过网络,所以很有可能失败,有很多因素引发,可能是网络断了、网关、路由器断了、服务器没有启动、装代码出现问题,参数编排出错。这不仅仅是远程过程调用所存在的问题,是所有分布式系统存在的问题,是因为通过了网络,所以会有这些问题。这是分布式系统里面固有的问题。如出现了问题,有一些机制来处理这些问题。

装代码是自动生成的。

参考链接:https://baike.baidu.com/item/%E6%96%87%E4%BB%B6/6270998?fr=aladdin

雪儿言
原文地址:https://www.cnblogs.com/weixq351/p/14701621.html