• 03文件系统 学习心得


      逻辑盘,有一个问题,就是一旦划分好就无法改变,要改变也只能把数据全部抹掉,重新配置;

      基于此问题,就产生了 虚拟化逻辑磁盘的概念;

      RAID控制器是硬件底层实现RAID,实现逻辑盘,所以操作起来不灵活;

      OS层会把RAID控制器提交上来的逻辑盘,认成是不折不扣的物理磁盘; 如果在OS层,再把RAID控制器提交上来的逻辑盘加以组织、再分配(也就是虚拟化),因为OS层上运行的都是软件,完全靠CPU,这样就会变得非常灵活 ;   基于这种思想下开发的产品,统称为 卷管理器,Volume Manager,VM;

      

      知名的卷管理器,Volume Manager,VM有:

      微软:  LDM,逻辑磁盘管理;

      vertas:     用于自己产品的VxVM,Veritas Volume Manager;   用于linux、AIX,HPUS的 LVM,logical volume manager;  用于sun solaris的 Disk Suite;

      LVM是应用最广泛的;包括 PV,VG,PP,LP,LV;

    分区的地位;

      分区管理,可以看作是最简单的卷管理方式,他比LVM要低级一些;

      如果把一块磁盘比作一个仓库,分区就是把仓库分成具体的一库区,二库区; 因为一个大仓库对用户来说很不方便;

      对于低级VM的分区管理来说, 必须有一个东西记录分区信息,比如 一库区里是整个仓库的哪些房间,这个信息表是保存在仓库本身的一个房间,这个房间就叫做MBR; 也就是分区信息保存在分区表,分区表存放在一个固定的扇区,LBA1,这个扇区叫做MBR,主引导记录;

    文件系统的管理进化史

      把磁盘比作一个大仓库;磁盘驱动器驱动软件,比作是库管员; 

    1、文件系统的诞生----仓库理货员  

      早期没有文件系统,应用程序都自己管理磁盘,随便往仓库里面存放数据,容易造成数据浪费,数据之间容易冲突、覆盖,极为混乱;

      所以要找一个仓库理货员,来记录所有应用程序存放的记录,存放什么粮食,存放了哪些房间;

    2、簇的诞生

      理货员给每个仓库准备了一个记录表; 理货员不需要关系具体房间在仓库的位置,怎么把粮食存放到仓库,这些库管员会来处理; 

      理货员只需要知道,送过来了什么货物,存放的房间号;

      比如,程序1来存放白菜,理货员就记录:”白菜 512斤 房间号3“

           程序2来存放粮食,理货员就记录: ”大米 1000斤 房间号4-1024“ ,但是如果大米存放的很多,有上万斤,那么房间号记录会变得很长;

      由此,就引出,将多个房间号划分为一个逻辑空间,叫做”簇“ ; 比如8个房间为一个簇,这样空间的记录,就只有1/8 了;

    3、链表概念的产生

      因为不断的存入和取出;导致仓库的存放零零散散; 如果按照顺序将每个人粮食存放到各个簇,他以下取走,簇就空了,如果其他人来存粮食,如果存不下,还得额外找连续簇;所以这里的解决方案只能是,不一定非得连续存放在仓库。

      因为现在 存放数据最小单位以簇来计算,那么就可以记录为:  ” 冬瓜  1000斤 簇2、6、9“;表示存放的时候时,是按顺序存放到仓库的2号簇、6号簇、9号簇;

      当然取出的时候,也是按顺序去除,先取2号簇,然后是6号簇,9号簇; 

      这样取货慢一点,但是没有空间浪费;

    4、存储空间管理——位示图法

      虽然按照之前的方法记录解决了空间问题,但是因为每个人存放的货物数量不一样,记录的长短也就不一样;

      而且存放多了之后,记录增到后就很难查询;

      还一个重要问题,就是要找到一个空闲的簇,就需要把所有占用的簇都站出来才行,然后再去选择一个没有被占用的簇,这个过程非常耗时;

      要解决记录长度不一的问题,由此产生了 链表的方法; 就是参考路标的方式,我只需要描述货物占用的第一个簇,在簇中记录下一个标记,写明下一个簇的号码,然后到下一个簇取货;比如记录:“冬瓜 1000斤 簇1”,然后簇1中记录下一个标签“簇10”;

      但是没解决寻找空闲簇的问题,那就换一种数据格式记录;

      把整个仓库的簇都画出来,从第一个簇到最后一个簇,都用一个方格标识; 然后参照:“冬瓜 1000斤 簇1” ,如果下一个簇是簇10, 那么在簇1上记录簇10; 如果簇10的下一个是簇90,那么在簇10上记录簇90;

      这样所有的关系都记录好了,而且空闲块也可以很容易就找到了;

      这个图表,其实有点类似  “位示图法”,只不过位示图:每个二进制位对应一个盘块。如“0”代表盘块空闲,“1”代表盘块已分配。

      

      记录空闲簇,还有一种“空闲i链表法”,以盘块为单位组成一条空闲链,每个空闲盘块中存储着下一个空闲盘块的指针。适合连续文件;

            

    5、房间变多

      簇是系统可以识别的最小单位。也就是对于文件,占用的簇数量都是整数,也就是不会有两个文件占用一个簇的情况发生。每个簇可以包括2、4、8、16、32或64个扇区。显然,簇是操作系统所使用的逻辑概念,而非磁盘的物理特性。

      随着现在货物越来越多,动则几千上万斤,簇的号码也越来越大;以前的格子中,用于记录号码的位数就不够了;  所以记录簇号码的标记位由原来的 2Byte,变成了现在的4Byte;

     6、优化

      随着仓库性能的不断提升,仓库硬件方面的效率速度提升很快;那么仓库管理的软件算法,也要持续更新,才能适应不断优化的硬件;

      经过观察,货物即使存放在不连续的簇中,这些簇也有局部是连续的;那存放货物时,如果不是一个簇一个簇的去找路标,而是一段一段的去找,那么就会节约很多时间;

      微软将这些记录信息,叫做 metedata,元数据;  也就是用来描述其他数据是怎么组织存放的一种数据; 如果记录丢失,虽然仓库中的货物完好,但是也无法取出,因为已经不知道货物的组织结构了;

      微软总共由3中仓库运作的管理模式,分表叫做: FAT16,FAT32,NTFS;

      取货时,只需要告诉文件系统(理货员),文件名称,所要取出的长度和一些其他选项,理货员就可以在仓库中取出这些数据了;

  • 相关阅读:
    CentOs 安装 Mysql
    安装 CentOs 系统 及 Python 及 Scrapy 框架
    对IOC的理解
    SQL语句优化 -- 以Mysql为例
    探讨 java中 接口和对象的关系
    Java中组合 设计技巧 实例
    【题解】Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths Codeforces 741D DSU on Tree
    【题解】Tree-String Problem Codeforces 291E AC自动机
    【题解】打地鼠 SDOI2011 模拟 行列无关
    【题解】新型城市化 HAOI2017 网络流 二分图最大匹配 强连通分量
  • 原文地址:https://www.cnblogs.com/lei2017/p/16116762.html
Copyright © 2020-2023  润新知