当前位置: 首页 > news >正文

【操作系统】实验七 显示进程列表

🕺作者: 主页

我的专栏
C语言从0到1
探秘C++
数据结构从0到1
探秘Linux

😘欢迎关注:👍点赞🙌收藏✍️留言

🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢支持!!!

文章目录

  • 实验七 显示进程列表
    • 一、实验目的
    • 二、实验内容
    • 三、实验过程记录
      • 部分A
      • 部分B
    • 四、实验小结

实验七 显示进程列表

一、实验目的

掌握进程结构及进程管理原理

二、实验内容

  1. 实验名称:显示进程列表
  2. 实验任务:
    编写一个模块,将它作为Linux内核空间的扩展来执行,并报告模块加载时内核的当前进程信息,进一步了解用户空间和内核空间的概念。

三、实验过程记录

部分A

实验任务:查看系统已加载模块。写一个小的模块打印“hello world”。
查看已加载模块,如图所示。

编写小模块打印“hello world”
代码如下:
20191909.c文件

#include<linux/module.h>
int hello_init(void)
{printk("\nhello world\n");return 0;
}
void hello_exit(void){printk("\n bye bye world\n");
}
MODULE_AUTHOR("20191909");//id
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);

Makefile文件

obj-m:=20191909.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

操作如下:

  1.  编译 make 如图1所示
    


图1

  1.  加载模块insmod 20191909.ko 如图2所示
    


图2

  1.  查看日志dmesg如图3所示
    


图3
4) 删除模块rmmod 20191909.ko 如图4所示


图4

  1.  查看日志dmesg如图5所示
    


图5

部分B

实验任务:设计模块遍历进程描述符链表,打印出系统的进程数目、当前进程,并尽量多地打印每个进程的信息。例如:进程PID,进程状态等。

编写代码如下:
20191909.c文件

#include <linux/init.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
#include <linux/sched.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int num = -1;
module_param(num, int, S_IRUGO);
static __init int exp_init(void){struct task_struct *p = NULL;// for_each_process宏遍历系统中的每个进程,将其赋值给pprintk("数量:%d",num);for_each_process(p){if (num==0 )break;// 使用printk函数打印当前进程的PID和进程名称,real_parent->pid : 父进程id   __state : 状态printk("pid=%d,name=%s,parent_id=%d,state=%d\n", p->pid, p->comm,p->real_parent->pid,p->__state);num--;}return 0;
}
static __exit void exp_exit(void){printk("Good bye.\n");
}
module_init(exp_init);
module_exit(exp_exit);

Makefile 文件

obj-m:=20191909.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

操作如下:

  1.  编译make 如图6所示
    


图6

  1.  加载模块insmod 20191909.ko 如图7所示
    


图7

  1.  查看日志 dmesg 可以看到进程的PID、进程名称、父进程id、当前状态 如图8所示
    


图8

  1.  删除模块 rmmod 20191909.ko如图9所示
    


图9

四、实验小结

本次实验旨在通过编写Linux内核模块来了解用户空间和内核空间的概念,并掌握如何显示进程列表。实验分为两部分进行。
在实验的第一部分中,我们成功编写了一个简单的内核模块,用以打印“hello world”信息。通过编译、加载模块、查看日志和删除模块的步骤,我们确认了模块的正确加载和工作。这个过程加深了我们对内核模块生命周期管理的理解。
在实验的第二部分中,我们设计了一个更复杂的内核模块,用于遍历进程描述符链表,打印出系统的进程数目、当前进程以及尽可能多的进程信息(例如:进程PID,进程状态等)。通过这个过程,我们不仅学习了如何访问和操作内核中的进程信息,还加深了对Linux内核进程管理机制的了解。
存在的问题和注意事项:

  1. 在编写内核模块时,需要确保代码的稳定性和安全性,因为任何错误都可能导致系统崩溃或安全漏洞。
  2. 在使用printk进行调试时,应该注意其输出级别,以免产生大量的日志信息影响系统性能。
  3. 在遍历进程时,我们使用了for_each_process宏,需要了解其工作原理及如何正确使用它。
  4. 模块参数的使用提供了灵活性,但也需要注意确保传入的参数是合法的,防止模块运行时出现异常。
    有待提高的能力:
  5. 对内核编程的熟练度,包括更深入地理解内核API和内核编程的最佳实践。
  6. 对Linux内核的整体架构和机制的理解,特别是进程管理、内存管理和模块管理等方面。
  7. 调试技能的提高,包括使用更高级的内核调试工具和技术。
  8. 编写更加健壮和高效的内核代码的能力。

