電腦群組成.零件之間的通訊.匯流排BUS

來源:互聯網
上載者:User

標籤:

  • 匯流排幹嘛的?說白了就是用來傳輸資料的,在電腦的各個組件之間。比如我主存裡存的資料CPU要用,需要一條線路傳過去吧,CPU內部各個寄存器之間、寄存器與ALU、CU與各個組件之間等等等等很多地方,總之就是組件之間需要傳輸資料
  • 傳輸的資料分為三種,對應著三種功能的匯流排
    • 資料匯流排
    • 地址匯流排
    • 控制匯流排
  • 那麼為何稱為“總”線?那是因為大部分情況下,我們沒辦法把任意兩個組件之間都連起來,因為組件的數量太多太多了
    • 所以我們只用一根匯流排來傳輸, 那麼面臨的第一個問題就是,怎麼區分資料、地址、控制這三類呢??
    • 確實對於資料和地址有一種技術叫做匯流排複用,因為電腦是在時序的控制下工作,所以一根匯流排上的資料在不同的時間段內被規定為“資料”還是“地址”。對於控制訊號還沒有這樣做的,,,
    • 還是分三根匯流排來吧
    • 那麼又有一個問題,只有三根線的話,雖然可以區分是資料還是地址還是控制訊號,但是對於眾多的組件來說,它如何知道當前匯流排上傳輸的資料是不是給它的?因為一條資料線串連了所有的組件,A給B發送資料的時候上面的資料是給B的,對於其他組件是沒用的、是錯誤的資料。
    • 所以說,就需要控制訊號來控制嘛。A發送資料的時候,控制訊號就只讓B從資料匯流排接收資料,其他組件是不接收的。
  • 突然想到一個比喻,只是用來解釋匯流排的工作原理,並非曆史發展
    • 匯流排大概就像自來水管,自來水廠沒辦法給所有的家庭都鋪設一條專門的管道,所以就只鋪設一條管道串連起所有的家庭。每個家庭都有自己家庭的工作用來給社會做貢獻,哪家需要用水,就可以隨時開啟自來水管取水。
    • 後來自來水廠買下了加油站,但是不想再鋪設更多的線路,所以就仍舊用一根管道,但是告訴所有的家庭,只有在你收到了自來水的訊號,從管道上才能取出你需要的自來水,收到的是汽油訊號,取出來的就是汽油。訊號的傳輸也需要一條線,所以就鋪設了一條電線來傳輸訊號
    • 事實證明這做是明智的,因為自來水廠經濟越來越發達,逐漸買下了食用油廠、瓦斯廠、鹽廠、漢堡廠等等等等,但是依舊使用一根管道就可以服務所有的家庭了,只不過需要傳輸的控制訊號多一點,這比多鋪設管道要省錢多了
    • 後來發現家庭之間的交換也比較頻繁,既然有這麼方便的總管道為什麼不用呢?於是大家都在控制訊號的控制下,被告知可以往管道上放東西的家庭就可以往管道上放東西,然後再通知誰來取東西。這些管道就變成了雙向的通行,可以取也可以放。
  • 所以匯流排的一個很重要的特徵就是,對掛在上面的組件是共用的。
    • 如果兩個家庭之間達成私下交換的協議,或一個家庭和自來水廠有關係可以讓人把東西專門開車送來,那相當於專門的通訊通道,不能稱之為匯流排
  • 對應到電腦上,這種匯流排就是“以分時形式共用一組電導線”來實現。
  • 廢話太多了…
匯流排組成與特性組成
  • 傳輸線、介面和匯流排控制器
    • 除了傳輸資料、地址和控制訊號的資訊線外,還有電源線和接地線來串連到每個組件,也有可能會有備用線來預防匯流排出故障
    • 介面由三態門和緩衝寄存器組成。三態門可以決定當前匯流排與這個組件的聯通狀態,三態門的輸出可以是1、0和高阻抗三個狀態,多一個EO使能來控制
    • 由於匯流排的共用性,所以需要一個匯流排控制器來控制匯流排的使用和分配,
特性

功能特性

  • 傳輸線按功能(傳輸的資料是個啥)分類
    • 地址匯流排
    • 資料匯流排
    • 控制匯流排

電氣特性

  • 也就是傳輸方向了啦
    • 單向匯流排:只能一個方向傳輸資料。地址線單向就夠了=、=
    • 雙向匯流排:全雙工系統和半雙工
      • 全雙工系統:同時可以雙向的傳輸資料
      • 半雙工:一個時刻只能按照一個方向來傳輸資料
  • 別問我怎麼實現的,我不知道。我猜應該是在數字電路這門課上,,,,,,搞得我好想學

