基本概念 | 官方定义
VFS
(Virtual File System)是文件系统的虚拟层,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层,为用户提供统一的类Unix文件操作接口。由于不同类型的文件系统接口不统一,若系统中有多个文件系统类型,访问不同的文件系统就需要使用不同的非标准接口。而通过在系统中添加VFS层,提供统一的抽象接口,屏蔽了底层异构类型的文件系统的差异,使得访问文件系统的系统调用不用关心底层的存储介质和文件系统类型,提高开发效率。
OpenHarmony
内核中,VFS
框架是通过在内存中的树结构来实现的,树的每个结点都是一个Vnode
结构体,父子结点的关系以PathCache
结构体保存。VFS
最主要的两个功能是:
- 查找节点。
- 统一调用(标准)。
VFS
层具体实现包括四个方面:
- 通过三大函数指针操作接口,实现对不同文件系统类型调用不同接口实现标准接口功能;
- 通过
Vnode
与PathCache
机制,提升路径搜索以及文件访问的性能; - 通过挂载点管理进行分区管理;
- 通过FD管理进行进程间FD隔离等。
三大操作接口
VFS
层通过函数指针的形式,将统一调用按照不同的文件系统类型,分发到不同文件系统中进行底层操作。各文件系统的各自实现一套Vnode操作(VnodeOps
)、挂载点操作(MountOps
)以及文件操作接口(file_operations_vfs
),并以函数指针结构体的形式存储于对应Vnode
、挂载点、File
结构体中,实现VFS
层对下访问。这三个接口分别为:
VnodeOps | 操作 Vnode 节点
MountOps | 挂载点操作
file_operations_vfs | 文件操作接口
PathCache | 路径缓存
PathCache是路径缓存,它通过哈希表存储,利用父节点Vnode的地址和子节点的文件名,可以从PathCache中快速查找到子节点对应的Vnode。当前PageCache仅支持缓存二进制文件,在初次访问文件时通过mmap映射到内存中,下次再访问时,直接从PageCache中读取,可以提升对同一个文件的读写速度。另外基于PageCache可实现以文件为基底的进程间通信。下图展示了文件/目录的查找流程。
挂载点管理
当前OpenHarmony内核中,对系统中所有挂载点通过链表进行统一管理。挂载点结构体中,记录了该挂载分区内的所有Vnode。当分区卸载时,会释放分区内的所有Vnode。
fd管理 | 两种描述符/句柄的关系
Fd(File Descriptor)是描述一个打开的文件/目录的描述符。当前OpenHarmony内核中,fd总规格为896,分为三种类型:
- 普通文件描述符,系统总数量为512。
- Socket描述符,系统总规格为128。
- 消息队列描述符,系统总规格为256。
请记住,在OpenHarmony内核中,在不同的层面会有两种文件句柄::
- 系统文件描述符(
sysfd
),由内核统一管理,和进程描述符形成映射关系,一个sysfd
可以被多个profd
映射,也就是说打开一个文件只会占用一个sysfd
,但可以占用多个profd
,即一个文件被多个进程打开. - 进程文件描述符(
profd
),由进程管理的叫进程文件描述符,内核对不同进程中的fd
进行隔离,即进程只能访问本进程的fd
.举例说明之间的关系:
- 不同进程的相同
fd
往往指向不同的文件,但有三个fd
例外
-
STDIN_FILENO(fd = 0)
标准输入 接收键盘的输入 -
STDOUT_FILENO(fd = 1)
标准输出 向屏幕输出 -
STDERR_FILENO(fd = 2)
标准错误 向屏幕输出sysfd
和所有的profd
的(0,1,2)号都是它们.熟知的printf
就是向STDOUT_FILENO
中写入数据.
- 具体涉及结构体
解读:
- 鸿蒙的每个进程
ProcessCB
都有属于自己的进程的文件描述符files_struct
,该进程和文件系统有关的信息都由它表达. - 搞清楚
files_struct
,fd_table_s
,file_table_s
三个结构体的关系就明白了进度描述符和系统描述符的关系. -
fd_table_s
是由alloc_fd_table
分配的一个结构体数组,用于存放进程的文件描述符
-
file_table_s
记录sysfd
和profd
的绑定关系.fdt->ft_fds[i].sysFd
中的i
就是profd
经常有很多小伙伴抱怨说:不知道学习鸿蒙开发哪些技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?
为了能够帮助到大家能够有规划的学习,这里特别整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线,包含了鸿蒙开发必掌握的核心知识要点,内容有(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、WebGL、元服务、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony驱动开发、系统定制移植等等)鸿蒙(HarmonyOS NEXT)技术知识点。
《鸿蒙 (Harmony OS)开发学习手册》(共计892页)
如何快速入门?
1.基本概念
2.构建第一个ArkTS应用
3.……
开发基础知识:
1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……
基于ArkTS 开发
1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
鸿蒙开发面试真题(含参考答案)
OpenHarmony 开发环境搭建
《OpenHarmony源码解析》
- 搭建开发环境
- Windows 开发环境的搭建
- Ubuntu 开发环境搭建
- Linux 与 Windows 之间的文件共享
- ……
- 系统架构分析
- 构建子系统
- 启动流程
- 子系统
- 分布式任务调度子系统
- 分布式通信子系统
- 驱动子系统
- ……
OpenHarmony 设备开发学习手册
写在最后
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。