总体而言,本次实验不仅帮助我们实践了内核模块的编写和操作,还增进了我们对Linux内核的理解,为今后深入学习Linux内核打下了良好的基础。

相关文章:

【操作系统】实验七 显示进程列表

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…...

[实战]加密传输数据解密

前言 下面将分享一些实际的渗透测试经验&#xff0c;帮助你应对在测试中遇到的数据包内容加密的情况。我们将以实战为主&#xff0c;技巧为辅&#xff0c;进入逆向的大门。 技巧 开局先讲一下技巧&#xff0c;掌握好了技巧&#xff0c;方便逆向的时候可以更加快速的找到关键函数…...

yarn install 报错 证书过期 Certificate has expired

“Certificate has expired” 的意思是证书已过期。这通常是指数字证书在其有效期限之前已经失效了。数字证书通常用于加密和保护网络通信&#xff0c;以及验证网站的身份。如果证书已经过期&#xff0c;那么使用该证书的网站或服务可能会受到安全威胁。为了保证安全&#xff0…...

多流转换 (分流,合流,基于时间的合流——双流联结 )

目录 一&#xff0c;分流 1.实现分流 2.使用侧输出流 二&#xff0c;合流 1&#xff0c;联合 2&#xff0c;连接 三&#xff0c;基于时间的合流——双流联结 1&#xff0c;窗口联结 1.1 窗口联结的调用 1.2 窗口联结的处理流程 2&#xff0c;间隔联结 2.1 间隔联…...

Linux破解密码

破解root密码&#xff08;Linux 7&#xff09; 1、先重启——e 2、Linux 16这一行 末尾加rd.break&#xff08;不要回车&#xff09;中断加载内核 3、再ctrlx启动&#xff0c;进入救援模式 4、mount -o remount&#xff0c;rw /sysroot/——&#xff08;mount挂载 o——opti…...

ABAP 批导demo调用SM30表维护demo

ABAP 批导demo&调用SM30表维护demo &--------------------------------------------------------------------- *& Report ZPP036 &--------------------------------------------------------------------- *& &-----------------------------------…...

Mysql 文件导入与导出

i/o 一、导出(mysqldump)<一>、导出sql文件<二>、导出csv文件 二、导入(load)三、常见报错The Mysql server is running with the --secure-file-priv option so it cannot execute this statement 一、导出(mysqldump) <一>、导出sql文件 1、整库 mysqld…...

《每天十分钟》-红宝书第4版-迭代器与生成器

理解迭代 计数循环就是一种最简单的迭代 for (let i 1; i < 10; i) { console.log(i); }迭代之前需要事先知道如何使用数据结构。数组中的每一项都只能先通过引用取得数组对象&#xff0c;然后再通过[]操作符取得特定索引位置上的项。这种情况并不适用于所有数据结构。遍…...

1、【vue篇】vue框架快速上手

注意事项&#xff1a; methods必须要加s 导入vue&#xff1a;<script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>导入Axios:<script src"https://unpkg.com/axios/dist/axios.min.js"></script> 简单Vue程序…...

Unity 编辑器篇|(九)编辑器美化类( GUIStyle、GUISkin、EditorStyles) (全面总结 | 建议收藏)

目录 1. GUIStyle1.1 参数总览1.2 样式代码 2. GUISkin2.1 参数总览2.2 创建自定义Skin 3. EditorStyles2.1 参数总览1.2 反射获取所有EditorStyles 1. GUIStyle GUIStyle是一个用于定制GUI控件样式的类&#xff0c;它包含了控件的外观属性&#xff0c;如字体、颜色、背景等。…...

Spring Boot Starters

