<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > SCSI 總線(xiàn)和協(xié)議

SCSI 總線(xiàn)和協(xié)議

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

本文引用地址:http://dyxdggzs.com/article/201612/328733.htm

一. I/O 通路

在計算機中,一個(gè)或多個(gè)CPU 處理在CPU緩存或主存儲器(RAM:Random Access Memory)中的數據。 CPU緩存或主存儲器是非??斓钠骷?,但是斷電就不能保存,價(jià)錢(qián)也比較昂貴。 所以數據還需要放在存儲設備上。

通常,數據從主存儲器(RAM)通過(guò)系統總線(xiàn),主機I/O 總線(xiàn) 和 I/O 總線(xiàn)移動(dòng)到磁盤(pán)或者磁帶等存儲設備。

1.1 系統總線(xiàn)

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

1.2 主機I/O 總線(xiàn)

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

1.3 I/O 總線(xiàn)

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

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

二. 并行SCSI 總線(xiàn)

把磁盤(pán)和磁帶設備連接到應用服務(wù)器或文件服務(wù)器,最常用的方法就是通過(guò)傳統的SCSI總線(xiàn)。盡管SCSI主要是一個(gè)塊協(xié)議,但這個(gè)術(shù)語(yǔ)也被用來(lái)指稱(chēng)運行該協(xié)議的并行線(xiàn)纜機制。

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

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

SCSI規范的第1個(gè)版本發(fā)布于1986年。自那時(shí)以來(lái),它被廣泛應用于服務(wù)器和高檔PC中,其速率由最初的4MBps發(fā)展到現在的320MBps,而且還在提高著(zhù)。

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

2.1 SCSI 類(lèi)型

SCSI有三個(gè)基本規范:

SCSI-1:SCSI-1是在1986年開(kāi)發(fā)的原始規范,現已不再使用。它規定總線(xiàn)寬度為8位,時(shí)鐘速度為5MHz。

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

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

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


名稱(chēng)

規范

設備數量

總線(xiàn)寬度

總線(xiàn)速度

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


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

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

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

SCSI控制器在SCSI總線(xiàn)上的所有其他設備和計算機之間進(jìn)行協(xié)調。SCSI控制器也稱(chēng)為主機適配器,控制器既可以是插入可用插槽的卡,也可以?xún)戎迷谥靼迳?。SCSI BIOS(Basic Input output System)也在控制器上。它是一個(gè)小型ROM或閃存芯片,包含訪(fǎng)問(wèn)和控制總線(xiàn)上的設備所需的軟件。

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

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

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

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

(2)介質(zhì)層:包含向設備發(fā)送控制命令的線(xiàn)路。

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

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

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

2.3 終接器

如果SCSI總線(xiàn)保持開(kāi)放狀態(tài),沿總線(xiàn)發(fā)送的電信號會(huì )反射回來(lái),從而干擾設備和SCSI控制器之間的通信。解決方法是終結總線(xiàn),用電阻電路閉合每一端。如果總線(xiàn)同時(shí)支持內部和外部設備,則必須終結每個(gè)系列的最后一個(gè)設備。

SCSI 終結的類(lèi)型主要可分為兩類(lèi):被動(dòng)(無(wú)源)和主動(dòng)(有源)。

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

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

SCSI還使用三種不同類(lèi)型的總線(xiàn)信令,這也會(huì )影響終結。電脈沖以信令的方式在線(xiàn)路上發(fā)送。

(1)單端(SE:Single-ended):控制器生成信號,并通過(guò)單條數據線(xiàn)將信號傳送至總線(xiàn)上的所有設備。每個(gè)設備都會(huì )產(chǎn)生信號損失。因此,信號會(huì )很快開(kāi)始衰減,由此SE SCSI的傳輸距離被限制為約3米以?xún)?。PC中普遍采用SE信令。

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

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

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

三. SCSI 協(xié)議

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

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

3.1 SCSI 域

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

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

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

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

3.2 SCSI 協(xié)議模型

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

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

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

SCSI 互聯(lián)層完成SCSI設備對總線(xiàn)的連接以及發(fā)送方和目標方的選擇等功能。

3.3 尋址機制

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

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

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

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

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

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

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

3.4 交互方式

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

一個(gè)發(fā)起方可能會(huì )有多個(gè)請求同時(shí)發(fā)給目標方。多個(gè)請求產(chǎn)生應用客戶(hù)的多個(gè)實(shí)例,從而在設備服務(wù)器上產(chǎn)生多個(gè)事務(wù)。

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

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

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

從應用程序或操作系統的角度看,寫(xiě)操作只是一個(gè)事務(wù)。但實(shí)際上,對應一個(gè)寫(xiě)操作,發(fā)送方和目標方可能要進(jìn)行多次的分發(fā)請求和分發(fā)操作的交互,才能把命令請求的所有數據都發(fā)送給目標方。

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

3.5 SCSI總線(xiàn)信號

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

下面對這些信號的名稱(chēng)和功能逐一進(jìn)行介紹。

1.BSY(Busy,忙)信號

該信號是“或態(tài)”信號,表示已經(jīng)有設備占用總線(xiàn)。

2.SEL(Select,選擇)信號

該信號是“或態(tài)”信號,由發(fā)起方用以選擇目標方,或者由目標方用以重新選擇發(fā)起方。

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

該信號由目標方驅動(dòng),表示在數據總線(xiàn)上傳送的是數據信號還是控制信號。該信號處于真狀態(tài)時(shí)表示控制信號。

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

