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




  

相关话题

  进入内核态究竟是什么意思? 
  为什么GPU不能像CPU一样,一定要焊接在显卡中? 
  日本的电脑配件(如显卡、CPU)大概比国内便宜多少呢? 
  CPU与GPU之间是如何通信的? 
  为什么Interrupt需要存储PSW(程序状态字)但子程序调用不需要? 
  win10初装系统时怎么分区? 
  互联网公司,要求开发人员统一操作系统和开发工具,这可能是基于什么想法? 
  为什么原来说 7 nm 是半导体工艺的极限,但现在又被突破了? 
  Android 得到广泛应用的情况下,COS 操作系统有机会吗? 
  如何看待半导体供应短缺将持续到 2022 年? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利