2011-05-25 50 views
3

一个非常基本的问题。我了解到设备驱动程序和中断服务例程只是一些程序或代码。无论何时需要他们被执行。执行意味着CPU正在执行指令集ISA以外的某些指令。那么这是否意味着设备驱动程序和ISR也是机器指令来生成所需的结果?设备驱动程序和中断服务程序

这些程序究竟如何喜欢设备驱动程序和中断例程?这样的程序是否也有数据段,代码段和堆栈段?

我正在学习x86汇编语言和C。

回答

3

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

+0

一台计算机从一个程序运行到另一个程序运行到另一个程序或返回到旧程序,从打开它一直到它关闭的时间。这是否也是如此? – KawaiKx 2011-05-25 15:39:24

+1

@沙拉布:一般来说是。在边缘情况下,您的主应用程序可以是一个循环中的HLT命令。那么只有在处理硬件中断请求时才会发生实际执行。 – Olaf 2011-05-25 15:43:44

+1

o.k.罚款..所以例程,驱动程序,过程,子程序只是一个指令块(只有来自ISA)的花哨名称,执行时会产生所需的结果。除了他们不同的结果之外,他们没有什么特别的。我说得对吗? – KawaiKx 2011-05-25 15:48:01

3

请考虑如何从设备获取数据。有两种方式:

  • 投票:我们到了吗?我们到了吗?程序,操作系统内核,设备驱动程序,不管...一直询问设备是否有任何新数据。
  • 中断:设备告诉CPU它有一些重要的东西,并且中断 CPU。 CPU执行一个称为中断服务例程的例程来为请求提供服务,然后继续它在中断之前执行的任何操作。

根据您的操作系统(或无OS,只是裸机)的设备驱动程序可以是程序,也可以是你的操作系统内核的一个组成部分,...

典型的设备驱动程序会做几件事情:识别设备,初始化设备,处理来自设备的中断,处理写入/读取/配置设备的请求,...

当然,现代CPU倾向于提供保护功能,允许任意进程访问设备。因此,设备驱动程序将以高权限级别运行,通常作为操作系统内核的一部分运行,或者如果用户空间设备驱动程序将使用内核提供的一些定义良好的界面。

+0

非常感谢..出于好奇心,用什么语言编写这样的设备驱动程序和ISR?组装,C或其他语言?我是否正确地说,这些驱动程序和ISR可以在自己的系统中执行?他们有扩展名如.exe或.com或一些新的扩展? – KawaiKx 2011-05-26 14:53:43

+2

这取决于操作系统。在Linux上,它们通常用C编写,并编译成一个扩展名为“.ko”的对象文件(内核模块),在运行时将其链接到内核中。或者他们可能静态链接到内核。 OTOH,用户空间驱动程序是正常的程序,运行时具有足够的权限来访问I/O端口或特殊设备文件。 – ninjalj 2011-05-26 23:34:55