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;
// 为什么不能像下面这样调用函数
//myproc()->alarmhandler();
tf->esp -= 4;
// eip压栈
*(uint *)(tf->esp) = tf->eip;
tf->eip = (uint)myproc()->alarmhandler;
}
}

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

被折叠的 条评论
为什么被折叠?



