资源简介
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数据
相关资源
- proteus_24C08—有注释(proteus里面使用的
- vc编写中国象棋详细源码注释并附有视
- 西门子smart200 485通讯有注释.smart
- Face Alignment by Explicit Shape Regression-注释
- VS2010、VS2012、VS2013代码自动注释插件
- SAML协议交互,实现工程Demo有注释
- VC++ RS232 RS485串口通信源代码_
- 爬取豆瓣电影TOP250程序,包含非常详
- 物业费管理系统源码超详细注释附文
- libSVM的代码详细解析,注释非常详细
- spring源码 附带中文翻译
- ssm开发购物商城web项目代码+详细注释
- linux2.6.11.12内核源码注释
- VisualStudio 2008-2017系统注释中文包,解
- 全国大学生电子设计竞赛_板球控制系
- WOA源码+注释+微修改版本+源论文
- 车牌识别系统原创+详细注释版+少函数
- 24位高精度ad cs5532 程序代码 stm32 已调
- 6968389Linux内核剖析(书籍注释代码)
- 蓝桥杯嵌入式五届到八届完成全部源
- pxcook前端注释工具
- Marlin代码详细注释
- 双目视觉libviso2注释及代码解析,超详
- BPlus B+树 代码与注释
- muduo源码注释非常详细
- 勘智K210 20种物体识别工程添加图像处
- CCS6.0 注释汉字字体太小的解决方法,
- SURF源码(opencv中文注释).rar
- 摄像头Camera图像测试项目及简介——
- 数学建模资源合集论文+源码+注释
评论
共有 条评论