【问题标题】:Stack frame for signal handling in the Linux KernelLinux 内核中用于信号处理的堆栈帧
【发布时间】:2016-09-15 17:51:01
【问题描述】:

我看到进程需要处理信号的堆栈帧分配在函数setup_rt_frame()中。

我的问题是:它在哪里被取消分配?

谢谢!

【问题讨论】:

    标签: linux linux-kernel signals linux-device-driver


    【解决方案1】:

    setup_rt_frame()实时信号 设置堆栈(请参阅man 7 signal)。它主要做两件事:

    1. 将用户进程(在中断之前)的 CPU 上下文从内核堆栈保存到用户堆栈。
      对于 ARM 架构,它在 setup_sigframe() 中完成。
    2. 将返回地址(信号处理程序返回的位置)保存到用户堆栈。
      返回地址将指向rt_sigreturn() syscall(详见man 2 sigreturn)。
      对于 ARM 架构,它在 setup_return() 中完成。

    如您所见,一旦信号处理程序完成,它将自动返回内核中的sys_rt_sigreturn() 函数。该函数将从用户堆栈中恢复内核堆栈并返回中断的用户空间进程。

    所以,回答你的问题:

    在哪里取消分配?

    正在sys_rt_sigreturn()函数中恢复。

    另见:

    [1]How signals work internally?

    [2]Who uses POSIX realtime signals and why?

    [3] Implementation of signal handling(参见“传递信号 (7)”至“传递信号 (12)”部分)

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 2017-07-02
      • 2017-09-03
      • 1970-01-01
      • 2015-09-10
      • 2013-11-15
      • 1970-01-01
      • 2020-04-24
      • 2010-11-28
      相关资源
      最近更新 更多