- 论坛徽章:
- 0
|
本帖最后由 MJK2012 于 2012-03-19 11:26 编辑
回复 4# linuxfellow
用户程序, 有两种通道访问计算机硬件.
一, 调用 系统的API , 例如 PlaySound , 这种方式, 将会受到系统的配置影响. 例如系统会调节音量, 会禁止播放, 系统会根据用户选择一个合适的输出设备等等.
这是 : 程序 -> 系统API -> HAL API
二 , 调用 驱动的API , 这种方式更加像那些询问用户用哪个摄像头来做视频聊天的模式. 程序可以绕过系统API层, 直接访问HAL.
(只允许内核进程这样搞, ring3进程必须通过系统不同级别的API, 或安装内核Module来代理)
这是 : 程序 -> HAL API
在我的设计里没有IO Manager这些东西的.
如果有的话, 也是在 系统API 那一层实现 IO Manager , 那么方式就会成为
程序 -> 系统API -> IO Manager -> HAL API
如果你是说多任务对单个硬件进行访问的控制, 这个是在HAL内部实现 .
HAL的内部设计为 :
XxTypeAPI -> XxTypeImpl
其中 XxTypeAPI由系统定义也由系统实现 , XxTypeImpl由系统定义但是由驱动代码实现 .
那么上面的逻辑, 其实是这样 :
程序 -> 系统API -> XxTypeAPI -> XxTypeImpl
XxTypeAPI 内部要实现的内容, 应该就是指你说的 IO Manager
如果一个设备是XxTypeImpl 不允许同时访问的, 那么XxTypeAPI 会对请求进行排队.
这个是异步语言里非常容易实现的, 也是我后来决定要用异步语言来写HAL的原因.
|
|