哈工大OS实验四---进程运行轨迹的跟踪和统计(未统计)

本文介绍了哈工大操作系统课程实验中关于进程运行轨迹的跟踪和统计,主要内容包括log文件的建立与使用,内核状态下的fprintk函数实现,以及在fork.c、exit.c和sched.c等关键文件中对进程状态变化的记录,涉及jiffies、状态切换点的查找。文章还提及了schedule()函数的调度策略,pause系统调用、sleep_on()和interruptible_sleep_on()函数的处理,以及wake_up()函数在唤醒进程中的作用。
摘要由CSDN通过智能技术生成

进程运行轨迹的跟踪和统计(实验4)

根据哈工大课程cup管理章节,为了使cpu被充分利用,因此引进了多进程的概念,一个进程在等待io命令时,此时,我们就将该进程挂起,执行其他进程,cpu通过PCB控制进程,而进程等待队列又分为就绪队列和阻塞队列。这次的实验目的为:跟踪进程的运行轨迹和统计

  1. log文件

log文件主要是用来保存进程发生状态切换时的记录,文件目录为/var/process.log

该实验为了尽快打开log文件,在init/main.c中的main()函数中,将init()函数中的一部分代码搬到main()函数中。

move_to_user_mode();
move_to_user_mode();
// ……
//加载文件系统
setup((void *) &drive_info);

// 打开/dev/tty0,建立文件描述符0和/dev/tty0的关联
(void) open("/dev/tty0",O_RDWR,0);

// 让文件描述符1也和/dev/tty0关联
(void) dup(0);

// 让文件描述符2也和/dev/tty0关联
(void) dup(0);
if (!fork())
{        	
	/* we count on this going ok */
		init();
}

这段代码建立了文件描述符 0、1 和 2,它们分别就是 stdin、stdout 和 stderr。这三者的值是系统标准(Windows 也是如此),不可改变。

可以把 log 文件的描述符关联到 3。文件系统初始化,描述符 0、1 和 2 关联之后,才能打开 log 文件,开始记录进程的运行轨迹。

为了能尽早访问 log 文件,我们要让上述工作在进程 0 中就完成。所以把这一段代码从 init() 移动到 main() 中,放在 move_to_user_mode() 之后(不能再靠前了),同时加上打开 log 文件的代码。

2.写log文件

写log文件之前,我们需要在printk.c文件中加入fprintk()函数的实现代码,因为在内核状态下,无法使用printf();

#include "linux/sched.h"
#include "sys/stat.h"

static char logbuf[1024];
int fprintk(int fd, const char *fmt, ...)
{
 	va_list args;
		int count;
		struct file * file;
		struct m_inode * inode;

		va_start(args, fmt);
		count=vsprintf(logbuf, fmt, ar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值