【操作系统】实验七 显示进程列表
1.在本实验中,我们通过编写一个模块,将它作为Linux内核空间的扩展来执行,并报告模块加载时内核的当前进程信息。为了管理进程,内核必须对每个进程所做的事情进行清楚的描述。编写一个模块,将它作为Linux内核空间的扩展来执行,并报告模块加载时内核的当前进程信息,进一步了解用户空间和内核空间的概念。设计模块遍历进程描述符链表,打印出系统的进程数目、当前进程,并尽量多地打印每个进程的信息。设计并实现一
一、实验目的
编写一个模块,将它作为Linux内核空间的扩展来执行,并报告模块加载时内核的当前进程信息,进一步了解用户空间和内核空间的概念。
二、实验内容
设计并实现一个模块,遍历进程描述符链表,打印出系统的进程数目、当前进程,并尽量多地打印每个进程的信息。
(一)部分A
查看系统已加载模块。写一个小的模块打印“hello world”。
(二)部分B
设计模块遍历进程描述符链表,打印出系统的进程数目、当前进程,并尽量多地打印每个进程的信息。例如:进程PID,进程状态等。
(三)部分B(可选)
使用模块实现一个系统调用(也实现遍历进程链表的功能),并编写一个用户程序测试。体会利用模块从而带来的不用重新编译内核、调试方便等好处。
三、实验过程记录
(一)部分A
进入管理员模式
输入“mkdir hello”构建一个文件夹hello以便把使用的文件写入其中
下载vim发现显示not fatch,尝试修改网关,输入sudo gedit /etc/resolv.conf
在resolv.conf里面添加阿里DNS
输入sudo apt-get update联网更新
再次下载vim,成功下载
创建一个hello.c文件,输入一段代码用来测试和检验
输入测试代码
输入“vim Makefile”编写Makefile文件,用于自动化编译
Makefile文件代码如下
输入“make”,进行编译
输入“ls”,检查文件
输入“insmod hello.ko”插入模块
输入“lsmod | grep test”查看模块
输入“dmesg > hello.txt”生成日志,再输入“vim hello.txt”查看日志
翻到最下边,显示了“hello,word”(前边程序里边打错了,把world打成word)
输入“rmmod hello.ko”卸载模块
(二)部分B
在管理员模式下输入mkdir process构建文件夹并进入
创建一个module1.c文件
代码如下图所示
创建Makefile文件
代码如下图所示
输入make进行编译
输入ps -u root查看root用户的进程
输入make clean
(三)部分B(可选)
创建mk文件夹并进入
创建测试进程生成程序setprocess.c
代码如下
创建树状图生成程序(mymod_test.c)
代码如下
创建内核模块(系统调用)程序mymod.c
代码如下
编译测试进程生成程序(setprocess.c)
编译树状图生成程序(mymod_test.c)
输入“vim Makefile”编写Makefile文件,用于自动化编译
代码如下
编译内核模块(系统调用)程序(mymod.c)
四、实验小结
1.在本实验中,我们通过编写一个模块,将它作为Linux内核空间的扩展来执行,并报告模块加载时内核的当前进程信息。进程是任何多道程序设计的操作系统中的基本概念。为了管理进程,内核必须对每个进程所做的事情进行清楚的描述。为了对给定类型的进程(例如,在可运行状态的所有进程)进行有效的搜索,内核建立了几个进程链表。
2.模块运行在所谓的内核空间(Kernel space)里,而应用程序运行在所谓的用户空间里(User space)中。我们通常将执行模式称作内核空间和用户空间。这两个术语不仅说明两种模式具有不同的优先权等级,而且还说明每个模式都有自己的内存映射,即自己的地址空间。
3.这个实验让我们进一步地了解了用户空间和内核空间的概念,让我们试着动手完成对模块的编写,对于今后对linux的深入研究具有重要的意义。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)