專利名稱:通信接口適配器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及數(shù)字計(jì)算機(jī)系統(tǒng),更具體地涉及用于以串行通信線路與宿主計(jì)算機(jī)系統(tǒng)進(jìn)行接口的子系統(tǒng)。
對(duì)于現(xiàn)代計(jì)算機(jī)系統(tǒng),與外部世界的通信是至關(guān)重要的。某些系統(tǒng)具有若干同時(shí)操作的串行通信鏈路??刂贫鄺l同時(shí)操作的鏈路能增加系統(tǒng)處理器的需求而降低總的系統(tǒng)性能。
對(duì)這一性能問(wèn)題的一種解決方法是采用“聰明”的通信適配器。這些適配器處理一次通信對(duì)話的所有低級(jí)細(xì)節(jié)。適配器在與它們的宿主系統(tǒng)通信時(shí)以相對(duì)大的塊傳送數(shù)據(jù)。無(wú)論接收的數(shù)據(jù)還是要發(fā)送的數(shù)據(jù)都是采用塊傳送方式在適配器與宿主系統(tǒng)之間傳送的。直接存儲(chǔ)器存取(DMA)可用于這種傳送以進(jìn)一步減輕加在宿主中央處理器上的處理負(fù)擔(dān)。
為了在僅有有限數(shù)量適配器的一個(gè)系統(tǒng)中提供多個(gè)通信端口,若干個(gè)端口可以設(shè)置在單個(gè)適配器上。然而,這一方法可能導(dǎo)致明顯的問(wèn)題。對(duì)若干獨(dú)立端口的數(shù)據(jù)與命令處理可能變得相當(dāng)復(fù)雜,尤其是在高通信率時(shí)。當(dāng)不同的速度與協(xié)議使用在不同的通信端口上時(shí),這一問(wèn)題便大為惡化。使得適配器難于保證所有的通信端口都能以適時(shí)方式處理。
提供一種能夠處理多個(gè)獨(dú)立端口而不丟失數(shù)據(jù)的適合于用作通信端口適配器的系統(tǒng)將是令人滿意的。
因而,本發(fā)明的目的之一便是提供一種適合于在一臺(tái)宿主計(jì)算機(jī)系統(tǒng)中用作一個(gè)通信端口適配器的系統(tǒng)。
本發(fā)明的另一個(gè)目的是提供這樣一種系統(tǒng),其中在單個(gè)適配器上支持多個(gè)通信端口,以及其中各端口互相獨(dú)立地操作。
本發(fā)明的又一目的是提供這樣一種系統(tǒng),其中的通信端口是以這樣一種方式被處理的,使得在任何端口上都保證不丟失數(shù)據(jù)。
所以,根據(jù)本發(fā)明,一種串行通信適配器提供對(duì)物理通信端口的一個(gè)接口。在適配器上執(zhí)行的一個(gè)調(diào)度程序調(diào)度不同優(yōu)先級(jí)的任務(wù),使得時(shí)間性要求高的任務(wù)得到足夠快速的執(zhí)行以防止數(shù)據(jù)丟失。通過(guò)一個(gè)通信端口將要發(fā)送的或已經(jīng)接收到的數(shù)據(jù)是存儲(chǔ)在適配器上的緩沖器中的,而適配器與宿主系統(tǒng)之間的數(shù)據(jù)與命令通信則是較佳地通過(guò)一條DMA通道完成的。
本發(fā)明據(jù)信為新穎特征的性質(zhì)在所附的權(quán)利要求書中列舉。然而,發(fā)明本身,以及作為一種較佳的使用方式及其其它的目的和優(yōu)點(diǎn)則可以結(jié)合附圖參照對(duì)一個(gè)示例性實(shí)施例的以下詳細(xì)說(shuō)明得到最好的了解,附圖中
圖1是一臺(tái)宿主計(jì)算機(jī)系統(tǒng)的塊圖;
圖2是用于圖1中的系統(tǒng)的一個(gè)較佳串行通信適配器的塊圖;
圖3示出了按照本發(fā)明的一個(gè)較佳調(diào)度程序工作表;
圖4是一組展示在一個(gè)較佳適配器系統(tǒng)上執(zhí)行任務(wù)與中斷的流程圖;
圖5示出了包含在一個(gè)較佳適配器上的一個(gè)存儲(chǔ)器的內(nèi)容;以及圖6至圖12為展示按照本發(fā)明所能調(diào)度的被選中的功能的操作的流程圖。
參見(jiàn)圖1,參考號(hào)10指示一臺(tái)一般稱為宿主系統(tǒng)的計(jì)算機(jī)系統(tǒng)。系統(tǒng)10包含連接在一條系統(tǒng)總線16上的一個(gè)中央處理器12及一個(gè)主存儲(chǔ)器14。一個(gè)或多個(gè)用戶接口輸入/輸出設(shè)備18也連接在總線16上。這些用戶接口設(shè)備18中典型地包括一臺(tái)顯示器與鍵盤,且通常包含一個(gè)指示設(shè)備諸如一個(gè)鼠標(biāo)。
一個(gè)大容量存儲(chǔ)器輸入/輸出設(shè)備20也最好連接在總線16上,並將一個(gè)或多個(gè)大容量存儲(chǔ)器設(shè)備與系統(tǒng)10接口。這些設(shè)備典型地包括磁盤或光盤驅(qū)動(dòng)器。某些系統(tǒng)並不包含這些大容量存儲(chǔ)器設(shè)備20,而依靠連接在一個(gè)網(wǎng)絡(luò)上的遠(yuǎn)程大容量存儲(chǔ)器。用于串行輸入/輸出設(shè)備的一個(gè)適配器22最好連接在系統(tǒng)總線16上。在一個(gè)較佳實(shí)施例中,這一適配器22提供系統(tǒng)10與多個(gè)串行通信端口之間的通信。如本技術(shù)領(lǐng)域內(nèi)所知,各種其它設(shè)備也可包括在系統(tǒng)10中。
圖1中的系統(tǒng)示出了所有的輸入/輸出設(shè)備為連接在主系統(tǒng)總線16上的。許多高性能系統(tǒng)在中央處理器12與主存儲(chǔ)器14之間提供一條高速總線。在這種系統(tǒng)中,一個(gè)輸入/輸出控制器(未示出)連接在高速總線上,並且再通過(guò)一獨(dú)立的輸入/輸出總線(未示出)連接到各種輸入/輸出設(shè)備18、20、22。在這些系統(tǒng)中,主存儲(chǔ)器14與各種輸入/輸出設(shè)備之間的數(shù)據(jù)傳送是經(jīng)由並受控于該輸入/輸出控制器的。下述多端口串行適配器在兩種系統(tǒng)中都能工作得一樣好。只需要向適配器與總線之間提供一個(gè)容許在許多不同類型的計(jì)算機(jī)系統(tǒng)中使用的適當(dāng)?shù)慕涌诒憧伞?br>
參見(jiàn)圖2,其中示出了一個(gè)較佳串行輸入/輸出適配器22。適配器22是通過(guò)一個(gè)系統(tǒng)總線接口24與系統(tǒng)總線16相連的。接口24連接到一條適配器總線26上,這是一條高速總線。同時(shí)連接到適配器總線26上的有一臺(tái)中央處理器26與一個(gè)適配器存儲(chǔ)器30。中央處理器28可以是市場(chǎng)供應(yīng)的微處理器,諸如英特爾(INTEL)80186處理器。適配器存儲(chǔ)器30是本領(lǐng)域內(nèi)已知的計(jì)算機(jī)系統(tǒng)存儲(chǔ)器,並使其容量足以支持下述功能。在正常的應(yīng)用中,512K字節(jié)的適配器存儲(chǔ)器30足供四個(gè)通信端口使用。中央處理器28用存儲(chǔ)在存儲(chǔ)器30中的程序執(zhí)行適配器22的功能。
同時(shí)連接在適配器總線26上的有四個(gè)串行端口接口32、34、36和38。雖然在圖2中只示出了四個(gè)端口,需要時(shí)在一個(gè)適配器上可包括更多的端口。一個(gè)適配器卡22上所能包含的端口數(shù)只受服務(wù)于端口所能利用的處理能力以及適配器卡22上所能設(shè)置的物理端口引線數(shù)的限制。
在適配器總線26上連有一個(gè)串行端口DMA控制器40,用于控制端口32、34、36、38與適配器存儲(chǔ)器30之間的DMA傳送。每一端口有兩條直接與DMA控制器40相連的信號(hào)線用于指示什么時(shí)候在一個(gè)接受緩沖器中已經(jīng)有了數(shù)據(jù)以及什么時(shí)候一個(gè)發(fā)送緩沖器已可用于接收數(shù)據(jù)。DMA控制器40使用這些信號(hào)來(lái)確定什么時(shí)候在一個(gè)通信端口與適配器存儲(chǔ)器30之間啟動(dòng)一次DMA傳送。
為了實(shí)行DMA傳送,DMA控制器40與系統(tǒng)總線接口24兩者都能作為適配器總線26的總線主。系統(tǒng)總線接口24與DMA控制器40采用DMA向適配器存儲(chǔ)器30傳送數(shù)據(jù)和接收來(lái)自適配器存儲(chǔ)器30的數(shù)據(jù)。此外,接口24也能成為系統(tǒng)總線16的一個(gè)總線主,並使用一條DMA通道向主存儲(chǔ)器14傳送數(shù)據(jù)和接受來(lái)自主存儲(chǔ)器14的數(shù)據(jù)。在這里所描述的實(shí)施例中,系統(tǒng)總線接口24使用單一的DMA通道來(lái)為所有的通信端口32、34、36和38傳送數(shù)據(jù)。
為了控制適配器22的操作,中央處理器28執(zhí)行若干下面將要說(shuō)明的不同例行程序。具有顯著重要作用的是一個(gè)任務(wù)調(diào)度程序,它確定下一個(gè)要執(zhí)行的是哪一個(gè)任務(wù)。中央處理器28執(zhí)行各種例行程序來(lái)建立通過(guò)系統(tǒng)總線接口24去往和來(lái)自系統(tǒng)總線16的DMA傳送,建立適配器存儲(chǔ)器30與通信端口之間的發(fā)送與接收操作,以及處理各種錯(cuò)誤狀態(tài)。
圖3示出了能很好地用于在適配器上調(diào)度任務(wù)的一個(gè)調(diào)度程序工作表50。不同的任務(wù)在不同的優(yōu)先級(jí)上操作,圖3中示出了優(yōu)先級(jí)0-6。實(shí)際使用的優(yōu)先級(jí)數(shù)可根據(jù)滿足特定實(shí)現(xiàn)的需要而變化。優(yōu)先級(jí)0為最高優(yōu)先級(jí),而優(yōu)先級(jí)6為最低優(yōu)先級(jí)。
每一個(gè)優(yōu)先級(jí)有一個(gè)表項(xiàng)用來(lái)指示等待執(zhí)行的那些任務(wù)。優(yōu)先級(jí)1-6各由一個(gè)位示圖組成,位示圖中每一項(xiàng)對(duì)應(yīng)于在適配器上的每一個(gè)通信端口。如果任一特定位為1,對(duì)應(yīng)的端口調(diào)度對(duì)應(yīng)任務(wù)。
調(diào)度程序工作表50中的位是由各中斷處理程序或執(zhí)行中的任務(wù)設(shè)置的,如下面將詳細(xì)說(shuō)明的。當(dāng)出現(xiàn)一個(gè)硬件中斷時(shí),適當(dāng)?shù)奶幚沓绦虼_定需要調(diào)用哪一個(gè)例行程序來(lái)處理它,並以在調(diào)度程序工作表50中設(shè)置一位來(lái)調(diào)度這一例行程序。當(dāng)一個(gè)例行程序執(zhí)行時(shí),它能以在表50中設(shè)置位來(lái)調(diào)度其它例行程序,而一般將以復(fù)位其本身的位來(lái)解除調(diào)度它自己。
最高優(yōu)先級(jí),級(jí)0,用作指示該優(yōu)先級(jí)的當(dāng)前受調(diào)度的任務(wù)的數(shù)目的一個(gè)計(jì)數(shù)器。這一操作上的差別將在下面詳細(xì)說(shuō)明。在某些實(shí)現(xiàn)中,可能要求以這一方式使用其它的優(yōu)先級(jí)或者根本不用這種方式。
最高優(yōu)先級(jí)是執(zhí)行系統(tǒng)總線DMA傳送的任務(wù)。每當(dāng)一個(gè)任務(wù)要求執(zhí)行系統(tǒng)總線DMA時(shí),便將級(jí)0計(jì)數(shù)器增加1並在存儲(chǔ)器30中的一張表中放置必要的標(biāo)識(shí)信息。由于只有單一的系統(tǒng)總線DMA通道可資利用,在任何給定的時(shí)刻只能有一個(gè)系統(tǒng)DMA任務(wù)能夠操作。任何剩下的任務(wù)在它們能夠被執(zhí)行以前只能等待當(dāng)前執(zhí)行中的系統(tǒng)DMA任務(wù)完成后才能執(zhí)行,當(dāng)一個(gè)系統(tǒng)總線DMA任務(wù)在執(zhí)行時(shí),其它任務(wù)可以在適配器上執(zhí)行,下面將對(duì)此進(jìn)行說(shuō)明。
當(dāng)從一個(gè)通信端口上接收到一幀時(shí)便調(diào)用級(jí)1的任務(wù),並必須采用各種步驟來(lái)檢驗(yàn)所接收的幀的有效性。接收數(shù)據(jù)任務(wù)使被接收的幀受到檢驗(yàn),並標(biāo)明一切錯(cuò)誤。接收數(shù)據(jù)任務(wù)也調(diào)度一次系統(tǒng)總線DMA傳送將接收到的幀傳送給宿主機(jī)。
下一優(yōu)先級(jí)任務(wù),級(jí)2,是發(fā)送數(shù)據(jù)任務(wù)。這一任務(wù)啟動(dòng)從適配器存儲(chǔ)器30到適當(dāng)通信端口的數(shù)據(jù)傳送。當(dāng)組合成了一幀用于通過(guò)一個(gè)端口進(jìn)行通信的數(shù)據(jù)時(shí)或前一幀完成發(fā)送時(shí)便調(diào)度一次發(fā)送數(shù)據(jù)任務(wù)。
級(jí)3任務(wù)是一個(gè)錯(cuò)誤/狀態(tài)任務(wù),每當(dāng)在一個(gè)通信端口上出現(xiàn)一個(gè)錯(cuò)誤時(shí)被調(diào)用。在這一任務(wù)所處理的錯(cuò)誤類型中最好包括線路錯(cuò)誤,諸如控制信號(hào)的意外改變以及數(shù)據(jù)傳輸錯(cuò)誤。
在下面將要描述的環(huán)境中,正在發(fā)送或接收數(shù)據(jù)的一個(gè)端口所生成的各種事件必須進(jìn)行排隊(duì)等待以后處理。級(jí)4是一個(gè)處理端口應(yīng)答隊(duì)列中的項(xiàng)的任務(wù)。以同樣的方式,級(jí)5是一個(gè)任務(wù),它處理已經(jīng)在排隊(duì)等待著處理的發(fā)往一個(gè)端口的命令。利用端口應(yīng)答隊(duì)列與端口命令隊(duì)列使得各種處理不必等待通信端口完成其當(dāng)前操作便得以執(zhí)行。例如,命令可以在宿主系統(tǒng)方便時(shí)送往一個(gè)端口,而它們將位于隊(duì)列中直到它們能夠作用在端口上。進(jìn)來(lái)的事件被存放在端口應(yīng)答隊(duì)列中直到它們能被適配器22上的中央處理器28處理為止。
最低優(yōu)先級(jí),級(jí)6,用于喚醒休眠中的任務(wù)。有時(shí),有必要將一個(gè)任務(wù)的操作掛起直到一個(gè)予定的事件出現(xiàn)??梢粤钸@一任務(wù)休眠,如下面將要描述的,並將保持在掛起中。當(dāng)予定的事件出現(xiàn)時(shí),與該事件相關(guān)的一個(gè)中斷處理程序調(diào)度端口應(yīng)答隊(duì)列任務(wù),后者又將調(diào)度程序工作表50級(jí)6的適當(dāng)位設(shè)置為1。當(dāng)喚醒任務(wù)被選中為該端口執(zhí)行時(shí),被掛起的任務(wù)恢復(fù)執(zhí)行。
圖4(a)、4(b)與4(c)示出調(diào)度與執(zhí)行任務(wù)的方式。參見(jiàn)圖4(a),可以看到調(diào)度程序是在一個(gè)無(wú)窮循環(huán)中執(zhí)行。一個(gè)當(dāng)前選中的任務(wù),或進(jìn)程,在60中執(zhí)行到完成。當(dāng)該任務(wù)的執(zhí)行完成時(shí),調(diào)度程序在62選擇具有任何被調(diào)度的任務(wù)的最高優(yōu)先級(jí)。然后,在該優(yōu)先級(jí)中,調(diào)度程序選擇一個(gè)任務(wù)去執(zhí)行。如果在被選中的優(yōu)先級(jí)中具有一個(gè)以上要調(diào)度執(zhí)行的任務(wù),則采用輪轉(zhuǎn)法來(lái)確定下一個(gè)要執(zhí)行的任務(wù)。這便保證了所有端口都是平行對(duì)待的,使在任何給定的優(yōu)先級(jí)上沒(méi)有一個(gè)端口一直要等到所有其它端口上同一優(yōu)先級(jí)的被調(diào)度的任務(wù)受到服務(wù)以后才會(huì)有一個(gè)任務(wù)被執(zhí)行。任務(wù)一經(jīng)選定,控制便返回步驟60去執(zhí)行選定的任務(wù)。
步驟62與64操作得非???,並最好是使其不能被中斷的。這是因?yàn)楦鞣N可能出現(xiàn)的中斷通常通過(guò)更新調(diào)度程序工作表50來(lái)調(diào)度任務(wù),而這一操作將會(huì)干擾步驟62與64中的選擇過(guò)程。步驟60中的進(jìn)程執(zhí)行是可中斷的,而系統(tǒng)及通信端口生成的各種硬件中斷則被用于調(diào)度調(diào)度程序工作表50中的其它任務(wù)。
圖4(b)示出了處理一個(gè)中斷的總的方法。當(dāng)在適配器22上出現(xiàn)一個(gè)硬件中斷時(shí),中央處理器28的控制被矢量指向一個(gè)總的中斷例行程序。這一例行程序標(biāo)識(shí)在66出現(xiàn)的中斷的性質(zhì),並使適當(dāng)?shù)闹袛嗵幚沓绦蛟?8執(zhí)行。在步驟68中執(zhí)行的中斷處理程序最好是非常短的,並且是不允許被中斷的。它一般要清除中斷的原因,將一個(gè)或兩個(gè)數(shù)據(jù)項(xiàng)復(fù)制到能夠被一個(gè)正常地被調(diào)度的任務(wù)所尋訪到的一個(gè)適當(dāng)區(qū)域中,並在70更新調(diào)度程序工作表使得該適當(dāng)?shù)娜蝿?wù)受到調(diào)度。從而,當(dāng)一個(gè)任務(wù)正在步驟60中執(zhí)行時(shí),附加的任務(wù)在工作表50中被執(zhí)行的各種中斷處理程序所調(diào)度。
當(dāng)各種任務(wù)是不可剝奪優(yōu)先權(quán)的時(shí),便使用圖4(b)中的方法。換言之,一個(gè)執(zhí)行中的任務(wù)在其它任務(wù)被調(diào)度程序初始化以前完成。由于絕大多數(shù)任務(wù)相當(dāng)短,這在大多數(shù)系統(tǒng)中不存在問(wèn)題。然而,如果需要,可以使各種任務(wù)成為 可剝奪優(yōu)先權(quán)的。如果這樣做的話,由一個(gè)中斷調(diào)度一個(gè)較高優(yōu)先級(jí)的任務(wù)導(dǎo)致當(dāng)前任務(wù)的執(zhí)行被掛起而立即執(zhí)行該較高優(yōu)級(jí)的任務(wù)。在這一情況中的中斷處理的流程圖出在圖4(c)中。
當(dāng)出現(xiàn)一個(gè)硬件中斷時(shí),該中斷的性質(zhì)在72被標(biāo)識(shí)並在74執(zhí)行一個(gè)適當(dāng)?shù)闹袛嗵幚沓绦颉:颓懊嬉粯?,?zhí)行中斷處理程序使得調(diào)度程序工作表50在76被更新。然后在78檢驗(yàn)是否已經(jīng)調(diào)度了比當(dāng)前正在執(zhí)行的任務(wù)更高優(yōu)先級(jí)的工作。如果在80判定未曾調(diào)度一個(gè)較高優(yōu)先級(jí)的任務(wù),恢復(fù)執(zhí)行當(dāng)前任務(wù)。如果在74執(zhí)行中斷處理程序的過(guò)程中調(diào)度了一個(gè)較高優(yōu)先級(jí)的任務(wù),則當(dāng)前正執(zhí)行的進(jìn)程在82被剝奪並再度調(diào)用調(diào)度程序以啟動(dòng)該較高優(yōu)先級(jí)進(jìn)程的執(zhí)行。
參見(jiàn)圖5,其中示出了存儲(chǔ)在適配器存儲(chǔ)器30中的某些重要數(shù)據(jù)結(jié)構(gòu)。存儲(chǔ)器30的大部分最好由發(fā)送/接收緩沖器90占用。這些緩沖器90是從存儲(chǔ)器30中可利用的自由空間中動(dòng)態(tài)地分配的。如本領(lǐng)域技術(shù)所知,維護(hù)了一個(gè)可用作發(fā)送/接收緩沖器90的自由空間表。
分配了一張供各種任務(wù)與中斷使用的矢量表91。為每一端口獨(dú)立地分配了用作臨時(shí)數(shù)據(jù)存儲(chǔ)器的棧92。因而,當(dāng)在適配器上提供有四個(gè)通信端口時(shí)在存儲(chǔ)器30中分配了四個(gè)棧。調(diào)度程序使用一個(gè)單獨(dú)的棧93,各端口還有一個(gè)端口控制塊94其中包含指向由對(duì)應(yīng)的端口所訪問(wèn)的各種數(shù)據(jù)結(jié)構(gòu)的指針。端口命令隊(duì)列96為每一端口提供一個(gè)FIFO(先進(jìn)先出)隊(duì)列其中包含送到該端口的命令。送至一個(gè)端口的命令被置于一個(gè)稱為一個(gè)端口命令單元的標(biāo)準(zhǔn)大小的數(shù)據(jù)結(jié)構(gòu),每一個(gè)隊(duì)列的命令是放置在一個(gè)環(huán)形緩沖區(qū)中的。
當(dāng)一條要求向宿主機(jī)或從宿主機(jī)傳輸數(shù)據(jù)的端口命令被執(zhí)行時(shí),在數(shù)據(jù)傳輸進(jìn)程完成以前這一端口的其它命令不能執(zhí)行。在某些系統(tǒng)中,不可能使用往復(fù)轉(zhuǎn)換緩沖器通過(guò)端口傳輸數(shù)據(jù)。在這種情況中,如果一個(gè)端口的一條通道是活躍的,其它通道可為下一次傳輸建立。為了準(zhǔn)備其它緩沖器,可以執(zhí)行在端口命令隊(duì)列96中等待的端口命令。
每一端口還有一個(gè)對(duì)應(yīng)的端口應(yīng)答隊(duì)列98,它是由和端口命令隊(duì)列96相同的環(huán)形緩沖器構(gòu)成的。端口應(yīng)答隊(duì)列98中包含由對(duì)應(yīng)的端口生成而必須由系統(tǒng)處理的項(xiàng)。如果一次系統(tǒng)總線DMA傳輸正在為一個(gè)端口執(zhí)行,由該端口正在生成的這些應(yīng)答都必須確定路由到該端口應(yīng)答隊(duì)列98。同時(shí),如果一個(gè)端口正在休眠,將由一個(gè)予定的事件的出現(xiàn)所喚醒,則所有該端口生成的應(yīng)答都確定路由到適當(dāng)?shù)膽?yīng)答隊(duì)列98中。
在適配器存儲(chǔ)器30中還有調(diào)度程序的可執(zhí)行代碼100,各種已調(diào)度的任務(wù),以及中斷處理程序。在適配器存儲(chǔ)器30中分配了用于本技術(shù)領(lǐng)域所知的臨時(shí)變量存儲(chǔ)的各種其他單元,但並未具體地示出在圖5中,存儲(chǔ)器30中還包括調(diào)度程序工作表50。
參見(jiàn)圖6,其中示出了系統(tǒng)總線DMA任務(wù)的操作。如上所述,系統(tǒng)總線DMA任務(wù)與其他級(jí)別不同地使用調(diào)度程序工作表50,即使用調(diào)度程序工作表次指示被調(diào)度的任務(wù)的編號(hào)而不是標(biāo)識(shí)具有一個(gè)被調(diào)度的任務(wù)的端口。當(dāng)一個(gè)系統(tǒng)總線DMA任務(wù)被調(diào)度時(shí),對(duì)被請(qǐng)求的任務(wù)的一個(gè)指示被存儲(chǔ)在一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中(未示出),並且根據(jù)任何要求的賦優(yōu)先級(jí)方案從被調(diào)度的系統(tǒng)總線DMA任務(wù)中選擇一個(gè)。
一旦啟動(dòng)了一個(gè)系統(tǒng)總線DMA任務(wù),在傳輸正在進(jìn)行時(shí),可以執(zhí)行其它的適配器處理。由于只要有可能調(diào)度程序?qū)⒃噲D調(diào)度一個(gè)級(jí)0任務(wù),所以在系統(tǒng)總線DMA傳輸期間有必要將級(jí)0表次設(shè)置為0。從而,參見(jiàn)圖6,一個(gè)選中的系統(tǒng)總線DMA任務(wù)所執(zhí)行的第一步便是在108保存調(diào)度程序工作表50中級(jí)0所反映的當(dāng)前DMA計(jì)數(shù)。然后在110為調(diào)度程序工作表的級(jí)0制造一個(gè)0表次,並在112啟動(dòng)系統(tǒng)總線DMA任務(wù)。一旦在112啟動(dòng)了DMA,控制可以返回給調(diào)度程序去選擇另一個(gè)任務(wù)去執(zhí)行。
在將來(lái)某一時(shí)刻,在114系統(tǒng)總線DMA傳輸將會(huì)完成。這時(shí),在116必須調(diào)度另外一個(gè)任務(wù),並且在118恢復(fù)調(diào)度程序工作表的級(jí)0表次。最好在恢復(fù)以前將放回表50的級(jí)0中的值先減去1。
如果已經(jīng)發(fā)生的是一個(gè)將數(shù)據(jù)從宿主系大移動(dòng)到適配器22上的發(fā)送DMA,必須將已經(jīng)置于端口命令隊(duì)列上的任務(wù)封鎖解除(下面要說(shuō)明)。此外,調(diào)度一個(gè)端口命令隊(duì)列任務(wù)。當(dāng)一個(gè)將數(shù)據(jù)從適配器22傳送到宿主系統(tǒng)的接收DMA完成時(shí),調(diào)度一個(gè)端口應(yīng)答隊(duì)列任務(wù)。此外,將導(dǎo)致對(duì)該端口的應(yīng)答事件確定路由到該端口應(yīng)答隊(duì)列中的一個(gè)全程標(biāo)志清除以允許正常地處理端口應(yīng)答。所有這些操作都發(fā)生在步驟116中。
圖7示出發(fā)送數(shù)據(jù)任務(wù)的操作。當(dāng)一個(gè)幀結(jié)束中斷指示完成了通過(guò)一個(gè)端口的一次發(fā)送操作時(shí)調(diào)度這一任務(wù)。該任務(wù)首先在120將有關(guān)信息放置在端口控制塊94中發(fā)出完成信號(hào)。然后在122清並釋放發(fā)送緩沖器。在124以設(shè)置調(diào)度程序工作表50中的適當(dāng)位來(lái)調(diào)度端口命令隊(duì)列任務(wù)。如果在126判定另一幀已準(zhǔn)備好發(fā)送,則在128啟動(dòng)發(fā)送而任務(wù)完成。如果在126判定沒(méi)有準(zhǔn)備好發(fā)送的幀,則該任務(wù)簡(jiǎn)單地返回。
圖8示出接收數(shù)據(jù)任務(wù)所執(zhí)行的步驟。首先在130調(diào)用一個(gè)專門為用于處理正使用在通信端口上的通信協(xié)議而編碼的過(guò)程。在一個(gè)通信端口上所使用的協(xié)議是用在對(duì)應(yīng)端口控制塊94中所包含的適當(dāng)值來(lái)指示的。框132中所示的步驟是由該協(xié)議專用過(guò)程實(shí)際執(zhí)行的。接收到的幀在134被處理並且在136在應(yīng)答隊(duì)列中加入任何適當(dāng)?shù)谋眄?xiàng)。如果在接收到的數(shù)據(jù)幀中出現(xiàn)錯(cuò)誤,則可以調(diào)度一個(gè)錯(cuò)誤/狀態(tài)任務(wù)。
圖9示出了錯(cuò)誤/狀態(tài)任務(wù)所執(zhí)行的步驟。中斷處理程序在140將一個(gè)錯(cuò)誤標(biāo)識(shí)符復(fù)制到該端口的端口控制塊,用于向以后訪問(wèn)該端口的任務(wù)指示已經(jīng)出現(xiàn)了一個(gè)錯(cuò)誤。錯(cuò)誤標(biāo)識(shí)符指示所出現(xiàn)的錯(cuò)誤的類型並在142檢驗(yàn)對(duì)應(yīng)的可能錯(cuò)誤源。一旦標(biāo)定了錯(cuò)誤源,在144中將適當(dāng)?shù)谋眄?xiàng)加入到該端口的應(yīng)答隊(duì)列中。當(dāng)這些表項(xiàng)最終被處理時(shí),該端口錯(cuò)誤將被指示給系統(tǒng)10。
端口應(yīng)答隊(duì)列任務(wù)的操作示出在圖10中。首先在150檢驗(yàn)隊(duì)列是否是空的。如果是,則在152清用于自動(dòng)重新確定端口應(yīng)答路由到該隊(duì)列的標(biāo)志,使得端口應(yīng)答以正常方式進(jìn)行處理。然后該任務(wù)在154從調(diào)度工作表50中解除對(duì)自己的調(diào)度而完成。如果在150判定隊(duì)列中有表項(xiàng),則在156選擇下一個(gè)項(xiàng)。在158檢驗(yàn)判定是否下一個(gè)表項(xiàng)是一個(gè)要求向宿主系統(tǒng)10進(jìn)行DMA傳送的應(yīng)答。如果是,則在160調(diào)度總線主DMA任務(wù)並在154解除對(duì)當(dāng)前任務(wù)的調(diào)度。如果下一個(gè)表項(xiàng)不是一個(gè)DMA傳送,則在162檢驗(yàn)判定是否該端口的一個(gè)任務(wù)正在休眠。如果不是,則在164將應(yīng)答送給宿主機(jī)。如果一個(gè)任務(wù)在休眼,則在166調(diào)度休眠/喚醒任務(wù)並在154解除對(duì)當(dāng)前任務(wù)的調(diào)度。
圖11示出端口命令隊(duì)列任務(wù)所執(zhí)行的步驟??偟恼f(shuō)來(lái),這一任務(wù)在端口命令隊(duì)列96中選擇下一個(gè)表項(xiàng)並使之被執(zhí)行。各種事件的發(fā)生可能阻止執(zhí)行下一個(gè)端口命令項(xiàng)的發(fā)生。第一步是在170從端口命令隊(duì)列中選取下一個(gè)表項(xiàng)。如果在172判定下一個(gè)表項(xiàng)沒(méi)有被封鎖,則在174進(jìn)行檢驗(yàn)是否要求一次系統(tǒng)總線DMA操作。如果不是,而且在176判定該端口是可用的,則在177建立下一個(gè)數(shù)據(jù)塊的發(fā)送並在178調(diào)度傳送數(shù)據(jù)任務(wù)。如上所述,如果為每一個(gè)端口提供了兩個(gè)往復(fù)轉(zhuǎn)換工作的緩沖器,則可以予處理兩次傳輸。
在許多情況中,有必要在數(shù)據(jù)能夠被發(fā)送以前執(zhí)行一次系統(tǒng)總線DMA傳送將數(shù)據(jù)傳送到適配器22上。如果步驟174的測(cè)試結(jié)果為一個(gè)“是”答復(fù),有必要在180調(diào)度一次適當(dāng)?shù)南到y(tǒng)DMA活動(dòng)並在182封鎖端口命令隊(duì)列中當(dāng)前選中的表項(xiàng)。然后在184解除這一端口的級(jí)5任務(wù)的調(diào)度。如以上結(jié)合圖6所說(shuō)明的,系統(tǒng)總線DMA任務(wù)的完成使得在步驟182中設(shè)置的封鎖被清除,並重新調(diào)度這一端口的端口命令隊(duì)列任務(wù)。在下一次通過(guò)圖11中的進(jìn)程時(shí),在步驟174的系統(tǒng)DMA測(cè)試結(jié)果將是一個(gè)“否”回答。如果在步驟172判定下一表項(xiàng)是封鎖的,或者在步驟176判定端口是不可用的,則控制傳遞到步驟184而在調(diào)度程序工作表50中這一端口的級(jí)5表項(xiàng)在184被解除調(diào)度。
圖12示出了當(dāng)一個(gè)任務(wù)將自己置于休眠並隨后被喚醒時(shí)所執(zhí)行的步驟。在190首先為該端口設(shè)置一個(gè)SLEEP-ENABLE(休眠-啟動(dòng))變量。在191該任務(wù)進(jìn)入休眠並在192將當(dāng)前上下文保存在該端口的棧中。在步驟190中設(shè)置SLEEP-ENABLE變量導(dǎo)致由該端口生成的任務(wù)應(yīng)答被確定路由到端口應(yīng)答隊(duì)列98。退出將要休眠的任務(wù)並在194發(fā)生其它處理,在步驟192中保存的上下文在端口棧92上保持不受觸動(dòng)。
當(dāng)在端口應(yīng)答隊(duì)列上加上新的事件時(shí),端口應(yīng)答隊(duì)列任務(wù)喚醒休眠的任務(wù)並在196從棧中恢復(fù)上下文。在198進(jìn)行檢驗(yàn)以判定該喚醒事件是否是該任務(wù)所等待的一個(gè)最終條件。如果不是,則該任務(wù)返回到191去休眠。如果該事件的確使該任務(wù)醒來(lái),則在200恢復(fù)執(zhí)行。當(dāng)任務(wù)完成時(shí),復(fù)位SLEEP-ENABLE變量。在任務(wù)執(zhí)行中的一個(gè)后面的階段中該任務(wù)可將自己置回到休眠中去,這便導(dǎo)致上述事件序列重復(fù)進(jìn)行。
由于喚醒一個(gè)休眠任務(wù)是所能調(diào)度的最低級(jí)任務(wù),在接受喚醒時(shí)系統(tǒng)得到保證在步驟192中保存在棧上的上下文必定是棧上的棧頂幀,一次喚醒是由另一個(gè)任務(wù)或中斷調(diào)度的,它設(shè)置調(diào)度程序工作表50級(jí)6上的適當(dāng)位。
以上所描述的系統(tǒng)提供優(yōu)先調(diào)度在適配器上的各種通信子任務(wù)。不必改動(dòng)作為基礎(chǔ)的調(diào)度程序便可容易地?cái)U(kuò)充優(yōu)先級(jí)的數(shù)目以及所能支持的通信端口的數(shù)目。較佳實(shí)施例的適配器支持兩個(gè)獨(dú)立的DMA傳送級(jí)別。一個(gè)級(jí)別是在適配器總線26上執(zhí)行的DMA傳輸,而第二個(gè)級(jí)別是由系統(tǒng)總線接口24執(zhí)行的在系統(tǒng)總線16上的DMA傳輸。
較佳的調(diào)度程序工作表50已經(jīng)賦予了任務(wù)優(yōu)先級(jí)使得時(shí)間性最關(guān)鍵的任務(wù)具有最高優(yōu)先級(jí)。必須以及時(shí)的方式執(zhí)行以避免通過(guò)通信端口數(shù)據(jù)丟失的發(fā)送數(shù)據(jù)與接收數(shù)據(jù)任務(wù)比較放置在隊(duì)列96與98上的各種命令與應(yīng)答的處理具有較高的優(yōu)先級(jí)。將自己置于休眠的任務(wù),意味著時(shí)間不是一個(gè)關(guān)鍵性因素,在所有任務(wù)中具有最低的優(yōu)先級(jí)。由于一個(gè)資源是所有端口之間共享的,系統(tǒng)總線DMA有成為瓶頸的趨向,所以賦予系統(tǒng)總線DMA任務(wù)以最高優(yōu)先級(jí)。提供了一種機(jī)制,使得當(dāng)一次系統(tǒng)總線DMA正在進(jìn)行時(shí)其他任務(wù)可在適配器22上執(zhí)行。由于在各優(yōu)先級(jí)上采用了一種輪轉(zhuǎn)的策略,所以沒(méi)有一個(gè)端口會(huì)受到冷遇。
雖然本發(fā)明只以其形式中的一種示出,它並不局限于此而且容許不脫離其精神而作各種變化與修改。
權(quán)利要求
1.一種用于控制多個(gè)通信端口與一個(gè)宿主系統(tǒng)之間的數(shù)據(jù)傳輸?shù)姆椒?,其特征在于下述步驟定義多個(gè)任務(wù)用于執(zhí)行這些端口與一個(gè)中間存儲(chǔ)器之間,以及該中間存儲(chǔ)器與宿主系統(tǒng)之間的數(shù)據(jù)傳輸部分;賦予已定義的任務(wù)以優(yōu)先級(jí);響應(yīng)出現(xiàn)在端口處及宿主系統(tǒng)內(nèi)的事件調(diào)度要執(zhí)行的任務(wù);以及當(dāng)一個(gè)任務(wù)完成時(shí),選擇一個(gè)在所有被調(diào)度的任務(wù)中具有最高優(yōu)先級(jí)的任務(wù)接著執(zhí)行。
2.權(quán)利要求1的方法,其特征在于對(duì)于所有端口所調(diào)度的一個(gè)任務(wù)是用一種輪轉(zhuǎn)策略執(zhí)行的。
3.權(quán)利要求1的方法,其特征在于所述調(diào)度步驟包括步驟提供一個(gè)表具有代表各個(gè)定義的任務(wù)的表項(xiàng),其中任務(wù)是以在對(duì)應(yīng)的表項(xiàng)中寫入信息來(lái)調(diào)度的。
4.權(quán)利要求3的方法,其特征在于至少表中的一個(gè)表項(xiàng)具有多個(gè)子表項(xiàng)各對(duì)應(yīng)于端口之一,以及其中任務(wù)是以在對(duì)應(yīng)的子表項(xiàng)中寫入信息來(lái)調(diào)度給一個(gè)端口去執(zhí)行的。
5.權(quán)利要求4的方法,其特征在于各子表項(xiàng)包含一個(gè)數(shù)據(jù)位。
6.權(quán)利要求3的方法,其特征在于至少表中的一個(gè)表項(xiàng)表示對(duì)應(yīng)的任務(wù)已經(jīng)被調(diào)度的次數(shù)的計(jì)數(shù),以及其中一個(gè)任務(wù)是以將該表項(xiàng)中的值增加1來(lái)調(diào)度的。
7.權(quán)利要求1的方法,其特征在于導(dǎo)致任務(wù)被調(diào)度的事件包括由宿主系統(tǒng)或端口提出的硬件中斷。
8.權(quán)利要求7的方法,其特征在于導(dǎo)致任務(wù)被調(diào)度的事件還包括被調(diào)度的任務(wù)的執(zhí)行。
9.一種接口系統(tǒng)用于將多個(gè)通信端口與一個(gè)宿主系統(tǒng)進(jìn)行接口,其特征在于到宿主系統(tǒng)的一個(gè)接口;一個(gè)中間存儲(chǔ)器;一個(gè)處理器用于控制該接口系統(tǒng)的操作;多個(gè)通信端口;一條總線連接所述宿主接口,所述中間存儲(chǔ)器,所述處理器及所述通信端口;由所述處理器執(zhí)行的多個(gè)通信任務(wù);以及用于調(diào)度所述任務(wù)的執(zhí)行的裝置。
10.權(quán)利要求9的系統(tǒng),其特征在于賦予各通信任務(wù)以一個(gè)優(yōu)先級(jí),且其中具有較好優(yōu)先級(jí)的被調(diào)度的任務(wù)在具有較低級(jí)的被調(diào)度的任務(wù)之前被執(zhí)行。
11.權(quán)利要求10的系統(tǒng),其特征在于所述調(diào)度裝置包括具有對(duì)應(yīng)于所述任務(wù)的表項(xiàng)的一張表,並且其中任務(wù)是以在對(duì)應(yīng)的表項(xiàng)中寫入信息來(lái)進(jìn)行調(diào)度的。
12.權(quán)利要求11的系統(tǒng),其特征在于信息是響應(yīng)由宿主系統(tǒng)與所述通信端口所生成的中斷寫入表項(xiàng)的。
13.權(quán)利要求12的系統(tǒng),其特征在于信息也是由執(zhí)行中的任務(wù)寫入表項(xiàng)的。
14.權(quán)利要求11的系統(tǒng),其特征在于至少一個(gè)表項(xiàng)包含多個(gè)位,每一位對(duì)應(yīng)于所述通信端口之一,並且其中要為所述端口之一執(zhí)行的一個(gè)任務(wù)是以寫其對(duì)應(yīng)位來(lái)進(jìn)行調(diào)度的。
全文摘要
一種串行通信適配器向物理通信端口提供一個(gè)接口。在該適配器上執(zhí)行的一個(gè)調(diào)度程度調(diào)度不同優(yōu)先級(jí)上的任務(wù),使得時(shí)間性關(guān)鍵的任務(wù)足夠快地被執(zhí)行以防止數(shù)據(jù)丟失。要通過(guò)一個(gè)通信端口發(fā)送或接收的數(shù)據(jù)是存儲(chǔ)在適配器上的緩沖器中的,并且在該適配器與宿主系統(tǒng)之間的數(shù)據(jù)與命令通信是很好地在一條DMA通道上執(zhí)行的。
文檔編號(hào)G06F9/48GK1054160SQ9110056
公開(kāi)日1991年8月28日 申請(qǐng)日期1991年1月31日 優(yōu)先權(quán)日1990年2月14日
發(fā)明者約翰·圖爾曼·阿德金斯, 詹姆斯·斯坦利·波格塞爾斯基, 賈克蘭·海格修斯·威爾森 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司