cow lab initialized

This commit is contained in:
2025-06-28 09:57:36 +08:00
parent 7c42fbed17
commit c6fa25504f
25 changed files with 351 additions and 617 deletions

View File

@@ -54,8 +54,6 @@ sys_sleep(void)
int n;
uint ticks0;
backtrace();
argint(0, &n);
if(n < 0)
n = 0;
@@ -93,44 +91,3 @@ sys_uptime(void)
release(&tickslock);
return xticks;
}
// sys_sigalarm函数用于设置进程的定时信号处理机制。
// 参数:
// alarm_cnt定时器计数值表示每经过alarm_cnt个时钟中断后触发一次信号处理。
// addr信号处理函数的用户空间地址。
// 实现:
// 1. 通过argint和argaddr获取用户传入的参数。
// 2. 将进程的inter_cnt中断计数器清零。
// 3. 保存信号处理函数地址和定时器计数值到进程结构体。
// 4. 返回0表示设置成功。
// sys_sigreturn函数用于在信号处理函数执行完毕后恢复进程的上下文。
// 实现:
// 1. 获取当前进程指针。
// 2. 将trapframe恢复为信号处理前保存的pre_trapframe恢复进程上下文。
// 3. 将inter_cnt中断计数器清零重新计数。
// 4. 返回信号处理前a0寄存器的值作为系统调用的返回值。
uint64
sys_sigalarm(void)
{
int alarm_cnt;
uint64 addr;
struct proc *p = myproc();
argint(0, &alarm_cnt);
argaddr(1, &addr);
p->inter_cnt = 0;
p->handler = addr;
p->alarm_cnt = alarm_cnt;
return 0;
}
uint64
sys_sigreturn(void)
{
struct proc* p = myproc();
*p->trapframe = *p->pre_trapframe;
p->inter_cnt = 0;
return p->pre_trapframe->a0;
}