?? csdn_文檔中心_虛擬機管理器vmm(vxd教程2).htm
字號:
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT src="CSDN_文檔中心_虛擬機管理器VMM(Vxd教程2).files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文檔中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>標題</FONT></TD>
<TD><B> 虛擬機管理器VMM(Vxd教程2)</B> jiangtao(轉貼)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>關鍵字</FONT></TD>
<TD width=500> 虛擬機管理器VMM(Vxd教程2)</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出處</FONT></TD>
<TD height=10> <A
href="http://asm.yeah.net/">http://asm.yeah.net/</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章說明信息結束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<H1><FONT face=Arial,Helvetica><FONT
color=#ffff99>虛擬機管理器</FONT></FONT></H1>
<CENTER></CENTER><BR>
<DIV align=center>由 Ryo 翻譯,發表于 <A
href="http://asm.yeah.net/">http://asm.yeah.net/</A>,英文版本來自 [<A
href="http://win32asm.cjb.net/">Iczelion's Win32 Assembly
Homepage</A>] </DIV><BR><FONT face=Arial,Helvetica><FONT
size=-1>虛擬機管理器(VMM)是Windows 95的<B><FONT
color=#ffff99>實際</FONT></B>操作系統,它建立和維護一個管理虛擬機的框架,同時為其他vxd程序提供許多重要的服務。其中三種重要的服務是:</FONT></FONT>
<UL>
<LI><FONT face=Arial,Helvetica><FONT size=-1>內存管理</FONT></FONT>
<LI><FONT face=Arial,Helvetica><FONT size=-1>中斷處理</FONT></FONT>
<LI><FONT face=Arial,Helvetica><FONT size=-1>線程調度</FONT></FONT>
</LI></UL>
<H3><FONT face=Arial,Helvetica><FONT color=#66ffff><FONT
size=-1>內存管理</FONT></FONT></FONT></H3><FONT
face=Arial,Helvetica><FONT size=-1>VMM使用Intel
80386或更新的處理器的內存調頁能力來為系統虛擬機創建一個32位的虛地址空間。它把這個地址空間分為四個不同的部分:</FONT></FONT>
<UL>
<LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT
color=#66ff99>V86區</FONT></B>
地址從0H到10FFEFH,這個區屬于當前執行的虛擬機。</FONT></FONT>
<LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT
color=#66ff99>應用程序私有區</FONT></B>地址從4MB到2GB。這是Win32應用程序運行的空間。每個Win32的進程都有它自己的2GB(要減去4MB)。</FONT></FONT>
<LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT
color=#66ff99>應用程序共享區</FONT></B>地址從2GB到3GB。這個區域是在虛擬機內的<B><FONT
color=#ffff99>所有</FONT></B>
應用程序共享的。系統DLL(user32,kernel32,gid32)都駐存在這里。所有的Win16程序也放在這里,因為它們行為都是不規范的的:它們對內存中的其他Win16程序進行讀寫。只有在這個區域里,Win16程序才可以看到其他所有的Win16程序。內存映射文件和分配給DPMI的內存也被存放在這里。</FONT></FONT>
<LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT
color=#66ff99>系統共享區</FONT></B>地址從3GB到4GB。這里是VMM和VXM存放的地方。</FONT></FONT>
</LI></UL><FONT face=Arial,Helvetica><FONT
size=-1>VMM為VxD程序提供三種VxD服務:</FONT></FONT>
<UL>
<LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT
color=#ffff99>頁面內存服務</FONT></B>
這種服務分配/管理頁面大小為4KB的內存。這是提供的最低級的服務,其他所有的服務都是建立在頁面內存服務上的。</FONT></FONT>
<LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT
color=#ffff99>堆內存服務</FONT></B>
管理小的內存塊。這種高級別的內存管理服務建立在頁面內存服務的基礎上。</FONT></FONT>
<LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT
color=#ffff99>表服務</FONT></B>管理可用來實行鏈結表的固定大小的內存塊。</FONT></FONT>
</LI></UL>
<H3><FONT face=Arial,Helvetica><FONT color=#66ffff><FONT
size=-1>處理中斷</FONT></FONT></FONT></H3><FONT
face=Arial,Helvetica><FONT
size=-1>在保護模式下,中斷指向中斷描述表(IDT)。VMM通過VxD的幫助監視虛擬機的IDT。通常VMM處理IDT內幾乎所有的中斷入口。它進行第一級的中斷處理:保存被中斷程序的狀態,把控制傳送到第二級的中斷處理,第二級的中斷處理通常由各種VxD程序來進行實際的處理。當第二級中斷處理程序完成了它的工作之后,它把控制轉交給重分派程序,由重分派程序來恢復被中斷程序的狀態并從先前被中斷的地方繼續執行。</FONT></FONT>
<BR><FONT face=Arial,Helvetica><FONT
size=-1>上面的描述太過簡單。由于被中斷的虛擬機的時間片可能已過,重分派也許不會馬上執行。VxD程序通過VMM服務如:Set_PM_Int或Hook_V86_Int_Chain來安裝中斷處理。VxD程序不應該直接改動IDT中的中斷入口(除非你很確切的知道將發生的后果)。</FONT></FONT>
<H3><FONT face=Arial,Helvetica><FONT color=#66ffff><FONT
size=-1>線程調度</FONT></FONT></FONT></H3><FONT
face=Arial,Helvetica><FONT
size=-1>VMM使用兩個調度器組件來在虛擬機之間實現有優先級的多線程處理:</FONT></FONT>
<UL>
<LI><B><FONT face=Arial,Helvetica><FONT color=#ffff99><FONT
size=-1>主調度器</FONT></FONT></FONT></B>
<LI><FONT face=Arial,Helvetica><FONT size=-1><B><FONT
color=#ffff99>時間片管理器</FONT></B>或<B><FONT
color=#ffff99>副調度器</FONT></B></FONT></FONT> </LI></UL><FONT
face=Arial,Helvetica><FONT
size=-1>主調度器的任務是選擇有最高優先級的線程來執行。這種選擇在VMM處理一個中斷(如計時器中斷)時進行。選擇的結果決定了當VMM從中斷服務返回時由哪一個線程/虛擬機獲得控制權。主調度器工作的結果是確定的,一個線程要么獲得控制權,要么沒有,只有一個線程可以得到控制權。VMM和其他的VxD可以通過VMM服務來調整線程的執行優先級。例如,當一個硬中斷發生時,VMM就會增加中斷處理的執行優先級以便讓它在盡可能短的時間內有更高的機會被調用。</FONT></FONT>
<BR><FONT face=Arial,Helvetica><FONT
size=-1>副調度器通過主調度器提供的服務來給享有最高優先級的線程分配cpu時間。副調度器給每個線程一個時間片。當一個線程執行到它的時間片完結時,副調度器就增加下一個線程的優先級,這樣它就會被主調度器選中并執行。</FONT></FONT>
<P><FONT face=Arial,Helvetica><FONT size=-1>你可以從<B><FONT
color=#ffff99>Walter Oney's Systems Programming for Windows
95</FONT></B>和<B><FONT color=#ffff99>Windows 95 DDK
</FONT></B>文檔里面得到關于這個問題的細節。</FONT></FONT>
<BR><BR></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>對該文的評論</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文檔中心_虛擬機管理器VMM(Vxd教程2).files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要評論</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你沒有登陸,無法發表評論。 請先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=551">登陸</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注冊</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">網站簡介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">廣告服務</A> - <A
href="http://www.csdn.net/map/map.shtm">網站地圖</A> - <A
href="http://www.csdn.net/help/help.asp">幫助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">聯系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文檔中心_虛擬機管理器VMM(Vxd教程2).files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百聯美達美公司 版權所有 京ICP證020026號</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--內容結束//--><!--結束//--></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -