本章開始介绍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 找到了。

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

JAVA File类 分析(二)的更多相关文章

  1. JAVA File类 分析(三)

    前面两篇与大家一起研究了unix下的文件系统,本篇将和大家一起分析 文件的属性和文件夹. ok,废话不说,先来段代码 #include <stdio.h> #include <sys ...

  2. Java File 类的使用方法详解

    Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看 ...

  3. Java File 类的使用方法详解(转)

    转自:http://www.codeceo.com/article/java-file-class.html Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对J ...

  4. Java File类总结和FileUtils类

    Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...

  5. Java File类 mkdir 不能创建多层目录

    File f = new File("/home/jp/Upload"); if ((!f.exists()) || (!f.isDirectory())) {boolean re ...

  6. Java File类基础解析 1

    Java File类基础解析 1 File类的构造方法 public File(String pathname) :通过给定的路径名字符转换为抽象路径名来创建新的File实例 String path ...

  7. Java——File类概述

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  8. Java File类常用方法及实例

    创建:createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false. createTempFile(String prefix, String s ...

  9. Java File类基本操作

    我们可以利用Java.io.File类对文件进行操作,基本操作如下: 1)创建文件: public boolean createNewFile() throws IOException 2)删除文件: ...

随机推荐

  1. zzulioj--1807--小明在努力(递归)

    1807: 小明在努力 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 95  Solved: 35 SubmitStatusWeb Board Des ...

  2. zzulioj--1827--石锅全拌(区间求和水题)

    1827: 石锅全拌 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 6  Solved: 3 SubmitStatusWeb Board Descri ...

  3. PostgreSQL Replication之第八章 与pgbouncer一起工作(5)

    8.5 维护 pgbouncer 除了我们在本章已经说明的,pgbouncer有一个很好的能够执行基本管理和监控任务的交互式管理界面. 它是如何工作的呢?pgbouncer提供给您一个虚假的称为pgb ...

  4. Data flow diagram-数据流图

    A DFD shows what kind of information will be input to and output from the system, how the data will ...

  5. day01-Python介绍,安装,idea

    一. python 简介 Python,读作['paɪθɑn],翻译成汉语是蟒蛇的意思,Python 的 logo 也是两条缠绕在一起的蟒蛇的样子,然而 Python 语言和蟒蛇实际上并没有一毛钱关系 ...

  6. Unity 给FindGameObjectsWithTag排序

    GameObject[] patrol = GameObject.FindGameObjectsWithTag ("Player").OrderBy (g => g.tran ...

  7. 题解 P2910 【[USACO08OPEN]寻宝之路Clear And Present Danger】

    说起来这还是本蒟蒻学完Floyd之后做的第一道题. emm...这是一道裸题,题目大致是说有一堆岛,岛之间有海盗,因此每一条边都有一个危险指数(权重),然后给出一段必须经过的路线,求从一号小岛走到N号 ...

  8. BZOJ——T 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛

    http://www.lydsy.com/JudgeOnline/problem.php?id=1612 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1 ...

  9. Spring-statemachine给end状态设置action

    Spring-statemachine版本:当前最新的1.2.3.RELEASE版本 builder.configureStates() .withStates() .initial(generate ...

  10. ids for this class must be manually assigned before calling save():Xxx

    把Xxx.hbm.xml主键生成策略改成identity