- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
虚拟设备驱动程序设计中的两个关键问题
在虚拟设备驱动程序(VxD)的设计中,两个尤为关键,且又令人困扰的问题是VxD
的虚拟化和VxD与应用程序间的通信机制。下面,对这两个问题作一详细的探讨。
一、VxD的虚拟化
由于Windows允许同时运行多个任务,所以出现多个进程试图同时访问同一物
理设备的情况时,如果多个应用程序通过同一个DLL驱动程序(注意和虚拟设备驱
动程序VxD的区别)访问设备,不需要对该设备虚拟化,驱动程序使之顺序访问;
如果是多个Windows应用程序对相同设备同时访问,由于都运行于System VM(系
统虚拟机),所以也不需要虚拟化,它们的访问将由一个驱动程序(Windows
driver DLL)进行检测并使之串行化,而不是依靠VxD;如果多个VM试图访问同一
设备,由于DOS应用程序能够直接操纵硬件,所以必须对该设备进行虚拟化,一个
虚拟化设备的VxD负责可靠地检测多个VM试图访问同一设备的情况,并采取仲裁的
策略来解决这种冲突。这里可能有以下几种解决方案:
1、允许一个VM访问物理设备,同时忽略其它的VM。这是最简单的虚拟化形式
。如VPD(Virtual Printer Device)。
2、允许一个VM访问物理设备,同时为其它的VM虚拟化设备。如VKD(Virtual
Keyboard Device)分配给一个VM,并使之获得物理键盘的访问权(包括键盘中断
在内),对其它的VM而言,VKD只向它们提供一个空的键盘缓冲区。
3、允许多个VM共享同一物理设备。尽管存在假象,但从VM的观点来看,这种
方法与独享访问一样。如VDD(Virtual Display Device),使每一个Windows环境
下的DOS VM认为是直接写入显存,其实只是被VDD映射到了一个窗口的缓冲区。
4、VxD独立访问物理设备的同时,允许一个VM访问虚拟设备,这是最复杂的
虚拟化形式。如VCD(Virtual Com Device),VCD缓冲区接收串行数据并通过映射中
断透明地传给相应的一个VM,VM在中断处理过程中读取串口数据寄存器,这些数
据的实质是VCD缓冲区已经接收的数据。
与物理设备一样,硬件中断很多时候也必须虚拟化,这种情况更为复杂。虚
拟化中断实质上就是将硬件产生的中断映射到需要它的每一个VM(不管该VM是否
正在运行),替代VxD进行服务。在这里我们给出一个虚拟化中断的VxD实例的几
个重要回调过程,并采用最简单的仲裁策略来解决访问冲突(见程序1)。
typedef struct
{
IRQHANDLE IrqHandle;
VMHANDLE VMOwner;
Char DeviceName[8];
BOOL bVMIsServicing;
} DEVICE_CONTEXT;
void _stdcall MaskChangHandler ( VMHANDLE hVM , IRQHANDLE hIRQ , BOOL bMasking )
//当一个VM在中断控制器中屏蔽或打开中断hIRQ时,VPICD调用该过程
{
if ( !bMasking ) //若为打开中断
{
if ( !device.VMOwner )
{
device.VMOwner = hVM; //若无任何VM占有该中断,则将该中断的拥有权设为当前VM
}
else
{
if ( device.VMOwner != hVM )
{
device.VMOwner = SHELL_Resolve_Contention ( device.VMOwner , hVM , device.DeviceName );
//若已有VM占有该中断,则用户可通过对话框在两者间作出选择
}
}
VPICD_Physically_Unmask ( hIRQ ); //打开该物理中断
}
else
{
device.VMOwner = 0;
VPICD_Physically_Mask ( hIRQ ); //屏蔽该物理中断
}
}
BOOL _stdcall HwIntHandler ( VMHANDLE hVM , IRQHANDLE hIRQ )
//当中断hIRQ发生,VPICD立即调用该过程
{
if ( device.VMOwner !device.bVMIsServicing ) //若有VM占有该中断并且不在上一次的
您可能关注的文档
最近下载
- 国有企业管理岗竞聘笔试题和答案.docx VIP
- 统一身份认证总体方案V1.0.docx VIP
- 平遥保护性规划(同济).ppt VIP
- 微电影广告特征及发展趋势分析.pptx VIP
- 2022年中国商业数据智能行业研究报告.pdf VIP
- Unit+3+Sports+and+Fitness+单词记忆导学案4 高中英语人教版(2019)必修第一册.docx VIP
- 二年级上册道德与法治试题-第二单元 我们的班级 -部编版(含答案).doc VIP
- 3G101-1图集详解.docx VIP
- 华为手机营销方法论IPMS和GTM高级培训课件(第三部分)glz.pptx VIP
- 2.2.1.2工业机器人气路连接《工业机器人现场编程与调试运行》.pptx VIP
原创力文档


文档评论(0)