月度归档: 2026 年 4 月

15 篇文章

thumbnail
Linux内核(6.1源码阅读)-注册&挂载文件系统
注册&挂载文件系统 本文是笔者在学习如何自己写一个文件系统过程中学习的内核虚拟文件系统VFS对于注册文件系统和挂载文件系统的笔记,如果有讲的不好的地方请见谅,笔者对于这块只能是有一个大致流程思路和映像,对于具体函数间的调度还不是很熟 注册文件系统 注册文件系统操作为: 1.定义并初始化一个file_system_type结构体 static…
thumbnail
Linux内核-文件系统-虚拟文件系统(VFS)
虚拟文件系统(VFS) 在linux设备上有很多类型的文件如:字符型设备,块设备,管道,链接,目录,普通文件 如果对每种类型都写一遍专属于该类类型的读写函数,那么整个设计会越来越臃肿难以管理,在linux中采用虚拟文件系统(VFS)来提供一类统一的接口访问不同的设备 struct file结构体 struct file { unsigned sho…
thumbnail
Linux内核-文件系统-文件系统目录和文件操作
文件系统目录和文件操作 文件系统namei.c源文件是用来处理文件系统名和节点关系,文件的一些操作如打开关闭等 一个文件只对应一个inode 目录项结构体 struct dir_entry { unsigned short inode; // i 节点 char name[NAME_LEN]; // 文件名 }; inode:这个文件/子目…
thumbnail
Linux内核-文件系统-超级块操作
文件系统-超级块操作 文件系统的超级块操作主要是在super.c这个源文件中 这个文件的作用主要有: 对设备的超级块进行操作(获取,读取,释放) 因为超级块是设备文件系统的映射,所以超级块的操作关系到设备文件系统的操作,包含文件系统的加载,卸载,挂载等 根文件系统的加载 get_super //// 取指定设备的超级块。返回该超级块结构指针 str…
thumbnail
Linux内核-文件系统-inode相关操作
文件系统-inode相关操作 inode结构体 struct m_inode { unsigned short i_mode;// 文件类型和属性(rwx 位) unsigned short i_uid; // 用户 id(文件拥有者标识符) unsigned long i_size;// 文件大小(字节数) unsigned long i_mti…
thumbnail
Linux内核-文件系统-位图操作
Linux内核-文件系统-位图操作 inode节点概念 文件与磁盘的映射 文件系统概念 不管读取什么磁盘上的资源,都是先getblk(获取该资源对应的设备和块号的高速缓冲区),然后在bread(确认有效数据的高速缓冲区),最后再进行区域内存的拷贝 一个设备的文件系统框架 所有块的大小都是固定的,称为盘块或磁盘块 扇区:块设备上一个长度为512B的数…
thumbnail
Linux内核-文件系统-高速缓冲区
文件系统-高速缓冲区 文件系统基本概念 磁盘中要有目录的映射,我们把磁盘分成盘片,这里的“盘片”指的就是逻辑划分出的独立文件系统区域,也就是我们今天说的 C盘、D盘。 每一个盘片都有一个文件系统的子系统(章节目录) 引导块:用来引导设备的,引导块可以为空,但一定要空开,因为保持格式的一致性 超级块:该文件子系统的描述符(记录该盘片的逻辑块位图的地址…
thumbnail
Linux内核-文件系统启动流程
文件系统启动流程 内核打开文件系统流程大致分析 这里以linux3.4.2内核为例,大致看一下流程是如何进行的 打开控制台 //init/main.c kernel_init() /* Open the /dev/console on the rootfs, this should never fail */ if (sys_open((const…
thumbnail
Linux内核-内核信号处理函数
内核信号处理函数 sigaction结构体 // 下面是 sigaction 的数据结构。 // sa_handler 是对应某信号指定要采取的行动。可以是上面的 SIG_DFL,或者是 SIG_IGN 来忽略 // 该信号,也可以是指向处理该信号的一个指针。 // sa_mask 给出了对信号的屏蔽码,在信号程序执行时将阻塞对这些信号的处理。 /…
thumbnail
Linux内核-操作系统启动引导
操作系统启动引导 操作系统的起点: 磁盘引导程序,需要将内核等移入内存进行运行,并初始化多种模块和硬件 终点:运行第一个应用程序,系统的根文件系统 大致流程 BIOS/bootloader 由PC机的BIOS(0xFFFF0是BIOS存储的总线地址)把bootsect.s从某个固定的地址拿到了内存中某个固定的地址(0x90000),并且进行了一系列…