信号

  1. raise(sing)
    给自己发送信号

  2. kill()
    可以给所有进程发信号

  3. abort()
    给进程发送指定的信号6号

  4. signal(信号数,操作)
    捕捉信号并自定义信号的动作

  5. 硬件处理
    如果出现除零的情况,硬件就会把寄存器修改为1,从硬件层发出信号

  6. 虽然信号是不同的,但是都可以使用同一个方式去处理。

  7. 当出现野指针的时候,页表没有办法处理虚拟内存到物理内存的映射,就会出现异常了。

  8. alarm()
    其实也是通过软件创建的,

  9. 信号终止方式:core term。

  10. 云服务器默认关闭了core file选项,打开之后报错会多一个文件。core.24892 当进程出现异常的时候,我们将会进程在对应的时刻,在内存中的有效数据转储到磁盘中--核心转储。
    核心转储,可以在gdp中事后调试。

  11. 操作系统禁止进程对9号信号做出捕捉,避免恶意程序

  12. 信号实际上在操作系统中使用位图来做处理

  13. 还是用了一个数组来存储信号和信号的处理函数方法

利用函数指针的方式。

  1. 我作为一个进程是如何进入os执行方法呢
    每个进程都有自己的进程空间(独有的)也有内核空间(每个进程中都会独有3-4g)。进程要访问os接口,只需要在自己的地址空间跳转.

  2. 我们能不能以用户态的身份执行用户态的代码:
    不能,因为用户态的代码有可能涉及到超出权限的代码,那么以这种不合适的方式执行了代码就会带来错误。

  3. sigpending()获取信号的位图

  4. volatile保持内存的可见性
    编译器的编译优化-o3可以调高,调高之后有一些变量会存进到寄存器中,那么就会导致信号的回调函数在内核级别修改该变量的是物理内存的数值。就会导致出错。那么使用volatile可以强制变量的必须要在内存中去修改。

posted @   zhudachang  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示