• 【操作系统】聊聊Linux软中断


    什么是中断

    中断是系统用来响应硬件设备请求的一种机制,会打断进程的正常调度和执行,转而去执行内核中的中断处理程序。
    比如你正在看书,你女朋友叫你出去逛街。你就需要先放下手里的事情,然后逛街。回来之后,在接着看书。

    中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。
    因为中断会打断正在运行的进程执行,所以需要非常快的执行。但是在实际中,可能A进程执行,执行一个中断,如果此时有别的中断,就不会被执行,而需要先等第一个中断执行完毕。而第二次的中断就可能丢失。

    软中断

    为了解决中断执行时间过程和可能丢失中断的问题,将中断分为两阶段。

    • 上半部分快速处理中断。中断模式下运行,一般以硬件相关方式工作。
    • 下半部分处理延迟未处理的工作,通常以内核线程的方式运行

    比如我们常说的网络数据包,当服务端发送数据包到客户端,首先会通过硬中断的方式进行通知内核数据到了,然后内核调用中断处理程序响应。将网卡的数据读取到内存中,然后更新硬件寄存器的状态,发送一个软中断的信号。

    下半部分就是将软中断信号唤醒后,从内存找到数据进行按照数据逐层解析,发送给应用程序。
    上半部分处理硬件请求,也叫硬中断
    下半部分处理软请求,也叫软中断

    查看软中断和内核线程

    proc 是用户空间和内核空间通信的机制,可以通过

    • /proc/softirqs 提供了软中断的运行情况;
    • /proc/interrupts 提供了硬中断的运行情况。
    root@qxlxi:/# cat /proc/softirqs
                        CPU0       CPU1       
              HI:          7          3
           TIMER:    4857682    4999161
          NET_TX:     176194      61001
          NET_RX:     216930     191267
           BLOCK:     130746     129902
        IRQ_POLL:          0          0
         TASKLET:       4041       4238
           SCHED:    4402511    4539135
         HRTIMER:          0          0
             RCU:    4878791    4871501
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • NET_RX 表示网络接收中断
    • NET_TX 表示网络发送中断。

    查看

    root@qxlxi:/# ps aux | grep softirq
    root           9  0.0  0.0      0     0 ?        S    Sep18   0:07 [ksoftirqd/0]
    root          18  0.0  0.0      0     0 ?        S    Sep18   0:05 [ksoftirqd/1
    
    • 1
    • 2
    • 3

    小结

    本篇主要说了中断的类型,硬件中断和软件中断,分别以及查看对应的命令

  • 相关阅读:
    前端如何进行高效的分包
    全网最全:Mysql六种约束详解
    产品新人必看:入职前的准备及快速适应产品工作
    扩散模型加持下,机器人模型DALL-E-Bot可以轻松完成自主重新排列任务
    组合模式 rust和java的实现
    服务器技术(二)--Linux进阶应用(2)--Linux用户与权限及CentOS7防火墙firewall
    队列(JAVA)
    strongswan:configure: error: OpenSSL Crypto library not found
    01 Python进阶:正则表达式
    Runner GoUI自动化测试发布
  • 原文地址:https://blog.csdn.net/jia970426/article/details/133244125