实验内容

(1)设计一个模块,要求列出系统中所有内核线程的程序名、PID、进程状态、进程优先级、父进程的PID。
(2)设计一个带参数的模块,其参数为某个进程的PID号,模块的功能是列出该进程的家族信息,包括父进程、兄弟进程和子进程的程序名、PID号及进程状态。

实验一

前排提醒
可能问到的问题:
①输出的进程号是什么含义(1和1026分别代表什么状态)?
调研task_struct结构体
看↑这篇文章就够了,1026表示1024+2,其中1024是系统无可运行进程的状态
②优先级的含义(为什么输出100和120,分别是什么含义)?
进程优先级
看↑这篇文章就够了,0-99是实时进程,100-139是普通进程
③p->mm的含义
对于内核线程,mm为NULL;对于普通线程,mm为指向虚拟地址空间的用户空间

module1.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/sched/signal.h>// 初始化函数
static int hello_init(void)
{struct task_struct *p;  //Linux内核的进程控制块是task_struct结构体,所有运行在系统中的进程都以task_struct链表的形式存在内核中printk(KERN_ALERT"            名称\t进程号\t状态  \t优先级\t父进程号\t");for_each_process(p)  //for_each_process是一个宏,在sched.h里面定义: 是从init_task开始遍历系统所有进程,init_task是进程结构链表头。{if(p->mm == NULL){ //对于内核线程,mm为NULLprintk(KERN_ALERT"%16s\t%-6d\t%-6ld\t%-6d\t%-6d\n",p->comm,p->pid, p->state,p->normal_prio,p->parent->pid);}}return 0;
}
// 清理函数
static void hello_exit(void)
{printk(KERN_ALERT"goodbye!\n");
}// 函数注册
module_init(hello_init);
module_exit(hello_exit);  // 模块许可申明
MODULE_LICENSE("GPL");  

Makefile

obj-m := module1.o
KDIR:= /lib/modules/$(shell uname -r)/build
PWD:= $(shell pwd)default:$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:$(MAKE) -C $(KDIR) M=$(PWD) clean

实验二

前排提醒
可能问到的问题:
①list for each:看书p343就行
②list entry :看书p343就行
③if(sibling_p->pid != current_p->pid)为什么要用这句:因为它自己不是自己的兄弟进程

module2.c

#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/sched.h>
#include <linux/moduleparam.h>static pid_t pid=1;module_param(pid,int,0644);static int test2_init(void) {struct task_struct *current_p;struct task_struct *parent_p;struct task_struct *sibling_p;struct task_struct *children_p;struct list_head *sibling_head;struct list_head *children_head;current_p = pid_task(find_vpid(pid), PIDTYPE_PID);parent_p = current_p->parent;printk("current:%-21s%-10d%-10ld\n", current_p->comm, current_p->pid, current_p->state);if(parent_p == NULL) {printk("No Parent!\n");}else {     printk("Parent:%-22s%-10d%-10ld\n", parent_p->comm, parent_p->pid, parent_p->state);}list_for_each(sibling_head, &parent_p->children) {sibling_p = list_entry(sibling_head, struct task_struct, sibling);if(sibling_p->pid != current_p->pid) {printk("Sibling:%-20s%-10d%-10ld\n", sibling_p->comm, sibling_p->pid, sibling_p->state);}}list_for_each(children_head, &current_p->children) {children_p = list_entry(children_head, struct task_struct, sibling);printk("Children:%-20s%-10d%-10ld\n", children_p->comm, children_p->pid, children_p->state);}return 0;
}static void test2_exit(void) {printk(KERN_ALERT"goodbye!\n");
}module_init(test2_init);
module_exit(test2_exit);MODULE_LICENSE("GPL");

Makefile

obj-m:=module2.o
KDIR:= /lib/modules/$(shell uname -r)/build
PWD:= $(shell pwd) default:$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:$(MAKE) -C $(KDIR) M=$(PWD) clean

