异步编程并中断异常处理程序

时间:2019-03-21 23:22:17

标签: multithreading asynchronous exception operating-system

我是编程的新手,只是一个关于异步编程实际工作方式的问题。 我们知道中断是由于来自I / O设备的信号 在处理器外部。因此,例如,当处理器完成一条指令的执行,并且处理器注意到中断引脚变高时(例如,网络适配器通知有数据传入),从系统总线中读取异常号,然后调用适当的中断处理程序。当处理程序返回时,它将控制权返回到下一条指令。 因此,它需要硬件支持。 (分配给I / O的专用引脚) 因此在没有硬件支持的情况下异步编程如何工作,操作系统如何向当前进程发送“通知您已经准备好了,快来拿到它”的“通知”。 据我了解,没有硬件支持,我们只能通过多线程或多进程来实现。

1 个答案:

答案 0 :(得分:0)

  

因此它需要硬件支持。 (分配给I / O的专用引脚),这样异步编程如何在没有硬件支持的情况下工作,操作系统如何向当前进程发送“通知您已准备好结果,快来获取”的“通知”。硬件支持,我们只能通过多线程或多进程来实现。

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

  • 平台设备的硬件接口(例如,芯片组内置的中断控制器)
  • 用于各种类型设备的硬件接口
  • 抽象设备驱动程序接口
  • 内核的API
  • 一种语言“运行时”(例如,一个或多个共享库,但也可能是诸如Java虚拟机之类的虚拟机)
  • 由工具(例如编译器,链接器)生成的程序
  • 开发人员的源代码

在所有这些层面上,都有(有益的)谎言和诡计。您可能会认为将变量X设置为值123,但是编译器决定优化代码并执行其他操作。您可能以为您从操作系统收到了一条通知,但是该通知实际上来自语言的运行时,并且操作系统从未发送过该通知。您可能会认为该通知重新启动了一个线程,但是线程是某人(可能是编译器,可能是运行时,可能是内核)的一个谎言。

弄清异步通知如何工作以及它在所有不同层中的真正含义的确切机制;您需要了解有关特定方案的更多信息(哪个通知针对哪个语言的哪个版本,哪个编译器以及哪个设置在哪个体系结构/硬件之上的哪个OS上运行)。