设备驱动程序和中断服务程序

4
一个非常基础的问题。我学到设备驱动程序和中断服务例程只是一些程序或代码。每当需要时它们就会被执行。 执行意味着CPU正在执行其指令集ISA中的某些指令。那么这是否意味着设备驱动程序和ISR也是生成所需结果的机器指令?
这样的程序到底由什么组成?这样的程序是否也有数据段、代码段和堆栈段?
我正在学习x86汇编语言和C。
2个回答

3

这是一个准确的评估。一个足够复杂的设备驱动程序有数据段、代码段和堆栈段。


一台计算机从打开到关闭始终在不断地运行各种程序,跳转到一个又一个的例程或回到旧例程。这是真的吗? - KawaiKx
1
@Saurabh:一般来说是的。在极端情况下,您的主要应用程序可以是循环中的HLT命令。然后,实际执行只会在处理硬件中断请求时发生。 - Olaf
1
好的,那么例程、驱动程序、过程、子程序只是指一组指令(仅来自ISA),在执行时产生所需的结果。它们本身并没有什么特别之处,除了它们产生不同的结果。我这样说对吗? - KawaiKx
1
@Saurabh:一个足够复杂的驱动程序包含许多过程/子程序。您可以将其与常规应用程序进行比较。GUI 应用程序根据用户通过 GUI 的输入调用其许多过程。驱动程序根据硬件中断请求调用其许多过程。 - Olaf
1
明白了,但是是否真的任何驱动程序/子程序都不能超越底层ISA?我首先想要了解这个主题的大局。对于任何x86微处理器,所有可执行文件都具有相同的结构 - 数据、代码、堆栈段,无论代码是我用C语言编译的还是设备驱动程序或任何中断服务例程。这正确吗? - KawaiKx

3
考虑如何从设备中获取数据。有两种方式:
轮询:程序、操作系统内核、设备驱动程序等会不断地询问设备是否有新数据。
中断:设备告诉CPU它有重要的事情,然后“中断”CPU。CPU执行一个称为中断服务例程的例程来处理请求,然后继续执行被中断之前正在做的事情。
根据您的操作系统(或无操作系统,只是裸机),设备驱动程序可以是一个程序,也可以是操作系统内核的一个组成部分...
典型的设备驱动程序将执行以下几个操作:识别设备、初始化设备、处理来自设备的中断、处理写入/读取/配置设备的请求等。
当然,现代CPU倾向于提供保护功能,并且不允许任意进程访问设备。因此,设备驱动程序将在高特权级下运行,通常作为操作系统内核的一部分,或者在用户空间设备驱动程序的情况下,它将使用内核提供的一些明确定义的接口。

非常感谢。出于好奇,编写这些设备驱动程序和ISR使用的是什么语言?汇编,C还是其他语言?我是否正确地说这些驱动程序和ISR本身是可执行的?它们是否具有像.exe或.com这样的扩展名,或者是一些新的扩展名? - KawaiKx
2
这取决于操作系统。在Linux上,它们通常是用C语言编写的,并编译成一个带有“.ko”扩展名(内核模块)的目标文件,在运行时链接到内核中。或者它们可能会被静态链接到内核。另一方面,用户空间驱动程序是普通程序,具有足够的特权来访问I/O端口或特殊设备文件。 - ninjalj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接