操作系统课程设计 indoec流程及代码分析

上传人:飞*** 文档编号:32467861 上传时间:2018-02-11 格式:DOC 页数:23 大小:767.50KB
返回 下载 相关 举报
操作系统课程设计 indoec流程及代码分析_第1页
第1页 / 共23页
操作系统课程设计 indoec流程及代码分析_第2页
第2页 / 共23页
操作系统课程设计 indoec流程及代码分析_第3页
第3页 / 共23页
操作系统课程设计 indoec流程及代码分析_第4页
第4页 / 共23页
操作系统课程设计 indoec流程及代码分析_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《操作系统课程设计 indoec流程及代码分析》由会员分享,可在线阅读,更多相关《操作系统课程设计 indoec流程及代码分析(23页珍藏版)》请在金锄头文库上搜索。

1、第 1 页目 录1总体概述 22模块整体功能介绍及主要目标 221 模块整体功能 222 主要目标 33头文件的分析 331 头文件 kernel.h 332 头文件 sched.h 433 头文件 system.h 434 头文件 fs.h44数据结构的分析 45函数的分析 651 read_inode()函数分析 652 write_inode()函数分析 753 sleep_on()函数分析 754 wait_on_inode()函数分析 855 lock_inode()函数分析 956 unlock_inode()函数分析 957 invalidate_inodes()函数分析 105

2、8 sync_inodes(void)函数分析 1159 _bmap()函数分析 11510 bmap()函数分析 15511 iput()函数分析 15512 get_empty_inode()函数分析 17513 get_pipe_inode()函数分析 18514 create_block()函数分析 18515 iget()函数分析 196分析体会及自己所做亮点工作 217参考文献 23第 2 页1总体概述实验名称:Linux0.11 文件系统源代码分析之 I 节点管理源代码分析;源代码在源程序中的具体位置:linux/fs/inode.c(电子书Linux 内核0。11 完全注释赵炯

3、编著的 451 页) 。实验要求:对该源代码进行分析的主要任务是对重要的头文件进行分析、结合代码对实现所用的主要数据结构进行分析、结合代码对主要函数功能进行分析,并画出函数间调用关系结构图或程序流程图。实验预期结果:从形式上来看,程序主要是头文件、数据结构和函数构成,从思路上来看,程序是由数据结构和算法构成,但是现在 Linux 操作系统源代码,已经给了我们,而且别人也分析的特别的详细了。作为初学者,没有什么经验,我想能把它看懂就不错了,所以最重要的是对程序的各个函数进行分析,画出流程图(主要是通过流程图来分析),在画流程图的过程中,仔细体会每行代码的作用和思路,从而最终看懂整个inode.c

4、 程序。2模块整体功能介绍及主要目标21 模块整体功能inode.c 程序主要涉及文件系统 i 节点信息的访问和管理。每个文件的创建都会有一个 i 节点,它包括该文件的所有信息,本程序就是对创建好的文件的 i 节点进行管理。该程序主要包括处理 i 节点的 iget()、iput()、bmap(),以及其他一些辅助函数。第 3 页iput()函数的功能与 iget()函数正好相反,主要把 i 节点引用计数值递减 1,要是在某一时刻进程不需要持续使用一个 i 节点时就应该调用 iput()函数来使 i 节点引用值减 1,好让内核执行其他一些处理。 (详细过程见iput()函数的流程图(图 14)

5、) ;iget()函数的功能是从设备上取指定节点号的 i 节点,处理过程是扫描整个 i 节点表,来找相应的 i 节点,当找到后再等待解锁,这时 i 节点表可能会发生变化,就要再重新扫描 i 节点表,还要把 i 节点的引用计数值增 1,还要判断是否是安装点,要是的话,就在超级块表中找,找到后,再写盘,再重新扫描整个 i 节点表。最后返回找到的 i 节点指针。 (详细过程见 iget()函数的流程图(图 18) ) 。22 主要目标主要分析 inode.c 程序中的处理 i 节点的主要处理函数,包括 iget()、iput()、bmap(),以及其他一些辅助函数。结合代码对主要函数功能进行分析,并

6、画出函数间调用关系结构图或程序流程图。3头文件的分析31 头文件 kernel.hpanic(const char*str);/标准打印(显示)函数printf();/内核专用的打印信息函数,功能与 printf()相同printk();/往 tty 上写指定长度的字符串。第 4 页32 头文件 sched.hextern void sleep_on(struct tast_struct*p);/不可中断的等待睡眠extern void interruptible_sleep_on(struct tast_struct*p);/可中断的等待睡眠extern void wake_up(struc

7、t tast_struct*p);/明确唤醒睡眠的进程。33 头文件 system.hsti();/开中断嵌入汇编宏函数cli();/关中断34 头文件 fs.hextern struct m_inode inode_tableNR_INODE;/定义 i 节点表数组(32 项)extern void truncate(struct m_inode*inode);/刷新 i 节点信息。extern voic sync_inodes(void);/等待指定的 i 节点。extern void brelse(struct buffer_head*buf);/读取指定的数据块。4数据结构的分析41

8、struct buffer_head;/缓冲块头数据结构,在程序中常用 bh 来表示 buffer_head 类型的缩写(极为重要) (结构见图 1)第 5 页b _ d a t ab _ b l o c k n rb _ l o c kb _ d e vb _ d i r tb _ c o u n t指向 该缓冲块中数据 区的指针块号使用该块的 用 户数已 修改( 脏) 标志缓冲 区是否被锁定数据 源设备号其 它省略图 1 struct buffer_head 结构体42 struct d_inode;/磁盘上的索引节点(i 节点)数据结构。43 struct m_inode;/在内存中的

9、i 节点结构(结构见图 2)i _ l o c ki _ w a i ti _ p i p ei _ d e vi _ d i r ti _ c o u n t锁 定 标志等待该I 节点的进程引用 计数值已 修改( 脏) 标志管 道标志设备 号其 它省略图 2 struct m_inode 结构体44 struct super_block;/内存中磁盘超级块结构(结构见图 3)s _ t i m es _ r d _ o n l ys _ l o c ks _ d e vs _ d i r ts _ i m o u n t修 改 时间只读标 志被安装到 的i 节 点已 修改( 脏) 标志被 锁 定标志超级块所在 的设 备号其 它省略图 3 struct super_block 结构体

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号