Spring Boot Starters 概述 Spring Boot Starters是一系列为特定应用场景预设的依赖管理和自动配置方案。每个Starter都是为了简化特定类型的项目构建和配置。例如&#xff0c;spring-boot-starter-web是为创建基于Spring MVC的Web应用程序而设计的。 Starter的结构 一个典型…...

Qt防止创建窗口抢焦点

问题是&#xff0c;当我在 Qt 中打开一个新窗口时&#xff0c;它会自动窃取前一个应用程序的焦点。 有什么办法可以防止这种情况发生吗&#xff1f; setAttribute(Qt::WA_ShowWithoutActivating);这会强制窗口不激活。即使有Qt::WindowStaysOnTopHint flag 出处&#xff1a; S…...

shared_ptr 与 unique_ptr 的转换 笔记

推荐B站文章&#xff1a; 6.shared_ptr与unique_ptr_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p6&vd_sourcea934d7fc6f47698a29dac90a922ba5a3我的往期文章&#xff1a; 独占指针&#xff1a;unique_ptr 与 函数调用-CSDN博客https://blog.csdn.n…...

python windows和linux 文件同步

在Python中&#xff0c;可以使用paramiko库来实现Windows和Linux之间的文件同步。paramiko是一个用于SSH连接的Python库&#xff0c;可以用于在Windows和Linux之间进行文件传输。 以下是一个简单的示例代码&#xff0c;演示如何使用paramiko库在Windows和Linux之间同步文件&am…...

【数据结构】72变的双端队列

双端队列 前言一、双端队列1.1 双端队列的定义1.2 输入受限的双端队列1.3 输出受限的双端队列1.5 输入输出都受限的双端队列1.6 小结 二、双端队列的使用2.1 双端队列的出队序列——暴力求解2.1.1 栈的出栈序列2.1.2 输入受限的双端队列2.1.3 输出受限的双端队列2.1.4 输入输出…...

kafka为什么不支持读写分离?

kafka为什么不支持读写分离&#xff1f; 在kafka中&#xff0c;生产者写入消息&#xff0c;消费者读取消息的操作都是与 leader 副本进行交互的&#xff0c;从而实现的是一种主写主读的生产消费模型。kafka不支持读写分离&#xff0c;也就是主写从读。 读写分离有以下不足&am…...

arcgis 面要素shp数据处理

面要素是工作中用到最多的&#xff0c;那么面要素是如何形成的呢&#xff0c;主要还是由闭合的线要素转换而成。在面要素数据中常用的有以下几点&#xff1a; 一、 线转面&#xff08;要素转面&#xff09; 通过上一篇得到了点转线的要素&#xff0c;那么根据上节的线要素&am…...

数轴(0 ~ m)上有n个不同点,最多只能移动一个点,移动到[1, m]中任意一点,求最终最小相邻两个点的距离的最大值是什么

题目 思路:先找到相邻距离最小的位置,假设为pos, 那么不是移动第pos个点就是移动第(pos - 1)个点,先移动pos点,用数组vec存除了pos点之外的所有点,求出最小相邻距离和最大相邻距离,那么肯定将pos点插入到最大相邻距离中。 #include <bits/stdc++.h> using namesp…...

BGP路由反射-数据中心IDC项目经验

一、背景描述 R1,R2,R3在AS200区域内&#xff0c;R1和R2,R1和R3建立OSPF&#xff0c;宣告接口互联. AS200区域内&#xff0c;R1和R2建立IBGP, R1和R3建立IBGP R2和R4建立EBGP, R3和R5建立EBGP。 网络拓扑&#xff1a; 二、故障现象 R1和R2可以收到来自AS100区域R4的E…...

提取视频中的某一帧画面,留住视频中的美好瞬间

你是否曾经被视频中的某一帧画面深深吸引&#xff0c;却又惋惜于无法将其永久保存&#xff1f;现在&#xff0c;有了我们【媒体梦工厂】&#xff0c;这一遗憾将成为过去&#xff0c;这个软件可以提取视频中的某一帧保存为图片&#xff0c;为你留住那些稍纵即逝的美好。 所需工…...

OpenHarmony软总线实战:手把手教你实现Wi-Fi/BLE双模设备发现(附避坑指南)

