【Linux】学习记录_6_存储设备文件系统

6 存储设备文件系统

6.1 存储设备文件系统

文件系统:FAT32、NTFS、exFAT以及 Linux下常用的ext2、ext3和ext4。为了解决如何高效管理存储器空间的问题而诞生的

文件系统在存储介质上建立了一种组织结构,包括操作系统引导区、目录和文件。不同的管理理念引出了不同的文件系统标准,上述的 FAT32、 NTFS、 exFAT、ext2/3/4就是指不同类型的标准,除此之外,还有专门针对NAND类型设备 的文件系统jffs2、yaffs2等等。

6.2 伪文件系统

伪文件系统存在于内存中,通常不占用硬盘空间,以文件的形式向用户提供了访问系统内核数据的接口。用户和应用程序可以通过访问这些数据接口,得到系统的信息,而且内核允许用户修改内核的某些参数。

6.2.1 procfs文件系统

procfs是“process filesystem”的缩写,也被称为进程文件系统,通常自动挂载在根目录下的/proc文件夹。procfs为用户提供内核状态和进程信息的接口。

文件名作用
pid**表示的是进程的 PID 号,系统中当前运行的每一个进程都有对应的一个目录,用于记录进程所有相关信息。对于操作系统来说,一个应用程序就是一个进程
self该文件是一个软链接,指向了当前进程的目录,通过访问/proc/self/目录来获取当前进程的信息,就不用每次都获取pid
thread-self该文件也是一个软链接,指向了当前线程,访问该文件,等价于访问“当前进程pid/task/当前线程tid”的内容。。一个进程,可以包含多个线程,但至少需要一个进程,这些线程共同支撑进程的运行。
version记录了当前运行的内核版本,通常可以使用命令“uname –r”
cpuinfo记录系统中CPU的提供商和相关配置信息
modules记录了目前系统加载的模块信息
meminfo记录系统中内存的使用情况,free命令会访问该文件,来获取系统内存的空闲和已使用的数量
filesystems记录内核支持的文件系统类型,通常mount一个设备时,如果没有指定文件系统并且它无法确定文件系统类型时,mount会尝试包含在该文件中的文件系统,除了那些标有“nodev”的文件系统。
6.2.2 sysfs文件系统

sysfs通常会自动挂载在根目录下的sys文件夹。 sys目录下的文件/文件夹向用户提供了一些关于设备、内核模块、文件系统以及其他内核组件的信息, 如子目录block中存放了所有的块设备,而bus中存放了系统中所有的总线类型, 有i2c,usb,sdio,pci等。下图中的虚线表示软连接, 可以看到所有跟设备有关的文件或文件夹都链接到了device目录下,类似于将一个大类, 根据某个特征分为了无数个种类,这样使得/sys文件夹的结构层次清晰明了。

未找到图片08|

文件名作用
block记录所有在系统中注册的块设备,这些文件都是符号链接,都指向了/sys/devices目录。
bus该目录包含了系统中所有的总线类型,每个文件夹都是以每个总线的类型来进行命名。
class包含了所有在系统中注册的设备类型,如块设备,声卡,网卡等。文件夹下的文件同样也是一些链接文件,指向了/sys/devices目录。
devices包含了系统中所有的设备,到跟设备有关的文件/文件夹,最终都会指向该文件夹。
module该目录记录了系统加载的所有内核模块,每个文件夹名以模块命名
fs包含了系统中注册文件系统

概括来说,sysfs文件系统是内核加载驱动时,根据系统上的设备和总 线构成导出的分级目录,它是系统上设备的直观反应,每个设备在sysfs下都有 唯一的对应目录,用户可以通过具体设备目录下的文件访问设备。

6.3 虚拟文件系统(Virtual File System,VFS)

不同的文件系统标准,需要使用不同的程序逻辑实现访问, 对外提供的访问接口可能也稍有差异。但是我们在编写应用程序时, 大都可以通过类似fopen、fread、fwrite等C标准库函数访问文件,这都是虚拟文件系统的功劳。虚拟文件系统屏蔽了各种硬件上的差异以及具体实现的细节,为所有的硬件设备提供统一的接口, 从而达到设备无关性的目的,同时文件管理系统还为应用层提供统一的API接口。

未找到图片09|

  • 应用层指用户编写的程序,如我们的hello.c。

  • GNU C库(glibc)即C语言标准库,例如在编译器章节介绍的libc.so.6文件, 它包含了printf、malloc,以及fopen、fread、fwrite等文件操作函数。

  • 用户程序和glibc库都是属于用户空间的,本质都是用户程序。

  • 应用层的程序和glibc可能会调用到“系统调用层(SCI)”的函数,这些函数 是Linux内核对外提供的函数接口,用户通过这些函数向系统申请操作。例如,C库 的printf函数使用了系统的vsprintf和write函数,C库的fopen、fread、fwrite分别 调用了系统的open、read、write函数,具体可以阅读glibc的源码了解。

  • 由于文件系统种类非常多,跟文件操作相关的open、read、write等函数经过虚 拟文件系统层,再访问具体的文件系统。

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值