MIT6.828_HW5_xv6 CPU alarm

本文档介绍了如何在MIT6.828课程的xv6操作系统中添加CPU alarm功能,允许进程在达到特定CPU时间后收到警报。通过实现新的系统调用alarm(),当进程每消耗n个ticks的CPU时间,内核将调用用户指定的函数fn。在fn返回后,进程将继续执行。文中提到了在trap()函数中处理时钟中断的挑战,并提供了参考资料和代码示例。
摘要由CSDN通过智能技术生成

1. MIT6.828_HW5_xv6 CPU alarm

在本练习中,您将向xv6添加一个功能,该功能会定期向使用CPU时间的进程发出警报。 这可能对计算密集型进程有用,这些进程希望有效降低它们占用的CPU时间,或是即需要计算但又要采取某些定期操作的进程。 更一般地说,您将实现一种原始形式的用户级中断/故障处理程序。

您应该添加一个新的alarm(interval,handler)系统调用。 如果应用程序调用alarm(n,fn),那么在程序消耗每个n“ticks”的CPU时间之后,内核将调用应用程序函数fn。 当fn返回时,应用程序将从中断处继续。 tick是xv6中相当随意的时间单位,由硬件定时器产生中断的频率决定。

1.1. Do it

这个HW与上一个syscall的HW十分相似了。重要的一点是这个HW使用到了时钟中断。根据提示,我们需要在trap()中的case T_IRQ0 + IRQ_TIMER:写入我们的处理逻辑。一开始很天真地直接写myproc()->alarmhandler();,发现 it doesn’t work. 以下参考了别的大佬的代码。

if(myproc() != 0 && (tf->cs & 3) == 3){
		myproc()->ticks++;
		if(myproc()->ticks == myproc()->alarminterval) {
			myproc()->ticks = 0;
			// 为什么不能像下面这样调用函数
			//my
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值