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