一、前言
完成了CPU和内存这两个计算机核心部件的管理以后,最后一个问题就是完成对外设的管理。
外部设备通过总线和CPU、内存相连,每个外设都有自己的控制电路,当我们想要每个外设执行相应的动作时,CPU就会向某个地方写入命令,外设接收到后就会解释命令完成相应的动作。
整个过程可以用两步来总结:
(1)CPU通过端口地址发送对外设的工作要求吗,一般是命令“out ax,端口号”,其中AX寄存器存放的就是外设的具体工作内容;(2)外设开始工作,在工作完成后通过中断告诉CPU,CPU会在中断处理程序中处理外设的工作结果。
操作系统不仅仅是要像上面那样使用外设,而且还引入了文件视图这一概念,将所有对外设的使用变成了对文件视图的操作,给上层用户提供了一个接口,屏蔽细节,达到方便使用的目的。
二、设备驱动的基本原理
1.外设的工作原理
CPU对外设的使用由两条主线构成:第一条主线从CPU开始,CPU向外设发送命令,表现为CPU执行指令“out ax,端口号”;第二条主线从外设开始,当外设执行完任务或状态发生变化,就会通过中断机制通知CPU,CPU会通过中断处理程序完成后续工作。
2.文件视图
如果像上面那样去完成对外设的操作,需要程序员知道外设对应的端口号,了解指令的详细格式,而且不同公司的同一种外设的格式可能完全不一样,这是一项繁杂且无趣的工作。为了提高工作效率,可以将所有的外设都抽象为一个文件视图,调用read、write等统一的接口完成对外设的使用。比如向“显示器文件”写入(write)一个字符串“hello”,那么就会在显示器上显示出“hello”。