资源简介
linux内核系统下的ROMFS文件系统代码(inode.c)即节点部分的注释
代码片段和文件信息
/*
* linux/fs/inode.c
*
* (C) 1991 Linus Torvalds
*/
#include // 字符串头文件。主要定义了一些有关字符串操作的嵌入函数。
#include // 文件状态头文件。含有文件或文件系统状态结构stat{}和常量。
#include // 调度程序头文件,定义了任务结构task_struct、初始任务0 的数据,
// 还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。
#include // 内核头文件。含有一些内核常用函数的原形定义。
#include // 内存管理头文件。含有页面大小定义和一些页面释放函数原型。
#include // 系统头文件。定义了设置或修改描述符/中断门等的嵌入式汇编宏。
struct m_inode inode_table[NR_INODE] = { {0} }; // 内存中i 节点表(NR_INODE=32 项)。
static void read_inode (struct m_inode *inode);
static void write_inode (struct m_inode *inode);
/* 等待指定的i 节点可用 */
// 如果i节点已被锁定则将当前任务置为不可中断的等待状态。直到该i节点解锁
static inline void wait_on_inode (struct m_inode *inode)
{
cli ();
while (inode->i_lock) // 如果i 节点已被锁定
sleep_on (&inode->i_wait); // 不可中断的等待状态
sti ();
}
//// 对指定的i节点上锁锁定指定的i节点
// 如果i节点已被锁定则将当前任务置为不可中断的等待状态。直到该i节点解锁然后对其上锁。
/* 对指定的i 节点上锁 */
static inline void lock_inode (struct m_inode *inode)
{
cli ();
while (inode->i_lock)
sleep_on (&inode->i_wait);
inode->i_lock = 1; // 置锁定标志。
sti ();
}
//// 对指定的i节点解锁
// 复位i节点的锁定标志并明确地唤醒等待此i节点的进程。
/* 对指定的i 节点解锁 */
static inline void unlock_inode (struct m_inode *inode)
{
inode->i_lock = 0; // 复位i 节点的锁定标志
wake_up (&inode->i_wait); // 唤醒等待此i 节点的进程
}
//// 释放内存中设备dev的所有i节点。
// 扫描内存中的i节点表数组如果是指定设备使用的i节点就释放之。
/* 释放内存中设备dev 的所有i 节点 */
void invalidate_inodes (int dev)
{
int i;
struct m_inode *inode;
inode = 0 + inode_table; // 让指针首先指向i节点表指针数组首项
for (i = 0; i < NR_INODE; i++ inode++) // 扫描i节点表指针数组中的所有i节点
{
wait_on_inode (inode); // 等待该i节点可用(解锁)
if (inode->i_dev == dev) // 如果是指定设备的i节点则
{
if (inode->i_count) // 如果其引用数不为0则显示出错警告
printk (“inode in use on removed disk\n\r“);
inode->i_dev = inode->i_dirt = 0; // 释放该i节点(置设备号为0等)
}
}
}
//// 同步所有i节点。 // 同步内存与设备上的所有i节点信息。
/* 同步内存(inode数组)与设备上的所有i 节点信息 */
void sync_inodes (void)
{
int i;
struct m_inode *inode;
inode = 0 + inode_table; // 让指针首先指向i节点表指针数组首项
for (i = 0; i < NR_INODE; i++ inode++) // 扫描i节点表指针数组
{
wait_on_inode (inode); // 等待该i节点可用(解锁)
if (inode->i_dirt && !inode->i_pipe) // 如果该i节点已修改且不是管道节点
write_inode (inode); // 写盘
}
}
//// 块映射处理操作。(block位图处理函数bmap - block map)
// 参数inode - i节点指针block - 数据块号create - 创建标志
// 如果创建标志置位则在对应逻辑块不存在时就申请新磁盘块
// 返回block数据块对应在设备上的逻辑块号
/* 文件数据块映射到盘块的处理操作,可能需要建立新的逻辑块 */
static int _bmap (struct m_inode *inode int block int create)
{ // inode 文件的i 节点;block (相对于文件而言)文件中的数据块号;create 创建标志
// block是相对于文件而言,但是i_zone[block]则是相对于设备而言的。相对于文件的
// block可能不止i_zone数组大小,所以如果block的值大于7时,需要使用间接来寻址。
// 如
- 上一篇:酷炫服装语音计算器带捆条,缩水计算
- 下一篇:idl读取netcdf数据
相关资源
- 51单片机-双机串行通信注释版
- LDPC 编码,随机生成 H 矩阵,LLR-BP算法
- GrabCut-opencv源码注释
- QT小游戏《2048》源码含大量注释
- ABC-SVM算法,详细中文注释
- STC单片机舵机PWM控制教程源码,教程
- 课程设计题七:交通灯控制器.zip
- Linux2048详细注释版-验证可运行
- LCX 源码注释 解析
- 还有比这更详细的ABAQUS UMAT注释吗?
- 邻接表图遍历的演示注释比较详尽,
- linux内核 0.11版本源码 带中文注释
- DSP 基2 FFT 算法详细代码带注释
- 机器学习实战之02-k近邻算法全部源代
- keilc51 startup.a51中文注释
- MSP430F6638时钟配置,注释清晰,可移植
- 五层电梯源码及注释
- 基于linux的飞鸽传书软件源代码有注释
- 开源三轴无刷云台算法STM32程序带注释
- poi基于Excel模板导入导出注释详细,绝
- SGI STL源代码侯捷中文注释版
- 数据结构课程设计-通讯录(双链表全
- SwfUpload(文件批量上传,完美运行,
- 基于stm32、0.96寸OLED实现的贪吃蛇小游
- VC Comment注释插件
- DEV ChartControl 图表控件代码附注释
- NSGA-II带有详细注释及相关论文.rar
- 基于51单片机的音乐播放器,源码详细
- 元学习论文Optimization as a model f
- GRBL中文翻译代码中文注释
评论
共有 条评论