- 论坛徽章:
- 0
|
本帖最后由 MJK2012 于 2012-03-19 12:28 编辑
回复 12# linuxfellow
/// /// 从系统API -> XxTypeAPI 是如何实现的? 系统调用?
这里要分两种情况了. 内核与ring3进程.
在内核, 用系统API, 访问 XxTypeDI , 是直接的访问. 系统API能够直接取得 XxTypeDI 在内存的指针.
在ring3进程, 用系统API, 是先通过进程间通信模型, 发送二进制参数给内核, 内核检查二进制数据并且检查权限之后, 才去代理 XxTypeDI
可以这样看待, 虽然有一摸一样的 PlaySound 函数, 但是内核与ring3进程所加载的, 是完全不同的PlaySound代码.
API访问内核, 免除了中断或sysenter , 免除了权限检查, 能直接用指针, 性能将会远远超过ring3的模式.
(同样 , 这也会超过Windows/Linux的ring3进程, 这就是为什么我第一帖分享操作系统目标的时候, 是以单内核进程作为它的常用方案了, 这种方案在嵌入式设备, 有较高的竞争力. )
/// /// 你把HAL放在 kernel,会不会让kernel太臃肿?
本来一开始设计的时候, 是打算一个驱动专用一个进程的. 这样可以随意地加载与卸载驱动.
后来我想了想, 很多时候我们还是要选一个平衡点, 用进程模式能带来更强大的功能, 但是也更加复杂了.
所以我最后决定先用内核的模式先 .
但是, 正如我之前描述的, 这个HAL是有很强的扩展能力的.
在以后的设计中, 完全可以实现单独进程的驱动. 理论上能谈得通. 楼顶列出的例子就有了类似的机制.
|
|