zoukankan      html  css  js  c++  java
  • 操作系统-文件管理(二)

    7.5外存分配方式

    在为文件分配外存空间时所要考虑的主要问题是:怎样才能有效地利用外存空间和如何提高对文件的访问速度。
    目前常用的外存分配方法有:连续分配、链接分配和索引分配。通常,在一个系统中,仅采用其中的一种方法来为文件
    分配外存空间。

    7.5.1连续分配:

    连续分配要求为每一一个文件分配组相邻接的盘块。在采用连续分配方式时,可把逻辑文件中的记录顺序地存储到邻接的各物理盘块中,这样所形成的文件结构称为顺序文件结构
    ,此时的物理文件称为顺序文件。

    7.5.2链接分配

    在采用链接分配方式时,可通过在每个盘块上的链接指针,将同属于一一个文件的多个离散的盘块链接成一一个链表,把这样形成的物理文件称为链接文件。
    1.隐式链接
    在采用隐式链接分配方式时, 在文件目录的每个目录项中,都须含有指向链接文件第一一个 盘块和最后一一个盘块的指针,它适合于顺序访问,对随机访问是极其低效的。

    2.显式链接
    这是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中,该表在整个磁盘仅设置一张。
    由于分配给文件的所有盘块号都放在该表中,故把该表称为文件分配表FAT.

    FAT和NTFS技术

    FAT32是FAT系列文件系统的最后-一个产品,FAT32的不足之处:如不支持4GB以上的大文件.
    NTFS:使用了64位磁盘地址,理论上可以支持2的64次方字节的磁盘分区;可以很好地支持长文件名;具有系统容错功能;提供了数据的一致性;提供了文件加密、文件压缩功能.....
    索引分配

    在打开某个文件时,只需把该文件所对应的盘块号集中地放在一起。索引分配方法为每个文件分配一
    个索引块(表),再把分配给该文件的所有盘块号,都记录在该索引块中,因而该索引块就是一一个含有许
    多盘块号的数组。
    索引分配方式支持直接访问,当要读文件的第I个盘块时,可以方便地直接从索引块中找到第I个盘块的盘块号;
    此外,索引分配方式也不会产生外部碎片,当文件较大时,索引分配方式优于链接分配方式。

    索引分配方式的主要问题:可能要花费较多的外存空间。通常情况下,总是中、小型文件居多,如只需1~2
    个盘块,这时如果采用链接分配,只需设置1~2个指针,如采用索引分配,则同样仍需为之分配一索引块。
    通常采用一个专门的盘块作为索引块,对于小文件采用索引分配方式时,其索引块的利用率将是极低的。

    7.6文件存储空间的管理

    文件管理要解决的重要问题之一是如何为新创建的文件分配存储空间。存储空间的基本分配单位都是.
    磁盘块而非字节。系统应为分配存储空间而设置相应的数据结构系统应提供对存储空间进行分配和回收的手段.
    PS:

    分区分配算法:
    (1)首次适应算法(First Fit):从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给
    作业,这种方法的目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到
    高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。
    (2)最佳适应算法(Best Fit):从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使
    碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一
    个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。
    (3)最差适应算法(Worst Fit):从全部空闲区中找出能满足作业要求的、且大小最大的空闲分区,从而使链表中的结点大小趋于均匀,适用于请求分配的内存大小范围较窄的系统。
    为适应此算法,空闲分区表(空闲区链)中的空闲分区按大小从大到小进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留小的空闲区,尽量减少小的碎片产生。

    7.6.1空闲表法和空闲链表法

    1.空闲表法
    属于连续分配,为外存上的所有空闲区建立一张空闲表,
    每个空闲区对应于一个空闲表项......再将所有空闲区按其
    起始盘块号递增的次序排列。

    (2)存储空间的分配与回收。
    空闲盘区的分配与内存的动态分配类似,同样是采用首次适应算法、循环首次适应算法等。例如,在系统为某新创建的文件分配空闲盘块时,先顺序地检索空闲表的各表项直至找到第-一个其大小能满足要求的空闲区,再将
    该盘区分配给用户(进程),同时修改空闲表。系统在对用户所释放的存储空间进行回收时,也采取类似于内存回收的方法,即要考虑回收区是否与空闲表中插入点的前区和
    后区相邻接,对相邻接者应予以合并。

    2.空闲链表法:
    将所有空闲盘区拉成一条空闲链
    (1)空闲盘块链:将磁盘上的所有空闲空间,
    以盘

    块为单位拉成一条链。

    (2)空闲盘区链:将磁盘上的所有空闲盘区(每个
    盘区可包含若干个盘块)拉成一条链。

    7.6.2位示图法

    1.位示图

    位示图是利用二进制的一位来表示磁盘中- 一个盘块
    的使用情况.当其值为”0”时,表示对应的盘块空闲;
    为”1”时,表示已分配。
    磁盘上的所有盘块都有
    个二进制位与之对应。这样,由所有盘块所对应的
    位构成一个集合,称为位示图。

    2.盘块的分配
    (1)顺序扫描位示图,从中找出一个或一组其值为 “0”的二进制位(“0"表示空闲时)。

    (2)将所找到的一一个或一-组二进制位,转换成与之相应的盘块号。假定找到的其值为“0"的二进制位,位于位示
    的第i行、第j列,则其相应的盘块号应按下式计算:
    b=n(i-1)+j
    式中,n代表每行的位数。

    (3)修改位示图,令map [is,j] =1。

    3.盘块的回收

    (1)将回收盘块的盘块号转换成位示图中的行号和列
    号。
    转换公式为:
    i=(b-1)DIV n+1
    j=(b-1)MOD n+1

    (2)修改位示图。令map [is,j] =0。

    这种方法的主要优点是,从位示图中很容易找到一个或 -组相邻接的空闲 盘块。此外,由于位示
    图很小,占用空间少,因而可将它保存在内存中,进而使在每次进行盘区分配时,无需首先把盘
    区分配表读入内存,从而节省了许多磁盘的启动操作。位示图常用于微型机和小型机中.

    7.6.3成组链接法

    空闲表法和空闲链表发,都不适用于大型文件系统,
    因为这会使空闲表或空闲链表太长。UNIX系统中采用的是
    成组链接法。
    1.空闲盘块的组织
    (1)空闲盘块号栈
    (2)文件区中的所有空闲盘块,被分成若干个组.....
    (3)将每--组含有的盘块总数N和该组所有的盘块号
    .....
    (4)
    (5)
    图示:

    7.7提高磁盘I/O速度的途径和磁盘容错技术

    (1)通过存取控制机制来防止由人为因素所造成的文件不安全性。

    (2)通过磁盘容错技术,来防止由磁盘部分的故障所造成的文件不安全性。

    (3)通过“后备系统”来防止由自然因素所造成的不安全性。

    总结:

    容错技术是通过在系统中设置冗余部件的办法,来提高系统可靠性的一种技术,磁盘容错技术则是通
    过增加冗余的磁盘驱动器、磁盘控制器等方法,来提高磁盘系统可靠性的一种技术。即当磁盘系统的某部
    分出现缺陷或故障时,磁盘仍能正常工作,且不致造成数据的丢失或错误。

    1.第一级容错技术SFT- I
    1)双份目录和双份文件分配表

    在磁盘上存放的文件目录和文件分配表FAT,是文件管理所用的重要数据结构。如果这些表格被破坏,将导致
    磁盘上的部分或全部文件成为不可访问的,因而也就等效于文件的丢失。为了防止这类情况发生,可在不同的磁盘
    上或在磁盘的不同区域中,分别建立(双份)目录表和FAT.其中,一份被称为主目录及主FAT;把另一份称为备份目录及备份FAT.

    2)热修复重定向和写后读校验

    (1)热修复重定向(Hot-Redirection)。

    系统将磁盘容量的一部分作为热修复重定向区,用于存放当发现磁盘有缺陷时的待写数据,并对写入该区的所有数据进行登记,以便于以后对
    数据的访问。
    例如:
    OS要向第12磁道的第10扇区的盘快中写入数据时,发现此盘块是坏的,于是便将数据写入热修复区中第153磁道的第27扇区的盘块中.....

    (2)写后读校验(Read after write Verification)方式。

    2.第二级容错技术SFT- II
    (1)磁盘镜像(Disk Mirroring)。

    (2)磁盘双工(Disk Duplexing)。

    7.8数据致性 控制
    7.8.1事务

    -1.事务的定义
    事务是用于访问和修改各种数据项的一一个程序单位。事务也可以被看作是一系列相关读和写操作。 被访问的数据可以
    分散地存放在同一文件的不同记录中,也可放在多个文件中。只有对分布在不同位置的同--数据所进行的读和写(含修改)操
    作全部完成时,才能再以托付操作(Commit Operation)来终 止事务。只要有一一个读、写或修改操作失败,便须执行夭折操
    作(Abort Operation)。 读或写操作的失败可能是由于逻辑错误,也可能是系统故障所导致的。

    7.8.2检查点
    -1.检查点(Check Points)的作用
    引入检查点的主要目的,是使对事务记录表中事务记录的清理工作经常化,
    即每隔定时间便做一次下述工作:
    首先是将驻留在易失性存储器(内存)中的当前事务记录表中的所有记录,输出到稳定存储器中;其次是将驻留在易失性存储器中的所有已修改数据,输出到稳定存储器中;然后是将事务记录表中的<检查点〉记录,
    输出到稳定存储器中;
    最后是每当出现-一个<检查点>记录时,系统便执行上小节所介绍的恢复操作,利用redo和undo过程实现恢复功能。

    7.8.3并发控制

    -1.利用互斥锁实现“顺序性”
    -2.利用互斥锁和共享锁实现顺序性

    互斥锁仅允许-一个事务对相应对象执行读或写操作,而共享锁
    则允许许多个事务对相应对象执行读操作,而不允许其中任何
    一个事务对对象执行写操作。

    盘块号一致性的检查
    为了描述盘块的使用情况,通常利用空闲盘块表(链)来记录所有尚未使用的空闲盘块的编号,文件分配表
    FAT则是用于记录已分配盘块的使用情况。为了保证盘块数据结构的一致性,可利用软件方法构
    成一一个计数器表,每个盘块号占一个表项,可有....-1项,N为盘块总数。每一一个表项中包含两个
    计数器,分别用作空闲盘块号计数器和数据盘块号计数器......如果情况正常,这两组计数器中对应的一对数据应该互补....
    链接数致性检查

    在UNIX类型的文件目录中,其每个目录项内都含有一一个索引结点号,用于指向该文件的索引结点,对于一
    个共享文件,其索引结点号会在目录中出现多次;另一方面,在该共享文件的索引结点中有一一个链接计数
    count,用来指出共享本文件的用户(进程)数,在正常情况下,这两个数据应该一致,否则就会出现数据不致性差错....

    1.文件类型与文件存储器、存取方法的关系:磁带是属于顺序组织的存储设备,用它来作为文件存储器,则宜采用连续分配的文件组织。
    所以,它对于顺序存取的文件是合适的。在此情况下,当处理完一一个记录后,由于磁头已移到下一一个记录所在的物理块处,
    固而可随即存取并处理下一一个记录而不需要额外的寻找时间。对于直接存取设备(磁盘、磁鼓)来说,上 述四种文件组织(包括Hash文件组织)都可以采用,究竟何种最适合,
    则要看文件的使用情况而定。如果文件是顺序存取的,组织成连续文件或串联文件是可行的,但是,由于连续分配方式要求在建立文件时就得确定文件的大小,因而缺乏灵活性;
    而链接式分配的串联文件具有较大的灵活性:扩展时可申请任一~空闲物理块;文件压缩时,可把不用的物理块归还给系统,以供其它文件使用。

    如采用直接存取方式,且文件大小是不固定的,则选择索引式文件组织或计算寻址结构是适宜的,它们的灵活性比较大,至于串联文件,在这种场合反而是低效的。
    因为要顺序通过一-系列物理块才能找到需要的记录,故存取速度慢。对于索引式文件组织,也可采用顺序存取方法,但其效率不如其它文件组织。
    若文件大小是固定的,则采用连续分配方式文件组织也是可取的。链接块式和Hash结构文件,它们的优点是都能实现物理块的动态分配和回收;连续分配方式的主要优点是:实现简单,
    不需要索引表,也无需链接指针。

    2.记录的成组与分解

    -(1)、什么是记录的成组与分解:
    由于磁盘块的大小是预先划分好的,大小固定,而逻辑记录的大小是用户文件
    性质决定的,不一定和块大小一致,如果逻辑记录比物理块小得多时,可以把多个逻辑记录存放在一一个块中,这就
    是记录的成组,用户使用时再把读取的一块信息中分离出所需的记录,这就是记录的分解。

    -(2)、记录的成组:
    把若干个逻辑记录合成-组存入一块的工作称为“记录的成组”每块中逻辑记录的个数称块因子利用主存缓冲区可以把多个逻辑记录一次性保存到磁
    盘块上。也就是当记录要求存盘时,先存入主存缓冲区,缓冲区的大小等于最大逻辑长度乘以成组的块因子,就是块的大小。在缓冲区未存满时,不启动磁盘写,这样就提高了存
    储空间的利用率,减少启动外设的次数,提高了系统的工作效率。
    -3、记录的分解:
    这是记录成组的一一个逆过程,先从磁盘中找到记录所在的块,并将本块读入主存缓冲区,再从缓冲区取出所需要的记录送到用户工作区。如果用户所
    需的记录已经在缓冲区中,则不需要启动外设读块信息,这也可以提高系统工作效率。


    例:假定磁带的记录密度为每英寸800个字符,每个逻辑记录长为160个字符,块与块之间的间隙为
    0.6英寸,现有1000个逻辑记录需要存储到磁带上,分别回答下列问题:
    a.不采用成组操作时磁带空间的利用率
    b.采用以5个逻辑记录为一-组的成组操作时磁带
    空间的利用率。
    c.为了使磁带空间的利用率大于50%,采用记录
    成组时其块因子至少为多少?

    答: :
    a.不采用成组操作时,磁带空间利用率为:
    (160X 1000)/(1 60000+800X 0.6X 1000)
    =0.25= =25%
    b.采用5个逻辑记录成一-组时 ,
    磁带空间利用率
    为:
    (160X 1000)/(160000+800X 0.6X 1000/5)=62.5%
    c.设块因子为x,利用率为50%,则有:
    1 60000/(160000+480000/x)=0.5
    解之得:x=3

  • 相关阅读:
    flex布局中transform出错
    RabbitMQ系列之Centos 7安装RabbitMQ 3.6.1
    解决windows下FileZilla server中文乱码问题
    IIS 7.5 + PHP-5.6.3 + mysql-5.6.21.1
    C# 速编神器LinqPad(新版6.5)
    一个MySql Sql 优化技巧分享
    IIS反向代理/Rewrite/https卸载配置
    zerotier 远程办公方案
    一次Mysql连接池卡死导致服务无响应问题分析(.Net Mysql.Data 6.9.9)
    ExpressCache
  • 原文地址:https://www.cnblogs.com/HelloBytes/p/13071749.html
Copyright © 2011-2022 走看看