Programming 版 (精华区)

发信人: Sun (大灯泡), 信区: Programming
标  题: VxD世界——硬件虚拟与虚拟设备驱动程序 
发信站: 哈工大紫丁香 (Tue Aug 31 12:37:01 1999), 转信

   
  孙喜明 


·硬件虚拟·


回忆一下,在实模式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
     
     
--
〖小糊涂虫2000灌水机〗

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: sun@hope.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.393毫秒