Linux内核信 基本概念

  1. 总览

    • 信 总览

      • 信 分了三个章节进行介绍.
      • 本章介绍基础理论,简单但是非常重要且有必要.
    • 本章总览

      • 各种信 和使用场景.
      • 信 源:内核,进程或自己.
      • 信 屏蔽:屏蔽的信 被挂起排队,等到取消屏蔽的时候处理.
      • 信 等待:暂停执行进程,等待信 的到来.
  2. 概念总览

    • 使用

      • 什么是信

        • 进程间或进程与内核间的通讯方式.
        • 某进程收到信 ,表示有与之相关的事情发生,需要立即处理或等会儿处理,和进程的处理策略有关.
      • 软件中断

        • 和硬件中断打断处理器一样,软件中断打断进程的执行,让其执行代码进行响应.
      • 信 源

        • 拥有权限的信 可以发送信 给其他进程.
        • 常见:通过指令发送信 给其他进程.
        • 进程自己可以发送给自己或自己的某个线程.
        • 信 源一般都是内核产生.
      • 作用

        • 可用作进程间同步机制,甚至进程间交流.
    • 案例分析

      • 硬件错误

        • 硬件检测错误,由内核转发.
        • 如:地址翻译硬件检测无映射,内核转发;或者处理器执行除操作,内核转发.
      • 用户输入

        • 中断将特殊字符产生的信 .
        • 中断进程.
        • 中断并挂到后台.
      • 内核通知事件需要处理

        • 多路复用的信 驱动读写.
        • 终端窗口发生变化.
        • 定时器超时.
        • 处理器使用时间超限.
        • 子进程死亡.
    • 信 定义

      • 实际

        • 一个整数.
        • 宏定义以的格式声明.
      • 开发

        • 不同平台值代表信 不一样,所以使用宏定义别名,而不是具体数字.
    • 两类信

      • 实时信

        • 传统的信 ,或者标准信 .
        • 一般用于内核提示进程.
        • 使用区间.
      • 实时信

        • 详细介绍
    • 信 处理

      • 生成

        • 发送,并添加到进程描述符中,等待处理.
      • 处理

        • 一般是被时钟中断了之后,切换上下文,退出内核空间前检测,如果有信 需要处理就会处理.
        • 或者是如果正在执行立即处理.
      • 信 屏蔽

        • 信 处理可能会打断正在使用内核栈的系统调用,导致系统调用失败.
        • 为了避免这种情况:可以屏蔽某些信 ,等到后面方便的时候取消阻塞,处理对应时间.
        • 屏蔽的信 阻塞排队,直到取消阻塞.
    • 进程处理方式

      • 忽略

        • 内核丢弃,甚至进程都不知道这个信 .
      • 终止进程

        • 进程被杀死.
        • 进程正常死亡是,异常则是直接内核干掉,不用通知进程任何事情.
      • 生成并终止进程

        • 会生成杀死那一刻的内存信息.或者说是这个时刻的虚拟内存空间数据.
        • 保留了大部分的数据,用作调试排查错误.
      • 暂停

        • 进程停止执行,一般是调试
      • 继续

        • 进程恢复执行,一般是调试。
        • 如果之前没有处于停止状态则忽略.
    • 开发者可自定义

      • 默认

        • 一般用于修改后恢复原来的操作.
      • 忽略

        • 一般用于屏蔽某些无用或不感兴趣的信 .
      • 自定义函数

        • 函数执行,在内核中执行,和普通函数一样.
        • 一般用来专门响应某个信 ,执行某一些任务.
        • 这类信 叫做被处理或捕获.
    • 自定义局限

      • 局限

        • 不能修改为内核的默认行为中的.
        • 但是可以是忽略.
        • 也就是说自定义也是有局限性的.
      • 简介实现

        • 虽然无法直接修改行为,但是可以通过间接的方式修改.
        • 在信 响应函数中执行对应的函数来发起另一个信 ,以此来间接的达到同样的效果.
    • 进程信 状态查看

      • 位置

      • 内容

        • 包含了各种各样的信 信息,以掩码的形式表示。
        • 以进制表示.
      • 关联字段

        • 线程挂起的信 .
        • 进程挂起的信 .
        • 进程屏蔽的信 .
        • 进程忽略的信 .
        • 进程捕获的信 .
  3. 信 类型和默认行为

    • 信 与宏

      • 理论

        • 使用的常规信 是
      • 实际

        • 名字超过,不同名字对应的值相同.
        • 或者是不同的平台支持的不同.
    • 信 介绍

        • 原因

          • 进程中调用函数.
        • 结果

          • 默认生成文件.
        • 原因

          • 内核中通过设置的的实时定时器超时.
        • 介绍

          • 这种时钟.
        • 原因

          • 内存访问错误.
        • 案例一

          • 映射预留空间.
          • 即的页面中创建了的空间用于映射,文件大小,这是只有第一块中的前存在文件映射,可以访问,但是访问这个不存在任何映射的空间就是错误.
        • 原因

          • 父进程的某个子进程死亡.的方式死亡.
        • 使用

          • 这种一般是通知父进程通过函数获取子进程的死亡信息,并释放最后的空间.
        • 使用

          • 发送信 给暂停状态的进程。
        • 处理

          • 处于暂停恢复,不是就忽略.
          • 执行一些恢复的代码.一般是用户自定义.
        • 拓展

          • 后面其他章节有详细介绍
        • 原因

          • 算数计算错误,比如:除0.
        • 分析

          • 虽然是浮点,但是整数仍然使用.
          • 实际上这个信 的产生主要和处理器架构和对应的控制寄存器的实现.
        • 举例

          • 中,虽生成,但是师傅处理根据内核配置,即是否允许除.
          • 允许就生成,不允许就得到的结果就是无限大.
        • 案例一

          • 终端客户端与服务器的连接中断,内核就会发送信 给服务器程序,停止执行.或挂起.
          • 后面章节分析.
        • 案例二

          • 使用这个信 发送给守护进程,让其重新读取配置,重新初始化执行.
          • 系统也是通过这个信 告知守护来重启
        • 原因

          • 错误执行机器指令.
        • 平台

          • 类似.
          • 源于
        • 原因

          • 获取正在执行的前台程序的信息.
        • 原因

          • 用户输入,中段驱动程序发送对应信 给前台进程组.
        • 响应

          • 默认是终止进程
        • 使用

          • 一般是创建信 驱动程序时使用的信 .
        • 平台

          • 类似
          • 实现硬件定义错误.
        • 特殊信 ,一定终止,不能被忽略,阻塞,捕获.
        • 原因

          • 进程写入一个或的接收方挂了的时候。
          • 接收方已经关闭了对应的文件描述符.
        • 拓展

          • 其他章节介绍.
        • 上和类似,从推演过来.
        • 原因

          • 设置的定时器超时.
        • 这类定时器特点

          • 用时钟计时,精度更高更准确.
        • 拓展

          • 单独章节介绍
        • 原因

          • 信 .
        • 分析

          • 如果一个系统有一个机制,可以为后台电量检测设置一个检事件.
          • 比如块完了的时候发送一个信 给进程,并关掉系统.
        • 原因

          • 用户输入特殊字符,信 发送给正在执行的前台程序.
        • 默认

          • 关闭并生成一个.
        • 使用

          • 应用程序处于死循环或位置状态.退出生成调试信息.并获取堆栈.
        • 原因

          • 进程非法访问内存.
        • 生成场景分析

          • 访问不存在映射的虚拟地址.
          • 进程对只读内存进行写入.
          • 用户态进程访问内核空间,。
        • 典型

          • 指针操作.
          • 或者是符 类型错误,符 有效值错误.
        • 同,不能忽略,阻塞,捕获.因此总是终止进程.
        • 原因

          • 进程错误调用系统调用.
        • 分析

          • 使用的系统调用编 不合法.
          • 如合法,就不合法.
        • 说明

          • 标准友好的用于停止进程的信 ,也是指令的默认值.
        • 指令说明

          • 一般是,就是,这种不友好,因为有的进程需要在停止钱写入数据到磁盘中.
        • 提示

          • 好的程序应该为这个信 设置一个处理函数,让进程友好退出,友好的释放文件资源,以及其他资源.
          • 信 应该作为最后的选择.毕竟这种太粗鲁.
        • 场景

          • 用于断点粗发,系统调用跟踪.
        • 和同名的.
        • 收到紧急指针.
        • 分析

          • 为开发者保留的特殊信 ,用于用户自定义目的.
          • 开发者可以将这两个信 用做任何的目的.
        • 内核生成,因为设置的虚拟定时器超时,精度处理器时钟周期.
        • 原因

          • 在图形化界面下,窗口发生了大小变化.
          • 针对变化,应用应该进行重绘,或作出一些其他调整.
        • 进程使用处理器时间超时,具体看.
        • 文件将要超过文件上限.
    • 信 总结

      • 说明

        • 列表示常见平台和特殊平台.
        • 标准的会有一个圆点
        • 表示默认行为:进程终止,生成镜像并终止,忽略,表示停止进程,表示恢复执行进程.
      • 表格

        Name Signal number Description SUSv3 Default
        SIGABRT 6 Abort process /td> core
        SIGALRM 14 Real-time timer expired /td> term
        SIGBUS 7 (SAMP=10) Memory access error /td> core
        SIGCHLD 17 (SA=20, MP=18) Child terminated or stopped /td> ignore
        SIGCONT 18 (SA=19, M=25, P=26) Continue if stopped /td> cont
        SIGFPE 8 Arithmetic exception /td> core
        SIGHUP 1 Hangup /td> term
        SIGILL 4 Illegal instruction /td> core
        SIGINT 2 Terminal interrupt /td> term
        SIGIO/SIGPOLL 29 (SA=23, MP=22) I/O possible /td> term
        SIGKILL 9 Sure kill /td> term
        SIGPIPE 13 Broken pipe /td> term
        SIGPROF 27 (M=29, P=21) Profiling timer expired /td> term
        SIGPWR 30 (SA=29, MP=19) Power about to fail /td> term
        SIGQUIT 3 Terminal quit /td> core
        SIGSEGV 11 Invalid memory reference /td> core
        SIGSTKFLT 16 (SAM=undef, P=36) Stack fault on coprocessor term
        SIGSTOP 19 (SA=17, M=23, P=24) Sure stop /td> stop
        SIGSYS 31 (SAMP=12) Invalid system call /td> core
        SIGTERM 15 Terminate process /td> term
        SIGTRAP 5 Trace/breakpoint trap /td> core
        SIGTSTP 20 (SA=18, M=24, P=25) Terminal stop /td> stop
        SIGTTIN 21 (M=26, P=27) Terminal read from BG /td> stop
        SIGTTOU 22 (M=27, P=28) Terminal write from BG /td> stop
        SIGURG 23 (SA=16, M=21, P=29) Urgent data on socket /td> ignore
        SIGUSR1 10 (SA=30, MP=16) User-defined signal 1 /td> term
        SIGUSR2 12 (SA=31, MP=17) User-defined signal 2 /td> term
        SIGVTALRM 26 (M=28, P=20) Virtual timer expired /td> term
        SIGWINCH 28 (M=20, P=23) Terminal window size change ignore
        SIGXCPU 24 (M=30, P=33) CPU time limit exceeded /td> core
        SIGXFSZ 25 (M=31, P=34) File size limit exceeded /td> core
  4. 修改信 默认处理行为

    • 两种方式

        • 本章介绍.
        • 因为不同的系统实现可能不同,所以不建议用这个做可移植程序开发.
        • 而是下面这个.
        • 其他章节介绍.
        • 常用.
      • 功能

        • 修改信 的处理行为并设置对应响应函数.
      • 原型

      • 返回值

        • 类型:,和传入类型一样.
        • 成功:之前定义的函数.
        • 失败:
        • 修改的信 .
        • 用于响应的函数.
        • 特殊值:重置为默认,忽略信 .
      • 修改后恢复案例

        • 这个函数不能不修改查询,如果要这样做,只能用.
      • 入参和返回值简化

        • 一般来说,如果定义了,中就会有上面那个定义.
  5. 信 处理函数

上一篇 2021年1月10日
下一篇 2021年1月10日

相关推荐