一種高效傳送數(shù)據(jù)流的方法
【技術領域】
[0001]本發(fā)明涉及計算機化的多媒體服務器,具體地說,涉及這種系統(tǒng)中高效率地在各裝置之間諸如從一個磁盤存儲子系統(tǒng)至一個網(wǎng)絡或圖像解碼卡傳送數(shù)據(jù)流的技術。
【背景技術】
[0002]多媒體系統(tǒng)通常涉及大量表示高密多媒體數(shù)據(jù)的數(shù)據(jù)流,它們必需以非常高的效率傳送通過系統(tǒng)。一個有代表性的例子是“視頻點播”服務系統(tǒng)。人們已經(jīng)研宄了各種方法,力圖高效率地使數(shù)據(jù)通過這些系統(tǒng)。這些系統(tǒng)有許多用眾所周知的Unix操作系統(tǒng)或其派生系統(tǒng)作為它們的操作系統(tǒng),正如通常在那些實現(xiàn)多媒體內(nèi)容投送系統(tǒng)的用戶服務器環(huán)境中可以看到的那樣。
[0003]但是這種基于Unix的系統(tǒng)的固有嚴重不足之處是其中傳送數(shù)據(jù)所采用的機制并沒有如所需的那樣在涉及非常復雜的多媒體數(shù)據(jù)流的系統(tǒng)中使效率最佳化。
[0004]因此,業(yè)界急需一種高效傳送數(shù)據(jù)流的方法,來使得目前的市場情況加以改善。
【發(fā)明內(nèi)容】
[0005]為了克服上述現(xiàn)有技術中存在的技術缺陷,本發(fā)明的目的在于提供一種高效傳送數(shù)據(jù)流的方法。
[0006]為了實現(xiàn)上述發(fā)明目的,本發(fā)明的技術方案如下:
一種高效傳送數(shù)據(jù)流的方法,其用于在多媒體數(shù)據(jù)流系統(tǒng)中用預先存在的文件系統(tǒng)支持對一個數(shù)據(jù)流文件執(zhí)行零拷貝功能,所述的多媒體數(shù)據(jù)流系統(tǒng)包括:多個各支持一組零拷貝功能接口的不同現(xiàn)有文件系統(tǒng)中的一個現(xiàn)有文件系統(tǒng)、一個使一個產(chǎn)生模塊和一個用戶模塊連接的VCS、一個與共享存儲器連接的大容量存儲裝置、一個用戶裝置、一個多媒體文件系統(tǒng)后臺進程和一個配置在所述用戶裝置和用戶模塊之間的裝置驅(qū)動器;
所述方法包括下列步驟:建立一個與所述多個不同現(xiàn)有文件系統(tǒng)相連的通用文件系統(tǒng)接口 ;以及調(diào)用所述通用文件系統(tǒng)接口,,一控制系統(tǒng),以實現(xiàn)從所述產(chǎn)生模塊到所述用戶模塊的所述數(shù)據(jù)流的零拷貝傳送。
[0007]進一步的,所述方法還包括下列步驟:從所述產(chǎn)生模塊向所述輸出登記服務發(fā)送一個功能調(diào)用,以得到所述產(chǎn)生模塊可用來調(diào)用所述內(nèi)核擴展的所述功能描述符。
[0008]更進一步的,所述方法還包括下列步驟:用所述VCS調(diào)用所述產(chǎn)生模塊,以使所述產(chǎn)生模塊驗證所述數(shù)據(jù)流文件是否符合所述零拷貝功能的要求。
[0009]其中,所述驗證步驟包括對數(shù)據(jù)結構進行初始化和檢驗與所述數(shù)據(jù)流文件相關的一些參數(shù)。
[0010]優(yōu)選的,所述方法還包括下列步驟:從所述產(chǎn)生模塊調(diào)用所述內(nèi)核服務擴展,以得到支持從中斷語境傳送數(shù)據(jù)的緩存器的標識,從而確定所述數(shù)據(jù)流在所述大容量存儲裝置內(nèi)的位置并可在中斷語境加以檢索。
[0011]更優(yōu)選的,所述方法還包括下列步驟:從所述產(chǎn)生模塊向所述內(nèi)核服務擴展傳送一個指示符,指明所述系統(tǒng)隨時可以準備與所述數(shù)據(jù)流文件對應的需從所述大容量存儲裝置傳送經(jīng)所述共享存儲器內(nèi)緩存器的數(shù)據(jù)。
[0012]常規(guī)子系統(tǒng)進行高效率傳送多媒體數(shù)據(jù)流信息所出現(xiàn)的其他一些問題,使本發(fā)明采取了相應的革新措施,包括:在中斷級尋找和鎖定緩存器,向后臺進程傳送預取信息,以在中斷級需要文件數(shù)據(jù)緩存器前預先加以領取,用并行寫入器對文件進行串行化,以及更概括地說,提供在VCS框架內(nèi)支持零拷貝的通用文件系統(tǒng)接口,以便使數(shù)據(jù)的傳輸更加高效。
【具體實施方式】
[0013]下面結合具體實施例對本發(fā)明的技術方案做進一步詳細的描述說明。
[0014]本實施例提供了零拷貝或VCS子系統(tǒng),它的功能與一個更為傳統(tǒng)的系統(tǒng)中的各組成部分的配合情況。數(shù)據(jù)輸出口主要是用來建立磁盤驅(qū)動器和文件系統(tǒng)與諸如ADEC那樣的圖像解碼卡之間的連接。概括地說,輸出口提供以流水線方式對產(chǎn)生器和用戶裝置的互連。一旦連接建立,數(shù)據(jù)輸出口通過控制至VCS提供一個連接,用來通過VCS直接控制文件系統(tǒng)和通信裝置之間的數(shù)據(jù)流動。
圖像連接子系統(tǒng)的總體功能是以最佳方式控制多媒體文件系統(tǒng)(MMFS)、產(chǎn)生模塊和用戶模塊之間的數(shù)據(jù)流動。用戶模塊例如可以是一個包括例如ADECNAR和基本上處于流水線輸出那一側的相應ADEC適配卡的圖像解碼器。產(chǎn)生模塊可以是一個諸如可以部分體現(xiàn)在多個常用的磁盤驅(qū)動器或一個RAID陣列中的磁盤驅(qū)動系統(tǒng)和文件系統(tǒng)那樣的存儲子系統(tǒng)。產(chǎn)生模塊起著另一個可以是具有現(xiàn)有常用結構的諸如文件系統(tǒng)那樣的文件系統(tǒng)與VCS之間的中介作用。VCS本身有一組管理數(shù)據(jù)流動的接口,因此產(chǎn)生模塊實質(zhì)上起著響應來自VCS的請求對文件系統(tǒng)進行相應調(diào)用以獲得所請求的數(shù)據(jù)的中介作用。
[0015]內(nèi)核擴展顯然是處于操作系統(tǒng)內(nèi)核之中,而后臺進程在應用空間內(nèi)執(zhí)行。這說明了為什么控制流程是從VCS到產(chǎn)生器模塊到內(nèi)核擴展再到后臺進程,VCS、產(chǎn)生器模塊和內(nèi)核擴展都在內(nèi)核內(nèi),一直通達由應用空間中的后臺進程所代表的用戶級。
本發(fā)明的基本目的是實現(xiàn)必需的多媒體數(shù)據(jù)傳送而不需要對數(shù)據(jù)進行拷貝占用開銷。已經(jīng)知道,能夠在不將數(shù)據(jù)取入存儲器的情況下在各裝置之間傳送數(shù)據(jù)。
[0016]在圖像服務器環(huán)境中,可能感興趣的是將數(shù)據(jù)取入存儲器,因為如果有兩個用戶希望播放同一個節(jié)目,那么這些多個請求可以用存儲器中的單個拷貝來滿足(然而如果在裝置之間直接傳送相同的數(shù)據(jù),那么這數(shù)據(jù)就必需在物理上傳送兩次)。因此,在這個用戶可以希望接入相同數(shù)據(jù)的圖像服務器環(huán)境中,能夠利用存儲器的緩沖特性是有意義的。本發(fā)明的模型是基于這樣的設想:數(shù)據(jù)將取入存儲器和希望得到單個數(shù)據(jù)拷貝,所選擇的方案基本上是使文件系統(tǒng)提供這單個拷貝。
文件系統(tǒng)傳統(tǒng)上是在過程語境內(nèi)運行的。在這個語境內(nèi),文件系統(tǒng)中傳送數(shù)據(jù)的傳統(tǒng)方式是從一個用戶級程序?qū)?nèi)核進行“讀”系統(tǒng)調(diào)用,得到從盤讀入一個內(nèi)核緩存器的文件的特定數(shù)據(jù)范圍,然后再將它拷貝到用戶緩存器。另一方面,如果需要將數(shù)據(jù)寫到網(wǎng)絡上,那么就發(fā)出一個“寫”系統(tǒng)調(diào)用,數(shù)據(jù)從用戶存儲器反向傳送到內(nèi)核,再從內(nèi)核緩存器傳送給網(wǎng)絡裝置。
[0017]本發(fā)明所研宄的一個問題涉及圖像連接子系統(tǒng)可以支持的模型。具體地說,需要的是這樣的一個系統(tǒng),它能在Unix或Unix派生的環(huán)境(諸如IBM公司的AIX) TM(操作系統(tǒng))內(nèi)以能限制CPU開銷和拷貝數(shù)據(jù)所占用的開銷的方式進行操作。VCS