操作系统实验03——进程运行轨迹的跟踪与统计

实验目的

这次实验的目的是跟踪进程的运行轨迹,记录下进程的状态及其变化

实现方法

实现方法在于对找出每一次进程的变化,并对应添加上相应的内核函数,使其能够打印出进程信息到process.log中

实验步骤

这次的实验耐心按照实验楼里的步骤做,问题应该不大!这里简略记录。
在这里插入图片描述
首先,我们需要想清何时创建用以记录的process.log文件?当然要尽早了,于是在我们进行第一次fork前,进程切换到用户态后,开始创建process.log文件,以记录进程。
此时创建的process.log的文件标识符为3,并且由于是在进程0中创建的,后面的子进程1同样会复制过去,init()也就不用再open它,不过实际上,init() 的后续代码和 /bin/sh 都会重新初始化它们。
注意除了创建process.log文件外,还需将init()内加载文件系统的语句提前至此。

在这里插入图片描述
这里我们在fork.c文件里面,找出进程状态变化的语句p->state=TASK_RUNNING; 并且通过fprintk()内核函数,完成将对应进程信息打印在process.log文件中,这样便可以在进程状态变化时在.log文件中记录下状态啦

实验分析

在这里插入图片描述
在这里插入图片描述
当我下一次运行cat /var/process.log, 新增7,8两个进程id, 根据时间来看7应当是结束上一个指令后shell循环进入创建新进程

main()
{
	char cmd[100];
	while(1)
	{
		scanf();
		if(!fork()) {execvp(cmd, NULL); }
		wait();
	}
}

而进程号8则是执行cat /var/process.log 得到的新进程.
那么前面最开始的几个进程号是什么呢?这部分的故事可以参阅《源码》man.c部分的内容。在这里插入图片描述

注:这里只放出了创建进程(fork)中的记录方式,同理,我们可以找到进程状态的切换点,并且相应的记录下进程状态~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值