Re: [問題] Virtualbox 產生中斷給 Linux Driver
※ 引述《hpeter (hpeter)》之銘言:
: 標題: [問題] Virtualbox 產生中斷給 Linux Driver
: 時間: Sat Aug 9 13:33:32 2008
:
: 請問一下各位先進, 小弟現在在練習 Linux Driver 基本的東西
:
: 目前在練習中斷的部份,想用 Print Port 產生中斷給 driver
:
: 現在練習的環境是用 VirtualBox + Ubuntu 8.04 請問一下要如何
:
: 產生個中斷給vm 呢?謝謝 (希望不要動硬體XD)
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 118.165.91.230
: 推 ggg12345:VirtualBox 能令HostOS的LPT介面為interrupt mode嗎? 08/11 00:00
: → ggg12345:理論上沒有不可以的,但 VirtualBox 有這項功能了嗎 ? 08/11 00:02
=========
在 VM(Virtual Machine) 環境下, guest os 使用到的空間(memory
and i/o space)都是虛擬的, 若涉及敏感的(sensitive)部份必須能攔截
(或者說更換)下來再做轉換對映的動作, 以避免實質共用造成的衝突問題.
中斷(interrupt)動作涉及 Disable Interrupt , 因此是個敏感的指令.
External Hardware Interrupt 是由外部硬體訊號線觸發, 再由
interrupt controller 與 processor 取得與執行, 其動作相當於在指令
間插入一個 int n 的機器指令(這是 X86 為例). 而中斷處理程式(ISR)
一般都涉及I/O 指令, 必須在 kernel mode 才能有效執行.
如果 printer, printer cable 與 print interface 都是在 VM 下
虛擬的, 這個 print interface 上的 interrupt line signal 就不必經
過 real hardware , 這時候的 VM 就能用軟體在 user mode 檢測與模擬
出這個純虛擬的 interrupt 動作. 不過, 多數的 soft VM 若也需要模擬
到周邊實體裝置時, 通常都不會使用 interrupt I/O 而是使用 polling ,
因為虛擬的裝置若沒有 VM Mornitor 的執行是不會產生訊號的, 而目前的
VM Monitor 並非多緒併行, 非同步的 interrupt signal 是不會發生的,
也就沒必要如此煩複的模擬. 不過, 這是觀察與試用去年的眾多 VM 軟體得
來的看法, 新版本可能會有所突破.
假如要讓某個 print port 外接到實體的裝置, 再讓此 print port 與
device 歸 VM 上的 guest os driver 來接受與管理中斷訊號與進行 I/O .
這時候的 VM 軟體就必需有使用該實體 interface port 的 kernel part
可以接收(或者攔截)與處理 real interrupt signal 的代理接管部份.
雖然中斷的發生分為同步與非同步, 也分為硬體觸發與軟體例外事件,
但中斷服務程式的跳轉點都是有限且是已知的, 因此用軟體程式替代就能有
攔截效果. 理論上是最簡易可行的, 但架構與規範卻又涉及保護與下層 Host
OS 的關係(這裡指的是像 VMware 的模式), 反而因商業競爭而變得莫衷一
是. 在方法上, 中斷跳轉點的對映關係必然涉及裝置的配屬與效率處理, 可
能硬體廠商(如 intel)會有相當大的主導與干預.
目前通用的做法是設計一個 kernel mode 的 proxy server 來轉接
guest OS driver 所要控制與連通的對象, 該對象可以是虛擬的代用品, 也
可以是專門配屬的實體介面與裝置. 但實體產生的中斷請求因涉及 host os
的管轄, 還是很難定案.
======
就學習與訓練的立場, 架在硬體之上的 Virtual Machine Mornitor 提
供 VM 可以快速發展 OS (含 driver routine) 軟體, 但這是有硬體支援下
具 full virtualization 能力的機器才可能有這樣的方便. VM 對發展 OS
的優勢就是在程式會出錯的狀況下可以被監測與斷點側錄(snapshot)與接續,
可對故障處快速反覆偵錯, 又因空間的完全隔離, 就因之可藉助已有的 OS
提供各種現有軟體的支援與測試, 是發展與訓練的好工具.
早期的 VM Mornitor 是做在可微程式(microprogrammable)的處理機內
部, 屬於可更動式的微碼, 這是通稱的 vm hardware support , 其功能就攔
截言非常強大. 但現在通行的 VM 則是以事先更動的方式進行敏感指令(並非
出錯的程式碼, 而是有共用硬體衝突顧慮的正確程式碼)的攔截, 因此對出錯
除錯的支援較弱, 甚至是不支援.
VirtualBox 是接續 QEMU 的部份技術, 而 QEMU 是將所有指令全攔截
並進行解譯, 採 block translation 技術進行轉換, 可避免重覆解譯, 效
率上比傳統解譯器法高, 同時也可以模擬不同 processor 的指令, 可以跨
不同的 processor 執行, 但效率不能跟硬體支援的 VT 相比. QEMU 理論上
是相當於 microprogramming emulation 的功能, 但實務上得模擬到每個實
體的介面控制器, 因此比只做指令模擬的微碼 VMM 來得複雜, 很多都是將
功能簡化. 中斷動作 多數只有部份裝置被模擬, 而且是將整個 driver
routine 替換掉. display , keyborad 與 mouse , 網路卡 就是典型的例
子.
硬體控制與中斷動作若要被完全模擬並且也能讓 guest os 也能在 user
space 下與指定的硬體來往, Soft VMM 就必須有下列支援性動作.
1. 有程式指令可對特定硬體裝置與介面進行驅動程式卸載, 將硬體資源管轄
權轉移給VM , 登載註冊是需要的.
2. Soft VM 有核心功能模組可以設定與 host os 共同管理的裝置(如 DMA
與 interrupt controller).
3. Soft VM 透過 in/out port 程式與 callback function point 傳送, 讓
guest os 的 driver 可以在 user space 透過 VM 的 kernel function
使用到硬體, 並且將 interrupt signal 經 vm 通知並進行緊急對應處理.
4. Soft VM 可以重新設定(如 reset)特定的硬體裝置與介面, 可配屬與解除
guest os 使用對映的實體裝置與介面.
5. Soft VM 可隨通知的 signal state 緊急設定, 改變優先執行的模擬次序.
======
Soft VM 提供給 guest OS 的 Machine Environment 跟 敏感指令部位的
入口攔截點是密切相關的, 這是模擬難易度與效率的考量. 所以有可能在
guest os 是 制式 linux 時, 連接實體 printer 是會 work 的, 但若是自
己另外寫的 printer I/O driver 可能就不會 work .
去年的 VirtualBox print port 部份幾乎對real print port 的 polling
mode 都不能正常運作, 至於最新版就不知道了, 或許已有改進吧 !
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.4.12
推
08/12 22:35, , 1F
08/12 22:35, 1F
→
08/14 14:57, , 2F
08/14 14:57, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章