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




  

相关话题

  Linux 为什么还要坚持使用宏内核? 
  为啥英特尔(Intel)利润如此丰厚,每年也投入大额研发资金,近年中央处理器技术却进展迟缓? 
  如何评价UOS统一操作系统? 
  为什么 Microsoft 对 Windows 变成垃圾场无动于衷? 
  现在手机 SoC 性能大概相当于哪个时代的 PC? 
  最早的操作系统API出现在什么时候? 
  IC相关从业者需要常关注哪些网站、微博、公众号? 
  内存(DRAM)的连续读写速度和随机读写速度是一样的吗? 
  如何看待 2021 年 9 月 3 日 Windows 11 内测版 任务栏卡死? 
  cpu的核心模式和用户模式是不是就是root和不root的区别? 

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





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利