cow lab initialized
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user