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 找到了。

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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值