※ 引述《MasterChang (我愛ASM)》之銘言:
: ※ 引述《ggg12345 (ggg)》之銘言:
: : 就是空間與設備的爭議, 也是有一陣子聽說是使用 abstract machine
: : 以假設的指令與機器教組語.
: : 教甚麼機器的指令都可以, 但不要讓之後銜接的 OS 對 cpu 與 I/O 透
: : 過 DMA 可以做 overlap operation 都銜接不下去, 也不要讓緊急通告
: : 的 Interrupt I/O 與 polling I/O 都弄不清楚.
: 不要亂賣弄名詞。
: I/O就是I/O,沒有什麼 Interrupt I/O或是Polling I/O,你可以
I/O處理使用 polling I/O 或 interrupt I/O , 除了書上有, 上網也查得到.
: 講某個I/O具備Interrupt-driven的能力。即便是這個I/O 需要透
: 過Polling方式獲得資料,這個也和組語沒有直接關係。
(底下是給想知道的人看的, 很基本, 也可不看)
I/O 產生的 interrupt signal 是硬體機制, 介紹這機制最靠近的課程就是組
語與計組. I/O 界面卡上的 I/O controller 會將被掌控的 I/O device 狀態
置於 界面卡 register 或 界面卡相關的記憶體(假如使用 memory map I/O
space) 中, 要 processor 去處理 I/O 給的資料, 至少需要知道那個 I/O 資
料是不是已準備好(ready)可以被拿來用.
這個標題的 COM1 就是 RS-232 serious I/O interface , 就是個典型的
I/O 範例. Polling I/O 就是要 processor 不停的去輪詢 I/O data status,
一旦 ready 就去讀進來用, 但一旦進一步去做後續處理, 可能就來不及將後
續再擠進來的 I/O data 及時回來輪詢再及時取出來, 這就可能讓送進來的資
料擠掉了. 因此, 界面卡可以被設定是否要在 data availabel 時就產生硬體
訊號中斷 processor 使之緊急過來及時取走放到暫存區(buffer queue), 中
斷就有緊急通知, 請求 processor 與對應程式做及時處理的作用.
高 bit rate 的 serious line 除了 cable 長度造成衰減干擾, 訊號能
否產生(shift and sampling clock rate)等因素外, 其中一個瓶頸就是這個
處理方式的程式問題.
假如傳送速度再高, 而且還持續大量連續一段時間, processor 即使透過
interrupt 快速回應, 也可能做不了太多後續處理的事, 這時候就會需要使用
DMA controller 來代替 processor 來搬運 memory buffer 與 I/O interface
間的資料, 這個協助搬運使得 processor 與 I/O 可以同時工作, 這個 "同時
(concurrency)" 可以在單一共用的 BUS 上交錯使用 BUS . 也可以透過隔離的
多個 bus (或 switch)同時各自接取各自的 memory block. 假如再裝上多個高
速的 COMM interface , 同時需要多個 I/O 收送資料同時進出, 這時候就需要
多個 DMA controller 與 seperated bus 透過 "同時平行(parallel)" 來解決
高速搬運的問題.
組語與計組的練習未必三種方法都實習使用到, 但 "輪詢" 與 "中斷" 是
一般都會介紹的. processor 與 I/O device 能同時各自工作也是電腦這行的
人該認識與了解其極限的.
: DMA操作跟他能不能重複操作應該跟OS裡面i/o queue 比較有關。
: DMA只有一個的話,一次只能做一件事,就算重複操作,也只是先
: 放進queue等待到DMA被釋放。
有些 I/O 裝置會共用同一個 DMA channel , 這時候才是由 OS 的 device
management 做資源管理的工作, 大二組語課程不可能講這種範例.
: 如果沒有能力教底層的東西,對於系統driver運作不熟,你講這樣
: 多有用嗎?你還是沒辦法教吧?
今天多數論文畢業的博士教師可能欠缺這個意願或能力教這種基本東東,
這有其根本原因. 但大學課程無法提供這種學習機會是造成先有雞還是先有蛋
的問題.
觀察的事實是: 有很多人(含多數年輕的論文博士)能教這類課程, 但關鍵問題
是設備與環境. 環境的背後就是共識. 沒有共識, 那就純軟的與會煩惱硬體的
各自分開一片天, 可能是個辦法. 某些人能教, 也不應該是能教的就得該死,
該去教, 也不會是不給設備與支援就得去教, 要專業分工就得彼此尊重. 再不
行, 那就是各自幹活.
I/O interrupt 通常就是給範例照做, 比較與體驗實況. 要自由發揮, 那種問
題的除錯又超出更大的範圍.
====================================================================
組語是最靠近 I/O basic processing 的程式課程了, 組語不教這些, 這個程
式語言課程的核心價值就可能有缺陷了. 但組語不教, 要推給 OS 課也行, 但
總要讓 OS 課能給個實例吧 ! OS 課要動用 PC 教室安裝的 os 軟體(如 dos,
Linux 或 MS window) 已夠爭議了, 再動用 8051 硬體就更越界了(何況也沒
有).
所以要請教其他人: 在 PC 與高階 OS 下, 能否有簡易的辦法可以直接使
用 COM1 與 printer PIO 界面做 I/O device 的 in , out 及 interrupt 練
習.
: : 同樣類似的問題:
: : 不教代數只教算術可以很方便的學微積分嗎 ?
: 我不知道微積分還有分x86或是PowerPC....
: 微積分就是微積分,他不會有A廠的微積分或是B廠的微積分。
再度請教大家 學組語 課程之後, 該建立的核心基本能力, 大家期望的是甚
麼 ?
如果不需要, 將課程取消也是個辦法 ! OS 課其實也該檢討取消.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.1.146