杭电(杭州电子科技大学)操作系统实验二:Linux内核模块编程相关推荐

  1. 杭电操作系统实验二 --- Linux 内核模块编程(arm架构华为云)

    一.题目介绍 掌握Linux 内核模块的基本概念 ·阅读教材7.3.2节Linux内核模块简介 ,网上查找资料,了解Linux内核模块的基本概念. ·阅读教材7.3.3内核模块编程基础 ,网上查找资料 ...

  2. 杭电操作系统实验二---linux内核模块编译(完整实验报告)

    一 题目介绍 题目内容: (1)当模块被载入内核时会向系统日志文件中写入"hello,world":当被卸载时,会向系统写入"goodbye". (2)设计一个 ...

  3. 操作系统实验:Linux内核模块编程

    实验内容 (1)设计一个模块,要求列出系统中所有内核线程的程序名.PID.进程状态.进程优先级.父进程的PID. (2)设计一个带参数的模块,其参数为某个进程的PID号,模块的功能是列出该进程的家族信 ...

  4. 杭电和宁波大学计算机,浙江工业大学VS杭州电子科技大学,谁更好点?

    浙江工业大学和杭州电子科技大学都是浙江省首批重点建设的高校,而且两者都是以工科为主干学科的大学,浙江工业大学是综合性大学,杭州电子科技大学是多科性大学.(一)历史底蕴 浙江工业大学历史脉络 可以看到, ...

  5. 杭电计算机学院老师,杭州电子科技大学计算机学院导师教师师资介绍简介-李平...

    杭州电子科技大学计算机学院导师教师师资介绍简介-李平本站小编 Free考研考试/2021-04-11 李 平 副教授 硕士生导师 计算机科学与技术 机器学习,计算机视觉,媒体计算 lpcs@hdu.e ...

  6. 杭电计算机学院复试真题,2020杭州电子科技大学计算机学院考研复试公告

    考研复试公告各院校已经发布出来了,下面由出国留学网小编为你精心准备了"2020杭州电子科技大学计算机学院考研复试公告",持续关注本站将可以持续获取更多的考试资讯! 2020杭州电子 ...

  7. 西安电子科技大学和杭电计算机,别只关注成电西电杭电,还有一所电子科技大学不错,二本招生...

    说起"电子科技大学",大家最熟悉的莫过于成都的电子科技大学.西安的西安电子科技大学和杭州的杭州电子科技大学. 成电是985,西电是211,杭电虽属"双非",但是 ...

  8. 杭电考研计算机专业课_杭州电子科技大学计算机考研专业课平均分76.03,国家线复试是这个原因!...

    杭电计算机学院是计算机类报考热门,2019考研英语数学开始统一采用英语一数学一,不分学硕专硕还是非全日制:今年复试线已出,除计算机技术专硕复试线280分,高于国家线,其余专业均是国家线270分复试: ...

  9. 杭电计算机导师6,杭州电子科技大学计算机学院导师教师师资介绍简介-贾刚勇...

    杭州电子科技大学计算机学院导师教师师资介绍简介-贾刚勇本站小编 Free考研考试/2021-04-11 贾刚勇 副教授 硕士生导师 计算机科学与技术 边缘计算,物联网,操作系统.无人系统 gangyo ...

  10. 杭电计算机学院毕业要求,杭州电子科技大学关于攻读博士学位研究生培养工作的规定...

    [导读]杭州电子科技大学关于攻读博士学位研究生培养工作的规定已经发布,为发展我校博士学位研究生(以下简称博士生)教育,保证教育质量,根据<中华人民共和国学位条例>.<中华人民共和国学 ...

最新文章

  1. 2022-2028年中国加气站行业市场研究及前瞻分析报告
  2. .NET程序性能的基本要领
  3. php web框架 symfony简介
  4. java在mac下开发环境_Java开发环境安装(MacOS、Windows)
  5. 链表数据结构原理图/内存结构图/内存图
  6. java 外部接口调用 设计模式_《Java设计模式》之接口模式
  7. 神武显示未能成功连接服务器,神武:疑难问题解答,总有你要的答案
  8. opencv 实现等值线_OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)...
  9. HTTP1.1与HTTP1.0
  10. Android系统韦根调试从驱动到应用(一)
  11. studio3t破解
  12. HMC5883L手册总结与经验分析 详解
  13. 人民币转换美金的c语言代码大全,美元换算(人民币换算)
  14. URL欺骗的惯用招式(经典网络知识)
  15. iPhone12充电头怎么选
  16. 打造任何地方都能使用的markdown写作软件:Typora云端化
  17. .NET Core API网关Ocelot(十四)【转换Claims,日志,跟踪】
  18. 谷歌seo快速排名优化方法
  19. 育碧信条:AI 在手,天下我有
  20. 证券考试和基金考试有什么区别?

热门文章

  1. I - The old Padawan Gym - 100285I——二分查找
  2. MATLAB数学建模:智能优化算法-神经网络算法
  3. mysql 统计每年的数据统计_Mysql统计每年每个月的数据——详细教程
  4. python modbus tk 库_python modbus_tk库 学习记录
  5. NAT配置两台Ubuntu通网
  6. css怎样给网页加页脚,在移动Web页面中使用CSS固定页脚
  7. 主持人正确发声练习方法
  8. 微信棋牌游戏域名防封最新解决方案
  9. 用html做七巧板的方法,第一天:html、css的初步学习和制作七巧板
  10. NYOJ 小珂的烦恼