移动操作系统内核分析--启动内核线程并打印信息

时间:2024-05-22 15:08:29

完成目标

在实验二的系统调用处理函数中启动一个内核线程,在线程中打印以下信息:

- 执行系统调用的进程的ID

- 分行打印系统中所有内核线程的信息:线程ID、父进程ID、运行状态、名称、用户ID(每一行打印一个内核线程的信息),代码逻辑及编码风格

 

一、实现实验效果的源代码图:(在sys_x86_64.c 里面修改)

代码路径:path/to/linux/arch/x86/kernel/sys_x86_64.c

移动操作系统内核分析--启动内核线程并打印信息

二、启动虚拟机并显示效果

移动操作系统内核分析--启动内核线程并打印信息

移动操作系统内核分析--启动内核线程并打印信息

三、存在的隐患(我还没有修改,哈哈哈哈)

1. cred->uid是一个kuid_t类型的结构体,不能直接当作整型值的打印,应使用其val成员;或用__kuid_val(task->cred->uid).

2. 系统调用中给线程传参数做得很好,但是,这里有竞争条件出现,如果执行系统调用的进程先于ThreadsInfo线程退出,在线程中访问其task_struct的pid成员有危险。如果在系统调用中等待ThreadsInfo线程完成其工作后再退出(可以用内核同步一课中所讲的完成变量来同步),那么这个实现就完美了。