百科问答小站 logo
百科问答小站 font logo



CPU检测到中断信号时,怎么知道是发给哪个进程的? 第1页

  

user avatar   ling-jian-94 网友的相关建议: 
      

题主应该先系统学一下微机原理相关的教材的,我说的简单一点

硬件中断从来不是发送给进程的,而是发送给操作系统内核,由内核统一处理,而不关心当前正在执行的是哪个进程,不管哪个进程操作都是一样的:保存现场,进入内核,执行需要的操作,返回中断前的现场,继续进程执行。

CPU写入外部设备有两种不同的方式,一种是直接操作硬件设备寄存器,这一般是不需要中断的,CPU在写入一个寄存器的时候会处于阻塞状态,直到写入完成之前不能继续,因此通常只有处理非常少的数据的时候才会这样做。另一种方式是使用DMA,DMA是一个专用的外部设备,CPU将需要发送的数据提前在内存中准备好,然后设置DMA设备的寄存器,让DMA设备从内存的指定位置开始,将内存中数据依次写到对应地址的外部硬件寄存器里,这样在DMA写入的同时CPU就可以做其他工作。DMA写入完成后会产生一个中断通知CPU。这些都和当前执行的进程无关。进程只是直接跟操作系统内核通信,内核负责通过调度来通知进程操作是否完成之类的信息。

再举个详细点的例子,比如某个进程要读取一个文件,向内核发送了一个read的syscall调用,陷入内核,内核会设置DMA,然后把进程挂起。因为进程挂起了,内核另找了一个进程切换进来执行。当DMA完成发生中断的时候,不管当前执行的是哪个进程,都会直接通过中断进入内核,这个过程外部执行的进程是察觉不到的,它在执行的途中被打断然后冻结在了执行现场,就像时间停止了一样(这就是“中断”的含义),CPU开始执行内核中的中断处理程序,内核通知之前挂起的进程操作已经完成,并且取消挂起,这时候这个进程是否会立即抢占进来,取决于优先级,在Linux当中一般会把因为IO挂起的进程优先级稍微调高一点让它们立即抢占进来,提高IO效率;但如果不能抢占进来,就会恢复当前的进程的执行,等到高优先级执行结束后,再让之前挂起的进程切换进来继续执行,这对于执行IO的进程来说是不可见的。




  

相关话题

  SPEC CPU 2017的浮点性能测试项,与大多数用户无关,为什么将其视为CPU理论性能评测工具? 
  中国的龙芯处理器现在到什么地步了?换句话说就是相当于几代英特尔。? 
  Win11让AMD很受伤,游戏性能下降15%,官方建议暂时别升级,你的电脑CPU在受影响的列表中吗? 
  新建 CPU 工厂要投资几十亿美元,钱都花在哪里了? 
  Jim Keller 有什么有趣的故事吗? 
  英特尔斥资 20 亿美元收购 AI 芯片公司 Habana Labs,此举会产生哪些影响? 
  现在的家用处理器能够满足上世纪五六十年代造原子弹所需的计算量吗? 
  影子系统的工作原理是什么? 
  如何看待华为终端 2020 年除了手机、平板和电脑外全线搭载鸿蒙系统? 
  将近十年后,如何评价AMD收购ATi? 

前一个讨论
为何中国人迷恋吴恩达的机器学习课?
下一个讨论
2021 年音视频领域有哪些突破性技术与发展?明年甚至更远的未来是否会迎来技术性拐点?





© 2025-06-18 - tinynew.org. All Rights Reserved.
© 2025-06-18 - tinynew.org. 保留所有权利