【发布时间】:2012-02-10 05:10:32
【问题描述】:
作为扫描码的键盘输入可以通过调用interrupt 09 IRQ1或类似的方法获得,或者直接访问BIOS键盘缓冲区的段0040h
为什么需要单独的键盘驱动程序?或者键盘驱动程序本身是否为操作系统执行上述操作之一?
我的意思是当我们可以 BIOS 键盘缓冲区或一些中断例程时获取键盘输入为什么需要编写“键盘驱动程序”,因为在像 minix 这样的某些操作系统中,驱动程序列表中有一条单独的键盘河那个操作系统?
【问题讨论】:
作为扫描码的键盘输入可以通过调用interrupt 09 IRQ1或类似的方法获得,或者直接访问BIOS键盘缓冲区的段0040h
为什么需要单独的键盘驱动程序?或者键盘驱动程序本身是否为操作系统执行上述操作之一?
我的意思是当我们可以 BIOS 键盘缓冲区或一些中断例程时获取键盘输入为什么需要编写“键盘驱动程序”,因为在像 minix 这样的某些操作系统中,驱动程序列表中有一条单独的键盘河那个操作系统?
【问题讨论】:
一般来说,现代操作系统区分内核模式和用户模式。内核具有更高的权限,并且只有专门的代码才能在该模式下运行。访问硬件资源通常是内核模式的领域。另一方面,用户模式代码被 CPU 阻止访问这些资源。
我不知道你说的是哪个操作系统,但本质上你说的驱动程序就是这个专门的代码。您的用户模式代码无法直接访问资源,并且必须与驱动程序通信。
如果您考虑一个更简单或更旧的操作系统,例如 MS-DOS,没有区别,因此所有代码都可以访问硬件资源。但我不知道有任何现代通用操作系统允许这样做。
这是解释Kernel Model Programming 想法的非常好的维基百科文章。
在 Windows(和大多数现代操作系统)中,有一个区别 在“用户模式”下运行的代码和正在运行的代码之间 在“内核模式”中。本章将指出一些 差异。首先,英特尔 CPU 具有称为环的操作模式 它指定了指令的类型和可用的内存 运行代码。有四个环:
- Ring 0(也称为内核 mode) 可以完全访问所有资源。它是其中的模式 Windows 内核运行。
- 环 1 和 2 可以自定义级别为 访问但一般不用,除非有虚拟机 跑步。
- Ring 3(也称为用户模式)已限制访问 资源。
这样做的原因是因为如果所有程序都运行在 内核模式,他们将能够覆盖彼此的内存和 当它们崩溃时可能会导致整个系统崩溃。
【讨论】:
对驱动程序有要求,因为驱动程序是操作系统用来与真实和虚构设备交互的抽象机制。
考虑 /dev/random,它是一个随机数生成器。操作系统知道它可以从该设备“读取”并获得一个随机数。随机数是怎么产生的?操作系统不在乎。该过程被驱动程序隔离和抽象出来。它可能是一个伪随机算法。它可能是主板上的特殊设备。它可能是一个监视高峰时段交通的摄像机。谁知道。关键是操作系统并不关心它“如何”完成,它只知道通过使用各种驱动程序,它可以与大多数硬件进行通信,无论是真实的还是合成的。
就像编写操作系统一样,您不会简单地从键盘缓冲区加载内存,而是只需编写一次代码并调用子例程,驱动程序是执行类似任务的更高级别的抽象机制.
【讨论】: