Linux内核-文件系统和虚拟文件系统

后续会出代码分析

1.文件系统的概述

1.1 文件系统是磁盘管理的目录

1.2 是Linux中操作所有硬件设备的接口

1.3 有系统的功能机制

文件系统也叫应用程序,写应用程序不仅要存在文件系统中,并且还要使用文件系统的诸多功能。

1.4 文件系统的使用

        1.4.1 板卡上电后首先由UBOOT启动初始化板卡,将Linux内核移到内存中并运行.

        1.4.2 由Linux内核自行做初始化等操作,挂载了第一个应用程序(根文件系统)

        1.4.3 根文件系统会提供磁盘管理服务,glibc 设备节点 配置文件 应用程序 shell命令

宏观:

文件系统包括的重要部分:

        1. 标准库,glibc opengl 等等

        2. 配置文件 /etc/init.d/rcS 想要开机运行什么软件 载入什么画面 执行什么命令都在里面

        3.设备节点  /dev/console 控制台节点

        4.架构程序 对多种服务和功能进行系统接口封装

        5. SEHLL的实现 所有的shell命令都在文件系统中

2.文件系统的启动( busybox)

UBOOT给kernel传入tagglist类型参数,kernel给busybox传入参数。接收之后进行解析和应用。

3.Linux中使用文件系统的组成部分

3.1 有关于Linux中高速缓冲区的管理程序。 buffer.c

3.2 文件系统的底层通用函数(对于硬盘的读写 分配 释放等,对于目录的节点管理 inode 内存与磁盘的映射)

3.3 对文件数据进行读写操作模块(VFS:虚拟文件系统 硬件驱动和文件系统的关系 pipe 块设备(磁盘 光驱等))

3.4 文件系统与其他程序的接口实现(fopen 关闭 创建等使用文件的调用方式)

4.文件系统的基本概念再分析

磁盘中要有目录的映射,我们把磁盘分成盘片,每一个盘片都有一个文件系统的子系统(章节目录)

引导块:用来引导设备的,引导块可以为空

超级块:是文件子系统的描述符(记录该盘片的逻辑块位图的地址,i节点位图的地址,通过设备号可以获取

逻辑块位图:其每一位对应一个逻辑块的使用情况,对应逻辑块如果使用了则逻辑位图对应位置1

i节点位图:其每一位对应一个i节点的使用情况,对应i节点如果使用了则i节点位图上的改byte位置1

逻辑块: 用来存储数据的数据存储单元

i node节点:目录 与 磁盘的桥接 文件的属性描述(类似于文件的名片)与磁盘一对一映射

流程:先通过设备号获取到超级块再获取逻辑块位图找到相关逻辑块,再通过读写函数进行读取或者写入

5.高速缓冲区

高速缓冲区是用户程序和磁盘交互的媒介

高速缓冲区的管理要素:

5.1 映射关系(内存与磁盘之间的映射关系)

5.2 应用程序与高速缓冲区的交互API

5.3 磁盘的交互API

5.4 高速缓冲区的管理系统(循环链表+哈希表+单链表)

5.5 高速缓冲区的工作流程

        高速缓冲区中存储着对应的块设备驱动的数据 当从块设备中读取数据的时候,OS首先会从高速缓冲区中进行检索,如果没有则从块设备中读出数据,如果有并且是最新的,就直接和该高速缓冲区进行数据交互。

        当需要把数据写到块设备中时,系统会在高速缓冲区中申请一块空闲的缓冲块来临时存放这些数据。以至于什么时候把数据写到设备中去,则是通过设备数据同步实现的。

6.虚拟文件系统VFS

概念:文件是有多种类型的 b c p s l - d 但是都可以用open read ioctl lseek来操作。这里的通用性就是由虚拟文件系统来完成。

-------------------------------------------------

内核文件fs

1.inode.c

        存放了文件的各种信息 比如文件类型 文件权限 最后修改时间等等

2.buffer.c 高速缓存区

        高速缓冲区是文件系统访问块设备钟的数据的必经要道。为了提高系统性能,内核就在内存中开辟了一个高速数据缓冲区,并将其划分成一个个与磁盘数据块大小相等的缓存块来使用和管理。

3.bitmap.c inode.c namei.c super.c 文件系统底层函数

        bitmap.c 程序包括对i节点位图和逻辑块位图进行释放和占用处理函数。

         inode.c

        namei.c 程序主要包括函数namei() 将给定文件路径映射到其节点

        super().c 专门用于处理文件系统超级块

4.block_dev.c  file_dev.c char_dev.c pipe.c read_write.c 文件中数据访问操作

        前4个文件的代码共同实现了read_write.c中的read()和write()系统调用 

        block_dev.c 用于读写块设备特殊文件中的数据

        file_dev.c 用于访问一般的正规文件

        pipe.c 文件中实现了管道读写函数

5.open.c 文件操作相关的系统调用

        主要有文件的创建,打开,关闭,文件宿主和属性的修改等等

6.fcntl.c 文件控制系统调用和文件句柄(描述符)复制系统调用

7.stat.c 文件用于实现取文件状态信息系统调用

未完待续 。。后续将完成代码分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值