操作系统OS是如何指挥外围设备的呢?
众所周知,OS的职责之一就是管理外围设备,比如常见的磁盘、硬盘、显示器、麦克风等,但并不是外围设备的一切都必须由OS管理,比如无线鼠标上的开关键,当你通过它关闭鼠标时,这个操作并不会经过OS,而是直接由鼠标内部的硬件处理,再比如显示屏上的状态指示灯的亮灭,这也是设备自己通过硬件实现的功能。
每个外围设备有个对应的设备控制器,和设备一样都属于硬件。通过这个硬件提供的指令,实现对设备的控制,比如磁盘中读取数据的指令。光是磁盘这一种设备就有很多不同的公司研发生产,同一种功能,不同公司的实现方式是不一样的,具体的底层硬件指令也是不一样的。OS并不知道这些具体的、错综复杂的指令,那怎么指挥外围设备呢?
答案是驱动程序。
每个设备厂商都会实现自己的驱动程序,但是不同的厂家实现驱动程序时会遵循业内规范,去实现这些标准化的接口、协议,比如存储设备领域的SCSI (Small Computer System Interface)。假设其中读取数据的API名儿叫read()
读取数据过程如下:
- OS向驱动程序发送read()请求
- 驱动程序则转换成具体的若干个指令,发送给设备控制器
- 控制器执行这些指令后,将数据返回给驱动程序
- 驱动程序处理数据后,再返回给OS