【笔记:http://m.blog.csdn.net/blog/zhouzhou135】

在了解文件系统之前,先了解磁盘格式化的知识。

所以要理解文件系统的数据结构,要从两个方向来理解:

1:磁盘中的数据结构:因为在磁盘格式化的时候,操作系统将初始的文件系统数据结构写到磁盘上。这些数据结构包括空闲和已分配的空间(FAT或者iNode)和一个初始为空的目录。

2:内存中的数据结构:

文件管理是操作系统的主要任务之一,也是平常编程中经常涉及的一个知识点。

先参考维基百科了解什么是文件系统,引入文件系统的目的是什么,文件系统的职责是什么。

简言之:文件系统是为了方便用户管理硬盘和光盘等物理设备中的数据而引入的这么一个逻辑上的概念。

假设没有文件系统,那么对用户而言:

读数据的时候:必须要知道这个数据块保存在光盘或者磁盘的具体哪个扇区上,然后要读取多长的记录。

写数据的时候:必须要知道哪些磁盘块是空闲的以便写入数据。

同时用户必须自己保存数据和磁盘块之间的映射信息,以便读写的时候知道从哪个磁盘地址开始读写。

于是用户就幻想说要是有这样一个中间者就好了:

读的时候,我把数据名给中间者,中间者直接给我具体的磁盘数据,而不是我自己去磁盘上找。

写的时候,我把要写的数据给中间者,中间者具体负责写到磁盘上的某个位置。

这样的话,这个中间者必须维护某个数据名与磁盘位置的映射关系。而用户只需要和某个数据名(逻辑名字)打交道,而不用关心这个逻辑名字代表的数据在物理上的具体存储位置。

用户 ——> 具体的磁盘或光盘

用户 ——> 中间者提供的接口 ——> 具体的磁盘或者光盘

也就是说,有了中间者,用户只需要和中间者提供的接口打交道,而不再与具体的物理设备耦合。

最后为了方便,大家说咱们取一个统一的名字吧,于是出现了一下称呼:

文件系统:代表这个中间者。最终映射到计算机上,这个文件系统的实现会表现为具体的程序代码。

文件:代表存储在某种长期储存设备或临时存储设备中的一段数据流。虽然一个文件表现为一个单一的流,但它经常在磁盘不同的位置存储为多个数据碎片(甚至是多个磁盘)。

一个代表数据名的结构 ——> 一个封装了磁盘块信息的结构。

比如说数据名dataone在硬盘的a分区的b位置开始,长度为3个磁盘块。

如果不引入树形结构的这个方式的话,那么数据a,数据b,数据c,数据d, 数据abc就很容易重名。于是就映入了树形结构的命名空间。

在文件系统中,文件名是提供给用户标志他存放在磁盘上的某个数据的。

APUE:p56 文件共享 打开文件的内核数据结构。

APUE:p86 文件系统

Linux高级程序设计:

进程打开文件的内核数据结构。p101

VFS虚拟文件系统 p129

概述

VFS中的数据结构

超级块

VFS的索引节点

目录项对象

与进程相关的文件结构

主要数据结构间的关系

有关操作的数据结构

如何实现一个文件系统

struct stat、struct inode 、struct file 的关系

===========================================

参考《操作系统概念(第七版)》第四部分 存储管理,先弄清文件、目录的概念。

文件:

目录:可以实现为一张表,里面保存了数条文件名和该文件名对应的索引信息的映射关系。其中的每一项叫做目录项。

打开文件表:因为每次对文件读、写等操作都要涉及到去目录中搜索对应的文件名对应的所有信息,因此非常耗时,为避免该问题,系统维护了一个包含所有打开文件的信息表。参考P323

多个进程打开同一文件的处理方法?p324 系统范围内的系统打开文件表 vs 每个进程的进程打开文件表

a,b,...进程的进程打开文件表→系统打开文件表(保存进程无关的信息)→目录→具体的物理设备

这些内容在《现代操作系统(原书第3版)》p446有详细描述。

===========================================

参考《现代操作系统(原书第3版)》第4章 文件系统:★★★★★

文件:是为了解决进程存储信息时遇到的一些问题而建立的一种抽象。文件时进程创建的信息逻辑单元。

p153 文件系统在磁盘上的布局

p156:物理inode

p161 : 虚拟文件系统,open系统调用在VFS中的过程。

p179 :Unix v7文件系统:open系统调用时查找iNode的过程。

p440:Linux文件系统

p445 :SuperBlock、Dentry、Inode、File对象

p448:文件描述符表、打开文件描述符表、INode表之间的关系

深入理解磁盘文件系统之inode:http://www.cnblogs.com/thinksasa/archive/2013/04/10/3013445.html

一天一点学习Linux之认识文件系统:http://www.opsers.org/base/the-knowledge-that-one-day-learn-linux-file-system.html

一天一点学习Linux之Inode详解:http://www.opsers.org/base/one-day-the-little-learning-linux-inode-detailed.html

