- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
程序集:
考虑 Intel 8080 .要处理中断(例如来自键盘),您只需让键盘将“INT”引脚拉高并在数据总线上放置一个“向量”。该向量指向中断服务例程 (ISR) 在汇编程序代码中的位置。参见 this answer了解更多详情。
高级语言:
考虑附加事件监听器的概念。例如考虑 Javascript's keydown
event listener .一个example :
document.getElementById("demo").addEventListener("keydown", myFunction);
function myFunction() {
document.getElementById("demo").style.backgroundColor = "red";
}
当“demo”元素处于焦点状态时按下某个键时,将调用 myFunction
。
关系:
附加事件监听器的概念与在汇编中具有 ISR 的概念有何关系?
我假设直接响应键盘中断的函数是 1) 操作系统内核的一部分和 2) 用 C 编写的。(这些假设是否正确?)
用户程序如何告诉这个操作系统中断处理程序在中断时提醒它?操作系统函数是否保留可变大小的函数列表以在处理中断时回调?然后 addEventListener
是否将用户回调函数附加到 OS 函数的列表中?
注意:我特别选择 Intel 8080 作为示例,因为与现代 CPU 相比,它没有辅助操作系统相关功能的奇特功能。
最佳答案
从按下一个键到运行 JavaScript keydown
事件监听器中的代码,这是一个漫长而复杂的过程。假设一个 USB 键盘,通过硬件和软件层的路径是这样的:
keydown
事件监听器(用户层)其中大部分内容并不像您假设的那样有效。特别是没有键盘中断。相反,有一个 USB 中断,但它并不像您想象的那样工作。当您按下 USB 键盘上的某个键时,不会将消息发送到计算机并生成中断。相反,键盘将按键按下添加到其内部队列并等待计算机对其进行轮询。
这是因为USB通信完全由USB主机(电脑)调度。除非响应主机的请求,否则 USB 设备不允许在总线上通信。由于 USB 事务被安排在一毫秒的帧中,通常操作系统只会每毫秒轮询一次 USB 键盘,要求它报告自上次轮询设备以来发生的任何事件。只有当键盘响应这个请求时(或者可能当帧中所有预定的传输都完成时),USB Controller 才会产生中断。
键盘的响应将采用 HID (Human Interface Device) 的形式报告。 HID 堆栈将对其进行解码以查看报告了哪些键盘事件,并将它们转换为所有键盘类型通用的格式。这将由操作系统中的某种用户界面层(例如 Windows 上的“Win32”API 层,或 Linux 上的 X 服务器)进一步处理,然后放入浏览器的 UI 事件队列中。
浏览器不会因为按键被按下而“中断”。相反,浏览器将有一个主 UI 界面事件循环,并且事件将只在程序中的单个定义点一次处理一个。这个循环所做的就是从 UI 事件队列中提取事件并将它们分派(dispatch)到浏览器中的适当代码。当队列为空时(通常几乎所有时间),循环只是等待一个事件。在等待期间,事件循环的线程未被操作系统调度,也未在任何 CPU 上运行。
一旦 UI 事件循环获得键盘事件,它就会传递给浏览器的键盘事件处理程序,然后由浏览器的键盘事件处理程序将其传递给 JavaScript 引擎。然后引擎将执行指定为 keydown
事件监听器的函数。引擎可能有自己的事件队列,因为 JavaScript 事件通常也一次只处理一个。
除了在调用实际调度它们的 C 代码之前充当中断和系统调用的着陆点的内核中的少量代码外,这些都不会用汇编编写。
关于events - 事件监听器的实现——汇编与高级语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51238247/
对于相当简单的表结构,即。人员、标准和 PersonCriteria(组合表),我现在设置了一个查询,选择所有符合所有选定条件的人。 此时查询本身看起来像这样: SELECT p.PersonID
我在使用高级 SQL 查询时遇到了一些问题,而且我已经有很长时间没有使用 SQL 数据库了。我们使用 MySQL。 背景: 我们将使用两个表: “交易表” 表:expire_history +----
我找不到错误。也许你可以帮助我:我的代码如下: var data = {"product":[{"config":[{"id":"1","price":"100","sku":"1054879634
我有一个列表列表的列表(最后一个列表并不重要) data = [[[['f', 0], 'C'], [['X', 0], 'X']], [[['s', 1], 'X'], [['X', 0], 'X'
我想准备将使用表格的 session ,并在另一个网站上将新项目添加到 session 中。 默认.cs string[] tab = new string[100];
我知道有一些像: Bubble sort Insertion sort Shell sort Merge sort Heapsort Quicksort Bucket sort Radix sort
像https://softwareengineering.stackexchange.com/questions/150616/return-random-list-item-by-its-weigh
我正在开发一个 posix 脚本 (Linux),它获取一个网页,将内容存储在一个变量中并查找字符串“SUCCESS”。如果找到字符串,则不执行循环内容,如果没有找到字符串,则反复执行循环,直到找到为
我不确定这个问题是否已在其他地方得到解答,而且我似乎无法通过谷歌找到任何不是“Hello World”示例的内容...我正在使用 C# .NET 4.0 进行编码。 我正在尝试开发一个控制台应用程序,
我创建了一个房地产网站,我希望按照列表的最后更新和完整性对列表进行排序。所以我一直想弄清楚如何结合最近更新的列表按mysql中的字段(completion_score)进行排序。完成分数将采用 1
只所以称为“高级”用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实还是它的基础用法! switch 语句和具有同样表达式的一系列的 IF 语句相似。很多场合下需要把同一
之前的章节中,我们学习了 XML DOM,并使用了 XML DOM 的 getElementsByTagName() 方法从 XML 文档中取回数据 本章节我们将继续学习其它重要的 XML DOM
我对我尝试编写的 SQL 查询有疑问。 我需要从数据库中查询数据。该数据库除其他外,还包括以下 3 个字段: Account_ID #, Date_Created, Time_Created 我需要编
我正在使用非常激进的视频压缩,例如 -crf 51 .我将其用于“艺术”效果,因此从普通视频压缩的角度来看,我所做的可能没有意义。 到目前为止,我只使用了非常基本的压缩控制,只使用了 -crf。或 -
我真的在学习 lucene 和 ravendb 上的绳索 - 我在 Raven 中有以下文档 - { "InternalEvent": { "Desec": "MachineInfo: 1
通常 grep 命令用于显示包含指定模式的行。有没有办法在包含指定模式的行之前和之后显示 n 行? 这可以使用awk来实现吗? 最佳答案 是的,使用 grep -B num1 -A num2 在匹配之
我搜索了高低,并尝试了几个小时来操纵似乎适合的各种其他查询,但我没有快乐。 我试图加入 Microsoft SQL Server 2005 中的几个表,其中一个示例是: Company Table (
我有一个如下所示的 XML 文件: teacher1Name
我将如何在 CF 中创建此语句? 显然括号不起作用,但说明了我想要完成的工作。这是什么语法? 编辑: 好的,我了解如何使用 EQ 等等。我有点匆忙地发布了这个。我的问题是关于括号。以这种方式使用它们
主要问题:我需要使用具体对象结构对任何对象结构进行类型扩展。 我在 VS Code 中测试的默认值。 我的解决方案: /** @template A @typedef {{[Ki in keyof A
我是一名优秀的程序员,十分优秀!