精華區beta Programming 關於我們 聯絡資訊
> > 寫 driver 用高階語言不方便是因為 interrupt 與 DMA 的動作與對象 > > 要特別處理而已. > 重點還是要與硬體對稱啦! > C是高階語言嗎?有很多Device Driver 都是用C寫的 1."要與硬體對稱", 這句話是唬嚨不懂硬體的, 而且語焉不詳. 多數使用高階 語言的人都不太管實際細節只看結果, 因此不知道那個程式片段是對映了那 段碼, 也不清楚實際上機器執行的細節. 但事實上是不論那一個程式, 不管 她是用組語由人親自決定要將原始問題如何對映處理的, 還是由 compiler 透過語法與程設人員的指述, 由 compiler 協助進行有規則性的方塊對映, 最終都是對映到實體機器去執行, 原始問題都是會跟硬體有對稱的關係. 2.在何處發生了那種的不對稱 ? 早期的 X86 使用的 FPU (Floating Point Unit) 是外掛的, 沒有她, 用軟 體的 emulater 也能跑 floating point 計算. 那麼用了一個老式的 compiler 與 linker/loader 會不會發生已經插了硬體的 FPU , 結果還是叫用慢速的軟 體 FPU-Emulater 在跑 ? 其次, 是已經在未插硬體 FPU 前就繫結綁好的程式, 會不會自動替換成由硬體 的 FPU 來跑 ? 對於 OOP 來講, 早期的 OOPL 是強調動態繫結(binding)的, 她的 object 在使用 到時才會找到, 才進行通知啟動(invoking). 這種設計就是要自動適應不同的執行 環境. FPU 只是一個例子, 至於如何做動態繫結, 是利用有架構規格的硬體輔助, 還是純用軟體自動檢視銜接, 並沒有一定的實作法, 也跟程式語言的高階指述無關 , 但 OOP 還是很先進的就已經考慮了這些有關容易維護性, 規模性(scalability) 的問題. 對於 MicroSoft 的 pnp device, 這種 run-time installable driver, 就更接近 object 的概念與使用形式. > > 程式都是用來控制硬體的, 正確運作的程式何來不對映 ? 或對不攏 ? > 不止這些啦 !還有Memory配置、程式註冊, 同步處理、Task Queue排程的問題等等... Memory 配置, 如收送的 buffer , 跟記憶體的管理有關. 同步與 Task Queue 是跟 Processors 的執行序有關, 要讓 loader 置入記憶體與由 CPU 執行當然得跟 MS OS 的程式註冊打招呼, 因為你的 driver 要加入使用這些硬體, 當然得跟已經掌控 這些資源的 Object 打交道. 然道, 高階語言寫的程式都不用跟這些 object 打交 道 ? C 相對於組語, 當然是高階語言. UNIX OS 是用 C 寫的, 但還是有一段程式是用組 語寫的. 早期的 C 遠早於強調結構化的 PASCAL 因此受到的規範限制少, 但一樣有 其極限與限制, 高階語言的實作者通常不願意花時間特別支援特殊的硬體功能. 但 用組語一定能寫出那些特異的功能模組讓高階語言寫出的程式連接後叫用, 所以很 多 driver 能用高階語言寫出來是一點都不稀奇. 那麼, 為甚麼 UNIX OS 沒有全部用 C 寫出來 ? -- ◎ Origin: 中央松濤站□bbs.csie.ncu.edu.tw From: 140.115.6.234