- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 *nix 上看到的一切都是对硬件的一组抽象,但我很好奇硬件是如何工作的。
我已经在汇编中进行了编程,但这仍然只是一组抽象。
处理器如何理解汇编操作码(作为字节码)?
设备驱动程序如何工作(在较低级别(抽象)进行解释)?
最佳答案
设备驱动程序形成操作系统的设备 API 和实际硬件寄存器之间的接口(interface)。
linux 设备 API 模型是更广泛的 linux 概念的延续,即一切都是文件,应用程序可以通过 open()、read()、write()、ioctl() 和 close( ) 界面。在后台,有一个 install() 例程,但操作系统决定何时调用它。
硬币的另一面是硬件。 CPU 使用特殊的 I/O 指令访问设备寄存器,或者使用普通的内存访问连接到硬件的特殊内存位置。虽然硬件寄存器可以像内存一样工作,但它们可以做内存不能做的事情。相当频繁地,写入设备的一个寄存器可以改变它的一些其他寄存器的值,并且可以通过连接硬件中的电事件来改变或改变。
设备驱动程序弥合了这一差距。由于设备类型的可能性几乎是无限的,因此很难概括出功能是如何映射的,除了几个点。 install() 例程在系统启动时触发,配置寄存器以进行正确操作,通常这包括设置中断服务和处理; open() 例程为应用程序提供与设备的逻辑连接;通常会努力使 read() 和 write() 以某种合理的方式移动数据,尽管有时您会看到这些实现为无操作;动态设备设置通过 ioctl() 操作。当然,close() 的主要工作是撤消 open() 的工作,特别注意释放 open() 获取的任何系统资源。
好吧,无论如何,这就是以 linux 为中心的观点。 Windows 模型,至少是我熟悉的模型(可能已经过时),倾向于提供特定于设备的函数调用库。
关于assembly - 超越抽象的好奇心 : how is bytecode executed? 设备驱动程序如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845648/
嗯, 当我阅读并尝试每一个类似的主题但都没有成功时,我决定发布我自己的问题。我的解决方案有一个控制台应用程序和一个用于数据访问的类库。 Nhibernate 配置位于控制台应用程序的 appconfi
我正在尝试通过“Your first NHibernate based application”来了解其他类型的 ORM(我习惯于 DevExpress 的 XPO),我知道 tut 使用的版本之间存
我正在使用 Kotlin 和 Dagger 2 开发一个 Android 项目。我有一个 NetworkModule它应该提供 Retrofit 的单例实例。我在其中定义了所有这些提供程序功能。 下面
我已经用 Java 创建了一个原型(prototype) VM(因为它是我最熟悉的语言),并且我正在尝试以字节码格式存储指令。我想知道如何在字节码中存储值,因为字节只能是 0 到 255。 举个例子:
我一直在尝试使用 ASM 框架在我感兴趣的位置注入(inject)字节码,到目前为止我已经成功了。目前我正在尝试注入(inject)代码,该代码基本上创建了一个类的新实例/对象,在阅读了一些内容之后,
假设没有为程序生成字节码,例如在 Ruby、Perl 或 PHP 中,在这种情况下,每次执行到第 1 行时是否重新解释下面的第 1 行? while ($indexArrayMoviesData <
我需要使用卡片外的字节码验证器来验证Java Card程序(盖帽文件)。 我已经手动修改了cap文件中的信息,并且我想验证新的cap文件是否类型正确。 我尝试使用com.sun.javacard.sc
我在 Startup 中设置了以下代码 IDictionary properties = new Dictionary(); properties.Add("connection.driver_cla
我在哪里可以获得NHibernate.ByteCode.CaSTLe.ProxyFactoryFactory源代码?它在 NHibernate 存储库中,但大约一个月前被删除了。它现在在哪里? 谢谢!
没有dup指令,一个让我复制堆栈顶部的指令。我可以使用哪个指令序列来复制这种行为? 最佳答案 Wasm 没有堆栈杂耍原语,因为它有局部变量。要复制操作数堆栈的顶部,您需要定义一个正确类型的局部变量。然
据我了解,GHC(Glorious Glasgow Haskell 编译器)将 Haskell 编译为“Core”,然后将该 Core 编译为机器代码。将 Haskell 程序作为 GHC Core
有一些框架可用于动态字节码生成、操作和编织(BCEL、CGLIB、javassist、ASM、MPS)。我想了解它们,但由于我没有太多时间了解所有这些的所有细节,我想看一种比较图表,说明一个与其他的优
我修改了程序集的字节码以消除错误,现在当我尝试使用它时,我得到了一个 InvalidProgramException。我所做的就是用 NOPS 替换这段代码: catch (Exception exc
我修改了程序集的字节码以消除错误,现在当我尝试使用它时,我得到了一个 InvalidProgramException。我所做的就是用 NOPS 替换这段代码: catch (Exception exc
Python 是解释型而非编译型,这意味着每一行源代码都被逐行编译为 BYTECODE。 (我刚才使用的术语“编译”是正确的吗?) 谁执行从源代码到 BYTECODE 的转换?(这是解释器程序吗?).
我正在研究 a fork来自 Jetbrains 的 FernFlower,我一直在对其进行小的改进。 关于 FernFlower 真正让我恼火的一件事是,它根据局部变量在 bpush/spush 等
这个问题几乎说明了一切,我一直在四处寻找答案,甚至通过 VM 规范,但我没有明确说明。 最佳答案 没有。 不过,还有其他一些具有跟踪 JIT 的 JVM:HotPath和 Maxine ,例如。 关于
我目前正在编写一个针对翻译中的 Java 字节码的玩具编译器。 我想知道在编写 .class 文件之前,是否存在可以在发出的字节码中进行的各种简单窥视孔优化的某种目录,也许是摘要。我实际上知道一些库具
我按照 http://asm.ow2.org/current/asm-transformations.pdf 中“3.2.6 内联方法”中的示例代码,将 MethodNode 内联到调用站点。 我的问
我在 *nix 上看到的一切都是对硬件的一组抽象,但我很好奇硬件是如何工作的。 我已经在汇编中进行了编程,但这仍然只是一组抽象。 处理器如何理解汇编操作码(作为字节码)? 设备驱动程序如何工作(在较低
我是一名优秀的程序员,十分优秀!