操作系统课程设计 indoe.c流程及代码分析.doc
《操作系统课程设计 indoe.c流程及代码分析.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计 indoe.c流程及代码分析.doc(23页珍藏版)》请在沃文网上搜索。
1、1总体概述22模块整体功能介绍及主要目标221 模块整体功能222 主要目标33头文件的分析331 头文件kernel.h332 头文件sched.h433 头文件system.h434 头文件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()函数分析1058 sync_inodes(void)函数分析1159 _
2、bmap()函数分析11510 bmap()函数分析15511 iput()函数分析15512 get_empty_inode()函数分析17513 get_pipe_inode()函数分析18514 create_block()函数分析18515 iget()函数分析196分析体会及自己所做亮点工作217参考文献23第23页1总体概述实验名称:Linux0.11文件系统源代码分析之I节点管理源代码分析;源代码在源程序中的具体位置:linux/fs/inode.c(电子书Linux内核0。11完全注释赵炯编著的451页)。实验要求:对该源代码进行分析的主要任务是对重要的头文件进行分析、结合代码
3、对实现所用的主要数据结构进行分析、结合代码对主要函数功能进行分析,并画出函数间调用关系结构图或程序流程图。实验预期结果:从形式上来看,程序主要是头文件、数据结构和函数构成,从思路上来看,程序是由数据结构和算法构成,但是现在Linux操作系统源代码,已经给了我们,而且别人也分析的特别的详细了。作为初学者,没有什么经验,我想能把它看懂就不错了,所以最重要的是对程序的各个函数进行分析,画出流程图(主要是通过流程图来分析),在画流程图的过程中,仔细体会每行代码的作用和思路,从而最终看懂整个inode.c程序。2模块整体功能介绍及主要目标21模块整体功能inode.c程序主要涉及文件系统i节点信息的访问
4、和管理。每个文件的创建都会有一个i节点,它包括该文件的所有信息,本程序就是对创建好的文件的i节点进行管理。该程序主要包括处理i节点的iget()、iput()、bmap(),以及其他一些辅助函数。iput()函数的功能与iget()函数正好相反,主要把i节点引用计数值递减1,要是在某一时刻进程不需要持续使用一个i节点时就应该调用iput()函数来使i节点引用值减1,好让内核执行其他一些处理。(详细过程见iput()函数的流程图(图14);iget()函数的功能是从设备上取指定节点号的i节点,处理过程是扫描整个i节点表,来找相应的i节点,当找到后再等待解锁,这时i节点表可能会发生变化,就要再重新
5、扫描i节点表,还要把i节点的引用计数值增1,还要判断是否是安装点,要是的话,就在超级块表中找,找到后,再写盘,再重新扫描整个i节点表。最后返回找到的i节点指针。(详细过程见iget()函数的流程图(图18)。22主要目标 主要分析inode.c程序中的处理i节点的主要处理函数,包括iget()、iput()、bmap(),以及其他一些辅助函数。结合代码对主要函数功能进行分析,并画出函数间调用关系结构图或程序流程图。3头文件的分析31 头文件kernel.hpanic(const char*str);/标准打印(显示)函数printf();/内核专用的打印信息函数,功能与printf()相同pr
6、intk();/往tty上写指定长度的字符串。32 头文件sched.hextern void sleep_on(struct tast_struct*p);/不可中断的等待睡眠extern void interruptible_sleep_on(struct tast_struct*p);/可中断的等待睡眠extern void wake_up(struct tast_struct*p);/明确唤醒睡眠的进程。33 头文件system.h sti();/开中断嵌入汇编宏函数 cli();/关中断34 头文件 fs.hextern struct m_inode inode_tableNR_IN
7、ODE;/定义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 struct buffer_head;/缓冲块头数据结构,在程序中常用bh来表示buffer_head类型的缩写(极为重要)(结构见图1)图1 struct buffer_head结构体42 struct d_inode;/磁盘上的索引节点(i节点)数
8、据结构。43 struct m_inode;/在内存中的i节点结构(结构见图2)图2 struct m_inode结构体44 struct super_block;/内存中磁盘超级块结构(结构见图3)图3 struct super_block结构体45 struct d_super_block;/磁盘上超级块结构46 struct m_inode inode_tableNR_INODE=0,;/内存中I节点表5函数的分析51 read_inode()函数分析511函数头:static void read_inode(struct m_inode*inode);512主要功能:读取指定I节点信息
9、;从设备上读取含有指定I节点信息的I节点盘块,然后复制到指定的I节点结构中。为了确定I节点所在的设备逻辑块号(或缓冲块),必须首先读取相应设备上的超级块,以获取用于计算逻辑块号的每块I节点数信息INODES_PER_BLOCK.在计算出I节点所在的逻辑块号后,就把该逻辑块读入一缓冲块中。然后把缓冲块中相应位置处的I节点内容复制到参数指定的位置处。513流程图:(见图4)锁定该I节点从设备上取得超级块否?YN提示从其他地方读入计算设备逻辑块号复制到indoe指针所指位置处Brelse(bh)unlock_inode(inode)图4 read_inode()函数流程图52 write_inode
10、()函数分析521函数头:static void write_inode(struct m_inode*inode);522功能分析:将i节点信息写入缓冲区中。该函数把参数指定的i节点写入缓冲区相应的缓冲块中,待缓冲区刷新时会写入盘中。523流程图:(见图5)锁定该I节点lock_inode(inode)修改过或设备号0否?YN退出计算设备逻辑块号复制到逻辑块对应该I节点项位置处置缓冲区已修改标志bh-b_dirt=1内容与缓冲区一致bh-b_dirt=0Brelse(bh);unlock_inode(inode)结束图5 write_inode()函数流程图53 sleep_on()函数分析
11、531函数头:void sleep_on(struct tast_struct*p);532功能分析:把当前任务置为不可中断的等待状态,并让睡眠队列列头指针指向当前任务,只有明确地唤醒时才会返回。该函数提供了进程与中断处理程序之间的同步机制。函数参数p是等待任务队列列头指针。指针是含有一个变量地址的变量。这里参数p使用了指针的指针形式*p,这是因为C函数参数只能传值,没有直接的方式让被调用函数改变调用该函数程序中变量的值。但是指针*p指向的目标(这里是任务结构)会改变,因此为了能修改调用该函数程序中原来就是指针变量的值,就需要传递指针*p的指针,即*P。54 wait_on_inode()函数
12、分析541函数头:static inline void wait_on_inode(struct m_inode*inode);542函数的功能:等待指定的i节点可用;如果i节点已被锁定,则将当前任务置为不可中断的等待状态,并添加到该I 节点的等待队列i_wait中,直到该i节点解锁并明确地唤醒本任务。543程序流程图:(见图6)关中断cli()开中断sti()I节点锁定否?NYsleep_on(&inode-i_wait)结束图6 wait_on_inode()函数流程图55 lock_inode()函数分析551函数头:static inline void lock_inode(struc
13、t m_inode*inode);552函数的功能:对指定的I节点上锁;如果I节点已被锁定(即当inode-i_lock=1),则将当前任务置为不可中断的等待状态,并添加到该I节点的等待队列i_wait中。直到该I节点解锁(inode-i_lock=0时)并明确地唤醒本任务。然后对其上锁(inode-i_lock=1)。553流程图:(见图7)关中断cli()I节点锁定否?YNsleep_on(&inode-i_wait)结束开中断sti()Inode-i_lock=1图7 lock_inode()函数流程图56 unlock_inode()函数分析561函数头:static inline v
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统课程设计 indoe.c流程及代码分析 操作系统 课程设计 indoe 流程 代码 分析