zoukankan      html  css  js  c++  java
  • JAVA File类 分析(二)

    本章開始介绍UNIX文件系统。

    文件系统是怎样管理文件的呢?那咱们要先文件的存储介质開始--磁盘

    磁盘是计算机系统的一个硬件设备,文件系统为了可以管理磁盘。对其进行了三层抽象(本文全部内容均指UNIX文件系统,windows文件系统有兴趣的同学自行研究!~)

    第一层抽象:将一整块磁盘分区

    第二层抽象:将磁盘切割为block

    第三层抽象:将block 逻辑上划分为四个区域

    第三个层次也就是咱们要研究的部分

    Unix系统的分区例如以下:

    引导块 超级块 i节点表 文件存储区
    (1)引导块:0号块。是每一个文件系统的第一块,存储的是用于系统启动时引导运行操作系统的内核程序,当整个文件系统由多个文件系统构成时。仅仅有根文件系统的引导块才有效。

    (2)超级块:1号块,通常也成为管理块。是文件系统的第二块,也是文件系统的头。存放安装和管理文件系统的所有管理信息。包含文件系统大小、文件系统所在的设备区、i节点表大小、空暇空间大小、空暇链表头等。

    (3)i节点表:由若干块构成的一片磁盘区域,i节点表在超级块中指明,一个i节点号相应一个文件,i节点相关内容例如以下:

    mode
    type
    uid
    gid
    link.no
    size
    addr.pt
    time
    占用标志。0:空,1:占用
    文件类型
    属主
    属组
    链接数
    大小
    指向文件实际数据块的指针
    近期訪问/改动日期时间

    每一个文件系统的属性,如大小,文件的全部者,近期改动时间等,都记录在I-节点的结构中。全部的I-节点都有同样的大小

    (4)文件存储区:除了前三部分外。其余空间都是文件存储区,该区占了整个存储空间的绝大部分。

    生命短暂,咱们还是通过实例来看

    一、创建文件:文件系统是怎样分配这三个区域的

    执行一个cat spwd.c > test 如图:


    那么这个过程文件系统做了什么呢?(至于里面的管道,有时间会有专门一篇来分析)
    创建的步骤例如以下图


    创建一个文件主要有四个操作

    1、找到一个空i-节点存储文件属性

    2、内核从free的数据block中找出可以存储文件大小的几个block。存储数据图中是找出A,B,C三块

    3、将A,B,Cblock记录到第40个block i节点上(i-节点,一共能存储13个block。只能存储10个数据block。后3个空间在存在大文件使用,11块叫二级间接块,12块叫三级间接块,13呢?那就说明文件太大了,须要又一次定义block的大小,block大了,自然i-节点就能够放下了)

    4、将i-节点 加入到目中。映射关系是40:test,文件夹下边将讨论

    二、什么是文件夹

    文件夹是一种包括文件名称字列表的特殊文件,不同的系统实现方式不同,可是,其抽象模型基本一致-------i-节点和文件名称列表。

    知道这些 就差点儿相同了。

    三、文件是怎样被读取出来的呢?

    能够看做是创建文件的逆操作。

    1、去文件夹 查找与test文件名称同样的i-节点号

    2、去顺序为40i-节点的记录中 查找blockA,B,C

    3、读取A,B,C

    4、拷贝到用户空间

    须要注意是1,2,3 过程都是在内核空间中。第4步 才到用户堆栈空间,这里有涉及到了内核态和用户态。依旧不会再这里讨论,内容太多了。

    以上不过粗略的介绍,文件系统涉及内容还有非常多,比方大文件的存储。多个文件系统的整合,虚拟文件系统等

    在结束本篇之前。再说两句,一个block 是5 1 2字节,我们常常使用的find 命令中size选项 的大小就是blcok为计算。find 命令的使用请自行查阅man find 手冊

    至于是不是5 1 2字节,那么咱们就实践一下。spwd是9368个字节


    执行一下 find   .  -type f -size +19

    意思查找当前文件夹下type为文件类型,大于19个block的文件。

    没有找到,那么咱们执行 find   .  -type f -size +18      (18*512=9126)


    OK 找到了。

    今天就到这里,接下来将讨论文件属性和文件夹




  • 相关阅读:
    JavaScript判断字符串的字符长度(中文占两个字符)
    MessageQueue 一 简单的创建和读取
    HttpWebResponse返回信息
    IDEA 快捷操作 Windows
    不带头结点的单链表的创建、插入、删除。
    二叉树的深度
    【Python爬虫实战】pywin32 安装后出现 import win32api ImportError DLL load failed
    【Python爬虫实战】Scrapy框架的安装 搬运工亲测有效
    【Python爬虫实战】多线程爬虫---糗事百科段子爬取
    【Python爬虫实战】微信爬虫
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6946467.html
Copyright © 2011-2022 走看看