HITEA 版 (精华区)
发信人: hfl (凤凰·风中轻舞), 信区: HITEA
标 题: VxD世界——硬件虚拟与虚拟设备驱动程序
发信站: 哈工大紫丁香 (2002年04月02日20:47:55 星期二), 站内信件
·硬件虚拟·
回忆一下,在实模式DOS下,实模式的MS-DOS应用程序调用runtime library中的
fgets或—kbhit函数,这些函数就会直接通过软中断int 21h调用MS-DOS服务(MS
-DOS服务会最终通过调用软中断int 16h调用BIOS服务),或者通过软中断int 16h
调用BIOS服务。BIOS通过IN / OUT指令来直接操纵键盘或中断控制器。
我们通过下面这张图来理解一下什么是硬件虚拟的实现(见图1)。
两个不同的MS-DOS应用程序可能要同时访问键盘,它们都感到自己在直接操纵着
硬件。其实从全局看,这两个MS-DOS应用程序对键盘的访问被VKD串行化了。
这两上MS-DOS应用程序其实是在操纵“虚拟的硬件”。
硬件虚拟的一个很关键的基础是:80386芯片的“port trapping”功能,这使得VKD
可以捕获ring 3应用程序对键盘的访问。我们想起前面讲保护模式的内存管理时,提
到“虚拟内存”的概念,其时“虚拟内存”的实现也是因为80386芯片具有“
paging trap ”功能。
·虚拟设备驱动程序·
Windows系统中,是VMM和VxDs实现了硬件虚拟(VMM本身就是一些VxD的集合
)。在Win95中,有两种VxD:static VxD(静态加载的VxD)和dynamic VxD(动
态加载的VxD)。在Windows 3.1中,只有一种VxD:static VxD。Static VxD的加载
需要把VxD放在SYSTEM.INI或注册表中。比如说,你写了一个文件名为Fool.VxD的
static VxD,那么你可以在SYSTEM.INI中的如下位置加上一句:
……
[386Enh]
device=Fool.VxD
……
或是在注册表的如下位置加入如下一项:
\HKEY—LOCAL—MACHINE\System\CurrentControlSet\services\VxD\Fool.VxD
这样Win95在启动时就会自动加载Fool.VxD。
相对于Windows 3.1而言,Win95又增加了dynamic VxD(动态加载的VxD)。在
Win95中,主要操纵dynamic VxD的是configuration Manager和Input/Output
Supervisor这两个功能模块(这两个模块自己却是static VxD)。
图1 键盘的虚拟
VKD:Virtual keyboard device VPICD:Virtual PIC device
--
吃在肚子里的才是饭
穿在身上的才是衣
送给爱人的才是花
真心疼你的才是妻
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.253]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.058毫秒