OpenHarmony软总线深度实战&#xff1a;Wi-Fi/BLE双模设备发现的工程化实现与性能调优 在智能家居设备爆发式增长的今天&#xff0c;多模连接已成为终端设备的标配能力。作为OpenHarmony分布式能力的核心支撑&#xff0c;软总线&#xff08;SoftBus&#xff09;的混合发现机制直…...

Vial-QMK键盘固件从入门到精通:打造专属机械键盘体验

Vial-QMK键盘固件从入门到精通&#xff1a;打造专属机械键盘体验 【免费下载链接】vial-qmk QMK fork with Vial-specific features. 项目地址: https://gitcode.com/gh_mirrors/vi/vial-qmk Vial-QMK是一款功能强大的开源键盘固件&#xff0c;为机械键盘爱好者提供了全…...

终极指南:如何在Open Interpreter中快速集成vLLM高速推理引擎

终极指南&#xff1a;如何在Open Interpreter中快速集成vLLM高速推理引擎 【免费下载链接】open-interpreter Open Interpreter 工具能够让大型语言模型在本地执行如Python、JavaScript、Shell等多种编程语言的代码。 项目地址: https://gitcode.com/GitHub_Trending/op/open…...

人工智能高质量数据集概述

人工智能高质量数据集&#xff0c;是指经过标准化采集、清洗、标注、质检、脱敏及结构化处理&#xff0c;能够直接用于人工智能模型开发、训练与优化&#xff0c;且能有效提升模型性能、保障模型泛化能力&#xff0c;具备高可用性、高一致性、高安全性和高适配性的结构化或非结…...

破解企业AI应用开发困境:Dify工作流架构的颠覆性价值

破解企业AI应用开发困境&#xff1a;Dify工作流架构的颠覆性价值 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify-W…...

openGauss服务化部署实战:systemd单元文件配置详解

1. 为什么需要systemd管理openGauss 每次重启服务器都要手动启动数据库&#xff1f;这种操作既低效又容易出错。把openGauss交给systemd管理后&#xff0c;你会发现数据库服务像系统内置服务一样听话——开机自动启动、异常自动重启、日志集中收集&#xff0c;这才是专业运维该…...

AgentCPM深度研报助手10分钟快速部署教程:基于CSDN星图GPU平台

AgentCPM深度研报助手10分钟快速部署教程&#xff1a;基于CSDN星图GPU平台 你是不是也遇到过这种情况&#xff1f;面对海量的行业报告、公司财报&#xff0c;想快速提炼核心观点&#xff0c;却感觉无从下手&#xff0c;或者需要花费大量时间手动整理。现在&#xff0c;有了AI助…...

The Leather Archive应用案例:从赛博都市到极简主义的皮衣穿搭

The Leather Archive应用案例&#xff1a;从赛博都市到极简主义的皮衣穿搭 1. 项目概述 「The Leather Archive」是一个基于AI技术的高端皮衣穿搭生成系统&#xff0c;它巧妙融合了Anything V5基础模型与Stable Yogi皮衣系列LoRA的专业能力。与传统AI工具不同&#xff0c;该项…...

OpenClaw+GLM-4.7-Flash极客玩法:浏览器自动化与RPA任务融合

OpenClawGLM-4.7-Flash极客玩法&#xff1a;浏览器自动化与RPA任务融合 1. 当OpenClaw遇见GLM-4.7-Flash 去年冬天的一个深夜&#xff0c;我正为重复性的网页数据抓取任务头疼不已。Selenium脚本频繁因页面结构变化而崩溃&#xff0c;每次都需要人工介入调整。直到发现OpenCl…...

从零部署RK3588 MPP:硬编解码环境搭建与核心工具解析

1. RK3588 MPP硬编解码环境搭建全流程 第一次在ArmSoM-W3开发板上折腾RK3588的MPP硬编解码环境时&#xff0c;我踩了不少坑。这里把完整搭建过程拆解成可复现的步骤&#xff0c;用最直白的语言分享给各位开发者朋友。 MPP&#xff08;Media Process Platform&#xff09;是瑞芯…...