我正在做一个关于操作系统的项目,需要操作系统的进程调度数据。数据必须包括短期调度程序和长期调度程序中的所有进程的列表,以及每个进程的 CPU 时间片和内存要求。我还需要有关其他进程何时以及由什么进程被抢占的数据。有没有办法在 Linux 中收集所有这些数据?我怎样才能做到这一点?
在linux源代码中,有一个结构task_struct
体include/linux/sched.h
.有没有办法获取该结构中每个对象的状态?
答案1
如果您需要深入的日程安排信息,您可以使用以下工具之一 -
- 性能
- 系统点击
- dtrace(我不知道linux端口的状态是什么)
- 系统挖掘
所有这些都可以利用内核挂钩来显示上下文切换、中断、I/O、系统调用等事件。
答案2
您可以使用以下命令获取有关进程、调度程序以及操作系统和硬件的其他组件的大量内部信息
cat /proc/...
哪里……可以有很多东西。例如,它可以是一个进程ID,后面跟着很多特定的信息请求,或者调度程序调试信息请求,例如:
cat /proc/sched_debug
要查看完整的选项列表,请键入ls /proc
。您将看到一长串进程 ID 号,还有一些有趣的名称,例如 sched_debug、cpuinfo、meminfo、uptime 等。
这一切都归功于虚拟文件系统进程文件系统 您可以阅读更多相关内容这里。
另一个有用的命令是:
top
这将显示有关进程如何调度、内存使用情况等的实时信息。
答案3
该ps
命令是一个很好的起点。它允许您指定为一组选定进程(可能是所有进程)显示哪些信息。您可以阅读该man
页面以获取有关您可以获得的可用信息的详细信息,这些信息被指定为选项的标志-O
。
以下是您可能想要的开始:
ps -O "%mem nice state upr pri cpu"