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毫秒