時間特性

  • 按照時序來規定了每根傳輸線上的訊號在什麼時間才是有效
    • 不在指定的時間內讀資料的話,大概是(沒錯我又開始猜了),要麼讀不到、要麼讀錯掉
匯流排設計與實現
  • 說到這還只是單匯流排的結構,即所有的模組共用一個匯流排。
    • 但是
    • 一個匯流排上接入的模組是有限的,太多的模組會讓匯流排的負荷太高,降低通訊效率
    • 每個模組的工作頻率也可看作速度不盡相同,比如CPU明顯要快於I/O介面,這樣在工作慢的模組佔用匯流排的時候,工作快的模組幹完了獲要使用匯流排,但是匯流排被慢模組佔用所以不得不等待。
  • 所以出現了帶局部匯流排的多匯流排結構
  • 然各個組件之間的工作頻率也不相同,這就很難協調,結果就是效率降低,於是就出現了層次匯流排結構,來處理組件之間的協調性
  • 進一步還有
    • 帶局部匯流排的層次匯流排結構
    • 使用橋接器串連的多匯流排結構
    • 具有更強容錯能力的多重匯流排結構
匯流排控制
  • 有兩句話很好的概括了匯流排的兩個特性

    • 發送的互斥性:某一時刻只允許一個功能組件往匯流排上發送資料
    • 接受的共用性 :允許多個功能組件在同一時刻接收匯流排上傳輸的資訊
  • 那麼如何協調好多個組件之間的這種資訊傳遞的關係,就需要有人站出來控制大家對匯流排的使用

  • 根據兩個特性來分析
    • 如何決定某一時刻由那個功能組件往匯流排上發送資料,稱這個組件為主組件,主組件控制了匯流排。這部分叫“匯流排仲裁”
    • 接收資訊的時候應該如何控制?萬一我要接收資料的時候主組件還沒有把資料放到匯流排上呢?萬一我要接收的時候主組件卻把資料從匯流排上撤銷了咋辦?這部分為匯流排的通訊控制
