• 中断的上半部分与下半部分


    为了让内核能够快速响应硬件设备的消息,引入了中断机制。当硬件设备需要被处理(比如网卡收到了包),会发送一个异步的中断请求给处理器,然后处理器陷入中断上下文中,停止当前执行的程序,转而执行预先设定好的中断处理程序。完成中断处理程序之后给硬件设备一个信号再返回原先的工作继续。

    在这套机制中,中断处理程序的编写非常关键。一方面,它必须完成对硬件中断响应的处理,比如网卡中断,要把缓冲区里的内容复制到内存,并且进行解析,然后返回给硬件,告诉硬件前一个中断已经处理掉了。在这个过程中,处理器陷入中断上下文,代码不可阻塞。另一方面,因为不可阻塞,中断响应程序必须尽可能短,以免错过接下来的中断。这样,既要处理的快,又要处理得多,就存在着速度与工作量的矛盾。

    对此,解决方案是把中断处理程序拆分成两部分,上半部分和下半部分。上半部分负责处理紧急而简单的任务,例如告诉硬件中断已经处理了;下半部分负责处理与当前中断 相关的、繁重的、不是那么紧急的任务,比如对网卡收到的信息进行解析。上半部分要求接到中断立即执行,越快越好;而下半部分则不必立即执行,在系统比较空闲的时候(不一定是完全空闲,可以加入调度队列参与调度)再执行。

    对于上半部分的实现,与嵌入式的中断机制类似,系统收到中断请求立刻执行。
    ————————————————
    版权声明:本文为CSDN博主「他山之金」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u010281174/article/details/54346505

  • 相关阅读:
    Java初学者:for循环介绍
    Java初学者:条件判断及其语句
    Java初学者:基本数据类型的强制类型转换
    eclipse+gradle+nodejs搭建web开发环境
    桑基图(sankey)
    tomcat性能优化
    数据库概览与选择
    在linux上装 postgresql 在 windows或 linux 连不上的问题的解决方法
    mosquitto的TLS功能测试,客户端使用paho.mqtt.golang(附JAVA版客户端实现)
    两步使用arm-linux-androideabi-addr2line定位JNI动态库中C代码错误位置
  • 原文地址:https://www.cnblogs.com/feng9exe/p/12520357.html
Copyright © 2020-2023  润新知