傳統電腦硬體架構包含了四大元件
CPU、Memory、I/O devices 和 Bus
Bus 是一些平行傳輸線用來負責 CPU、Memory 和 I/O devices 之間的資料傳輸
如圖下所示:
Bus 內的傳輸線又可歸類為三組:控制線(Control Line)、位址線(Address Line)和資料線(Data Line)
我們電腦的硬體單元會被系統指派所謂的位址空間(Address Space)
因此位址線被用來告知資料是傳往何處,而控制線則是用來作一些傳輸控制(Ready、Store、Load等等)
若假設 bus width 是 64 bits(Data Line 有 64 條),而 bus 的時脈為 1GHz,且每次 cycle 傳輸一次資料
則理論上可以達到 64 Gbps 的最大資料量傳輸唷!
至於 Bus 上的資料傳輸,遵循著所謂的 Fetch-Store Paradigm(亦稱 Load-Store Paradigm)
其實可以簡單看成一去一回啦!(例如 CPU 要 store 資料進去記憶體,或是 CPU 要從記憶體 fetch 資料)
當然,由於這些硬體單元是附屬在 bus 上,所以 bus 是個共享媒介
許多硬體單元會想利用 bus 傳輸資料,但一次又只能有一對傳輸
所以啦!這些硬體單元在使用 bus 時就被附有優先權
透過 Bus Arbiter 來決定誰可以取得 bus 使用權
我們是做網際網路的,硬體方面最關心的當然是網路介面卡(NIC)啦!
其實 NIC 就等同於 I/O Device 的地位,為封包的進出閘口
但是封包普遍長度那麼大, bus width 有限(假設是 64 bits),而且根據上段架構
每次 64 bits 的傳輸若都需要 CPU 的幫忙實在是不是什麼好事情呀!
因此有必要把封包的進出和封包的處理隔開來!
那麼 NIC 要做的事情就多起來啦~
首先是第一個:Onboard address recognition and filtering
NIC 必須要判斷這個接受到的封包是不是自己的而不要勞煩 CPU 檢查
不過這個又分為兩種情況:單播/廣播 和 群播
單播/廣播 比較簡單,因為都可以即刻確定是否要把封包收進來
如果是,NIC 再去引發硬體中斷通知 CPU 有封包到達
否則直接丟棄不用通知 CPU
群播比較麻煩,因為電腦隨時隨地都可以 join/leave 一個 group
這部份就必須靠 CPU 去指示 NIC 說哪些群播位址你必須要接收
不過 NIC 在收到封包後去一個一個比較群播位址有點嫌慢
因此這部分一般是透過 hash 來完成
可以想見,若封包的群播位址是我要的,當然經由 hash 可以確定接收
但若不是, hash 的結果有可能會誤認為是我想要的
此時就得需要 CPU 的幫忙去把檢查位址後丟棄封包
第二個是:Onboard Packet Buffering
由於封包傳輸速率不一,我們用 bursty 這個字眼說明封包到達速率的變動是 widely 且 rapidly
再加上,並非 NIC 接收到封包時就可以馬上使用 bus 來傳輸資料
因此 buffer 是需要用來暫存這些封包
第三個是:DMA(Direct Memory Access)
由於網路速度逐漸增高,透過 CPU 幫忙來傳輸封包資料實為不智之舉
因此 DMA 這個技術就是用來做 I/O Device 的大量資料傳輸
DMA 顧名思義就是 I/O Device 直接存取記憶體內容,而不需要 CPU 的參與
因此在資料傳輸的同時,CPU 可是可以做其他事情呢!
那麼我們的 NIC 在透過 DMA 傳輸資料時
只要在整個封包都傳完後(封包的 input 和 output 同法)再打斷 CPU 說我完成了即可
最後則是要講一下 Promiscuous Mode 啦!
小孫我是翻譯作混雜模式,因為是所有封包都混合參雜在一起!
這種模式用在哪裡咧!嘿嘿!封包分析儀(Packet Analyzer)啦!
packet analyzer 若需要 NIC 處於 promiscuous mode
那麼前面說的 onboard address recognition and filtering 就必須是被 disable 的!
參考資料:"Network System Design Using Network Processors",Ch 4, Agere Version, Douglas E. Comer
- Jan 11 Sun 2009 03:09
傳統電腦硬體架構
close
全站熱搜
留言列表