===========

VFS中的超级块、VFS的索引节点、目录项这三个对象的理解,结合视频12.10中00:06:08处的那张图,并结合以下链接:

超级块

VFS的索引节点

目录项对象

或者《linux内核设计与实现》对应部分一起理解。

linux vfs 根节点名称,Linux:文件,目录项,索引节点,超级块,VFS,具体文件系统...相关推荐

  1. linux批量删除指定名称的文件夹

    linux批量删除指定名称的文件夹 find /root/baseline_dataset -name .ipynb_checkpoints | xargs rm -rf find # find 命令 ...

  2. linux文件 i节点结构,Linux 文件描述符 文件表项 i节点结构

    Linux的VFS(虚拟文件系统)学习起来很痛苦,看源码不太明智,看完分析完就忘且太浪费时间,懂了后也无法应用在实际场合中.所以这里只是讨论下文件描述符,文件表项(file结构体)和inode,理清实 ...

  3. linux 软硬连接区别---关于inode索引节点

    linux系统为每1个文件都分配有i索引节点(inode),系统根据呢d节点从磁盘找出数据.  一般来讲,每1个文件名(包含全路径)实际上都链接住1个i索引节点. inode实际上系乜咧? 其实可以算 ...

  4. linux关机和重启名称,Linux关机命令和重启命令

    sync 将数据由内存同步到硬盘中. shutdown 关机指令,你可以man shutdown 来看一下帮助文档.例如你可以运行如下命令关机: shutdown –h 'This server wi ...

  5. linux 修改群组名称,linux常用命令系列—chgrp-修改所属群组

    指令名称:chgrp(change group) 功能介绍:变更文件或目录的所属群组.在UNIX系统家族里,文件或目录权限的掌控由拥有者及所属群组来管理.您可以使用chgrp指令去变更文件与目录的所属 ...

  6. UNIX文件的实现——索引节点

    POSIX没有强制磁盘上的文件采取任何特定的表示方法,但是传统的UNIX文件都是按照改进的树状结构来实现的.目录项中包含一个文件名 和一个定长结构的引用(索引节点).索引节点包含与文件长度.文件位置. ...

  7. linux存储群组名称的文件是,群组管理(分组,群组密码,身份切换,常见问题)- 系统管理 -Deepin深度系统用户手册...

    群组介绍 Linux中为了使用户共享文件或者其他资源方便,引入了群组的功能: Linux中每一个用户属于一个群组(group),而每一个群组(group)都有一个group标示符,即GID. 所有群组 ...

  8. Linux SSh scp使用【远程文件/目录的传输】

    一:Linux ssh scp的简介及作用: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器. 有时我们 ...

  9. Linux $ROOT 用户无权限操作文件/目录问题

    某些文件夹或文件,当我们使用最高权限用户 (root)去操作它的文件名改写.内容擦除/修改.删除等行为都会被拒绝. 提示错误:Operation not permitted 如何解决该问题? 执行以下 ...

最新文章

  1. JavaWeb-综合案例(用户信息)-学习笔记01【列表查询】
  2. java 链接mysql 产生500W数据模拟生成环境
  3. 九大经典算法之插入排序、希尔排序
  4. Java—Java 8 新增特性详解(Predicate和Stream)
  5. 第二章 Mablab语言基础
  6. PMP考试试题是什么样?
  7. html新浪短域名api,新浪短链接API接口示例
  8. 一个更高效的RACK机制
  9. Linux man --显示在线手册页
  10. Android 的 getIntExtra(name, defaultValue)里 defaultValue是什么意思
  11. reid 比赛(全国人工智能大赛)
  12. 计算机硬件系统外设是指,计算机硬件系统.
  13. 电子招投标采购系统之电子招标投标的全流程!企业电子招投标系统源码
  14. 自动对焦模块理论基础及其硬件实现浅析(二)
  15. 尚硅谷《全套Java、Android、HTML5前端视频》
  16. linux 浏览器问题
  17. RN:React Native原理以及新架构JSI、Fabric等概念
  18. Datatype LP64 ILP64 LLP64 ILP32 LP32
  19. 为什么高防CDN将成为网站安全防护的必备?
  20. jzoj3424. 【NOIP2013模拟】粉刷匠

热门文章

  1. 基于mysql和php的分布式事务处理1,基于MySQL和PHP的分布式事务处理
  2. java web输出语句到控制台_Java工程师(6).循环结构
  3. PP视频怎么设置文件的缓存路径
  4. Redis的内部运作机制——Redis详解
  5. springboot基于mybatis扫描jar包中的controller、service、dao、xml
  6. 中央处理器属于计算机外部设备吗,不属于计算机外部设备的是
  7. flex布局_flex布局的 flex(felx-grow、flex-shrink、flex-basis)详解
  8. mysql查询最小的id_Mysql查询表中最小可用id值的方法
  9. Linux 实操 —— Linux 系统性能分析
  10. java io流的学习总结~~