linux内核分析第四周学习笔记
linux内核分析第四周学习笔记
标签(空格分隔): 20135328陈都
陈都 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
#
上周回顾:
- installing 如何安装内核源代码
- make mrproper 清理安装时生成的中间代码
启动Linux内核的三个参数:
- kernel
- initrd
- root所在分区、目录
gdb (gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
(gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后
start_kernel:包括很多模块的初始化。
通过查询了解和使用man查看open的说明我了解到
open系统调用的服务例程是sys_open()函数,它接受三个参数:要打开文件的路径名filename, 访问模式的表示flags和文件权限掩码mode。在内核中,sys_open实际调用do_sys_open函数来完成所有操作。
do_sys_open主要执行如下操作:
1,通过getname()从进程地址空间获取该文件的路径名
2,调用get_unused_fd_flags(flags)函数从current->files结构中分配一个空闲的fd。
3,调用do_filep_open(dfd, pathname, flags, mode, 0)找到文件对象的指针struct file* f。
4,调用fd_install(fd, f),将f与fd关联起来。实际是将f保存在current->files->fdtab->fd数组的第fd位置处。
do_filep_open函数的主要功能,就是通过路径名来分配并填充这个文件对应的文件对象。
do_filep_open(dfd, pathname, flags, mode, acc_mode)函数主要执行如下操作:
1,设置一堆访问模式标志
2,调用get_empty_filep()函数从名为filp_cachep的slab缓存中分配一个struct file*的文件对象。
3,如果flags中有O_CREATE标志,跳到,否则到4
4,调用do_path_lookup(dfd, pathname, flags, &nd)做目录查找,将查找结果填充到struct nameidata *nd中。还记得目录查找么?见这里
5,调用finish_open(nd, flags, mode)做一些合法性验验证并从nd->intent.open.file中获取到struct file* filep
6,调用release_open_intent(nd)做一些清理工作。主要是减少nd->intent.open.file中的一些引用计数。
7,返回filep
8,到这一步说明flags中有O_CREATE标志,需要在目录查找过程中逐级创建对应的目录和文件,这一步依次调用path_init_rcu(), path_walk_rcu()和path_finish_rcu()完成创建文件的目录查找工作,最终依然是将查找结果填充到struct nameidata *nd中。(在标准的目录查找do_path_lookup()的实现中,主干流程也是依次调用着三个函数做查找工作)
9,调用do_last(&nd, &path, flags, acc_mode, mode, pathname)函数获取最终的struct file filep结构。在这个函数中,内核会根据nd->last_type做不同的处理,对于普通文件,会调用finish_open(nd, flags, mode)做一些合法性验验证并从nd->intent.open.file中获取到struct file filep
10,调用release_open_intent(nd)做一些清理工作。主要是减少nd->intent.open.file中的一些引用计数。
11,返回filep
内核源代码中涉及到sys_open实现的文件主要有fs/open.c fs/namei.c fs/compat.c fs/file.c fs/file_table.c等


linux内核分析第四周学习笔记的更多相关文章
- 20135320赵瀚青LINUX内核分析第四周学习笔记
		赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周的内容主要是讲解系 ... 
- Linux内核分析——第四周学习笔记20135308
		第四周 扒开系统调用的“三层皮” 一.内核.用户态和中断 (一)如何区分用户态.内核态 1.一般现在的CPU有几种不同的指令执行级别 ①在高级别的状态下,代码可以执行特权指令,访问任意的物理地址,这种 ... 
- Linux内核分析——第四周学习笔记
		扒开系统调用的三层皮[上] 前言:以下笔记除了一些讲解视频中的概念记录,图示.图示中的补充文字.总结.分析.小结部分均是个人理解.如有错误观点,请多指教! 补充:[系统调用的参数传递方法]视频中讲解简 ... 
- LINUX内核分析第四周学习总结——扒开系统调用的“三层皮”
		LINUX内核分析第四周学习总结--扒开系统调用的"三层皮" 标签(空格分隔): 20135321余佳源 余佳源 原创作品转载请注明出处 <Linux内核分析>MOOC ... 
- Linux内核分析第二周学习笔记
		linux内核分析第二周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ... 
- linux内核分析第一周学习笔记
		linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ... 
- Linux内核分析第四周学习总结——系统调用的工作机制
		Linux内核分析第四周学习总结--系统调用的工作机制 内核态 执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级. 用户态 执行级别低,只能访问0x0000 ... 
- LINUX内核分析第四周学习总结——扒开应用系统的三层皮(上)【转】
		转自:http://www.cnblogs.com/lalacindy/p/5276874.html 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://moo ... 
- Linux内核分析第四周学习总结
		朱国庆+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 扒开系统调用的三层皮 ... 
随机推荐
- SSL/TLS Diffie-Hellman Modulus <= 1024 位 (LogJam) 使用2048位或更高的Diffie-Hellman
			1.http://slproweb.com/products/Win32OpenSSL.html 下载 SSL 并安装 2.设置环境变量,例如工具安装在C:\OpenSSL-Win64,则将C:\O ... 
- 解决The valid characters are defined in RFC 7230 and RFC 3986错误问题
			分析原因: 导致上述问题是因为tomcat自tomcat 8.0.35版本之后对URL参数做了比较规范的限制,必须遵循RFC 7230 and RFC 3986规范,对于非保留字字符(json格式的请 ... 
- 【洛谷】【单调栈】P4333 [COI2007] Patrik
			--接上一篇题解,[洛谷][单调栈]P1823音乐会的等待 关于题目大意在上一篇题解里已经说清楚了,这里不再多阐述 想看题目->戳这里 [算法分析:] 在对元素a进行判断时,如果它与栈顶元素相等 ... 
- Effective MySQL之SQL语句最优化——读书笔记之二
			第二章,基本的分析命令 本章简单介绍了如下几个基本的MySQL分析命令: EXPLAIN命令 生成QEP不是确定的 QEP不会绑定给一个SQL或者存储过程,而是在执行的时候根据实际情况生成 可以通过Q ... 
- 有crontab中的脚本不执行,需要在脚本里面export各种环境变量
			[oracle@sta ~]$ vi .bash_profile # .bash_profile # Get the aliases and functionsif [ -f ~/.bashrc ]; ... 
- OpenCV——直方图计算、寻早最值位置和对比匹配(判断两幅图的相似程度)
- Python2.7-re模块
			re模块 1.正则表达式的语法 '.' 匹配任意字符,若指定了re.S,则可以匹配换行符'^' 匹配行首,即字符串的开头,若指定了re.M,会自动匹配每行开头'$' 匹配行尾,同上'*' 匹配大于等于 ... 
- Python2.7-stat
			stat模块,用于解释 os.stat(),os.lstat(),os.fstat() 返回的结果,定义了许多表示文件或路径的各个状态的常数和测试各个状态的函数具体参考 官方文档 和 http://w ... 
- Jmeter—控件
			Jmeter有许多控件,可以在我们模拟测试请求时使用. Jmeter共有这8类控件: 配置元件—Http请求默认值 作用:仅设置一次目标URL服务器地址,之后不需要每次请求都写完整的,仅写相对地址就可 ... 
- 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)
			补充: 程序优化 为避免普通发送和中断发送造成冲突(造成死机,复位重启),printf修改为中断发送 写这篇文章的目的呢,如题目所言,我承认自己是一个程序猿.....应该说很多很多学单片机的对于... ... 
