<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 采用VXD技術實現實的通信

    時間:2024-07-08 05:35:37 理工畢業論文 我要投稿
    • 相關推薦

    采用VXD技術實現實的通信

    摘要:討論Windows虛擬設備驅動(VXD)技術,并采用此項技術示范性地做出應用于PC串口實時通信的虛擬驅動程序,找到一種可以在PC中實現實時通信的途徑。

    引言

    在微軟的視窗操作系統中,系統內核掌管所有的應用程序,通過獨特的任務調度算法實現CPU的分時多任務處理方式。多任務處理對大多數用戶可能是件好事,但是對那些想把實時通信建立在Windows操作系統上的特殊用戶來說,操作界面的圖形化并不比MS-DOS的單任務更具吸引力。在視窗操作系統里可以進行實時通信和控制碼?答案是:VXD技術可以幫我們在獲取友好的人機界面的同時還擁有很強的實時性。

    1 VXD技術解析

    VXD技術可追溯到Windows3.1,它的引入就是要讓操作系統實現多工以及硬件資源的共享。為了支持多個MS-DOS任務同時執行,Windows98讓每個MS-DOS應用程序在各自的虛擬機(VM)上運行,各自互不相干;而所有的Widnows應用程序卻都在一個虛擬機上運行。圖1所示的結構框圖很好地說明了Windows98的整體架構。

    圖1中,由眾多的VXD組成系統級代碼處于最底層。其中,處于中心地位的是一名為VMM32的VXD,它負責協調和管理所有的VXDs。其它VXDs則通過消息機制(這個消息機制由VMM32.VXD來維護)彼此聯系。由所有VXDs開放出的服務接口(API)組成了一個服務網,它們彼此通過合作的方式,提供Windows98的系統底層驅動服務。

    從以上Windows98系統架構可以看出,要想在視窗平臺下獲取很強的實時性,僅靠提升應用程序線程優先級的方法是不夠的。因為Win32應用程序代碼屬于Ring3級,而VXD代碼則屬于Ring0級;采用VXD撰寫的實時通信程序可以完全不受代碼限制,可以直接對硬件進行操作。VXD的這個特點正是實時通信建立所必須的。

    設計實時通信的VXD前,先解釋以下幾個問題:

    ①VMM32使用VPICD.VXD虛擬化每個硬件和軟件中斷。VMM32為每個虛擬機(VM)維護一個IDT結構,當中斷發生時,CPU先保護中斷現場,然后經由當前VM的IDT把這個中斷引導至相應的中斷處理程式。

    中斷的虛擬化,使我們有機會給每個中斷提供新的中斷處理函數,并可以讓多個硬件共享同一個中斷號。VPICD.VXD為我們提供這些服務。

    ②VMM有兩個調度器,用以在多個線程和VMs之間實現搶占式多工。主調度器負責選定下一個將被執行的線程。這個選擇可以是一個,也可以是多個。然后,主調度器把選擇結果送給所謂的時間片調度器,并由后者完成各個應用程序間的時間片分配。調度器也時應用程序經由呼叫Win32線程優先調整API(如SetThreadPriority和SetPriorityClass等)做出回應。當中斷發生時,VMM32自動提升中斷處理函數所在VM之優先級,保證中斷處理函數能及時被執行。

    ③VXD和Win32應用程序可直接通信。Win32應用程序可通過一個系統API(DevicelOControl(…))來呼叫位于底層的VXD為其服務。在呼叫VXD前,首先必須調用CreatFile(…)這個API加載該VXD(如果該VXD是一個靜態VXD,則不用加載)。所有的呼叫動作其實都通過VMM32完成。VXD也可以通過消息方式和位于上層的Win32應用程序通信。She11.VXD為所有希望以消息機制和Win32應用程序通信的VXD提供了這一服務。

    以上是編寫一個串口通信驅動需要的系統層面知識。對于Windows底層的了解。

    2 用VXD實現一個實時串口通信驅動

    接下來用VXD技術實現一個實時串行通信的驅動。這個VXD是一個動態(Dynamic)VXD,當它的服務被呼叫時,VMM32會動態加載這個VXD。作者采用的工具是C 98DDK。當然也可以使用其它的工具,如MASM6.11(或更高版本)、VtoolsD。用C搭配DDK完成VXD構建的好處是,可以使用C語言完成絕大部分的程序,程序比較容易閱讀和維護。

    用C來實現一個VXD驅動,需要準備如下條件:一個.ASM的匯編語言接口文件(在其中定義VXD要處理的系統消息和輸出API),一個.C的函數實現文件(在其中完成自己函數實體),一個.DEF的定義文件(在其中定義VXD中各個段的別名并匯成一個DDB)和一個.MAK檔(用來編譯并連接生成VXD,可有可無)。在這里,僅給出用C實現的函數檔。至于其它的文件,可以從本文所列的參考書目或其它文獻中找到相關文檔的說明。

    這個串口通信驅動程序的功能是:實時送出一個Byte的數據,實時接收一個Byte的數據。作為演示之用,并沒有加入其它代碼。該VXD驅動主要由如下3個系統消息(由VMM32來維護和管理)處理函數組成,其代碼如下:

    (1)OnSysDynamicDeviceInit()函數

    BOOL OnSysDynamicDeviceInit()

    { //OnSysDynamicDeviceInit

    irqhandle=VPICD_Virtualize_IRQ((DWORD)(

    【采用VXD技術實現實的通信】相關文章:

    超高壓采用超長站距光纖通信技術03-20

    通信技術論文11-21

    網絡通信技術的作用03-30

    通信技術與計算機技術融合技術11-20

    通信技術論文(15篇)06-04

    通信技術論文15篇06-04

    光纖通信技術的發展初探12-08

    交通信息采集技術論文02-12

    現代光纖通信技術論文11-10

    主站蜘蛛池模板: 久久香蕉超碰97国产精品| 国产2021精品视频免费播放| 国产久热精品无码激情| 精品国产一区二区三区2021| 99精品国产丝袜在线拍国语| 欧美精品综合视频一区二区| 久久国产免费观看精品| 欧洲精品久久久av无码电影| 久久这里有精品视频| 在线电影国产精品| 99精品国产在热久久无毒不卡| 在线精品亚洲一区二区三区| 国产精品无码久久四虎| 久久国产精品久久久| 国产精品三级国产电影| 亚洲欧美日韩国产一区二区三区精品| 91久久精品国产成人久久| 99久久精品国产高清一区二区| 亚洲精品自产拍在线观看| 久久精品无码av| 国产高清在线精品一区二区 | 亚洲精品无码AV人在线播放| 国産精品久久久久久久| 亚洲国产精品自在线一区二区 | 久久久久久噜噜精品免费直播| 91精品国产综合久久香蕉 | 九九99精品久久久久久| 精品福利视频一区二区三区| 亚洲精品无码久久久影院相关影片 | 久久久久久青草大香综合精品 | 精品久久久久久综合日本| 国产精品白丝AV网站| 精品国产三级a∨在线| 久久精品国产亚洲AV嫖农村妇女| 亚洲国产精品久久电影欧美| 亚洲中文字幕久久精品无码APP| 亚洲精品一级无码鲁丝片| 欧美日韩国产中文精品字幕自在自线| 国产亚洲精品精品国产亚洲综合| 国产观看精品一区二区三区 | 亚洲国产精品无码久久久不卡|