新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SCSI 總線和協議

        SCSI 總線和協議

        作者: 時間:2016-12-12 來源:網絡 收藏
        I/O 技術實現在計算機和存儲設備之間的數據交換。實現從CPU 到存儲系統的I/O通路的一個中間就是SCSI(Small Computer System Interface).

        本文引用地址:http://www.104case.com/article/201612/328733.htm

        一. I/O 通路

        在計算機中,一個或多個CPU 處理在CPU緩存或主存儲器(RAM:Random Access Memory)中的數據。 CPU緩存或主存儲器是非常快的器件,但是斷電就不能保存,價錢也比較昂貴。 所以數據還需要放在存儲設備上。

        通常,數據從主存儲器(RAM)通過系統總線,主機I/O 總線 和 I/O 總線移動到磁盤或者磁帶等存儲設備。

        1.1 系統總線

        在計算機的核心部分,系統總線保證數據在CPU和主存儲器之間進行快速的傳遞。 系統總線必須使用非常高的時鐘頻率,使得它能夠足夠快的給CPU 提供數據。 該總線的實現采用在主電路板上印制導線的形式。 出于物理性能的原因,高的系統速度需要短的印制導線。 因此,系統總線應該盡可能的短一些,并且只能連接CPU和主存儲器。

        1.2 主機I/O 總線

        在現在計算機中,為了釋放CPU 的應用處理負擔,人們把盡可能多的任務移到諸如圖像處理器這樣的特別的處理器中。 由于上述物理上的限制條件,這些器件不可以連接到系統總線。 因此大多數計算機都實現了稱作主機I/O總線的第二個總線。 橋接芯片提供在系統總線和主機I/O總線之間的連接。 PCI(Peripheral Component Interconnection:外圍互聯設備)是當前最廣泛使用的實現主機I/O 總線的技術。

        1.3 I/O 總線

        設備驅動器負責控制外圍設備以及與外圍設備的通信。針對存儲設備的設備驅動器部分以軟件形式存在,該軟件由CPU處理。由于跟存儲設備通信的部分設備驅動器幾乎總是以固件的形式實現,該固件由特別的處理器(ASIC:Application Specific Integration Circuit)處理。 當前這些ASIC 有的集成到主電路板(如SCSI 控制器),也有的通過附加的PCI卡連接到主板。 這些附加的卡通常被稱作控制器。 存儲設備通過主機總線適配器(HBA:Host Bus Adapter)或者通過在板上的控制器連接到服務器。 在控制器和外圍設備之間的通信連接叫作I/O總線。

        當前用戶I/O 總線的最重要的技術是SCSI 和光纖通道。 SCSI 定義了一種總線,該總線能夠連接16個設備(包括服務器和存儲設備)。 在另一方面,光纖通道定義存儲網絡的不同拓撲結構,該存儲網絡可以連接數百萬個設備(包括服務器和存儲設備)。 作為替代光纖通道的其他選擇,工業界正在使用TCP/IP 和以太網(IP存儲)實現存儲網絡。 注意的是,這些新技術都是繼續使用SCSI 協議在設備間通信。

        二. 并行SCSI 總線

        把磁盤和磁帶設備連接到應用服務器或文件服務器,最常用的方法就是通過傳統的SCSI總線。盡管SCSI主要是一個塊協議,但這個術語也被用來指稱運行該協議的并行線纜機制。

        最初的SCSI物理層傳輸介質是一種并行電纜,由8根數據線和一些控制線構成。在每個發送時鐘里傳輸8位數據,傳輸速率相對說來是比較高的;但是由于電氣方面的問題,使得多數SCSI設備所允許的傳輸距離被限制在15-25m左右。隨著時間的推移,SCSI并行總線的性能一直在提高,并通過提供更多的數據通路(例如采用16位數據線和32位數據線)和更快的時鐘,得到了更大的帶寬。

        并行總線存在的一個問題是飄移現象。如果把一組并行的多位數據同時發出,每條數據線上的傳輸延遲會出現差異,導致各個位不會在精確的同一時間到達目的地。所謂飄移指的是一個時間窗口,所有的數據位在這段分布的時間內都能到達目的地。各個傳輸線上傳輸延遲的差別越大,飄移窗口也就越大。根據傳輸線理論,總線中每條線路的傳輸阻抗(包括容抗和感抗)跟它所處的位置有關,因此,傳輸延遲是位線所處的物理位置的函數。對于給定長度的線纜,要想增加時鐘頻率,就必須減小飄移窗口,從而最小化線路間的傳輸延遲差。顯然在高頻條件下,電纜越長,飄移窗口越大。

        SCSI規范的第1個版本發布于1986年。自那時以來,它被廣泛應用于服務器和高檔PC中,其速率由最初的4MBps發展到現在的320MBps,而且還在提高著。

        作為一種介質,SCSI定義了一個并行總線,用于數據傳輸和通信控制??偩€本身可以是印制導線的形式,也可以是一根電纜。外部SCSI設備使用電纜以菊花鏈的形式連接到服務器上的控制器。在菊花鏈中,每個設備都跟其他設備串接。由于這個原因,外部SCSI設備典型地都有兩個SCSI連接器,可以分別連接到鏈中的前一個設備和后一個設備?,F在的一個SCSI總線可以連接多至16個設備。其中包括1個SCSI控制器和15個存儲裝置。

        2.1 SCSI 類型

        SCSI有三個基本規范:

        SCSI-1:SCSI-1是在1986年開發的原始規范,現已不再使用。它規定總線寬度為8位,時鐘速度為5MHz。

        SCSI-2:1994年采用,此規范包括通用指令集(CCS)——支持任何SCSI設備所必需的18個命令。在此規范中,可以選擇將時鐘速度提高一倍,達到10MHz (Fast),將總線寬度增加為原來的兩倍,即16位,將設備數增加為15個(Wide),或者同時實現上述兩種升級(Fast/Wide)。SCSI-2還增加了命令隊列,允許設備存儲命令,并從主機排列命令優先級。

        SCSI-3:此規范于1995年正式出臺,包括一系列較小范圍的標準。涉及SCSI并行接口(SPI)的一組標準在SCSI-3中得到了繼續發展,SPI是SCSI設備之間的通信方式。大多數SCSI-3規范都以Ultra開頭,如Ultra for SPI規范、Ultra2 for SPI-2規范和Ultra3 for SPI-3規范。名稱中的Fast和Wide的含義與SCSI-2中的一樣。SCSI-3是當前正在使用的標準。

        雙倍總線速度、雙倍時鐘速度和SCSI-3規范的不同組合,產生了許多不同的SCSI規范。下表對幾種不同規范進行了比較。很多較慢的規范已不再使用——在此列出僅作比較之用。


        名稱

        規范

        設備數量

        總線寬度

        總線速度

        Mbps

        異步SCSI

        SCSI-1

        8

        8位

        5MHz

        4Mbps

        同步SCSI

        SCSI-1

        8

        8位

        5MHz

        5Mbps

        Wide

        SCSI-2

        16

        16位

        5MHz

        10Mbps

        Fast

        SCSI-2

        8

        8位

        10MHz

        10Mbps

        Fast/Wide

        SCSI-2

        16

        16位

        10MHz

        20Mbps

        Ultra

        SCSI-3SPI

        8

        8位

        20MHz

        20Mbps

        Ultra/Wide

        SCSI-3SPI

        8

        16位

        20MHz

        40Mbps

        Ultra2

        SCSI-3SPI-2

        8

        8位

        40MHz

        40Mbps

        Ultra2/Wide

        SCSI-3SPI-2

        16

        16位

        40MHz

        80Mbps

        Ultra3

        SCSI-3SPI-3

        16

        16位

        40MHz

        160Mbps

        Ultra320

        SCSI-3SPI-4

        16

        16位

        80MHz

        320Mbps


        除了總線速度提高之外,Ultra320 SCSI還使用分組化數據傳輸,從而提高其效率。Ultra2也是最后一種具有“窄”(8位)總線寬度的規范。

        所有這些SCSI類型都是并行的——數據通過總線同時傳輸,而不是一次傳輸一種數據。最新的SCSI類型稱為串行連接SCSI(SAS:Serial Attached SCSI),這種連接使用SCSI命令,但以串行方式傳輸數據。SAS使用點對點串行連接,以3.0千兆位每秒的速度傳輸數據,每個SAS端口可以支持多達128個設備或擴展設備。

        2.2 SCSI的控制器、設備和電纜

        SCSI控制器在SCSI總線上的所有其他設備和計算機之間進行協調。SCSI控制器也稱為主機適配器,控制器既可以是插入可用插槽的卡,也可以內置在主板上。SCSI BIOS(Basic Input output System)也在控制器上。它是一個小型ROM或閃存芯片,包含訪問和控制總線上的設備所需的軟件。

        每個SCSI設備都必須具有唯一的標識符(ID)才能正常工作。例如,如果總線能夠支持16個設備,通過硬件或軟件設置指定的設備ID的范圍為0-15。SCSI 控制器本身必須使用其中一個ID,通常是最高的那一個,而將其他ID留給總線上的其他15個設備使用。

        內部設備通過帶狀電纜連接到SCSI控制器。外部SCSI設備使用一條粗的圓形電纜,以菊花鏈形式連接到控制器(串行連接SCSI設備使用SATA電纜)。在菊花鏈中,每個設備都依次連接到下一個設備。因此,外部SCSI設備通常具有兩個SCSI連接器——分別連接前后兩個設備。

        電纜本身通常由三層構成:

        (1)內層:保護性最好的層,包含實際發送的數據。

        (2)介質層:包含向設備發送控制命令的線路。

        (2)外層:包含傳輸奇偶校驗信息的線路,這些信息可確保數據的正確性。

        不同SCSI標準使用不同的連接器,這些連接器通常不兼容,通常使用50、68或80針。SAS使用較小的SATA兼容連接器。

        一旦總線上的全部設備安裝完畢,而且分配了各自的ID,則總線的每一端都必須閉合。下面介紹如何執行這一操作。

        2.3 終接器

        如果SCSI總線保持開放狀態,沿總線發送的電信號會反射回來,從而干擾設備和SCSI控制器之間的通信。解決方法是終結總線,用電阻電路閉合每一端。如果總線同時支持內部和外部設備,則必須終結每個系列的最后一個設備。

        SCSI 終結的類型主要可分為兩類:被動(無源)和主動(有源)。

        (1)被動(無源)終結通常用于在標準時鐘速度下運行、且設備到控制器的距離小于1米的SCSI系統。

        (2)主動(有源)終結用于Fast SCSI系統,或設備到SCSI控制器的距離大于1米的系統。

        SCSI還使用三種不同類型的總線信令,這也會影響終結。電脈沖以信令的方式在線路上發送。

        (1)單端(SE:Single-ended):控制器生成信號,并通過單條數據線將信號傳送至總線上的所有設備。每個設備都會產生信號損失。因此,信號會很快開始衰減,由此SE SCSI的傳輸距離被限制為約3米以內。PC中普遍采用SE信令。

        (2)高壓差動(HVD:High-Voltage Differential):HVD常用于服務器,它以串聯方式發送信號,采用一條數據高壓線和一條數據低壓線。SCSI總線上的每個設備都有信號收發器??刂破髋c設備通信時,總線沿途的設備接收信號并轉發信號,直至信號到達目標設備為止。這樣,控制器和設備之間的允許距離可顯著增加,可達25米。

        (3)低壓差動(LVD:Low-Voltage Differential):LVD是HVD的同類技術,工作原理非常相似。兩者之間的差異在于,LVD的收發器更小,并且內置于每個設備的SCSI適配器中。這使得LVD SCSI設備的價格更合理,并且LVD使用更少的電量就可以通信。缺點在于最大距離僅為HVD的一半——12米。

        HVD和LVD通常都使用被動終結器,即使設備和控制器之間的距離遠大于1米也是如此。這是因為收發器可以確保信號足夠強,能從總線的一端傳輸到另一端。

        三. SCSI 協議

        在SNIA 共享存儲模型中,SCSI 負責從上層接收請求并轉發,或者從并行設備獲取數據并轉發。

        例如:有一個應用程序向操作系統發出對磁盤設備的寫請求。 在SCSI協議層,這個寫請求被看成是特定數量的數據塊以協議的形式傳遞到指定位置的命令。作為操作系統和存儲設備之間的一個中介,SCSI 協議既不規定數據塊如何組織,也不規定怎樣把數據塊放到磁盤上。 在SCSI把數據塊發送到目的地時,目標方可能是單個物理磁盤,也可能是把數據塊在多個物理盤上分條存放的RAID 控制器。 SCSI 協議的責任,就是在確認寫操作已經正確完成后向操作系統報告成功,而不管在磁盤上物理存儲是如何配置以及寫操作是如何執行的。

        3.1 SCSI 域

        SCSI 設備是在一定的環境中運行的。 通常需要有多個SCSI設備才能形成這樣的環境。 SCSI 設備間的運行環境也稱為SCSI域。在這個域內,生成和發送SCSI命令和任務管理請求的SCSI端口稱為SCSI發起方,接收和處理SCSI命令,根據請求執行任務管理的端口稱為SCSI目標方。

        SCSI 域的組成包括SCSI設備,設備內的SCSI 發起方和目標方以及提供數據交接的總線。 SCSI總線連接了掛在它上面的所有SCSI設備。我們可以把一個實際的SCSI應用系統抽象為一個SCSI域,域中有多個SCSI設備,而且帶SCSI驅動器的計算機也可以被看成是一個SCSI設備。

        盡管可以允許有多個SCSI設備接在同一條總線上,SCSI協議實際定義的是設備間一對一的數據交換,即同一時刻在SCSI總線上只允許有兩個設備互相交換數據。因為,SCSI上的各個設備是以分時共享的方式使用總線的。

        在一個實際的SCSI域中,必須至少有一個發起方和1個目標方,考慮到主機對數據存儲的需求,配置了SCSI控制器的主機至少有1個SCSI發起方。而磁盤設備主要是提供存儲和數據服務,一般都有目標發。

        3.2 SCSI 協議模型

        為了便于實現和理解SCSI的各個協議,SCSI 采取了分層結構。 SCSI 大致可分為三層,即SCSI應用層,SCSI 傳輸層和SCSI 互連層。 SCSI中的各個具體協議一般都位于其中的某一層,可以可能跨越兩層。

        在應用層,SCSI 體系結構把發起方(主機)和目標方(如磁盤)的通信定義為客戶/服務器交換。SCSI 客戶位于主機中,代表上層應用程序,文件系統和操作系統I/O請求。 SCSI 設備服務器位于目標設備中,對請求做出響應。 客戶/服務器請求和響應通過某種形式的底層協議進行傳輸。

        在傳輸協議層,SCSI 設備之間通過一系列的命令實現數據的傳送,大致分成三個階段:命令的執行,數據的傳送和命令的確認。

        SCSI 互聯層完成SCSI設備對總線的連接以及發送方和目標方的選擇等功能。

        3.3 尋址機制

        為了對連接在總線上的設備尋址,SCSI 協議引入了SCSI設備ID 和邏輯單元號LUN. 在SCSI 總線上的每個設備都必須有一個唯一的ID,其中包括服務器中的主機總線適配器也擁有設備ID. 取決域SCSI標準的版本,每條總線最多可允許有8個或者16個設備ID。

        諸如RAID 磁盤子系統和磁帶庫這樣的存儲設備可能包括若干個子設備,如虛擬磁盤,磁帶驅動器和介質更換器等。 因此SCSI 引入了邏輯單元號,以便于對大的設備中的子設備進行尋址。 另外一個服務器可能配置了多個SCSI控制器,從而就可能有多條SCSI總線。 因此,操作系統用一個三元描述標識一個SCSI目標: 總線/目標設備/邏輯單元號

        傳統的SCSI 適配卡連接單個總線,相應的只具有一個總線號。 在引入存儲網絡之后,每個光纖通道HBA(Host Bus Adapter)或iSCSI(Internet SCSI)網卡也都連接一條總線,分配一個總線號,在他們之間依靠不同的總線號加以區分。

        目標設備標識在一條總線菊花鏈上的單個設備,邏輯單元號則表示一個目標設備中的一個子設備。 通常,單個物理磁盤只具有一個邏輯單元號,而RAID磁盤陣列雖然也只有一個目標設備,但卻有多個邏輯單元號。

        在一條總線上各個設備具有不同的優先級。起初的SCSI 協議只允許有8個目標設備ID,規定ID7 具有最高權限。后來版本的SCSI 協議允許有16個不同的目標設備ID。出于兼容性的考慮,從7到0的目標設備依然具有高優先級,而從15到8的設備ID具有較低優先級。

        設備(服務器和存儲設備)在可以通過SCSI 總線發送數據之前必須預定總線(仲裁)。 在總線的仲裁期間,具有最高優先權的目標設備總能獲勝。 在總線負載重的情況下,這可能導致具有較低優先級的設備總是不被允許發送數據,因此,SCSI的仲裁過程是不平等的。

        出于配置和管理的需要,操作系統使用總線號/目標設備ID/邏輯單元號三元組來標識一個SCSI目標,然而用戶和應用程序所看到的只是一個邏輯標識符,如D盤。 因此在總線號/目標設備ID/邏輯單元號和邏輯盤符之間存在著一個映射,提供在物理設備和上層文件系統之間不同表示形式的轉換。

        3.4 交互方式

        SCSI協議把發起方(主機)和目標方(例如磁盤)之間的交互定義為客戶/服務器方式。應用客戶位于主機中,代表上層應用程序、文件系統和操作系統的I/0請求。設備服務器位于目標設備中,它響應客戶的請求。請求和響應通過某種形式的下層分布設施進行傳輸,該分布設施稱作分布子系統,可以是并行電纜,也可以是光纖通道協議或iSCSI。

        一個發起方可能會有多個請求同時發給目標方。多個請求產生應用客戶的多個實例,從而在設備服務器上產生多個事務。

        發起方在其發往一個或多個目標的多個請求正在被相關的設備服務器處理的時候,需要能夠執行上下文交換 (ContextSwitching),即具有從一個任務快速切換到另一個任務的能力。例如,作為一個發起方的文件服務器可以向一個目標方發送一個寫請求。‘當該文件服務器在等待這個目標方準備好緩沖區以接收數據的那段時間內,可以切換到另一個掛起的任務,例如處理已經到達的對先前的另一個請求的響應,從而提高運行效率,最大化吞吐量。如果SCSI任務只能依次串行地執行,那么等待每個寫或讀請求完成的時間就都被白白地浪費了。一般來說,上下文交換是由主機適配卡完成的,可以是并行SCSI,也可以是光纖通道或iSCSI。

        由于SCSI體系結構模型是層次化的,因此它對主機I/0請求的處理可以獨立于底層的分發子系統。一個應用客戶主機可以處理涉及不同種類的目標設備的I/0操作,例如一個應用服務器可以有直接附接的SCSI目標方,也可以有通過千兆位速率接口連接的串行SCSI目標方。

        在SCSI發起方和目標方之間讀寫數據是通過SCSI命令、分發請求、分發操作和響應來完成的。SCSI命令和參數在CDB(CommandDescriptorBlock,命令描述塊)中指定。作為交互示例,在執行對磁盤的SCSI寫過程時,在發起方(例如主機總線適配器)創建一個應用客戶,該客戶發送SCSI命令請求給目標方,令其準備緩沖區以接收數據。目標設備服務器在其緩沖區準備好之后,發送一個數據分發操作請求進行響應。接著,發送方就執行分發操作,開始發送數據塊。依賴于底層的分發子系統,數據塊可能按字節并行傳輸(例如并行SCSI總線),也可能以分段成幀的形式串行傳輸(例如光纖通道或iSCSI)。

        從應用程序或操作系統的角度看,寫操作只是一個事務。但實際上,對應一個寫操作,發送方和目標方可能要進行多次的分發請求和分發操作的交互,才能把命令請求的所有數據都發送給目標方。

        在一次讀操作中,SCSI命令塊遵循相反的數據分發請求和確認序列,然而由于是發起方發出讀命令,所以命令就假定自己已經準備好了緩沖區以接收第1批數據塊。在讀寫事務的每個階段所發送的數據塊數量,由發起方和目標方根據對方的緩沖區容量協商決定。例如,高性能磁盤陣列一般都能提供較大的緩沖區,可以完成大規模的數據傳送,從而提高了產品性能。

        3.5 SCSI總線信號

        SCSI在物理信號的基礎上定義了一組總線信號。這些信號可劃分為數據信號和控制信號兩類。它們都是二進制信號,并且只有“真”和“偽”兩個穩定狀態。其中有指示總線已經被占用的“BSY”信號,有清除并重新設置SCSI總線的“RST”信號等。

        下面對這些信號的名稱和功能逐一進行介紹。

        1.BSY(Busy,忙)信號

        該信號是“或態”信號,表示已經有設備占用總線。

        2.SEL(Select,選擇)信號

        該信號是“或態”信號,由發起方用以選擇目標方,或者由目標方用以重新選擇發起方。

        3.C/D(Control/Data,控制/數據)信號

        該信號由目標方驅動,表示在數據總線上傳送的是數據信號還是控制信號。該信號處于真狀態時表示控制信號。

        4.I/O(Input/Output,輸入輸出)信號

        該信號由目標方驅動,控制數據在數據總線上的移動方向。當I/0信號為“真”時表示是對發起方的輸入,數據由目標方向發起方傳送;若I/0信號為“偽”,則表示數據由發起方向目標方傳送。該信號也被用來區分選擇和重選階段。

        5.MSG(Message,通信)信號

        該信號由目標方驅動,表示總線處于信息傳送的通信階段。

        6.REQ(Request,請求)信號

        該信號由目標方驅動,表示有信息傳輸請求,請求一個REQ/ACK數據傳送握手過程。

        7.ACK(Acknowledge,應答)信號

        該信號由發起方驅動,表示對REQ信號的應答。

        8.ATN(Attention,提醒)信號

        該信號由發起方驅動,指示一個提醒信息,表明發起方有一個消息要給目標方發送。

        9.RST(Reset,重置)信號

        該信號是“或態”信號,表示一個硬件重置狀態,指示總線進入重新設置階段,清除所有使用總線的SCSI設備。

        10.DB(DataBus,數據總線)信號

        DB信號有兩種,分別是用于8位數據總線的DB(7-0,P)和用于16位數據總線的DB(l5~O,P)。這些信號都用于傳送信息的值,它們包括數據比特信號,加上奇偶檢驗比特信號。

        由于在SCSI總線上掛有多個設備,一些控制信號可能同時被多個SCSI設備驅動。這些信號被稱作“或態”信號。對于“或態”信號,SCSI設備不會主動將其驅動成“偽”,而是依賴總線終接器,在總線上的所有設備都沒有驅動該信號時將其設置成“偽。”只要有1個或多個設備驅動該信號,該信號就是“真”。與“或態”信號相對照的是“非或態”信號。對于“非或態”信號,SCSI設備可以將其驅動成“偽”。

        3.6 SCSI 總線的使用階段

        根據對總線不同的使用,可以把SCSI總線狀態劃分成8個不同的階段:空閑階段,仲裁階段,選擇階段,重選階段,命令階段,數據階段,狀態階段和通信階段。

        其中命令階段,數據階段,狀態階段和通信階段都設計信息在總線的傳送,所以又稱為:信息傳送階段。

        除了空閑階段外,其他階段的總線都被SCSI設備占用。

        3.6.1. 總線空閑階段

        總線空閑表明沒有一個設備在使用SCSI總線,也表示在此狀態下,SCSI設備如果需要,可以使用總線。SCSI設備需要在總線上的SEL信號和BSY信號都是“偽”之后,才可以檢測總線是否處于空閑狀態。

        作為例子,SCSI總線可能在下列情況下進入空閑狀態:

        1.RST信號被設置;

        2.不成功的總線選擇或重選;

        3.目標設備解除連接;

        4.目標設備命令完成。

        一旦一個SCSI設備確定總線處于空閑階段,它就可以申請總線仲裁,從而進入仲裁階段。

        3.6.2. 總線仲裁階段

        在SCSI總線上的設備必須先獲得總線連接權,然后才可以進行其他的操作。在默認條件下,看似掛在總線上的設備在邏輯上是與總線斷開的,沒有參與總線上的活動。SCSI設備只有在需要進行數據傳輸和設備狀態報告時才會申請總線連接權。SCSI設備一旦得到了總線連接權,就將在發起方和目標方之間形成一個物理連接的通道,然后就可以進行數據傳輸。

        一般情況下,總線的獲取與對目標方的選擇都由發起方完成。為了更加高效地使用總線,在某些情況下,例如在有較長時間的CPU處理等待或設備存取等待時,需要釋放總線以供其他設備使用。在等待的相關任務完成后,再重新進行總線仲裁和連接權獲取操作,以繼續進行暫停的工作。因此,有時目標方也可以執行總線操作和連接權獲取操作,準確地講,是再獲取操作。

        SCSI總線上的設備的優先級是由它的地址即SCSI ID決定的。在窄SCSI中的ID范圍是0-7,對應的優先級是從1到8。在寬SCSI中的ID范圍是O~l5,其中對應IDO~7的優先級是從9到16遞增,而對應ID8~l5的優先級是從1到8遞增。在這里,我們用較大的數值表示較高的優先級,因此,ID7具有最高優先級。在窄SCSI中,ID 0具有最低優先級;在寬SCSI中,ID8具有最低優先級。

        SCSI總線上的ID數目是與SCSI數據總線寬度一致的,因此,窄SCSI有8個ID,寬SCSI有16個ID。在窄 SCSI中的8根數據線的編號是從0到7,在寬SCSI中的16根數據線的編號是從0到15。有趣的是,具有某個編號的數據線上的信號,還被用來表示具有對應號碼ID的SCSI設備是否在執行選擇或相關操作。例如當數據總線中的數據線DB(2)在某個特定的階段被驅動成真時,就可以表示其ID為2的設備已經在總線上執行了選擇或相關操作。

        在SCSI域中,主機是存儲設備的主要使用者,且對存儲的響應要求較高,因此通常主機的優先級最高,其分配的ID值也最大,在窄SCSI中是ID7,在寬SCSI中是IDl5。

        總線仲裁就是在可能同時有多個設備請求的情況下,最終只給予其中的一個SCSI設備總線控制權的過程。SCSI設備在檢測到“總線空閑”并等待一個時延后即可以把總線置成BSY,并把與它的SCSIID對應的數據線信號置為“真”,開始總線仲裁申請。

        在等待1個時延后,該SCSI設備需檢測在數據總線上是否有更高優先級的SCSIID也為“真”。如果總線上確有更高優先級的設備在進行總線申請,則該SCSI設備不再置BSY和對應的數據線為“真”。放棄總線仲裁申請,直到下一次“總線空閑”;否則,該設備就獲得了總線控制權,并由該設備把SEL信號置為“真”。同時,總線上的其他SCSI設備則檢測到SEL信號為“真”后,不再置BSY信號和對應的數據線為“真”,放棄總線仲裁申請。為了保證確實已經獲得了總線控制權,該設備在置SEL信號為“真”后、傳送其他信號前,需要有一定的時延。

        在總線仲裁階段結束時,總線上有BSY、SEL和與獲得總線的SCSI設備的ID,其對應的數據線的信號為“真”。

        3.6.3. 選擇階段

        在選擇階段,得到總線使用權的SCSI設備在總線上選擇目標設備,以便隨后可以向該目標設各發送諸如讀和寫這樣的命令。這個階段主要是完成對具有特定SCSIID的設備的選擇,其相關協議的定義主要是在SCSI體系結構的互連層。需要注意的是,邏輯單元號LUN的尋址是邏輯單元通過SCSI傳輸層協議完成的,不在互連層。與LUN編址相關的協議在傳輸協議層描述。

        贏得仲裁的SCSI設備在把BSY和SEL信號置成“真”,經過一小段時延后,即可進入選擇階段。作為發起方,贏得仲裁的SCSI設備不可以把1/0信號置成“真”。在此階段,發起方需要把與自己的SCSIID對應的數據線的信號和對應所要選擇的目標設備的SCSIID的數據線的信號置成“真”,經過一小段時延,再把BSY信號置成“偽”,然后等待目標方的響應。

        例如,SCSI ID為6的主機把對應自己的ID的數據線DB(6)和對應目標設備的ID(=6)的數據線DB(0)置成“真”后,數據總線上信號值的狀態將如下所示。

        DS(0)DS(1)DS(2)DS(3)DS(4)DS(5)DS(6)DS(7)

        10 0 0 0 0 10

        此時,只有兩個數據線的信號值是“真”。如果有多于兩個的數據線為“真”,則目標方認為有誤。目標方在SEL和對應它的ID的數據線的信號為“真”并且BSY和I/0信號為“偽”的情況下,就可以確定它自己已經被選為目標設備。此時,目標方設備應該重新把BSY信號置成“真”。發起方在檢測到BSY為“真”的信號后,就把SEL信號置成“偽”。特別需要注意的是,在該階段結束時,BSY信號是由目標方置位的。

        3.6.4. 重選階段

        在SCSI目標設備忙于處理其內部事務(通常是對于執行對存儲數據的讀或寫操作)期間,它可以在等待操作(比如把存儲在設備中的數據讀入緩沖區或把暫存在緩沖區的數據寫入緩沖區)完成時釋放總線供其他設備使用,并在操作完成后重新申請對總線的使用權。因此,重選階段也發生在“總線仲裁階段”之后。但與選擇階段不同,重選階段由目標方啟動,重新建立由發送方啟動成功但被目標方掛斷的連接。

        在目標設備釋放了總線之后,BSY和SEL信號處于被置成“真”的狀態。此時日標設備通過把I/0信號置成“真”使自己成為贏得對總線使用權的一方。在重選階段,目標方也需要把與自已的SCSIID對應的數據線的信號和對應發送方設備的SCSIID的數據線的信號置成“真”,經過一段短的時延,再把BSY信號置成“偽”,然后等待發起方的響應。

        發起方在SEL、I/0和對應它的ID的數據線的信號為“真”并且BSY為“偽”的情況下,就可以確定它自己已經被重選。被重選的發起方可以通過查看數據總線來驗證重迭的目標方的SCSIID。然后,發起方設各重新把BSY信號置成“真”。目標方在檢測到BSY為“真”的信號后,它也執行把BSY驅動成“真”的操作,并把SEL信號置成“偽”。

        被重選的發起方在檢測到SEL信號為“偽”后,它就把BSY置成“偽”,而目標設備則繼續把BSY設置成“真”,直到它放棄對總線的使用權為止。這樣,在該階段結束時,信號的狀態與選擇階段一樣,也是由目標方設置的BSY信號。

        3.6.5. 信號傳送階段

        命令階段、數據階段、狀態階段和通信階段被組合在一起作為信息傳送階段,因為它們都被用來通過數據總線傳送數據或控制信息。SCSI使用C/D、I/0和MSG信號區分不同的信息傳送階段以及對應的信息傳輸方向。目標方驅動這3個信號,控制從一個階段到另一個階段的轉變。發起方可以通過把ATN信號置成“真”請求一個“通信出”階段,而目標方可以通過釋放MSG、C/D、I/0和BSY信號引入總線空閑階段。信息傳送階段使用一個或多個REQ/ACK握手過程控制信息傳送。每個REQ/ACK握手過程允許傳送1個或多個字節的信息。因為信息傳送階段一定是在選擇階段或重選階段之后,所以不改變BSY和SEL信號。事實上,在該階段,BSY持續為“真”,SEL信號持續為“偽”。

        表2-2示出了MSG、C/D和I/0信號值與階段名及信息傳輸方向之間的關系。其中的“出”和“入”是相對子發送方設備而言的,且數據傳輸方向由I/0信號確定。

        表2-2MSG、C/D和1/0信號值與階段名及信息傳輸方向之間的關系


        MSG

        CID

        1/0

        階段

        具體階段

        傳輸方向

        1

        0

        0

        *(未用)

        1

        0

        1

        *(末用)

        1

        1

        0

        通信

        通信出

        從發送方到目標方

        1

        1

        1

        通信

        通信入

        從目標方到發送方

        0

        0

        0

        數據

        數據出

        從發送方到目標方

        0

        0

        1

        數據

        數據入

        從目標方到發送方

        0

        1

        0

        命令

        從發送方到目標方

        0

        1

        1

        狀態

        從目標方到發送方


        注釋:0=偽,1=真,*=保留未來定義

        命令階段允許目標方請求發起方傳送命令信息。在命令階段的REQ/ACK握手過程中,目標方把C/D信號置成“真”,把I/0信號和MSG信號置成“偽”。

        數據階段包括“數據入”階段和“數據出”階段。

        (1)“數據入”階段允許目標方請求把數據從目標方傳送給發起方。在“數據入”階段的REQ/ACK握手過程中,目標方把I/0信號置成“真”,把C/D信號和MSG信號置成“偽”。

        (2)“數據出”階段允許目標方請求把數據從發起方傳送到目標方。在“數據出”階段的REQ/ACK握手過程中,目標方把C/D信號、I/0信號和MSG信號都置成“真”。

        狀態階段允許目標方請求把狀態信息從目標方傳送給發起方。在狀態階段的REQ/ACK握手過程中,目標方把C/D信號和I/0信號置成“真”,把MSG信號置成“偽”。

        通信階段可以是“通信入”階段或“通信出”階段。無論是在“通信入”階段,還是在“通信出”階段,都可以傳送多條消息。傳送的第一個字節可以是單字節消息,也可以是多字節消息的首字節。在1個通信階段可以傳送多個多字節消息。

        “通信入”階段允許目標方請求把消息從目標方發送給發起方。在“通信入”階段的REQ/ACK握手過程中,目標方把C/D信號、I/0信號和MSG信號都置成“真”。

        “通信出”階段允許目標方請求把消息從發起方傳送到目標方。目標方在響應發起方建立的提醒條件時調用“通信出”階段。在“通信出”階段的REQ/ACK握手過程中,目標方把C/D信號和MSG信號置成“真”,把I/0信號置成“偽”。

        3.7 異步傳輸和同步傳輸

        與傳統網絡的數據包傳送方式不同,SCSI 基于REQ/ACK 信號控制數據傳輸的過程。 根據REQ和ACK信號控制與數據總線置位時間的差別,信息傳輸又可分為異步傳輸和同步傳輸兩個列別。 而且,無論傳輸的方向如何,信息的傳輸都是由REQ信號開始,并且REQ信號都是由目標方控制和發送的。

        1. 異步信息傳輸

        異步傳輸方式可用于數據階段的數據傳輸,也可用于命令、狀態和通信階段的信息傳輸。首先,信息傳輸的方向是由I/O信號決定的。如果I/O信號為“真”,那么信息是由目標方向發起方傳輸。在此情況下,為了傳送信息,目標方先把數據線DB(7/15-0,P)信號置成對應想要傳送的二進制數位序列的值,然后把REQ信號置成“真”。發起方在檢測到REQ為“真”時,讀取數據總線的值,然后把ACK信號置成“真”。當目標方檢測到ACK為“真”時,它就可以改變或取消放置在數據總線上的值,并把REQ置成“偽”。發起方在檢測到REQ置成“偽”時把ACK也置成“偽”。當目標方檢測到ACK為“偽”時,總線上就完成了一次數據傳輸,并可進行下一次數據傳輸。

        在異步傳輸方式中,每個REQ/ACK握手過程傳送1個(對于窄SCSI)或2個字節(對于寬SCSI)的信息。特別需要注意的是,在此方式中,目標方在置REQ信號后,必須持續地把數據線DB(7/l5~O,P)置成對應所要傳送的二進制數位序列的值,直到它檢測到ACK為真為止。

        如果I/O信號為“偽”,那么信息是由發起方向目標方傳輸。在此情況下,目標方通過把REQ置成“真”來請求信息。發起方驅動DB(7/l5~O,P)到它需要發送的二進制數位序列的值,然后把ACK置成“真”。此后,繼續把DB(7/l5~O,P)信號置成這個二進制數位序列的值,直到REQ變成“偽”為止。目標方則是在檢測到ACK變成“真”時,讀DB(7/l5~O,P)的值,然后把REQ置成“偽”。發起方在檢測到REQ變成“偽”時,它可以改變或取消放置在數據總線上的值,并把ACK置成“偽”。

        此后,目標方可以通過把REQ置成“真”,繼續請求信息。

        2. 同步數據傳輸

        同步數據傳輸只在數據階段使用,并且是在目標方和發起方之間建立同步數據傳輸協定之后使用。

        與異步傳輸中的規則相同,當I/0信號為“真”時,數據是由目標方向發起方傳輸。目標方先把數據放置到數據總線上,即置DB(7/l5~O,P)對應的線路,然后把REQ置成“真”。在同步數據傳輸中,目標方在把REQ置成“真”后,需要把放置在DB(7/l5~O,P)上的二進制數位序列的值保持一個指定長度的時間,但不必維持到對ACK信號變“真”的接收。這是與異步傳輸不同的一個地方。在指定長度的時間期滿后,目標方就可以把REQ置成“偽”,并且可以改變或取消放置在數據總線上的值,然后準備發送下一個數據。發起方在檢測到REQ變“真”之后一個指定長度的時間內讀DB(7/l5~O,P)上的值,然后把ACK置成“真”作為對目標方的響應。

        與異步傳輸一樣,在同步數據傳輸中,發起方也在接收到一個REQ并讀取了數據總線上的值之后就發送一個ACK信號。但與異步傳輸不同的是,目標方在接收到對一個數據的ACK之前可以發送多個REQ信號。SCSI為同步數據傳輸的REQ/ACK握手過程定義了一個稱作REQ/ACK飽和值的參數,它表示在接收到ACK信號前可以發送的最大REQ信號數。如果發送的REQ數日多于接收到的ACK數目,并達到了定義的REQ/ACK飽和值,那么目標方暫停發送REQ信號和數據,直到接收到下一個ACK為止。這在原理上與傳統網絡中的流控制類似。

        當I/O信號為“偽”時,數據是由發起方向目標方傳輸。發起方每次接收到一個REQ信號就發送一次數據。目標方先把REQ置成“真”。發起方檢測到REQ變“真”后把要發送的數據放置到數據總線上,即置DB(7/l5~O,P)對應的線路,然后把ACK置成“真”。接著發送方需要在一個指定長度的時間內保持在總線上放置的數據不變,并繼續把ACK置成“真”。在指定的時間期滿后,發起方可以把ACK置成“偽”,并且可以改變或取消放置在數據總線上的值。目標方在檢測到ACK信號變“真”后,在指定的ACK保持為“真”的時間內讀取數據總線上的數據,并把REQ置成“偽”。

        此后,目標方可以通過把REQ再置成“真”繼續請求信息。

        3.8 SCSI 命令描述塊

        在互連層完成SCSI設備對總線的連接,以及發送方和目標方的選擇的基礎上,傳輸層協議執行實際的數據傳輸。傳輸層提供了兩類服務,一是命令的執行和確認;二是數據的傳送。命令的執行是在總線進入命令階段后,發起方通過命令描述塊(command description block,CDB)向目標方發送具體的命令。命令的確認是在總線進入通信 (Message)階段后,發起方接收由目標方發送的命令執行確認信息。數據的傳送則是在數據階段(數據出或數據入)進行的。傳輸協議的運行過程包括發送命令、傳輸數據和對命令執行的確認。SCSI基礎命令規范 SPC(SCSIPrimaryCommands,SCSI基礎命令)定義了CDB的標準。

        除了基本命令外,SPC還定義了所有類型的SCSI目標方設各都可以使用的管理參數,如診斷參數和日志參數等。

        發起方對存儲設備的實際操作是通過向目標方發送一個命令描述塊來完成的。在一些情況下,在一個命令描述塊之后可能還有一些參數要傳給目標方,按照具體的協定,這些更多的參數是在命令描述塊后的“數據出”階段發送的。命令描述塊有定長和不定長兩種格式,而定長格式的命令描述塊又有6、10、12或16字節不同的長度規定。

        命令描述塊由編號從0~5的6個字節組成。下面介紹其中各個段的內容。

        1.操作碼

        操作碼是所有命令描述塊都有的,它總是被放在命令描述塊的開頭一個字節。正如其名字所言,操作碼定義CDB的具體操作。8比特在理論上共有256個可能的操作碼。實際上其中有一些是保留碼,日前尚未定義。操作碼的8個二進制位又分為兩部分:5-7位是組代碼,指示該命令具體屬于哪個命令組,它決定CDB的長度,如“000”為組“0”,表示6個字節的CDB命令組,0-4位則是具體的命令代碼。

        2.混雜CDB信息

        該參數表示與具體的CDB相關的信息,其中一個例子是表示邏輯設備號,尋址在SCSI目標設備中的一個邏輯單元。對應一個SCSIID的設備可以有多個邏輯單元,所以邏輯單元擴展了SCSI總線可訪問的設備數目,使得目標方設各上可以有多個可被訪問的設備而只占用一個有效的SCSIID。對一個邏輯單元的實際訪問是通過該邏輯單元的一個特定的編號,即邏輯單元號實現的。

        3.邏輯塊地址

        該地址是邏輯單元(比如磁盤)中的起始操作塊的位置。在6字節的CDB中,有21位的邏輯塊地址。SCSI把邏輯單元、卷或分區抽象成塊的數組,每一塊都有一個邏輯地址,編號從0開始。對SCSI存儲設備的每一次讀/寫操作都是針對一組連續的邏輯塊進行的,因而需要指出起始塊的邏輯地址。

        4.傳送長度

        該長度表示命令所請求的傳送量,通常是塊數。在有些類別的CDB中也可能是字節數。0表示不需要傳送數據。

        5.參數表長度

        有些命令還需要更多的參數,這些參數由客戶提供,定義在“數據出”緩沖區中。參數表長度就表示需要傳送到存儲設備的這類參數的長度,0表示不需要傳遞參數。

        6.分配長度

        分配長度表示應用客戶為“數據入”緩沖區分配的最大長度,根據具體的CDB類別,可能是字節數,也可能是塊數。應用客戶通常使用該“數據入”緩沖區接收特殊信息,如日志數據、診斷數據等。如果傳送的信息量超過了分配長度表示的最大值,則相關設備不應再傳,并使用狀態階段返回特定的狀態信息。

        7.控制碼

        它是所有CDB格式的最后一個字節。在其中有一些特殊的域,如已經定義的一個NACA位。在一些情況下,一個命令的執行會以“檢查條件(CheckCondition)”狀態中止,它表明在命令執行過程中出現了錯誤或異常。 有些命令執行的錯誤或異常不會影響其他命令的執行,也不需要作善后的恢復處理,而另一些命令執行的錯誤或異常則可能導致命令組中的其他命令被異常中止,需要專門的命令對其做善后處理,并要求存儲設各在完成善后處理工作之前不再處理該用戶的其他命令。為了區分這兩種不同的情況,也為了讓應用客戶能夠事先聲明哪些命令執行的錯誤或異常需要善后處理,SCSI允許應用客戶在CDB的控制碼中設置NACA位,請求存儲設備在命令執行以“檢查條件”狀態中止時建立“自動跟隨”條件(Condition),從而允許應用客戶在隨后的善后處理命令中把新(New)任務的屬性設置成自動跟隨(AutoContingentAllegiance,ACA)。

        3.9 SCSI 的讀操作和寫操作過程

        1. SCSI的讀操作過程

        如果計算機要從存儲設備上讀取文件或數據,那么無論數據的大小如何,都至少要經歷一個SCSI的讀操作過程。當然,操作系統需首先將用戶的讀取操作通過SCSII/0的應用程序編程接口(ApplicationProgrammingInterface,API)轉化為SCSI的讀操作,并在操作完成后通過相應的API返回響應的值。

        在SCSI域內,這個操作在傳輸層被簡單地描述成5個主要過程:

        (1)發起方通過CDB發送SCSI的讀命令。

        (2)目標方接收到該命令,通過設備管理器在指定的邏輯單元中執行該命令請求的操作。

        (3)目標方以字節為單位向發起方傳送數據。

        (4)在數據傳輸完畢后,目標方向發起方發送命令完成的報告。

        (5)發起方接收到命令完成的響應。

        當然,這些過程是建立在SCSI互連層的基礎上的。在第一個過程之前,SCSI總線由空閑階段進入總線仲裁和選擇階段,完成發起方對總線使用權的獲得以及對目標方的選擇和尋址。

        在第一個過程中,目標方發送REQ信號,請求信息傳輸,控制總線進入信息傳送的命令階段。目標方通過發送方傳送的CDB獲取“讀”命令。在其后的第2個和第3個過程中,目標方從它控制的外圍設備中讀取數據并發送到發起方。如目標方準備數據需要較長的時間,則可能有多個總線釋放、進入空閑和重選階段的輪回。目標方在每次完成數據傳送后,都控制總線進入狀態階段并返回一個狀態信息。為進一步表示讀命令的全部完成,在第四個過程中,總線進入信息傳送的通信階段,目標方發送“命令完成”信息,并可釋放SCSI總線的BSY信號。在第五個過程中,發起方接收到日標方命令完成的響應,總線可恢復到空閑階段。

        2. SCSI的寫操作過程

        SCSI的寫操作過程與讀操作過程類似,但數據傳送的方向不同,它把數據從發送方向目標方傳送。在發送方系統中有對文件做寫操作的用戶請求時,它先通過文件系統查找該文件在存儲設備(如磁盤)上的邏輯塊地址 (LogicalBlockAddress,LBA),接著文件系統把該LBA連同其他一些參數,如數據的指針、數據的長度以及邏輯單元號等傳遞給SCSI的API,并指示一個寫操作。例如寫6000字節到LUNO的邏輯塊地址OOOl234AB。SCSI的API則具體發送一個寫命令給LUNO,并將數據以存儲設備認可的方式分批或一次性地傳遞到LUNO,直到數據全部傳輸完畢。之后,SCSI的API返回,并指示任務完成。然后,文件系統通知應用程序任務完成。至此,一個文件的寫操作完成。

        當然,在數據寫操作中,仍然需要具體運行SCSI的各個階段,并需要發送SCSI信號以及SCSI命令,如寫命令等。這些方面都與上面描述的讀操作類似,此處不再贅述。

        從上面的介紹可以看出,一個簡單的數據讀或寫操作會涉及一系列的過程。實際上,在這些過程中,除了有應用程序(如字處理軟件、數據庫等)為用戶提供的直接操作界面和操作系統給應用程序提供的通用的系統功能外,還有文件系統、SCSIAPI、SCSI設備命令、SCSI驅動程序、總線和存儲設備等多種軟硬件的參與。



        關鍵詞: SCSI總線協

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 疏附县| 修文县| 德阳市| 五指山市| 公主岭市| 江北区| 井研县| 凉城县| 洛扎县| 玉树县| 克什克腾旗| 西丰县| 洪泽县| 九江市| 江川县| 玉树县| 五原县| 元氏县| 满城县| 长阳| 喀喇沁旗| 香港 | 三门县| 涿州市| 安达市| 陆川县| 盐边县| 内黄县| 桐乡市| 宁海县| 高台县| 防城港市| 丰原市| 荆门市| 化德县| 新沂市| 会理县| 肃北| 五原县| 固始县| 马尔康县|