硬中断、软中断

来源:互联网 发布:搜狐软件 编辑:程序博客网 时间:2024/04/30 05:01
繁體
你好,游客 登录 注册 搜索
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认
阅读新闻

硬中断与软中断的区别

[日期:2014-03-11]来源:Linux社区  作者:noican[字体:大 中 小]

硬中断:

1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。

2. 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。

3. 硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。

4. 对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程来运行。它的存在是为了让调度代码(或称为调度器)可以调度多任务。

软中断:

1. 软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。

2. 通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同。

3. 软中断仅与内核相联系。而内核主要负责对需要运行的任何其他的进程进行调度。一些内核允许设备驱动的一些部分存在于用户空间,并且当需要的时候内核也会调度这个进程去运行。

4. 软中断并不会直接中断CPU。也只有当前正在运行的代码(或进程)才会产生软中断。这种中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求。有一个特殊的软中断是Yield调用,它的作用是请求内核调度器去查看是否有一些其他的进程可以运行。

问题解答:

1. 问:对于软中断,I/O操作是否是由内核中的I/O设备驱动程序完成?

答:对于I/O请求,内核会将这项工作分派给合适的内核驱动程序,这个程序会对I/O进行队列化,以可以稍后处理(通常是磁盘I/O),或如果可能可以立即执行它。通常,当对硬中断进行回应的时候,这个队列会被驱动所处理。当一个I/O请求完成的时候,下一个在队列中的I/O请求就会发送到这个设备上。

2. 问:软中断所经过的操作流程是比硬中断的少吗?换句话说,对于软中断就是:进程 ->内核中的设备驱动程序;对于硬中断:硬件->CPU->内核中的设备驱动程序?

答:是的,软中断比硬中断少了一个硬件发送信号的步骤。产生软中断的进程一定是当前正在运行的进程,因此它们不会中断CPU。但是它们会中断调用代码的流程。

如果硬件需要CPU去做一些事情,那么这个硬件会使CPU中断当前正在运行的代码。而后CPU会将当前正在运行进程的当前状态放到堆栈(stack)中,以至于之后可以返回继续运行。这种中断可以停止一个正在运行的进程;可以停止正处理另一个中断的内核代码;或者可以停止空闲进程。

linux
  • 3
  • 顶一下
Linux下的中断(interrupt) 简介
Python字典操作用法总结
相关资讯       中断  硬中断  软中断 
  • 浅析 Linux/UNIX 信号机制  (今 09:13)
  • 理解 Linux 内核的软中断  (05月12日)
  • 利用红外线接收器触发中断信号  (03/06/2014 13:11:26)
  • Linux内核软RPS实现网络接收软中断  (07月01日)
  • Linux下的中断(interrupt) 简介  (03/11/2014 09:57:53)
图片资讯      
  • Linux内核软RPS实现网络接收软中断的负载均衡分发Linux内核软RPS实现网
  • 理解 Linux 内核的软中断理解 Linux 内核的软
本文评论   查看全部评论 (0)
表情: 表情 姓名:   字数  
 
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
最新资讯
  • 浅析 Linux/UNIX 信号机制
  • CentOS 7 安装MySQL
  • 解决Qt在openSUSE上编译出现“cannot find -lGL
  • CentOS7 (64位) 下QT5.5 连接MySQL数据库(
  • UNIX文件权限之“设置用户ID位”
  • CentOS 7安装Nginx
  • GNU、开源和 Apple 的那些黑历史
  • 2015 黑帽大会准备曝光 30 多个零日漏洞
  • 微软开发了Android上的桌面启动器
  • Linux Kernel 4.2-RC4 发布下载
本周热门
  • Shell for&while 循环详细总结
  • PyQt4 精彩实例分析
  • C++基础知识学习笔记
  • Android SD卡路径问题以及如何获取SDCard 内存
  • ./configure,make,make install的作用
  • Linux的sleep()和usleep()的使用和区别
  • Android的onCreateOptionsMenu()创建菜单Menu详
  • Android解析JSON方式
  • Android大图片裁剪终极解决方案
  • Java利用httpasyncclient进行异步HTTP请求
0 0