匯流排仲裁
  • 如果很不幸,只有一個人站出來控制匯流排,那麼就是集中式匯流排仲裁,誰來當主組件即誰來佔用匯流排由他“集中”控制

    • 串列連結方式:所有的組件通過一條線來向匯流排仲裁器發送“匯流排請求”訊號。
      • 若組件y發送匯流排請求訊號,剛好匯流排是閒置,那麼匯流排仲裁器就發出匯流排可用的訊號,它若接收到了那麼就由它來佔用匯流排,並也由它來發送匯流排忙的訊號來告訴其他組件匯流排不是閒置。
      • 但是,匯流排可用訊號的傳遞是從組件0依次向下傳遞的,如果組件0沒有發出匯流排請求,才會把匯流排可用訊號傳遞到下一個組件1。這很正常啊,誰讓匯流排可用訊號先經過我呢?就算你後面的組件在請求匯流排,那也是我前面的請求匯流排的組件先收到匯流排可用的訊號啊。
      • 這就形成了一種預設的優先順序,,,而且因為是串聯,所以一旦一個組件壞掉,其後面的組件將永遠收不到匯流排可用訊號
      • 有一個名字叫“菊花鏈”……這一定是很久之前的名字了
    • 定時查詢方式:基於串列鏈式的方式
      • 對所有的組件編號,在第一次收到匯流排請求的時候,計數器從0開始計數,並將計數器的數值作為匯流排可用的訊號定時廣播到每個組件
      • 這個數值對應著可用接收這個匯流排可用訊號的組件的編號,所以廣播之後,所有的組件收到了匯流排可用的數值,對比自己的編號如果一樣才可以發出匯流排忙的訊號來佔用匯流排,一旦收到匯流排忙的訊號,計數器就停止計數(而不是歸0,串列連結相當於計數器歸0)。
      • 否則的話計數器就+1,那麼在下次發送匯流排可用訊號的時候,可以響應匯流排可用訊號的組件就是下一個了。
      • 而且,計數器的值可以由軟體來控制,這也意味著優先順序可以由軟體來隨時更改。
      • 明顯複雜了許多,線路多成本高,而且由於需要提前編號、線路的數目取決於匯流排組件的數目等,使得可擴充性差。另外由於其定時發出訊號的頻率依賴於計數器的工作頻率,所以不會很高。
    • 獨立請求方式
      • 相對於串列的連線,獨立請求就是匯流排請求和匯流排可用線對於每個組件都有一根專門與匯流排仲裁器相連,匯流排忙訊號只需要一根就足夠
      • 每個組件獨立的向匯流排仲裁器發送匯流排請求訊號,如果當前匯流排是閒置(匯流排忙的線無訊號),則匯流排仲裁器向該組件發送匯流排可用訊號,對於多個同時發送的匯流排請求訊號,匯流排仲裁器內部根據硬體實現的仲裁演算法來確定誰可佔用匯流排
      • 仲裁演算法有預定(靜態優先順序)、自適應(動態優先順序)、迴圈計數(平等)、先來先服務(隊列)。
      • 靈活性很強,但是成本最昂貴,,,你看那一根根的線,都是錢啊
    • 固定時間片方式
      • 利用了分時的思想
      • 按照固定長度的時間片依次讓各個組件來使用匯流排,即便當前組件不用匯流排,那也得等目前時間片過去之後才能換到下一個組件。
      • 最簡單,最公平,成本最低,效果最不好(不過在某些情況下也足夠了)
  • 集中之外就是分布了

    • 分布意味著不需要一個大哥帶頭來宣判,而是大家一起按照規則來商量誰佔用匯流排。不再有唯一一個仲裁器,而是有多個分布的仲裁器。
    • 面向多處理器的電腦系統的匯流排標準就採用分布式匯流排仲裁器,也就是說這種分布的處理一般用於協調多個處理器
    • 不過組件的工作終久還是幹活,而不是忙於商量這種事,所以就交給一個代理“分布匯流排仲裁器”,各個代理手握自己組件的優先順序,代理們商量也不是不可以嘛。
    • 自舉分布
      • 自舉不意味著平等,這種方式反而意味著固定的優先順序,只不過需要你自己去檢測有沒有比你優先順序更高的在使用匯流排
      • 一個組件、先檢測匯流排忙是否有訊號,如果有則等待,否則再檢測比它優先順序更高的組件的匯流排請求訊號是否有(也就是如果多個組件同時發出匯流排請求訊號的話,匯流排忙還是沒訊號狀態,但總不能分配給多個組件使用匯流排吧),如果有,就等待,否則使用匯流排並持續發出匯流排忙訊號
      • 裝置 i 通過 BRi 線來發送匯流排請求訊號,最低優先順序的 裝置3 的 BR3 線被當作匯流排忙 的訊號
        • 且慢,聽我慢慢分析
        • 最初沒有裝置在使用匯流排,所以BR0-BR3都是閒置
        • 裝置3要使用匯流排,先檢測匯流排忙(BR3)有沒有訊號(沒有),再檢測 BR0 - BR2 有沒有訊號(沒有),於是 裝置3 向 BR3 發送了匯流排請求訊號,並持續向BR3發送訊號作為匯流排忙的訊號
        • 裝置1 和 2 也要使用匯流排了,但是匯流排忙(BR3)是有訊號的,所以要等待(也就是說裝置3雖然優先順序最低,但也得尊重一下吧,使用匯流排的時候總不能被打斷),於是 裝置1 和 裝置2 保持 著匯流排請求訊號,也就是 BR1 和 BR2 都處於有訊號狀態
        • 裝置3 用完了,撤回 BR3 的訊號,此時 裝置1 和 裝置2 檢測到 BR3 沒訊號了,說明匯流排不忙了,但 裝置2 檢測到 BR1 上有訊號,意味著有比 裝置2 更優先的 裝置1 在請求匯流排,所以 裝置1 佔用匯流排,並向 BR3發出訊號,然後 裝置1 就可以撤掉 BR1 的請求訊號了
      • 也就是說,BR3既是裝置3(最低優先順序)的匯流排請求線,也是大家所有的 匯流排忙 線。因為最低優先順序的裝置不需要根據 匯流排請求訊號 來判斷有沒有更高的優先順序,而只需要根據 匯流排忙 訊號就可以。而最低優先順序裝置發送的 匯流排請求 訊號如果能起作用,那也只有在 匯流排不忙 的時候才可以。所以 最低優先順序裝置的匯流排請求 和 匯流排忙 可以合到一起。
      • 一根根線都是錢啊,是成本啊,是複雜度啊,這些東西都是能少就少的
      • 此時的分布式匯流排仲裁器比較簡單,只需要檢測相應的線(匯流排忙和更高優先順序的匯流排請求)有沒有訊號就可以了,所以內建到裝置內也不是不可以,這樣就不必單獨設一個匯流排仲裁器了。
    • 並行競爭
      • 哈,這個比較複雜,裝置自己搞不定了,所以需要一個分布式匯流排仲裁器
      • 一個組件先向自己對應的分布仲裁器發送一個“優先順序別AP#”的代碼(M位的二進位可表示2^M個優先順序)
      • 分布仲裁器向總的“請求/准用”線上發布自己的 AP#
      • 所有的 AP# 在“請求/准用”線上做 邏輯或 運算
      • 隨後各個分布仲裁器讀取“請求/准用”線上的結果,如果結果大於自己的AP#,則說明有更進階別的裝置在請求,於是就暫時撤銷自己的 AP#
      • 隨著時間的流逝,“請求/准用”線上就留下了優先順序最高的 AP# ,那麼這個時候它的分布仲裁器再讀取,就和自己的 AP# 一樣了,也就沒有比自己更高的,於是就可以佔用匯流排並發出匯流排忙了
    • 衝突檢測
      • 這個就簡單了
        • 如果匯流排忙,則等待
        • 如果匯流排不忙
          • 如果只有自己請求(無衝突),則使用匯流排
          • 如果不止自己在請求(有衝突),則所有衝突的請求(即自己和其他請求)都延遲一個隨機的時間再請求
      • 不好意思沒有圖
