精华内容
下载资源
问答
  • 常见的分布式文件系统介绍
    千次阅读
    2018-10-08 10:34:53

    常见的分布式文件系统有GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自适用于不同的领域。它们都不是系统级的分布式文件系统,而是应用级的分布式文件存 储服务。


    Google学术论文,这是众多分布式文件系统的起源
    Google File System(大规模分散文件系统)
    MapReduce (大规模分散FrameWork)
    BigTable(大规模分散数据库)
    Chubby(分散锁服务)
    一般你搜索Google_三大论文中文版(Bigtable、 GFS、 Google MapReduce)就有了。


    GFS(Google File System)
    Google公司为了满足本公司需求而开发的基于Linux的专有分布式文件系统。。尽管Google公布了该系统的一些技术细节,但Google并没有将该系统的软件部分作为开源软件发布。
    下面分布式文件系统都是类 GFS的产品。


    HDFS
    Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。 Hadoop是Apache Lucene创始人Doug Cutting开发的使用广泛的文本搜索库。它起源于Apache Nutch,

    后者是一个开源的网络搜索引擎,本身也是Luene项目的一部分。Aapche Hadoop架构是MapReduce算法的一种开源应用,是Google开创其帝国的重要基石。


    Ceph
    是加州大学圣克鲁兹分校的Sage weil攻读博士时开发的分布式文件系统。并使用Ceph完成了他的论文。
    说 ceph 性能最高,C++编写的代码,支持Fuse,并且没有单点故障依赖, 于是下载安装, 由于 ceph 使用 btrfs 文件系统, 而btrfs 文件系统需要 Linux 2.6.34 以上的内核才支持。
    可是ceph太不成熟了,它基于的btrfs本身就不成熟,它的官方网站上也明确指出不要把ceph用在生产环境中。


    Lustre
    Lustre是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护的。
    该项目主要的目的就是开发下一代的集群文件系统,可以支持超过10000个节点,数以PB的数据量存储系统。
    目前Lustre已经运用在一些领域,例如HP SFS产品等。
    适合存储小文件、图片的分布文件系统研究

    ------------------------------------------------------------------------------

    目前Lustre已经运用在一些领域,例如HP SFS产品等。
      集群存储简介:
      在集群里,一组独立的节点或主机可以象一个系统一样步调一致地工作。整个集群只有唯一
    的命名空间。厂商们也已经制造了一些软件和硬件设备,它们可以把不相干的文件系统融合成只使用一个命名空间的文件系统。用户可以访问并共享其他用户的数据,而无需考虑是什么介质或其所处的是哪台主机。
      集群存储系统需要解决的最基本的问题:
    (1)提供共享访问数据,便于集群应用程序的编写和存储的负载均衡;
    (2)提供高性能的存储,在I/O级和数据吞吐率方面能满足成百上千台规模的Linux集群服务器聚合访问的需求
      与分布式文件系统相比:
      数据不需要从一个文件系统拷贝或复制到另一个文件系统,通过集群系统共享应用和数据的任务执行起来要比在单独的设备上执行快得多;
      集群可以为文件和文件系统提供更多的空间;
      因为只需要管理一个文件系统,而不再是每个存储设备或主机都需要一个文件系统,管理也更容易了;如果集群内的某台服务器出现了故障,另一台服务器就可以把它的工作接手过来,故障恢复也成为了现实;
      用户也可以同时对位于其网络上的存储设备里的所有文件进行访问。
    ------------------------------------------------------------------------------
    用于图片等小文件大规模存储的分布式文件系统调研
    架构高性能海量图片服务器的技术要素
    nginx性能改进一例(图片全部存入google的leveldb)
    FastDFS分布文件系统
    TFS(Taobao File System)安装方法
    动态生成图片 Nginx + GraphicsMagick 


    MogileFS
    由memcahed的开发公司danga一款perl开发的产品,目前国内使用mogielFS的有图片托管网站yupoo等。
    MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上。
    MogileFS由3个部分组成:
      第1个部分是server端,包括mogilefsd和mogstored两个程序。前者即是 mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等。后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份请求。在安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。
      第2个部分是utils(工具集),主要是MogileFS的一些管理工具,例如mogadm等。
      第3个部分是客户端API,目前只有Perl API(MogileFS.pm)、PHP,用这个模块可以编写客户端程序,实现文件的备份管理功能。


    mooseFS
    持FUSE,相对比较轻量级,对master服务器有单点依赖,用perl编写,性能相对较差,国内用的人比较多
    MooseFS与MogileFS的性能测试对比 


    FastDFS
    是一款类似Google FS的开源分布式文件系统,是纯C语言开发的。
    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
    官方论坛 
    FastDfs google Code 
    分布式文件系统FastDFS架构剖析 


    TFS
    TFS(Taobao !FileSystem)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器 集群上,可为外部提供高可靠和高并发的存储访问。TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用 在淘宝各项应用中。它采用了HA架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化 了文件的访问流程,一定程度上为TFS提供了良好的读写性能。


    GridFS文件系统
    MongoDB是一种知名的NoSql数据库,GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储。

    更多相关内容
  • 文章目录费翔林课本习题思考题应用题 费翔林课本习题 思考题 1.试述下列属于的定义并说明他们之间的关系:卷、块、记录、文件 ...一个文件可以由多个记录组成,这样的文件称之为记录式文件 一个记录可以占用存储介质上

    费翔林课本习题

    思考题

    1.试述下列属于的定义并说明他们之间的关系:卷、块、记录、文件(★★★)

    【答案】

    • 存储介质的物理单位定义为卷
    • 存储介质上可连续存储信息的一个区域称之为块,也叫做物理记录
    • 把逻辑上具有完整意义的信息集合称之为文件
    • 记录分为逻辑记录和物理记录。逻辑记录是指逻辑上独立划分的信息单位,物理记录就是块

    他们之间的关系

    • 一卷存储介质可以被分为若干个块,能用来存放一个或多个文件
    • 一个文件可以由多个记录组成,这样的文件称之为记录式文件
    • 一个记录可以占用存储介质上的一块,或一块也可以存放多个记录

    2.什么是记录的成组和分解操作,采用这种技术有何优点(★★★)

    【答案】

    逻辑记录是按信息在逻辑上的独立含义由用户划分的单位,而块是系统划分的存储介质上连续信息所组成的区域。因此,一条逻辑记录被存放到文件存储器的存储介质上时,可能占用一块或者多块,或者一个物理块也可以包含多条逻辑记录。若干逻辑记录合并成一组,写入一块叫做记录成组,这时,每块中的逻辑记录的个数称之为块因子。成组操作现在系统输出缓冲区内进行,凑满一块后才将缓冲区的信息写到存储介质上。反之,当存储介质上的一个物理块读进系统输入缓冲区后,把逻辑记录从块中分离出来的操作叫做记录的分解

    3.列举文件系统面向用户的主要功能

    【答案】
    在这里插入图片描述

    4.什么是文件的逻辑结构?它有哪几种组织方式(★★★)

    【答案】

    文件组织是指文件中信息的配置和构造方式,应该从文件的逻辑结构和组织以及文件的物理结构和组织两方面加以考虑。前者从用户观点除法,研究用户概念中抽象的信息组织方式,这是用户能够观察到的,可以加以处理的数据集合,由于数据可独立于物理环境构造,故称之为逻辑结构,相关数据的集合构成逻辑文件

    主要分为流式文件和记录式文件,其中记录式文件的两种常用的记录组织和使用方法如下

    • 记录式顺序文件
    • 记录式索引顺序文件

    5.什么是文件的物理结构?它有哪几种组织方式

    【答案】

    文件的物理结构是指逻辑文件在物理存储空间中的存储方法和组织关系。主要有

    • 顺序分配
    • 连接分配
    • 索引分配
    • 直接文件

    在这里插入图片描述

    1. 什么是记录键?有何用途

    【答案】

    为了方便记录式文件的组织和管理,提高文件记录的查找效率,通常对逻辑文件的每条逻辑记录至少指定一个与其对应的基本数据项,利用它可与同一文件中的其他记录区别开来。这个数据项叫做记录键

    7.文件系统所提供的主要文件操作有哪些,试述各自功能

    【答案】

    在这里插入图片描述

    8.试述linux虚拟文件系统的设计思想和实现要点

    【答案】

    为了能同时指出多种文件系统,不同的操作系统采用不同的技术方案来提供虚拟文件系统(VFS),其目标是:把多种具体文件系统纳入统一框架,不同磁盘分区可包含不同具体的文件系统,对它们的使用和传统的单一文件系统并无区别;用户可通过同一组系统调用对不同文件系统及文件进行操作,系统调用可以跨物理介质和跨文件系统执行,如从一个文件系统复制或移动数据到另一个文件系统中,即提供对不同文件系统透明的相互访问;对网络共享文件提供完全的支持,访问远程结点上的文件与访问本地结点文件是一样的。主要有

    • 应用层
    • 虚拟层
    • 实现层

    9.解释FCB、文件目录、文件目录项、目录文件(★★★)

    【答案】

    • FCB:即文件控制块,是操作系统为每个文件建立的唯一数据结构,其中包含了全部的文件属性,其目的是为了方便操作系统对文件的管理、控制和存取
    • 文件目录:通常把FCB汇集和组织在一起形成文件目录,其基本功能是将文件名转换为此文件信息在磁盘上的物理位置
    • 文件目录项:文件目录包含许多目录项,目录项有两种,分别用于描述子目录和描述文件
    • 目录文件:目录项的格式按统一标准定义,全部由目录项所构成的文件称之为目录文件,并保存在外存上

    10.解释用户打开文件表,系统打开文件表

    【答案】

    • 用户打开文件表:进程PCB中保留一个files_struct,称之为用户打开文件表或文件描述符表。表项的序号是文件描述符fd,此登记项内登记系统打开文件表的一个入口指针fp,通过此系统打开文件表项链接到打开文件的活动inode
    • 系统打开文件表:这是为解决多个进程共享文件,父子创建共享文件而设置的系统级的files_struct

    10.解释:根目录、父目录、子目录、当前目录

    【答案】

    层次结构中,树根是根目录,从根向下,每个树枝是子目录,而树叶是文件

    11.解释:路径名,绝对路径、相对路径

    • 路径名:包括从根目录起至文件为止,在通路上所遇到的所有子目录路径,各子目录名之间用斜线隔开
    • 绝对路径:填写绝对目录路径地址那就叫绝对路径,通常我们直接使用"/"代表从根目录开始的目录路径
    • 相对路径:填写目录时候以填写目录文件为参考,使用“…/”或"./“指向上一级 或 使用”…/…/"指向上上一级叫相对路径

    12.什么是设备文件,如何实现设备文件(★★★)

    设备文件与系统的某个设备相对应。在内核中,每种设备类型都有与之相对应的设备驱动程序,用来处理设备的所有IO请求。设备驱动程序属内核代码单元,可执行一系列操作,通常与相关硬件的输入/输出动作相对应。由设备驱动程序提供的API是固定的,包含的操作对应于系统调用open()、close()、read()、write()、mmap()以及 ioctl()。每个设备驱动程序所提供的接口一致,这隐藏了每个设备在操作方面的差异,从而满足了IO操作的通用性。即,与磁盘上的普通文件进行交互所用的同一系统调用可直接用于I/O设备。例如,用同一write()系统调用既可以向普通文件中写入数据,也可以通过向/dev/lp0设备文件中写入数据从而把数据发往打印机。某些设备是实际存在的,比如鼠标、磁盘和磁带设备。而另一些设备则是虚拟的,亦即并不存在相应硬件,但内核会(通过设备驱动程序)提供一种抽象设备,其所携带的API与真实设备一般无异

    13.什么是文件的共享?介绍文件共享的分类和实现思想

    【答案】

    文件共享是指不同进程共同使用同一个文件,文件共享不仅为不同进程完成共同任务所必须,而且还节省了大量外存空间,减少了因文件复制而增加的I/O控制

    • 静态共享
    • 动态共享
    • 符号链接共享

    14.什么是文件的安全控制?有哪些实现方法

    为了防止文件共享可能会导致文件被破坏或未经核准的用户修改文件,文件系统必须控制用户对文件的存取,因此必须在文件系统中建立相应的文件保护机制。方法主要有:

    • 口令保护
    • 加密保护
    • 访问控制

    15.目前广泛采用的是哪种文件目录结构?

    【答案】

    是多级目录结构(树形结构)。可以看出,树形目录结构可以很方便地对文件进行分类归纳,层次十分清晰,也易于对文件进行管理和保护。但缺点就是不便于实现文件的共享

    16.试说明树状目录结构中线性检索法的检索过程

    【答案】

    答:假设用户给定的文件路径名为/Level1/Level2/…/Leve1n/datafile,则关于树型目录结构采用线性检索法检索该文件的基本过程为:①读入第-一个文件分量名Level1,用它与根目录文件(或当前目录文件)中各个目录项的文件名顺序地进行比较,从中找出匹配者,并得到匹配项的索引结点号,再从对应索引结点中获知Leve11目录文件所在的盘块号,将相应盘块读入内存。②对于2 ~n,循环执行以下步骤,以检索各级目录文件:读入第i个文件分量名Leveli,用它与最新调入内存的当前目录文件中各个目录项的文件名顺序地进行比较,从中找出匹配者,并得到匹配项的索引结点号,再从对应索引结点中获知Leveli目录文件所在的盘块号,将相应盘块读入内存。③读入最后- .个文件分量名即datafile,用它与第n级目录文件中各个目录项的文件名进行比较,从而得到该文件对应的索引结点号,进而找到该文件物理地址,目录查找操作成功结束。如果在上述查找过程中,发现任何一个文件分量名未能找到,则停止查找并返回“文件未找到”的出错信息


    1.文件控制块

    在这里插入图片描述

    2.索引结点

    在这里插入图片描述

    3.索引分配

    在这里插入图片描述

    4.文件中空闲区管理方式

    • 空闲表法
    • 空闲链表法
    • 位示图法
    • 成组链表法

    5.位示图法

    在这里插入图片描述

    在这里插入图片描述

    6.硬链接和软链接

    在这里插入图片描述
    在这里插入图片描述

    应用题

    在这里插入图片描述

    【答案】

    由于磁带卷上的文件用“带标”隔开,每个文件的头标前后都是用了三个带标。正常情况下,磁头应该停在文件头标的前面,所以只要计算带标的个数,就可以找到所需文件

    ①当i>=j时,要正走磁带

    1. 组织通道程序正走磁带,走过“带标”个数为3×(i-j)个
    2. 组织通道程序读文件i的文件头标
    3. 根据文件i的文件头标信息,组织读文件信息

    ②当i<j时,要反走磁道

    1. 组织通道程序反走磁带,走过“带标”个数为3×(j-i)个,同时还要后退一块,到达文件i头标前
    2. 组织通道程序读文件i的文件头标
    3. 根据文件i的头标信息,组织读文件信息

    在这里插入图片描述

    【答案】

    F = [ B R ] F=[\frac{B}{R}] F=[RB]

    在这里插入图片描述

    【答案】

    (1)位示图法采用二进制的一位表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应,有一个字32位,因此需要500/32=16个字

    (2)因此b=32*i+j
    在这里插入图片描述

    (3)申请时自上而下,从左向右扫描位示图跳过为1的位,找到第一个迁到的0位,根据它是第i字第j位算出对应块号,并分配除去。归还时i=b/n,j=b%n

    在这里插入图片描述
    方法是

    • 字节偏移量/盘块大小=逻辑块号,字节偏移量%盘块大小=块内偏移
    • 使用多重索引结构,在索引节点中根据逻辑块号通过中介索引或间接索引找到对应物理块号

    【答案】

    (1)

    • 9999/1024=9
    • 9999%1024=783
    • 故直接索引addrr81中可找到物理块号

    (2)

    • 18000/1024=17
    • 18000%1024=592
    • 故通过一次间接索引addr[10]中可找到物理块号

    (3)

    • 42000/1024=41
    • 42000%1024=16
    • 故通过二次间接索引addr[11]中可找到物理块号

    在这里插入图片描述

    【答案】

    1569/512=3,余33,故在75号磁盘块的逻辑地址为33字节处

    在这里插入图片描述

    在这里插入图片描述

    【答案】

    • 使用字节偏移量除以盘块大小得到逻辑块号,余数为块内偏移
    • 将文件的逻辑块号转为物理块号
    • 在索引节点中根据逻辑块号通过直接索引或间接索引找到对应物理块号,再分别判断逻辑块号是在10以内还是以上,对应采用寻址方式即可

    在这里插入图片描述

    【答案】

    采用成组方式存放,块因子是2。由于共有18个逻辑记录,故占用了9个物理块,而第15号逻辑记录占用的是第15/2=8物理块。由于是连续文件,所以物理块也是连续的,所以该逻辑记录占用搞得是第12+8-1=19。过程如下

    • 根据块因子,计算占用的相对物理块号是8
    • 根据起始块号,计算出绝对物理块号为19
    • 将19号物理块读入内存缓冲区
    • 把所需要的逻辑记录分解出来

    在这里插入图片描述

    【答案】

    (1)i=15,j=7,因此对应的块号=15×16+7=247

    对于块号247所对应的

    • 柱面号=247/8×4=7
    • 磁头号=(247MOD32)/4=5
    • 扇区号=247 MOD 32 MOD 4 =3

    (2)块号=柱面号×柱面扇区数+磁道号×盘扇区+盘扇区=56×(8×4)+6×4+3=1819

    所以字号=1819/16=113,位号=1819MOD16=11

    在这里插入图片描述

    【答案】

    (1)索引节点=128B,状态信息占用了68B,所以剩余用于磁盘指针的空间为128-68=60B
    (2)一次间接、二次间接和三次间接指针占用三个知真相,因此直接指针项数为60/4-3=12个。由于每块大小为8KB,

    • 所以对于直接指针12×8192=98304B;
    • 对于一次间接指针,8192/4=2048,也即有2048个盘块指针,故文件大小为2048×8192=16MB;
    • 对于二次间接指针,2048×2048=4M个盘块指针,4M×8192=32GB
    • 对于三次间接指针,2048×2048×2048=8G个盘块指针,8G×8192=16TB

    在这里插入图片描述

    【答案】

    首先计算

    • 直接:512B×12/1024=6KB
    • 一次:512B×128/1024=64KB
    • 二次:512B×128×128/1024=8192KB
    • 三次:512B×128×128×128/1024=1048576KB

    占用块数

    • 1MB:1MB=1024KB,所以1024KB-6KB-64KB=954KB,954×1024/512=1908.故占用128个一次间接盘块和1908个二次间接盘块
    • 25M:25×1024-6KB-54KB-8192KB=17338KB,17338×1024/512=34676.故占用128个一次间接盘块,16384个二次间接盘块和34676个三次间接盘块
    展开全文
  • 操作系统:文件系统的实现

    千次阅读 2020-12-31 14:39:13
    目录一、文件系统结构二、文件系统实现1.概述2.虚拟文件系统三、目录实现1.线性列表2.哈希表四、磁盘空间的分配方法1.连续分配2.链接分配3.索引分配五、磁盘空闲空间的管理1.位向量2.链表3.组4.计数六、文件系统的...

    一、文件系统结构

    磁盘的逻辑单元为,内存和磁盘之间的I/O传输以为单位执行。

    磁盘的特点

    1. 可以原地重写,可以从磁盘上读一块儿,修改该块,并将它写回到原来的位置
    2. 可以直接访问磁盘上的任意一块。因此,可以方便地按顺序或随机访问文件

    文件系统需要提供高效快捷磁盘访问,以便轻松存储、定位、提取数据。即存储文件、访问文件

    文件系统有两个不同的设计问题

    1. 访问问题:如何定义文件系统对用户的接口
    2. 存储问题:创建数据结构和算法,把逻辑文件系统映射到物理外存设备

    文件系统本身通常由许多不同层组成。每层实际利用更低层功能,创建新的功能,以用于更高层的服务。
    在这里插入图片描述
    设备驱动程序可以作为翻译器,他的输入作为高级指令,输出由底层的、硬件特定指令组成。
    基础文件系统只需向适当设备驱动程序发送命令。
    逻辑文件系统通过文件控制块维护文件结构。
    文件控制块(FCB)包含有关文件的信息,包括所有者、权限、文件内容的位置等。

    大多数操作系统支持多种不同的文件系统,举例:

    • CD-ROM ISO9660 文件格式
    • Unix 文件系统(Unix File System)
    • Windows文件系统:FAT(File Allocation Table),FAT32, FAT64,NTFS(Windows NT File System)
    • Linux 文件系统:可扩展文件系统(Extended file system),分布式文件系统(Distributed File System)

    二、文件系统实现

    1.概述

    在磁盘上,文件系统包括的信息有

    1. 如何启动存储在那里操作系统
    2. 总的块数
    3. 空闲块的数目和位置
    4. 目录结构
    5. 各个具体文件 等

    上述许多结构会在之后详细讲述。这里简述如下:

    • 引导控制块(每个卷):可以包含从该卷引导操作系统的所需信息。如果磁盘不包括操作系统,则这块的内容为空。UFS称为引导块(boot block),NFS称为分区引导扇区(partition boot sector)
    • 卷控制块(每个卷):包括卷的详细信息(分区的块数、块的大小、空闲块的数量和指针、空闲
      FCB 的数量和指针等)。UFS称为超级块儿(super block),NTFS主控文件表(master boot sector)
    • 每个文件的FCB包含该文件的许多详细信息。他有一个唯一的标识号,以便与目录条目相关联
    • 每个文件系统的目录结构用于组织文件

    内存中的信息用于管理文件系统并通过缓存来提高性能,这些数据在安装文件装系统时被加载,在文件系统操作期间被更新,在卸载是被卸载。这些结构类型包括:

    1. 每个进程的打开文件表:包括一个指向系统的打开文件表中合适条目的指针和其他信息
    2. 整个系统的打开文件表:包括每个打开文件的FCB副本和其他信息

    创建一个新文件

    1. 应用程序调用逻辑文件系统。逻辑文件系统指导目录结构的格式,它会分配一个新的FCB
    2. 系统将相应的目录信息读入内存
    3. 更新目录结构和FCB
    4. 将结果写回磁盘

    一旦文件被创建,就能用于I/O,不过,首先他要被打开。系统调用open()将文件名传到逻辑文件系统,系统调用open():

    1. 首先搜索整个系统的打开文件表,查看是否已经被打开,如果是,则在该进程的打开文件表创建一个条目,并指向现有整个系统的打开文件表。
    2. 否则,根据文件名搜索目录结构
    3. 找到后,它的FCB会复制到内存的整个系统的开放文件表中(该表还存放着打开该文件的进程数量) ,接下来,在该进程的打开文件表创建一个条目,并指向现有整个系统的打开文件表。

    Open() 返回值:文件描述符是一个非负整数。它是一进程打开文件表的索引值,指向系统范围内打开文件表相应条目在这里插入图片描述
    在这里插入图片描述

    2.虚拟文件系统

    操作系统如何才能将多个类型的文件系统集成到目录结构中?用户如何在访问文件系统空间时,可以无缝地在文件系统类型间迁移?大多数操作系统采用面向对象的技术来简化、组织、模块化实现。

    数据结构和程序用于隔离基本的操作系统调用的功能与实现细节。因此,文件系统的实现有三个主要层构成。
    第一层为文件系统接口。
    第二层为虚拟文件系统(VFS)把文件系统的通用操作和具体实现分开,虚拟文件系统提供了在唯一标识一个文件的机制。VFS基于vnode 的文件表示结构,它包含了一个数值标识符来唯一表示网络上的一个文件。

    1. VFS能区分不同本地文件系统
    2. VFS能区分本地文件系统和远程文件系统

    在这里插入图片描述
    在这里插入图片描述

    三、目录实现

    1.线性列表

    采用文件名称和数据块指针的线性列表

    • 优点:编程简单
    • 缺点:因为需要搜索,运行较为费时

    2.哈希表

    哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针

    • 优点:减少目录搜索时间
    • 缺点:两个文件名哈希到相同的位置时可能发生冲突;因哈希表固定大小,创建文件需要哈希表重建时,比较麻烦。

    四、磁盘空间的分配方法

    1.连续分配

    每个文件在磁盘上占有一组连续的块。 文件的连续分配可以用文件第一块的磁盘地址和连续块的数量(即长度)来定义
    在这里插入图片描述
    连续分配支持顺序访问和直接访问
    问题:当文件需要扩展,文件大小变大时会无法扩展
    解决:找更大的连续空间,复制过去

    基于扩展的连续分配方案
    用以下参数来定义文件

    1. 开始地址
    2. 块儿数
    3. 指向下一个扩展块儿的指针(扩展块儿可以是多个)

    定义格式:
    文件【开始地址,块儿数,指向下一个扩展块的指针】

    2.链接分配

    每个文件是磁盘块儿的链表,磁盘块分布在磁盘的任何地方,文件有起始块和结束块来定义

    定义格式:【起始块,结束块】

    同时,每个磁盘块都有指向下一个磁盘块的地址。

    在这里插入图片描述
    优点:没有磁盘空间浪费
    缺点:

    1. 不支持文件的直接访问
    2. 需要更多的磁盘空间(来记录指针)

    链接分配的一个重要变种是文件分配表
    每个卷的开始部分用于存储文件分配表(File Allocation Table),表中每个磁盘块都有一个FAT条目,并可通过块号索引。(未使用的块为0,使用的块包含下一个块儿号)
    在这里插入图片描述
    目录条目含有文件首块号码,通过这个块号索引的FAT条目包含文件下一块的号码,这个链会继续下去,直到最后一块,最后一块的表条目值为文件结束值。
    在这里插入图片描述

    3.索引分配

    通过将所有指针放在一起,即索引块
    文件用索引块来定义, 每个文件有其索引块。
    在这里插入图片描述
    这里有一个问题,索引块应为多大
    每个文件必须有一个索引块,因此索引块应尽可能小,然而不能太小,否则放不下足够多的指针,为处理这个问题,有如下一些机制:

    1. 链接方案:为了处理大文件,可以将多个索引块链接起来
    2. 多层次索引:用第一层索引块指向一组第二层的索引块,第二层索引块再指向文件块
    3. 组合方案:用于基于UNIX的文件系统,将索引块的前15个指针存储在文件的i-node中。其中,前12个指针指向直接块,剩下3个指针指向间接块
      在这里插入图片描述

    五、磁盘空闲空间的管理

    1.位向量

    空闲空间表实现为位图, 或位向量,每块用一位(bit)表示。1表示块空闲;0表示块已分配

    2.链表

    所有空闲块用链表链接起来,并将指向第一个空闲块儿的指针保存在特殊位置,同时缓存在内存。
    每个块儿含有下一个块儿的指针

    3.组

    将n个空闲块的地址保存在第一个空闲块中。
    这些空闲块中的前n-1个为空,而最后一块包含另外n个空闲块的地址。
    比链表好的是空闲块的地址可以很快找到,而且可以明确一段连续空闲块空间

    例:n=3
    在这里插入图片描述

    4.计数

    基于以下事实:
    通常有多个连续块需要同时分配或释放,尤其是在使用连续分配时。因此记录

    • 记录第一块的地址和紧跟第一块的连续的空闲块的数量。
    • 空闲空间表的每个条目包括磁盘地址数量

    例:
    在这里插入图片描述

    六、文件系统的性能和效率

    磁盘空间的有效使用(效率),取决于

    • 磁盘分配和目录管理算法
    • 保留在文件目录条目中的数据类型

    改善性能的方法:缓存

    1. 缓冲区缓存:一块独立内存,位于其中的块是马上需要使用的
    2. 页面缓存:将文件数据作为页而不是块来缓存。页面缓存使用虚拟内存技术,将文件数据作为页来缓存,比采用物理磁盘块来缓存更高效
    3. 板载高速缓存

    在这里插入图片描述
    如果没有统一缓存,则会由下图情况发生:
    在这里插入图片描述
    系统调用read()和write()会通过缓冲区缓存,然而,内存映射调用需要使用两个缓存,即页面缓存和缓冲区缓存。内存映射先从文件系统中读入磁盘块,并放入缓冲区缓存,由于虚拟内存系统没有缓冲区缓存接口,缓冲缓存内的文件必须复制到页面缓存中。

    采用统一缓冲缓存
    统一缓冲缓存:统一使用缓冲器缓存来缓存进程页和文件数据。
    在这里插入图片描述
    无论是缓存块还是页面都有置换问题
    文件的读入或写出一般是按顺序进行。所以,不适合采用LRU算法,因为最近使用的页面最后才会用甚至根本不会再用。

    顺序访问可以通过马上释放预先读取来加以优化

    1. 马上释放(free-behind):请求下一页时,马上释放上一页
    2. 预先读取(read-ahead):请求页之后的下一个页也一起读入

    七、文件系统的恢复

    目录信息一般事先保存在内存中以加快访问,有时会导致目录结构中的数据和磁盘块中的数据不一致。
    解决:

    1. 一致性检查:比较目录结构中的数据和磁盘块中的数据,尝试着去修正不一致
    2. 备份&恢复:
      I. 备份(backup):利用系统程序来备份数据到其他的存储设备。软盘,磁带
      II. 恢复(recovery):通过从备份来恢复丢失的文件或磁盘

    基于日志结构的文件系统

    • 文件创建涉及到目录结构修改,FCB分配,数据块分配等
    • 所有元数据(meta data)的变化写入日志上,一旦这些修改写到日志,就认为已经提交了。
    • 提交了的事务,并不一定马上完成操作
    • 当整个提交的事务已经完成时,就从日志中删除事务条目
    • 如果系统崩溃,日志文件可能还存在事务,它包含的任何事务虽然已经由操作系统提交了,但还没有完成到文件系统,必须重新执行。
    展开全文
  • Hadoop生态系统各组件功能

    千次阅读 2020-06-26 16:57:35
    Hadoop分布式文件系统HDFS是针对谷歌分布式文件系统(Google File System,GFS)的开源实现,它是Hadoop两大核心组成部分之一,提供了在廉价服务器集群中进行大规模分布式文件存储的能力。 HDFS具有很好的容错能力,...

    参考: Spark编程基础(Scala版) 林子雨 赖永炫 陶继平 人民邮电出版社出版 2018-07-01

    在这里插入图片描述

    1.HDFS 分布式文件系统

    Hadoop分布式文件系统HDFS是针对谷歌分布式文件系统(Google File System,GFS)的开源实现,它是Hadoop两大核心组成部分之一,提供了在廉价服务器集群中进行大规模分布式文件存储的能力。

    HDFS具有很好的容错能力,并且兼容廉价的硬件设备,因此,可以以较低的成本利用现有机器实现大流量和大数据量的读写。

    HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。

    集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。

    客户端访问文件机制

    在这里插入图片描述
    用户在使用 HDFS 时,仍然可以像在普通文件系统中那样,使用文件名去存储和访问文件。

    实际上,在系统内部,一个文件会被切分成若干个数据块,这些数据块被分布存储到若干个数据节点上。

    当客户端需要访问一个文件时,首先把文件名发送给名称节点,名称节点根据文件名找到对应的数据块(一个文件可能包括多个数据块),再根据每个数据块信息找到实际存储各个数据块的数据节点的位置,并把数据节点位置发送给客户端,最后,客户端直接访问这些数据节点获取数据。在整个访问过程中,名称节点并不参与数据的传输。

    这种设计方式,使得一个文件的数据能够在不同的数据节点上实现并发访问,大大提高了数据的访问速度。

    2.MapReduce

    MapReduce 是一种分布式并行编程模型,用于大规模数据集(大于1TB)的并行运算,它将复杂的、运行于大规模集群上的并行计算过程高度抽象到两个函数:Map和Reduce。MapReduce极大方便了分布式编程工作,编程人员在不会分布式并行编程的情况下,也可以很容易将自己的程序运行在分布式系统上,完成海量数据集的计算。

    并行计算流程

    在这里插入图片描述

    在MapReduce中,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的小数据块,这些小数据块可以被多个Map任务并行处理。MapReduce框架会为每个Map任务输入一个数据子集,Map任务生成的结果会继续作为Reduce任务的输入,最终由Reduce任务输出最后结果,并写入分布式文件系统。

    涉及理念:计算向数据靠拢

    MapReduce 设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动数据需要大量的网络传输开销,尤其是在大规模数据环境下,这种开销尤为惊人,所以,移动计算要比移动数据更加经济。本着这个理念,在一个集群中,只要有可能,MapReduce框架就会将Map程序就近地在 HDFS 数据所在的节点运行,即将计算节点和存储节点放在一起运行,从而减少了节点间的数据移动开销。

    3.YARN

    YARN 是负责集群资源调度管理的组件。YARN 的目标就是实现“一个集群多个框架”,即在一个集群上部署一个统一的资源调度管理框架YARN,在YARN之上可以部署其他各种计算框架,比如MapReduce、Tez、Storm、Giraph、Spark、OpenMPI等,由YARN为这些计算框架提供统一的资源调度管理服务(包括 CPU、内存等资源),并且能够根据各种计算框架的负载需求,调整各自占用的资源,实现集群资源共享和资源弹性收缩。

    通过这种方式,可以实现一个集群上的不同应用负载混搭,有效提高了集群的利用率,同时,不同计算框架可以共享底层存储,在一个集群上集成多个数据集,使用多个计算框架来访问这些数据集,从而避免了数据集跨集群移动,最后,这种部署方式也大大降低了企业运维成本。

    YARN支持的计算框架

    在这里插入图片描述

    目前,可以运行在YARN之上的计算框架包括离线批处理框架MapReduce、内存计算框架Spark、流计算框架Storm和DAG计算框架Tez等。和YARN一样提供类似功能的其他资源管理调度框架还包括Mesos、Torca、Corona、Borg等。

    4.HBase

    HBase 是针对谷歌 BigTable 的开源实现,是一个高可靠、高性能、面向列、可伸缩的分布式数据库,主要用来存储非结构化和半结构化的松散数据。

    HBase可以支持超大规模数据存储,它可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行元素和数百万列元素组成的数据表

    HBase利用MapReduce来处理HBase中的海量数据,实现高性能计算;利用 Zookeeper 作为协同服务,实现稳定服务和失败恢复;使用HDFS作为高可靠的底层存储,利用廉价集群提供海量数据存储能力,当然,HBase也可以在单机模式下使用,直接使用本地文件系统而不用 HDFS 作为底层数据存储方式,不过,为了提高数据可靠性和系统的健壮性,发挥HBase处理大量数据等功能,一般都使用HDFS作为HBase的底层数据存储方式。此外,为了方便在HBase上进行数据处理,Sqoop为HBase提供了高效、便捷的RDBMS数据导入功能,Pig和Hive为HBase提供了高层语言支持。

    5.Hive

    Hive是一个基于Hadoop的数据仓库工具,可以用于对存储在Hadoop文件中的数据集进行数据整理、特殊查询和分析处理。

    Hive的学习门槛比较低,因为它提供了类似于关系数据库SQL语言的查询语言——HiveQL,可以通过HiveQL语句快速实现简单的MapReduce统计,Hive自身可以自动将HiveQL语句快速转换成MapReduce任务进行运行,而不必开发专门的MapReduce应用程序,因而十分适合数据仓库的统计分析。

    6.Flume

    Flume 是 Cloudera 公司开发的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输系统。

    Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接收方的能力。

    7.Sqoop

    Sqoop是SQL-to-Hadoop的缩写,主要用来在Hadoop和关系数据库之间交换数据,可以改进数据的互操作性。

    通过Sqoop,可以方便地将数据从MySQL、Oracle、PostgreSQL等关系数据库中导入Hadoop(比如导入到HDFS、HBase或Hive中),或者将数据从Hadoop导出到关系数据库,使得传统关系数据库和Hadoop之间的数据迁移变得非常方便。

    展开全文
  • 淘宝分布式文件核心储存引擎架构总结——TFS系统1.内存映射类1.主要功能2.主要方法2.文件操作类1.主要功能2.基本方法 1.内存映射类 内存映射类——MMapFile 1.主要功能 实现内存映射的相关操作,封装内存映射相关...
  • OpenStack主要功能和作用

    万次阅读 2021-04-01 17:58:39
    OpenStack主要组件和作用 ​ openstack是一个开源的云计算管理平台,由几个重要的组件结合起来完成工作。openstack支持所有类型的云环境,实施简单可以大规模扩展丰富标准统一的云计算管理平台。openstack通过各种...
  • 本章节将介绍各类操作系统的特点。 裸机系统 单片机的程序可以分为三种:轮循系统、前后台系统和多任务系统。 轮询系统 即在裸机编程时,先初始化相关硬件,让主程序在一个死循环里面不断循环,顺序地处理各种事件。...
  • 手把手教你用Java设计并实现一个城市公交查询系统

    千次阅读 多人点赞 2020-12-19 10:11:33
    为了使得我国公交乘客出行及查询有关信息更方便,本文运用JAVA语言技术,Jsp技术,Mysql数据库开发了B/S结构的城市公交查询系统。 该系统顺应了时代发展且具有以下优点:首先,方便乘客的出行,乘客不用询问站牌工作...
  • 文章目录气象调研HDFS、Ceph差异对比HDFS设计目标HDFS文件目录Ceph设计目标Ceph数据结构HDFS文件导出Ceph文件导出暂时的结论其它FS选型其它思路总结Hbase、Cassendra、TiDB适用场景以及相关生态Hbase基本简介特性...
  • TCP/IP协议体系结构及各层的主要功能
  • 操作系统第一章操作系统引论作业

    千次阅读 多人点赞 2021-03-06 12:52:52
    3.操作系统的处理机管理、内存管理、文件管理、设备管理各应实现哪些功能,为什么? 处理机管理:进程控制、进程同步、进程通信、调度。为了是写多道程序技术,提高系统资源利用率,增加系统吞吐量。 内存管理:...
  • Python文件与目录-os模块和shutil模块详解

    万次阅读 多人点赞 2021-02-26 10:07:54
    os模块提供了一种使用操作系统相关功能的便捷方式,shutil模块是一种高级的文件/目录操作工具。 文章目录 文件的处理 获取系统类型 获取系统环境 执行系统命令 操作目录与文件 文件和目录高级处理 复制文件 移动文件...
  • 图片服务系统是各种针对C端系统常见的子系统,它的特点是存储规模大请求频度高,且单张图片的读请求远远高于写请求。后面几篇文章我们将从图片服务系统的需求分析开始,一起来讨论如何进行这类系统的技术选型、概要...
  • 包含可供系统管理员和用户使用的命令,但在没有安装其他文件系统时(例如,在单用户模式下)则需要这些命令。 它还可能包含脚本间接使用的命令。[1] [1] 没有必要放入 /bin 的命令二进制文件必须放在 /usr/bin 中...
  • 如何实现一个文件系统

    千次阅读 2015-11-24 09:17:50
    如何实现一个文件系统 摘要 本章目的是分析在Linux系统中如何实现新的文件系统。在介绍文件系统具体实现前先介绍文件系统的概念和作用,抽象出了文件系统概念模型。熟悉文件系统的内涵后,我们再近一步讨论...
  • TCP/IP四层模型各层主要协议详述

    万次阅读 多人点赞 2019-08-02 00:46:00
    物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性,确保原始的数据可在各种物理媒体上传输,为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供...
  • 如果不了解ROS 2,推荐先体验一下吧,具体教程:机器人操作系统二(ROS2)- 启程 Departure ROS 2项目的目标是继承ROS 1的优点并改进不合适的部分。The goal of the ROS 2 project is to leverage what is great ...
  • 软件工程-软件测试和系统运维

    千次阅读 2021-06-05 21:28:52
    ⭐⭐⭐⭐⭐ 一、软件测试概念和目标 概念:为了发现错误而执行程序的过程 目标(《软件测试的艺术》) ...不仅要确定输入数据,而且要从系统功能出发确定输出的结果 不仅要检测程序是否做了该做
  • 基于java的健身房管理系统的设计与实现

    千次阅读 多人点赞 2021-02-21 21:49:21
    欢迎添加微信互相交流学习哦! ... 摘 要 健身俱乐部作为专业的健身服务行业,已经越来越受到人们的青睐。随着自身的规模不断扩大,传统的管理模式已不能适应现代健身机构的...本系统采用JSP技术和SQL SERVER 2000...
  • 28、 NAS技术支持多种TCP/IP网络协议,主要是NFS (网络文件系统)和CIFS (通用Internet 文件系统)来进行文件访问(了解) 29、 SAN是通过专用交换机将磁盘阵列与服务器连接起来的高速专用子网。根据数据传输过程...
  • 程序员需要了解的硬核知识之操作系统和应用

    千次阅读 多人点赞 2019-11-18 22:47:39
    例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft Excel 等表格计算软件,是用来提高账本处理效率的程序。这种为了提高特定处理效率的程序统称为 应用 程序员的工作就是编写...
  • 《程序设计综合训练实践报告》 此项目为图书信息管理系统,是一个采用了mysql+mybatis框架+java编写的maven项目
  • 操作系统系统笔记整理

    万次阅读 多人点赞 2020-09-26 13:37:27
    操作系统 前言 本篇文章的内容结合了哈工大李治军老师操作系统课程,王道考研操作系统的资料以及学习了B站CodeSheep的一次知识梳理,以及为了便于理解学习,增加了个人的一些解释。总之,对于开发人员来说,操作...
  • 城市公交查询系统

    千次阅读 多人点赞 2020-08-19 13:33:38
    摘要 出行是人类生活的基本活动之一。城市的快速发展、科技的发展以及环保意识的增强...2005年以来,中国先后印发了关于优先发展城市公共交通的意见等系列文件正式确立了公交优先发展的战略思想,为优先发展城市公共..
  • 操作系统MOOC课后习题答案

    千次阅读 2021-03-25 18:35:21
    C、让用户方便使用 D、提高CPU利用率 答案:B 2、从设备到本地缓冲之间传输数据由()完成。 A、I/O控制器 B、CPU C、设备机械装置 D、内存 答案:A 3、CPU和设备控制器可并行工作,但不同的设备控制器都不能并行...
  • 答:(1)OS作为用户与计算机硬件系统之间的接口 (2)OS作为计算机系统资源的管理者 (3)OS实现了对计算机资源的抽象 3.为什么说OS实现了对计算机资源的抽象? 答:OS首先在裸机上覆盖一层I/O设备管理软件,实现...
  • 牛逼!Java 从入门到精通,超全汇总版

    万次阅读 多人点赞 2021-05-06 19:40:33
    Java 控制流程 Java 访问控制权限 面向对象 继承 封装 多态 面向对象最主要有三大特征:继承、封装和多态,你可以参考这篇博客 面向对象的三大基本特征和五大基本原则 Java 抽象类和接口 ,也可以参考这篇文章 深入...
  • Linux 内核/sys 文件系统介绍

    千次阅读 2015-06-01 13:40:06
    sysfs 是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,...相比于 proc 文件系统,使用 sysfs 导出内核数据的方式
  • 阅读以下关于软件系统设计的叙述,在答题纸上回答问题1至问题3。 【说明】 某文化产业集团委托软件公司开发一套文化用品商城系统,业务涉及文化用品销售、定制、竞拍和...(a)用户界面支持用户的个性化定制; (...
  • IO子系统的层次结构

    千次阅读 多人点赞 2016-10-22 14:30:54
    在计算机系统,无论软硬,经常用到的结构是层次结构。同样,IO也不例外。将IO需要完成的功能组织成一系列的层次结构,每一层利用下一层提供的服务。每层完成的是一个子功能,并向上层提供服务接口。这些特征基本上都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,601
精华内容 11,040
关键字:

列举文件系统面向用户的主要功能