操作系统是硬件的管理者,负责统一管理所有的硬件,并且和所有的硬件进行通信或者数据的交换,那么就要驱动硬件,而硬件都是基于不同速度的BUS,而现在的CPU内置了不同速度不同接口的模块,所以只要对这些接口模块进行管理,就实现了对硬件的管理,或者说硬件的管理都是通过总线接口来完成的,为方便管理,需要对接口模块进行抽象。例如把usb接口抽象为usb子系统。如图所示
---------------------------------------------------------------------------------
硬件模块抽象层(包括虚拟设备)
|
硬件模块(USB,FSMC,SDIO等,接口可复用)
---------------------------------------------------------------------------------
操作系统管理这些硬件是为了给用户使用,所以还要给用户提供一个编程接口,因此有了设备抽象层。用户只关心设备,不需要了解设备是否真实存在(虚拟设备)。例如光驱在/dev下的cdrom。当然操作系统也是要管理系统里所有设备的。如图所示
----------------------------------------------------------------------------------
用户接口(用户空间的程序)
|
--------------------------------------------------内核空间
设备抽象(字符,块,网络)/dev文件系统中不包括网络设备
----------------------------------------------------------------------------------
整个设备的模型已经建立完成,但是还要完成的是设备的抽象层到硬件抽象层的映射,这部分操作系统已经完成,但是完成的是策略,而不是方法,针对不同的硬件策略是一样的,但是方法不同,驱动程序就是方法的实现。驱动包含两部分:硬件控制模块的驱动和方法的实现。如图所示
---------------------------------------------------------------------------------
用户接口(用户空间的程序)
|
------------------------------------------内核空间
设备抽象(字符,块,网络)
|
驱动程序(与硬件模块一一对应)
|
硬件模块抽象层(包括虚拟设备)
|
硬件模块(USB,FSMC,SDIO等,接口可复用)
----------------------------------------------------------------------------------
一言以蔽之:操作系统为了更好的去管理硬件而建立了硬件抽象层,为了给用户使用建立了设备抽象层。
另外,驱动程序有时也担任硬件模型的抽象。
阅读(1172) | 评论(0) | 转发(0) |