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