【Linux】syscall sys_write流程摸索

这是通过tty进行摸索sys_write的流程。

在前面的博客里,我们可以看到基于内核C语言源代码日志打印,在打印的日志里边包含:日期,时间,当前文件所在代码目录,当前执行函数名,当前文件执行行号,开始我想,都打印这样详细的日志了,看内核源代码流程还不是轻松加愉快?

然而实际上并不是这样子的,为什么呢?

因为我们忽略了多进程。

因为内核在执行代码块的时候,经常会

出栈,执行代码,压栈

出栈,执行代码,压栈

出栈,执行代码,压栈

等等就是所谓一般教科书里的多进程切换。

有的人感觉,这不是很易热吗?

不是的,在实际里边是N多进程在不断切换,如果在打印日志里呈现的话,看过日志打印信息后,一般会生活不能自理。

基于这个缘故,我们在打印日志里添加了进程号信息。

代码合入:

登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/2ccdd79bbfc900030cc75d6bf416b00b15c01978运行日志:

test_log/syslog_pr_info_self_add_pid · r77683962/linux-6.9.0 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/blob/560721f13e713ba5eb9417a0ef5087d0ae83d6ed/test_log/syslog_pr_info_self_add_pid#

有了pid的这个参数后,看日志又方便了些。

虽然这个宏在不断完善,不过后边不知道会不会有其他问题。。。。。

下边这是基于tty的写入文件调用函数流程(老的打印日志)。

13:01:50.654408 A: [fs/read_write.c __do_sys_write 674 DEFAULT]

13:01:50.654408 A: [fs/read_write.c ksys_write 649 DEFAULT] fd: 8

13:01:50.654409 A: [fs/read_write.c file_ppos 618 DEFAULT]

13:01:50.654411 A: [fs/read_write.c ksys_write 661 DEFAULT] pos: 582952, count: 4096

13:01:50.654412 A: [fs/read_write.c vfs_write 585 DEFAULT]

13:01:50.654413 A: [include/linux/fs.h file_start_write 2860 DEFAULT]

13:01:50.654414 A: [include/linux/fs.h sb_start_write 1803 DEFAULT]

13:01:50.654415 A: [include/linux/fs.h call_write_iter 2115 DEFAULT]

13:01:50.654416 A: [drivers/tty/tty_io.c tty_write 1121 DEFAULT]

13:01:50.654417 A: [include/linux/fs.h __sb_start_write 1666 DEFAULT] __sb_start_write

13:01:50.654418 A: [include/linux/percpu-rwsem.h percpu_down_read 50 DEFAULT]

13:01:50.654419 A: [drivers/tty/tty_io.c file_tty_write 1085 DEFAULT]

13:01:50.654420 A: [drivers/tty/tty_io.c iterate_tty_write 974 DEFAULT]

到这张图的时候,599行已经执行了,在603行函数里的打印日志未打印出来,应该是走601行代码了。自己基本功不行了吧。。。

而在日志里看直接跳到call_write_iter这个函数了,中间有点奇怪。

相关推荐
ajassi20003 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源
JosieBook4 小时前
【远程运维】Linux 远程连接 Windows 好用的软件:MobaXterm 实战指南
linux·运维·windows
文档搬运工5 小时前
Linux MInt启动速度的优化
linux
Broken Arrows5 小时前
Linux学习——管理网络安全(二十一)
linux·学习·web安全
Light606 小时前
领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
linux·pdf·可观测性·异步队列·plt转pdf·权限治理·进度查询
羚羊角uou6 小时前
【Linux】命名管道
linux·运维·服务器
IT 小阿姨(数据库)7 小时前
PgSQL监控死元组和自动清理状态的SQL语句执行报错ERROR: division by zero原因分析和解决方法
linux·运维·数据库·sql·postgresql·centos
THMAIL7 小时前
量化股票从贫穷到财务自由之路 - 零基础搭建Python量化环境:Anaconda、Jupyter实战指南
linux·人工智能·python·深度学习·机器学习·金融
逍遥浪子~7 小时前
docker实践(一)
运维·docker·容器
让子弹飞027 小时前
36.2Linux单总线驱动DS18B20实验(详细讲解代码)_csdn
linux·ubuntu·驱动的分离和分层