Linux内核模块实验:遍历与统计进程状态

需积分: 0 0 下载量 110 浏览量 更新于2024-08-05 收藏 915KB PDF 举报
"杨樾人的操作系统实验报告,内容涉及编写Linux内核模块以遍历和输出系统中所有进程的信息,包括进程名、PID、状态、父进程名等,并统计不同状态进程的数量。用户态程序用于格式化显示内核模块输出的信息。实验环境为Ubuntu 16.04.3 LTS,参考了《操作系统概念》和Linux内核指导。" 这篇实验报告描述了一个操作系统实验项目,主要关注Linux内核模块的开发,旨在理解和掌握操作系统的进程管理与同步互斥机制。学生杨樾人在实验中实现了以下知识点: 1. **内核模块开发**:内核模块是一种可插入和移除的代码段,允许动态地扩展Linux内核的功能。在这个实验中,内核模块被用来遍历并输出系统中所有进程的详细信息。 2. **进程状态**:实验中统计了不同状态的进程,包括: - **TASK_RUNNING**:进程正在CPU上执行或准备执行。 - **TASK_INTERRUPTIBLE**:进程被挂起,等待某个条件满足(如I/O完成),可以被信号唤醒。 - **TASK_UNINTERRUPTIBLE**:进程被挂起,等待某个条件满足,不能被信号唤醒。 - **TASK_ZOMBIE**:已终止但未被父进程回收的进程,只保留基本状态信息。 - **TASK_STOPPED**:进程被停止,例如由信号SIGSTOP或SIGTSTP引起。 3. **进程遍历**:通过`for_each_process`宏,可以遍历内核中的所有进程描述符(`task_struct`结构体),获取每个进程的基本信息。 4. **日志记录**:内核模块将进程信息写入日志,便于用户态程序后续处理。 5. **用户态程序**:编写了一个用户态程序,它的作用是从日志文件中读取信息,并以格式化的形式在屏幕上显示。这展示了用户空间和内核空间之间的交互。 6. **参考资料**:实验参考了经典教材《操作系统概念》,该书深入介绍了操作系统的基本原理,尤其是进程管理和同步机制。同时,还参考了《边干边学Linux内核指导》,这可能是一本实践导向的Linux内核学习资料。 7. **编程技术**:涉及到Linux内核API的使用,如获取和解析进程状态,以及在用户态和内核态之间的数据交互。 这个实验项目提供了一次实际操作Linux内核的机会,帮助学生深入理解操作系统的工作原理,特别是进程管理方面,同时强化了实际编程和调试技能。