为什么键盘输入所需的键盘驱动程序可以从中断中获取,也可以通过访问键盘缓冲区获取



通过调用中断09 IRQ1或类似程序,或直接访问0040h段的BIOS键盘缓冲区,可以获得作为扫描码的键盘输入

为什么需要单独的键盘驱动程序还是键盘驱动程序本身为操作系统执行上述操作之一?

我的意思是,当我们可以BIOS键盘缓冲区或一些中断例程时,为什么需要写一个"键盘驱动程序",因为在像minix这样的一些操作系统中,该操作系统的驱动程序列表中有一个单独的键盘流?

一般来说,现代操作系统在内核模式和用户模式之间有区别。内核具有更高的权限,并且只有专门的代码才能在该模式下运行。访问硬件资源通常是内核模式的领域。另一方面,CPU阻止用户模式代码访问这些资源。

我不知道你说的是哪种操作系统,但从本质上讲,你说的驱动程序就是这种专门的代码。您的用户模式代码被阻止直接访问资源,并且必须与驱动程序通信。

如果你考虑一个更简单或更旧的操作系统,比如MS-DOS,那里没有区别,因此所有代码都可以访问硬件资源。但我不知道有什么现代通用操作系统允许这样做。

这是一篇非常好的维基百科文章来解释内核模型编程的思想。

在Windows(以及大多数现代操作系统)中在"用户模式"下运行的代码和正在运行的代码之间在"内核模式"中。本章将指出差异。首先,英特尔CPU有称为环的操作模式其指定可用于运行代码。有四个环:

  • 环0(也称为内核模式)可以完全访问每个资源。它是运行Windows内核
  • 环1和环2可以自定义级别访问,但通常未使用,除非有虚拟机正在运行
  • Ring 3(也称为用户模式)对资源

原因是如果所有程序都在内核模式,他们将能够覆盖彼此的内存和当它们崩溃时,可能会导致整个系统瘫痪。

需要驱动程序,因为驱动程序是操作系统用来与设备交互的抽象机制,包括真实设备和虚拟设备。

考虑/dev/random,它是一个随机数生成器。操作系统知道它可以从该设备"读取"并获得一个随机数。随机数是如何生成的?操作系统不在乎。该过程被驱动程序隔离并抽象掉。它可能是一个伪随机算法。它可能是主板上的一个特殊设备。它可能是一台监控高峰时段交通的摄像机。谁知道呢。关键是,操作系统不在乎"如何"完成,它只知道通过使用各种驱动程序,它可以与大多数任何硬件进行对话,无论是真实的还是合成的。

就像你在写操作系统时,你不会简单地从键盘缓冲区加载内存,而是只写一次代码并调用一个子例程一样,驱动程序是一种更高级别的抽象机制,可以执行类似的任务。

最新更新