【问题标题】:Are events passed through the OS?事件是否通过操作系统传递?
【发布时间】:2023-04-08 22:21:01
【问题描述】:

首先,如果事件源自硬件输入,操作系统如何检测这些事件?这是通过轮询还是通过 BIOS 实现的?那么 BIOS 将如何捕获这些事件呢?轮询?他们不能使用 API,因为它与硬件交互,或者他们可以吗?

其次,操作系统是否会将这些事件沿链向上传递,例如,将它们传递给更高级别的编程语言(如 javascript)的浏览器?

第三,是否所有事件驱动模型最终都依赖轮询机制来检测 OS/BIOS 级别的事件?如果是这样的话,我们能否在事件驱动编程中拥有一个真正的“推送”系统?

【问题讨论】:

    标签: javascript google-chrome events operating-system


    【解决方案1】:

    冒着过于简单化的风险,如今大多数事件都是从中断开始的。硬件触发 CPU 中断,该中断调度到中断处理程序。

    然后中断处理程序决定如何处理它们。

    如果一个进程以某种方式注册以收到中断通知,则可能发生两件事:

    1. 操作系统可以触发软件中断。这会中断进程的正常运行并调用该进程已声明处理“事物”的函数。一个进程通常可以有多个函数处理不同的中断。

    2. 操作系统可以创建添加到事件队列的事件。该进程从队列中读取数据以确定正在发生的事情(MS-Windoze/X Windows 编程模型)。

    事实上,Windoze 使用了这两种机制。底层 NT 系统被设计为使用软件中断(使用演示管理器 UI)。当Windoze 3 起飞时,M$ 切换到隐藏底层软件中断系统的WIndoze 界面

    轮询可能用于某些类型的设备,但这种情况越来越不常见。在过去,您必须反复轮询操纵杆以确定其位置。飞行模拟必须反复轮询操纵杆以确定前进的方向,为此,它必须轮询多次。

    因此,通常的顺序是操作系统获得中断 > 操作系统处理中断 > 操作系统创建队列条目 > 应用程序从队列中挑选条目。

    【讨论】:

    • 这很有意义,我只是想知道中断处理程序是如何工作的?这篇文章link 看起来好像中断处理程序是由操作系统控制的?如果是这样,中断处理程序如何等待/接收中断?
    • 没有。操作系统为中断、陷阱和故障定义了一个处理程序表。除以零并以相同的方式处理中断。当中断发生时,操作系统中断它正在做的事情,切换到内核模式,然后调用分配给中断的处理程序。奇怪的是,当时正在执行的任何进程都会处理中断。 Bill 的应用程序可以处理 Fred 的磁盘读取中断。
    • 那么CPU调用中断处理程序就不用轮询了吗?
    • 是的。或者更确切地说,硬件触发 CPU 调用中断处理程序。
    猜你喜欢
    • 2012-08-16
    • 2016-06-08
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2021-12-31
    • 2016-08-27
    相关资源
    最近更新 更多