百科问答小站 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的进程来说是不可见的。




  

相关话题

  大一新生,刚买了搭载intel处理器的笔记本才得知AMD,yes。怎么办? 
  显卡是1060 6g,用驱动之家、官网、设备管理器重装过驱动了,却一直报错,如何解决? 
  AMD真的比INTEL的CPU强很多了吗? 
  为什么市面上没有山寨的 CPU 卖? 
  现在高端笔记本电脑的CPU真的性能过剩吗? 
  如何评价联想杨元庆“相信全球化”、“一个公司没必要做所有的事情,联想并不打算做操作系统和芯片”的言论? 
  为什么cpu的浮点计算能力差,什么是浮点计算,gpu为什么擅长浮点计算? 
  如何看待微软承认签名了恶意驱动程序"Netfilter"? 
  在微软官网下载的Windows系统真的是最好的操作系统么? 
  CPU的功耗和什么相关?为什么一个while(1);就可占满CPU的功耗? 

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





© 2025-03-29 - tinynew.org. All Rights Reserved.
© 2025-03-29 - tinynew.org. 保留所有权利