虚拟设备驱动程序初步
点击次数:56 次 发布日期:2008-11-10 08:14:13 作者:源代码网
|
源代码网整理以下 在本教程里,我假定读者对诸如虚8086模式,调页,GDT,LDT,IDT之类的INTEL 80x86保护模式的操作比较熟悉。如果你不了解这些,那你要先在 http://developer.intel.com/design/pentium/manuals/阅读INTEL的文档。 源代码网推荐解决办法就是,在一个8086虚拟机上运行所有的dos程序,而在另一个叫做系统虚拟机的虚拟机上运行其他所有的Windows程序。Windows负责把cpu运算时间轮流的分给每个虚拟机。这样,在Windows 3.x里。Windows程序之间用的是合作多任务,而虚拟机之间用的是优先级多任务。 源代码网推荐什么是一个虚拟机?一个虚拟机是被软件创建的一个假象。一个虚拟机和在它上面运行的程序交互,就像这个程序是在真正的机器上运行一样。这样,一个程序不知道也不关心自己是否是在虚拟机上运行。只要虚拟机准确的像一个真的机器一样响应程序,我们就可以把它当成一个真正的机器。 源代码网推荐你可以把虚拟机这种实机器和软件之间的接口看作一种API。这种不寻常的API由中断,BIOS调用和I/O端口组成。如果Windows能够以某种方法完美的模拟这个API,那么在虚拟机上运行的程序就会表现的和它们在实际器上运行时完全一样。 源代码网推荐这就是为什么会出现VMM和VxD的原因。为了协调和监视虚拟机(VMs),Windows需要一个程序来分配任务。这个程序就是虚拟机管理器(VMM)。 源代码网推荐虚拟机管理器 源代码网推荐VMM是一个32位的保护模式程序。它的主要任务是建立和维护一个支持虚拟机的框架。例如,它要创建,运行和结束一个虚拟机。VMM是众多的系统VxD程序之一,它被放在你的系统目录下的VMM32.VxD文件中。VMM本身是一个VxD程序,但它被当作一个监视其他VxD程序的监视器。让我们来看一下Windows95的启动次序: 源代码网推荐加载io.sys。 源代码网推荐执行config.sys和autoexec.bat。 源代码网推荐调用win.com。 源代码网推荐win.com运行VMM32.VxD,VMM32.VxD实际上是个简单的dos的exe文件。 源代码网推荐VMM32.VxD用xms驱动程序把VMM加载到扩展内存。 源代码网推荐VMM初始化自身及其它的默认VxD。 源代码网推荐VMM把机器转入到保护模式并创建系统虚拟机。 源代码网推荐最后被加载的虚拟外壳设备在系统虚拟机上通过运行krnl386.exe来启动Windows。 源代码网推荐krnl386.exe加载所有的文件,最后是Windows95外壳。 源代码网推荐正如你所看到的,VMM是第一个被加载到内存的VxD程序。它创建系统虚拟机并初始化其他的VxD程序。它也为这些VxD程序提供许多服务。 源代码网推荐VMM和VxD的操作模式和真正的程序不同。在大多数时候,它们是潜伏的。当应用程序在系统中运行时,这些VxD程序没有被激活。当某些需要它们处理的中断/错误/事件发生时,它们才被唤醒。 源代码网推荐VMM是不可重入的。这意味着VxD程序必须使它们的访问和VMM服务同步。在有些情况下调用VMM服务是不安全的,比如VMM正在处理一个硬件中断。在这段时间内,VMM是不允许重进入的。作为一个VxD编写者,你必须对你的所作所为极度的小心。记住,你是在最高特权级别,第0层级别,如果你代码有错的话,谁也管不到。 源代码网推荐 源代码网供稿. |
