SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
文件系统简述
• 统一接口
• Everything is File
• 软件和硬件一体
• 设备文件-驱动-硬件
系统调用
strace cat 123
2file: 1. /bin/cat ; 2. 123;
execve("/bin/cat", ["cat", "123"], 0x7ffc97bab7e8 /* 40 vars */) = 0
brk(NULL) = 0x565094e46000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=110744, ...}) = 0
mmap(NULL, 110744, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0a50f28000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
1. openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF21130000000030>0100024035200000"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2030928, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0a50f26000
mmap(NULL, 4131552, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0a5092a000
mprotect(0x7f0a50b11000, 2097152, PROT_NONE) = 0
mmap(0x7f0a50d11000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e7000) =
0x7f0a50d11000
mmap(0x7f0a50d17000, 15072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) =
All from Sys_open
用户态调用Open-->中断,内核查中断向量表 --->Sysopen
https://makelinux.github.io/kernel/map/
• Linux文件是怎么构成的?
• 说明:以ext文件系统为例,由于目录也是一种特殊的文件,广义
的说文件由目录项、inode和数据块三部分组成:
• 目录项:包括文件名和inode table。
• Inode:又称文件索引节点,包含文件的基础信息以及数据块的
指针。
• 数据块:包含文件的具体内容
• 详细到具体的狭义的文件和目录则是:文件=Inode+数据块,目
录=目录项。
速度分层
• 介质存储----实际文件信息
• 内存----存放inode信息(包含文件快照)---很多文件系统在mount
和umount的时机进行快照
• Cache
• 寄存器
VFS
• 包装底层的一切,统一向上接口
• 用户态到内核态buffer传递
__copy_from_user
unsigned long __copy_from_user ( void * to,
const void __user * from,
unsigned long n);
unsigned long __copy_to_user ( void __user * to,
const void * from,
unsigned long n);
读写文件时底层的工作原理
数据流
DMA
Inode—文件的存在形式
inode
• inode包含文件的元信息,具体来说有以下内容:
• * 文件的字节数
• * 文件拥有者的User ID
• * 文件的Group ID
• * 文件的读、写、执行权限
• * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
• * 链接数,即有多少文件名指向这个inode(软连接,硬链接)
• * 文件数据block的位置
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
软链接/硬链接
• Ln –s/ ln
• 文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的
路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打
开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"
软链接"(soft link)或者"符号链接(symbolic link)。这意味着,文
件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:
"No such file or directory"。这是软链接与硬链接最大的不同:文件A
指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接
数"不会因此发生变化
• 文件与目标文件的inode号码相同,都指向同一个inode。inode信息中
有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加
1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。
当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个
inode号码,以及其所对应block区域。
FS_Type,mount -t
超级块
• super_block的含义:
• 超级块代表了整个文件系统,超级
块是文件系统的控制块,有整个文
件系统信息,一个文件系统所有的
inode都要连接到超级块上,可以
说,一个超级块就代表了一个文件
系统。
• 在Mount时候会生成对应的
SuperBlock
• mount /dev/sdb /mnt/alan
• Mount文件到目录
• mount -t iso9660 -o loop matlab.iso /media/cdrom0
当前183上用户目录mount nfs
nas1:/uhome/engsw2/louisd on /u/louisd type nfs
(rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.17.13.11,mountv
ers=3,mountport=635,mountproto=udp,local_lock=none,addr=172.17.13.11)
MTD
MTD,即Memory Technology Device,是内存技术设
备。具体硬件的读写信息等都是挂载到MTD设备上的。
字符设备和块设备的区别在于前者只能被顺序读写,后者
可以随机访问;同时,两者读写数据的基本单元不同
字符设备: 以字节为基本单位,在Linux中,字符设备实现
的比较简单,不需要缓冲区即可直接读写,内核例程和用
户态API一一对应,用户层的Read函数直接对应了内核中
的Read例程,这种映射关系由字符设备的
file_operations维护
块设备: 以块为单位接受输入和返回输出,对这种设备的读
写是按块进行的,其接口相对于字符设备复杂,没有直接
到块设备层,而是直接到文件系统层,然后再由文件系统
层发起读写请求
由于块设备的I/O性能与CPU相比很差,因此,块设备的数
据流往往会引入文件系统的cache机制
注意:MTD设备既非块设备也不是字符设备,但可以同时
提供字符设备和块设备接口来操作
Nand存储形态
• CHIP
• 数据Block
• 快照Block---索引文件信息
• Block
• 数据Page
• 控制Page
• 读写擦除次数信息
• 有效Page信息
• 文件头Block会多带文件信息Page
• Page
• Data
• ECC信息等
可以通过文件系统写,也可以驱动直接写
• 通过文件系统,抽象之后更加便利
Nand物理原理,此处转载,需要详情看原文
https://zhuanlan.zhihu.com/p/414611832
https://www.zhihu.com/zvideo/1515435633933430784?playTi
me=453.5
Nand访问以Page为单位
写的时间会比较长
Chip->Block->Page
CPU或者controller需要根据Nand文档去匹
配设计,然后软件对齐调试
SSD—Nand+Controller
有控制器做好,可以省下很多自我编程的压力
磨损均衡
垃圾回收
坏块管理
ECC(Error Correcting Code,错误检查纠正)
堆叠---封装
EMMC
• 带控制器的Nand
• eMMC ( Embedded Multi Media Card) 采
用统一的MMC标准接口, 把高密度
NAND Flash以及MMC Controller封装在
一颗BGA芯片中。针对Flash的特性,产
品内部已经包含了Flash管理技术,包
括错误探测和纠正,flash平均擦写,
坏块管理,掉电保护等技术。用户无
需担心产品内部flash晶圆制程和工艺
的变化。同时eMMC单颗芯片为主板内
部节省更多的空间。
•
文件系统简述.pptx

Weitere ähnliche Inhalte

Ähnlich wie 文件系统简述.pptx

Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Chun-Min Chang
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in RChun-Ming Chang
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newYiwei Ma
 
南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告Bo-Yi Wu
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程Lixun Peng
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇小新 制造
 
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案cao jincheng
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash ShellLI Daobing
 
Oracle dba必备技能 使用os watcher工具监控系统性能负载
Oracle dba必备技能   使用os watcher工具监控系统性能负载Oracle dba必备技能   使用os watcher工具监控系统性能负载
Oracle dba必备技能 使用os watcher工具监控系统性能负载maclean liu
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developerdianming.song
 
Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)家雋 莊
 
Aix操作系统培训文档
Aix操作系统培训文档Aix操作系统培训文档
Aix操作系统培训文档lwj2012
 
Hadoop+spark實作
Hadoop+spark實作Hadoop+spark實作
Hadoop+spark實作FEG
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOpenSourceCamp
 
Device Driver - Chapter 3字元驅動程式
Device Driver - Chapter 3字元驅動程式Device Driver - Chapter 3字元驅動程式
Device Driver - Chapter 3字元驅動程式ZongYing Lyu
 

Ähnlich wie 文件系统简述.pptx (20)

Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 new
 
IoTDB Ops
IoTDB OpsIoTDB Ops
IoTDB Ops
 
南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇
 
Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案Heartbeat+my sql+drbd构建高可用mysql方案
Heartbeat+my sql+drbd构建高可用mysql方案
 
Overlayfs and VFS
Overlayfs and VFSOverlayfs and VFS
Overlayfs and VFS
 
Rootkit 101
Rootkit 101Rootkit 101
Rootkit 101
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
 
Oracle dba必备技能 使用os watcher工具监控系统性能负载
Oracle dba必备技能   使用os watcher工具监控系统性能负载Oracle dba必备技能   使用os watcher工具监控系统性能负载
Oracle dba必备技能 使用os watcher工具监控系统性能负载
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
 
Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)
 
Aix操作系统培训文档
Aix操作系统培训文档Aix操作系统培训文档
Aix操作系统培训文档
 
Ubuntu
UbuntuUbuntu
Ubuntu
 
Hadoop+spark實作
Hadoop+spark實作Hadoop+spark實作
Hadoop+spark實作
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
Device Driver - Chapter 3字元驅動程式
Device Driver - Chapter 3字元驅動程式Device Driver - Chapter 3字元驅動程式
Device Driver - Chapter 3字元驅動程式
 

文件系统简述.pptx