1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理

文章介绍了如何在xv6操作系统中添加alarm功能,允许进程在使用CPU时间达到一定量时触发指定的处理程序。这涉及到修改系统调用、添加用户级中断处理,并在硬件时钟中断处理中实现定时提醒。通过一个名为alarmtest的示例程序展示了预期效果,并提出了防止处理程序重入和保护内核安全的可选挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         我觉得看了几个MIT的课程之后让我觉得我的大学四年有点浪费时光,看起来MIT的课程的确是很有饱满度。

         这里,再整理一份课程中的作业要求。

家庭作业:xv6 CPU alarm

         在本练习中,您将向xv6添加一个功能,该功能在进程使用CPU时间时定期提醒进程。这对于那些想限制占用CPU时间的计算绑定进程,或者对于那些想计算但又想采取一些周期性行动的进程来说,可能很有用。更一般地说,您将实现用户级中断/故障处理程序的原始形式;例如,您可以使用类似的方法来处理应用程序中的页面错误。

         您应该添加一个新的alarm(interval, handler)系统调用。如果应用程序调用alarm(n, fn),那么在程序消耗的CPU时间的每n个“滴答”之后,内核将导致调用应用程序函数fn。当fn返回时,应用程序将从停止的位置恢复。在xv6中,tick是一个相当任意的时间单位,由硬件计时器生成中断的频率决定。

         您应该将以下示例程序放在alarmtest.c中:

         该程序调用alarm(10,periodic),要求内核每隔10次强制调用periodic(),然后挂起一段时间。在内核中实现alarm()系统调用后,alarmtest应该会产生如下输出:

         (如果您只看到一个“alarm!”,请尝试将alarmtest.c中的迭代次数增加10倍。)

         提示:您需要修改Makefile,以便将alarmtest.c编译为xv6用户程序。

         提示:要放入user.h的正确声明是:

         提示:您还必须更新syscall.h和usys.S,以允许alarmtest调用报警系统调用。

         提示:您的sys_alarm()应该将报警间隔和指向处理程序函数的指针存储在proc结构中的新字段中;见proc.h。

         提示:这里有一个可用的sys_alarm():

         将其添加到syscall.c中,并将SYS_ALARM的条目添加到该文件中的syscalls数组中。

         提示:您需要跟踪从上一次调用(或直到下一次调用)到进程的alarm处理程序已经传递了多少节拍;为此,您还需要在struct proc中添加一个新字段。您可以在proc.c中的allocproc()中初始化proc字段。

         提示:每一次滴答声,硬件时钟都会强制中断,在trap()中按T_IRQ0+IRQ_TIMER处理;你应该在这里添加一些代码。

         提示:只有当有进程在运行并且计时器中断来自用户空间时,才需要操作进程的alarm信号;你想要这样的东西

         提示:在您的IRQ_TIMER代码中,当进程的alarm间隔到期时,您希望让它执行其处理程序。你是怎么做到的?

         提示:你需要安排一些事情,这样当处理程序返回时,进程就会恢复执行它停止的地方。你怎么能做到这一点?

         提示:您可以在alarmtest.asm中看到alarmtest程序的汇编代码。

         提示:如果你告诉qemu只使用一个CPU,你可以通过运行

         如果您的解决方案在调用处理程序时不保存调用方保存的用户寄存器,那就没问题了。

         可选的挑战:1)保存和恢复调用方保存的用户注册到处理程序的调用。2) 防止对处理程序的重入调用——如果处理程序尚未返回,请不要再调用它。3) 假设你的代码没有检查tf->esp是否有效,那么就对内核进行安全攻击,利用你的alarm处理程序调用代码。

         小结:这就是这一次的作业要求,这里面新引入了一个叫做alarm的概念。而这个概念其实在我现在使用的RTOS中也是有的,至于这个Alarm在底层的实现机制是什么样子的,之前的确是没有研究过。借着这个机会,需要对此进行一个更加透彻的学习分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值