該信號由目標方驅動(dòng),控制數據在數據總線(xiàn)上的移動(dòng)方向。當I/0信號為“真”時(shí)表示是對發(fā)起方的輸入,數據由目標方向發(fā)起方傳送;若I/0信號為“偽”,則表示數據由發(fā)起方向目標方傳送。該信號也被用來(lái)區分選擇和重選階段。

5.MSG(Message,通信)信號

該信號由目標方驅動(dòng),表示總線(xiàn)處于信息傳送的通信階段。

6.REQ(Request,請求)信號

該信號由目標方驅動(dòng),表示有信息傳輸請求,請求一個(gè)REQ/ACK數據傳送握手過(guò)程。

7.ACK(Acknowledge,應答)信號

該信號由發(fā)起方驅動(dòng),表示對REQ信號的應答。

8.ATN(Attention,提醒)信號

該信號由發(fā)起方驅動(dòng),指示一個(gè)提醒信息,表明發(fā)起方有一個(gè)消息要給目標方發(fā)送。

9.RST(Reset,重置)信號

該信號是“或態(tài)”信號,表示一個(gè)硬件重置狀態(tài),指示總線(xiàn)進(jìn)入重新設置階段,清除所有使用總線(xiàn)的SCSI設備。

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

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

由于在SCSI總線(xiàn)上掛有多個(gè)設備,一些控制信號可能同時(shí)被多個(gè)SCSI設備驅動(dòng)。這些信號被稱(chēng)作“或態(tài)”信號。對于“或態(tài)”信號,SCSI設備不會(huì )主動(dòng)將其驅動(dòng)成“偽”,而是依賴(lài)總線(xiàn)終接器,在總線(xiàn)上的所有設備都沒(méi)有驅動(dòng)該信號時(shí)將其設置成“偽。”只要有1個(gè)或多個(gè)設備驅動(dòng)該信號,該信號就是“真”。與“或態(tài)”信號相對照的是“非或態(tài)”信號。對于“非或態(tài)”信號,SCSI設備可以將其驅動(dòng)成“偽”。

3.6 SCSI 總線(xiàn)的使用階段

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

其中命令階段,數據階段,狀態(tài)階段和通信階段都設計信息在總線(xiàn)的傳送,所以又稱(chēng)為:信息傳送階段。

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

3.6.1. 總線(xiàn)空閑階段

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

作為例子,SCSI總線(xiàn)可能在下列情況下進(jìn)入空閑狀態(tài):

1.RST信號被設置;

2.不成功的總線(xiàn)選擇或重選;

3.目標設備解除連接;

4.目標設備命令完成。

一旦一個(gè)SCSI設備確定總線(xiàn)處于空閑階段,它就可以申請總線(xiàn)仲裁,從而進(jìn)入仲裁階段。

3.6.2. 總線(xiàn)仲裁階段

在SCSI總線(xiàn)上的設備必須先獲得總線(xiàn)連接權,然后才可以進(jìn)行其他的操作。在默認條件下,看似掛在總線(xiàn)上的設備在邏輯上是與總線(xiàn)斷開(kāi)的,沒(méi)有參與總線(xiàn)上的活動(dòng)。SCSI設備只有在需要進(jìn)行數據傳輸和設備狀態(tài)報告時(shí)才會(huì )申請總線(xiàn)連接權。SCSI設備一旦得到了總線(xiàn)連接權,就將在發(fā)起方和目標方之間形成一個(gè)物理連接的通道,然后就可以進(jìn)行數據傳輸。

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

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

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

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

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

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

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

3.6.3. 選擇階段

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

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

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

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

10 0 0 0 0 10

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

3.6.4. 重選階段

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

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

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

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

3.6.5. 信號傳送階段

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

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

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


MSG

CID

1/0

階段

具體階段

傳輸方向

1

0

0

*(未用)

1

0

1

*(末用)

1

1

0

通信

通信出

從發(fā)送方到目標方

1

1

1

通信

通信入

從目標方到發(fā)送方

0

0

0

數據

數據出

從發(fā)送方到目標方

0

0

1

數據

數據入

從目標方到發(fā)送方

0

1

0

命令

從發(fā)送方到目標方

0

1

1

狀態(tài)

從目標方到發(fā)送方


注釋?zhuān)?=偽,1=真,*=保留未來(lái)定義

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

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

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

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

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

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

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

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

3.7 異步傳輸和同步傳輸

與傳統網(wǎng)絡(luò )的數據包傳送方式不同,SCSI 基于REQ/ACK 信號控制數據傳輸的過(guò)程。 根據REQ和ACK信號控制與數據總線(xiàn)置位時(shí)間的差別,信息傳輸又可分為異步傳輸和同步傳輸兩個(gè)列別。 而且,無(wú)論傳輸的方向如何,信息的傳輸都是由REQ信號開(kāi)始,并且REQ信號都是由目標方控制和發(fā)送的。

1. 異步信息傳輸

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

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

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

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

2. 同步數據傳輸

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

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

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

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

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

3.8 SCSI 命令描述塊

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

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

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

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

1.操作碼

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

2.混雜CDB信息

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

3.邏輯塊地址

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

4.傳送長(cháng)度

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

5.參數表長(cháng)度

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

6.分配長(cháng)度

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

7.控制碼

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

3.9 SCSI 的讀操作和寫(xiě)操作過(guò)程

1. SCSI的讀操作過(guò)程

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

在SCSI域內,這個(gè)操作在傳輸層被簡(jiǎn)單地描述成5個(gè)主要過(guò)程:

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

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

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

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

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

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

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

2. SCSI的寫(xiě)操作過(guò)程

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

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

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



關(guān)鍵詞: SCSI總線(xiàn)協(xié)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>