通訊控制

通訊需要發送方和接收方的配合,發送資料叫“源組件”,接受資料叫“目的組件”

  • 同步通訊
    • 即根據時序的控制
      • 源組件在固定的時間內發送資料並保持訊號,到點就撤,不確認目的組件是否收到了資料
      • 目的組件在固定的時間讀取資料,不管能不能讀到資料(匯流排上是否有資料),也不管讀到的資料對不對(讀到的是源組件發送的資料還是其他的雜亂資料)
    • 時序哪裡來?可以由中央時標來控制,也可以每個組件內建時標,但是需要和中央時標同步,就好比我們手機、電腦上的時間,每次開啟網路就會在網路上和標準時間同步
    • 如8086微處理器採用同步通訊讀取儲存空間的資料的時候

      • T1CPU發送訪存地址
      • T2CPU發送讀訊號
      • T3主存把資料放上去
      • T4CPU讀取資料
  • 非同步通訊
    • 就是需要雙方互相確認操作,這種確認是通過“握手”協議來實現,種類很多但大致分成單邊控制雙邊控制
    • 單邊控制
      • 再分就是,目的組件控制還是源組件控制
      • 目的控制

        • 目的組件先發送資料請求,經過 t 時間的延遲到達源組件,源組件把資料放到資料匯流排,經過 t 時間的延遲資料到達目的組件

        • 源組件先發送資料,隔 t1 時間再發送資料就緒訊號(防止資料就緒訊號比資料更早到達目的組件),目的組件收到資料就緒訊號就讀取資料匯流排上的資料。兩次資料的發送間隔 t2 時間,這短時間內完成 源組件 向資料緩衝器裝載資料,匯流排仲裁邏輯完成仲裁。
    • 雙邊控制
      • 雙方都參與到確認中,但依然分主次,且進一步分為“非互鎖”、“半互鎖”、“全互鎖”
      • 書上只講了以源組件為主……我也沒再查更多的資料……
      • 只看圖吧。應該很容易看懂
  • 半同步通訊
    • 兩種極端的方式優點明顯,但是缺點也明顯
    • 人們就很喜歡綜合幾種極端的方法來實現更好的平衡
    • 宏觀上按照同步通訊來組織,局部上來用非同步應答的方式
匯流排效能評價
  • 位寬
    • 匯流排一次傳輸資料的位元,也就是匯流排的線數,一根線只能穿1位(我猜是線上有電還是沒電。沒電其實說不太過去,因為我一直看到的都是“高電平”還是“低電平”。)
  • 工作時鐘頻率
    • 即控制匯流排的時鐘訊號的頻率,單位一般是HZ,即一秒鐘被分成了多少個節拍
    • KHZ = 1000HZ
    • MHZ = 1000KHZ
    • ……
  • 單個資料的傳送周期
    • 資料轉送的方式分為正常傳輸和突發傳輸
    • 正常傳輸
      • 先發一個地址,再發一個資料
    • 突發傳輸
      • 先發一個地址作為首地址,然後發送多個資料
    • 一個刻度即為一個節拍的長度
  • 負載能力
    • 匯流排上可掛在的組件的最大數目,其實一般不會太大,太大在仲裁的時候會有比較久的延遲,而且匯流排本身也負載不起
  • 資料轉送速率
    • 匯流排一秒可穩定傳送資料的位元組數
    • 單位為KB/s、MB/s
    • 最大資料轉送速率又稱為頻寬
    • 匯流排頻寬 = 匯流排位寬 * 匯流排工作頻率 / 8

電腦群組成.零件之間的通訊.匯流排BUS

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.