rCore-Tutorial-Book-v3 icon indicating copy to clipboard operation
rCore-Tutorial-Book-v3 copied to clipboard

rCore-Tutorial-Book-v3/chapter7/4signal

Open utterances-bot opened this issue 2 years ago • 10 comments

信号 - rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档

http://rcore-os.cn/rCore-Tutorial-Book-v3/chapter7/4signal.html

utterances-bot avatar Aug 03 '22 11:08 utterances-bot

pub fn sigaction(signum: i32, action: *const SignalAction, old_action:
   *const SignalAction) -> isize {
    sys_sigaction(signum, action, old_action)
}

这里old_action的类型应该是*mut SignalAction


如何->如果内核发现进程由于内存访问错误等产生异常


sys_kill的主要工作是对进程号为pid的进程发值为signum的信号。具体而言,先根据 pid

这段似乎少了`,导致格式有点乱。

whfuyn avatar Aug 03 '22 11:08 whfuyn

pub fn sys_sigreturn() -> isize {
    if let Some(task) = current_task() {
        let mut inner = task.inner_exclusive_access();
        inner.handling_sig = -1;
        // restore the trap context
        let trap_ctx = inner.get_trap_cx();
        *trap_ctx = inner.trap_ctx_backup.unwrap();
        0
    } else {
        -1
    }
}

这里的返回值不应该是 trap_ctx_backup 存储的信号处理前的中断返回值吗。

341101 avatar Jan 20 '23 13:01 341101

@341101 也就是说进程上下文中的a0寄存器现在会被0覆盖掉,而它应该保持不变,您是想表达这个意思吗?

wyfcyx avatar Jan 20 '23 14:01 wyfcyx

@wyfcyx 对

341101 avatar Jan 20 '23 14:01 341101

@341101 好的,多谢您指出这个错误,稍后有空时修改。

wyfcyx avatar Jan 20 '23 14:01 wyfcyx

        SignalFlags::SIGCONT => {
            if task_inner.signals.contains(SignalFlags::SIGCONT) {
                task_inner.signals ^= SignalFlags::SIGCONT;
                task_inner.frozen = false;
            }
        }

这里的if task_inner.signals.contains(SignalFlags::SIGCONT)有什么作用呢?

FormerRiptide3 avatar Jan 28 '23 18:01 FormerRiptide3

注意使用translated_ref(mut)的前提是类型T不会跨页,我们通过设置SignalAction对齐到 16 字节来保证这一点。

不会跨页跟对齐有什么关系?

TD-Sky avatar Sep 15 '23 06:09 TD-Sky

不太理解... 为啥对齐到 16 字节就不会夸虚拟内存页, 这里有什么黑魔法吗?

olinex avatar Apr 10 '24 08:04 olinex