Multithreading 异步编程和中断异常处理程序

Multithreading 异步编程和中断异常处理程序,multithreading,asynchronous,exception,operating-system,Multithreading,Asynchronous,Exception,Operating System,我是编程新手,只是一个关于异步编程实际如何工作的问题。 我们知道,中断是异步发生的,这是由于I/O设备发出的信号 在处理器外部。因此,例如,当处理器执行完一条指令,并且处理器注意到中断引脚变高(例如,网络适配器通知有数据到来)时,从系统总线读取异常号,然后调用相应的中断处理程序。当处理程序返回时,它将控制权返回到下一条指令。 所以它需要硬件支持。(分配给I/O的专用pin) 那么,在没有硬件支持的情况下,异步编程如何工作呢?操作系统如何向当前进程发送“Hi the result is ready

我是编程新手,只是一个关于异步编程实际如何工作的问题。 我们知道,中断是异步发生的,这是由于I/O设备发出的信号 在处理器外部。因此,例如,当处理器执行完一条指令,并且处理器注意到中断引脚变高(例如,网络适配器通知有数据到来)时,从系统总线读取异常号,然后调用相应的中断处理程序。当处理程序返回时,它将控制权返回到下一条指令。 所以它需要硬件支持。(分配给I/O的专用pin) 那么,在没有硬件支持的情况下,异步编程如何工作呢?操作系统如何向当前进程发送“Hi the result is ready,come and get it”的“通知”。 据我了解,没有硬件支持,我们只能通过多线程或多进程来实现

因此,它需要硬件支持。(分配给I/O的专用引脚)因此,没有硬件支持,异步编程如何工作,操作系统如何向当前进程发送“结果就绪,请过来获取”的“通知”。据我了解,没有硬件支持,我们只能通过多线程或多进程来实现

理解(通常)有许多层被(通常是有意抽象的)接口分隔开。从最低层到最高层,这些层可能是:

  • 平台设施的硬件接口(例如芯片组内置的中断控制器)
  • 各种类型设备的硬件接口
  • 抽象设备驱动程序接口
  • 内核的API
  • 一种“运行时”语言(例如,可能是一个或多个共享库,但也可能是像Java的虚拟机这样的虚拟机)
  • 由工具(例如编译器、链接器)生成的程序
  • 开发人员的源代码
在所有这些层次的东西中都有(有益的)谎言和诡计。您可能认为您将变量X设置为值123,但编译器决定优化代码并执行其他操作。您可能认为您收到了来自操作系统的通知,但该通知实际上来自语言的运行时,而操作系统从未发送过该通知。您可能认为该通知重新启动了一个线程,但线程是来自某个人(可能是编译器,可能是运行时,可能是内核)的一个大谎言

弄清楚异步通知如何工作的确切机制,以及它在所有不同的层上到底是什么;您需要了解有关特定场景的更多信息(哪个编译器编译哪个语言的哪个版本,使用哪个设置在哪个体系结构/硬件之上的哪个操作系统上运行)。

多线程(至少是常见的先发制人样式)也使用中断——具体来说,一个计时器中断,当当前量程启动时触发,是时候让调度程序为下一个量程选择另一个线程执行了。