專利名稱:Dma傳輸方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及固態(tài)存儲設備(Solid Storage Device, SSD),更具體地,本發(fā)明涉及將數(shù)據(jù)通過DMA傳輸寫入固態(tài)存儲設備的方法及裝置。
背景技術:
同機械式硬盤相類似,固態(tài)存儲設備(SSD)也是用于計算機系統(tǒng)的大容量、非易失性存儲設備。固態(tài)存儲設備一般以閃存(Flash)作為存儲介質。在中國專利文獻CN102043689A中公開了如圖13所示的固態(tài)存儲設備。如圖13所示,為目前一般的固態(tài)存儲設備的功能框圖。其中主要包括主機系統(tǒng)1301和固態(tài)存儲設備1302。其中,固態(tài)存儲設備1302包括接ロ模塊1303,固態(tài)存儲處理器1304,以及以Flash顆粒1305為單位組成 的Flash陣列1306。其中,接ロ模塊1303主要用于實現(xiàn)與主機系統(tǒng)一致的接ロ協(xié)議,例如SATA (Serial Advanced Technology Atta chment,串行高級技術附件)、USB (UniversalSerial Bus,通用串行總線)、PCIE (Peripheral Component Interconnect Express,快速外圍組件互連)、SCSI (Small Computer System Interface,小型計算機系統(tǒng)接ロ)、IDE(Integrated Drive Electro nics,集成驅動器電子)等。通過接ロ模塊1303,固態(tài)存儲設備呈現(xiàn)給主機系統(tǒng)的是一個擁有一定邏輯空間的標準存儲設備。固態(tài)存儲處理器1304是整個存儲設備的控制核心,主要負責接ロ模塊1303以及閃存陣列1306之間的控制信號及數(shù)據(jù)的傳輸、Flash管理、主機邏輯地址到Flash物理地址的轉換或映射、損耗均衡(將邏輯地址映射到不同的物理地址從而防止單個Flash被過于集中地操作而提前失效)、壞塊管理等。可由軟件、硬件、固件或者其組合的多種方式實現(xiàn)固態(tài)存儲處理器1304。1305為單個Flash顆粒,多個Flash顆粒1305組成Flash陣列1306。為提高固態(tài)存儲設備的讀、寫速度,可以在固態(tài)存儲設備中設置諸如DRAM或SRAM的隨機訪問存儲器或其他類型的適于高速讀/寫操作的存儲器,作為同閃存讀寫數(shù)據(jù)時的高速緩沖存儲器。在存儲設備訪問過程中,作為ー個例子,計算機向存儲設備發(fā)出SCSI(小型計算機系統(tǒng)接ロ)命令,存儲設備接收并處理SCSI命令,依據(jù)SCSI命令所指示的操作執(zhí)行相應的存儲介質讀寫過程。在這ー過程中,SCSI命令并不直接操作高速緩沖存儲器。SP,高速緩沖存儲器對計算機或者用戶是“透明”的。也有ー些存儲設備提供了高速緩沖存儲器的“清洗”機制,計算機或用戶可使用預定的命令強制存儲設備將高速緩沖存儲器中的數(shù)據(jù)寫入到非易失性存儲介質(例如,磁盤或者閃存)中。然而,對高速緩沖存儲器的分配和管理將成為固態(tài)存儲設備上的控制器的工作負擔。而且當高速緩沖存儲器被完全占用后,如果固態(tài)存儲設備接收到來自主機系統(tǒng)的新的訪問請求,則還需要執(zhí)行對高速緩沖存儲器的替換操作。這樣既増加了控制器的復雜度,又會讓主機經(jīng)歷在讀/寫性能上的顛簸。在主機與設備之間還可以進行DMA (Direct Memory Access,直接存儲器訪問)傳輸。在中國專利文獻CN101221544A中公開了執(zhí)行DMA傳輸?shù)姆椒ê驮O備。DMA傳輸?shù)末`個典型過程是分散/收集(Scatter/Gather)操作。分散/收集操作中,待傳輸?shù)亩鄠€數(shù)據(jù)塊存儲在系統(tǒng)(主機)存儲器的不連續(xù)的多個地址位置。處理器不需要為要從某一源移動到某一目的地的每個數(shù)據(jù)塊對DMA控制器進行編程的操作。而是,處理器在系統(tǒng)存儲器中建立描述符表或描述符鏈接表。描述符表或描述符鏈接表中包括ー組描述符。姆個描述符都描述了數(shù)據(jù)塊移動方向、源地址、目的地地址以及可選的傳輸?shù)淖止?jié)數(shù)。在一個描述符中不包括傳輸字節(jié)數(shù)的情況下,可通過DMA方式傳輸約定長度的數(shù)據(jù)。
發(fā)明內容
因而,分擔存儲設備上的控制器的工作負擔是有益的。通過將與存儲設備的緩沖存儲器有關的維護工作轉移給主機,既減輕了存儲設備的控制器的負載,也向主機提供了更靈活控制存儲設備的能力。在本發(fā)明的第一實施例中,提供了一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)姆椒ǎ龃鎯υO備包括緩沖存儲器和閃存芯片,所述方法包括 接收第一 IO請求;為所述第一 IO請求分配第一存儲單元與第二存儲單元;向所述存儲設備發(fā)送所述第一 DMA描述符,所述第一 DMA描述符包括DMA主機地址、用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址與第二用于緩沖存儲器的地址,其中,所述第一用于緩沖存儲器的地址同所述第一存儲單元相對應,所述第ニ用于緩沖存儲器的地址同所述第二存儲單元相對應;在所述存儲設備和所述信息處理設備之間依據(jù)所述第一 DMA描述符進行DMA傳輸;接收來自所述存儲設備的消息,所述消息指示所述存儲設備對第一 DMA描述符已執(zhí)行完成;釋放所述第一存儲單元與所述第二存儲單元。根據(jù)本發(fā)明的第一實施例,其中分配第一存儲單元與第二存儲單元進ー步包括,在所述第二存儲單元中存儲指向所述第一存儲單元的地址。在本發(fā)明的第二實施例中提供了一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)姆椒?,所述存儲設備包括緩沖存儲器和閃存芯片,所述方法包括接收第一 IO請求;為所述第一 IO請求分配第一存儲單元與第二存儲單元;向所述存儲設備發(fā)送所述第一 DMA描述符,所述第一 DMA描述符包括第一 DMA描述符命令和第一 DMA描述符數(shù)據(jù),所述第一 DMA描述符命令包括用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址,所述第一 DMA描述符數(shù)據(jù)包括DMA主機地址以及第二用于緩沖存儲器的地址;其中,所述第一用于緩沖存儲器的地址同所述第一存儲単元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應;在所述存儲設備和所述信息處理設備之間依據(jù)所述DMA主機地址和所述第二用于緩沖存儲器的地址進行DMA傳輸;接收來自所述存儲設備的消息,所述消息指示所述存儲設備對第一 DMA描述符已執(zhí)行完成;釋放所述第一存儲單元與所述第二存儲單元。
根據(jù)本發(fā)明的第一或第二實施例,其中,所述第一 IO請求指示將所述DMA主機地址處的數(shù)據(jù)寫入到用于所述存儲設備的閃存芯片的地址處。根據(jù)本發(fā)明的第一或第二實施例,還包括將空閑的存儲單元鏈接在一起形成空閑存儲單元資源池,在分配第一存儲單元與第二存儲單元時,從所述空閑存儲單元資源池中取出空閑的存儲單元,在釋放所述第一存儲單元與所述第二存儲單元時,基于所述所述第一存儲單元與所述第二存儲單元插入到所述空閑存儲單元資源池。根據(jù)本發(fā)明的第一或第二實施例,還包括將空閑的存儲單元鏈接在一起形成空閑存儲單元資源池,在分配第一存儲單元與第二存儲單元時,若所述空閑存儲單元資源池為空,則等待一個或多個存儲単元被插入到所述空閑存儲單元資源池。在本發(fā)明的第三實施例中,提供了一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)姆椒?,所述存儲設備包括緩沖存儲器和閃存芯片,所述方法包括接收第一 IO請求; 為所述第一 IO請求分配第一存儲單元、第二存儲單元與第三存儲單元;向所述存儲設備發(fā)送所述第一 DMA描述符,所述第一 DMA描述符包括第一 DMA描述符命令、第一 DMA描述符數(shù)據(jù)和第二 DMA描述符數(shù)據(jù),所述第一 DMA描述符命令包括用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址,所述第一 DMA描述符數(shù)據(jù)包括第一 DMA主機地址以及第ニ用于緩沖存儲器的地址,所述第二 DMA描述符數(shù)據(jù)包括第二 DMA主機地址以及第三用于緩沖存儲器的地址;其中,所述第一用于緩沖存儲器的地址同所述第一存儲單元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應,所述第三用于緩沖存儲器的地址同所述第三存儲單元相對應;在所述存儲設備和所述信息處理設備之間依據(jù)所述第一 DMA主機地址和所述第ニ用于緩沖存儲器的地址進行DMA傳輸,以及依據(jù)所述第二 DMA主機地址和所述第三用于緩沖存儲器的地址進行DMA傳輸;接收來自所述存儲設備的消息,所述消息指示所述存儲設備對第一 DMA描述符已執(zhí)行完成;釋放所述第一存儲單元、所述第二存儲單元與所述第三存儲單元。根據(jù)本發(fā)明的第三實施例,所述第一 IO請求指示將所述第一DMA主機地址處的數(shù)以及所述第二 DMA主機地址處的數(shù)據(jù)寫入到用于所述存儲設備的閃存芯片的地址處。根據(jù)本發(fā)明的第三實施例,其中分配第一存儲單元、第二存儲單元與第三存儲單元后,將所述第一存儲單元、所述第二存儲單元和所述第三存儲單元鏈接為循環(huán)鏈表。根據(jù)本發(fā)明的第三實施例,所述來自所述存儲設備的消息中包括指示所述第一存儲單元、所述第二存儲單元和所述第三存儲單元之一的內容。根據(jù)本發(fā)明的第一、第二和第三實施例,其中分配所述第一存儲單元后,在所說第一存儲單元中存儲用于標識所述第一 IO請求的指針。在本發(fā)明的第四實施例中提供了一種在信息處理設備和存儲設備之間進行數(shù)據(jù)傳輸?shù)姆椒ǎ龃鎯υO備包括緩沖存儲器和閃存芯片,所述方法包括接收第一寫請求,所述第一寫請求包括要寫入的數(shù)據(jù)和用于所述存儲設備的閃存芯片的地址;為所述第一寫請求在所述信息處理設備中分配第一存儲單元;
向所述存儲設備發(fā)送第一寫命令,所述第一寫命令中包括數(shù)據(jù)、用于所述存儲設備的閃存芯片的地址以及用于所述緩沖存儲器的地址;其中,所述用于緩沖存儲器的地址同所述第一存儲單元相對應;接收來自所述存儲設備的消息,所述消息指示所述存儲設備對所述寫命令已執(zhí)行完成; 釋放所述第一存儲單元。根據(jù)本發(fā)明的第四實施例,其中還為所述第一寫請求分配第二存儲單元,并在所述第二存儲單元中存儲指向所述第一存儲單元的指針;基于所述消息,釋放所述第一存儲單元與所述第二存儲單元。在本發(fā)明的第五實施例中,提供了一種在信息處理設備和存儲設備之間進行DMA 傳輸?shù)难b置,所述存儲設備包括緩沖存儲器和閃存芯片,所述裝置包括用于接收第一 IO請求的模塊;用于為所述第一 IO請求分配第一存儲單元與第二存儲單元的模塊;用于向所述存儲設備發(fā)送所述第一 DMA描述符的模塊,所述第一 DMA描述符包括DMA主機地址、用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址與第ニ用于緩沖存儲器的地址,其中,所述第一用于緩沖存儲器的地址同所述第一存儲單元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應;用于在所述存儲設備和所述信息處理設備之間依據(jù)所述第一 DMA描述符進行DMA傳輸?shù)哪K;用于接收來自所述存儲設備的消息的模塊,所述消息指示所述存儲設備對第一DMA描述符已執(zhí)彳丁完成;用于釋放所述第一存儲單元與所述第二存儲單元的模塊。根據(jù)本發(fā)明的第五實施例,還包括用于在分配第一存儲單元、第二存儲單元與第三存儲單元后,將所述第一存儲單元、所述第二存儲單元和所述第三存儲單元鏈接為循環(huán)鏈表的裝置。根據(jù)本發(fā)明的第五實施例,還包括用于將空閑的存儲單元鏈接在一起形成空閑存儲單元資源池的裝置;在分配第一存儲單元與第二存儲單元吋,從所述空閑存儲單元資源池中取出空閑的存儲單元,在釋放所述第一存儲單元與所述第二存儲單元時,基于所述所述第一存儲單元與所述第二存儲單元插入到所述空閑存儲單元資源池。根據(jù)本發(fā)明的第五實施例,還包括用于將空閑的存儲單元鏈接在一起形成空閑存儲單元資源池的裝置,在分配第一存儲單元與第二存儲單元時,若所述空閑存儲單元資源池為空,則等待ー個或多個存儲單元被插入到所述空閑存儲單元資源池。本發(fā)明的第六實施例提供了一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)难b置,所述存儲設備包括緩沖存儲器和閃存芯片,所述裝置包括用于接收第一 IO請求的模塊;用于為所述第一 IO請求分配第一存儲單元與第二存儲單元的模塊;用于向所述存儲設備發(fā)送所述第一 DMA描述符的模塊,所述第一 DMA描述符包括第一 DMA描述符命令和第一 DMA描述符數(shù)據(jù),所述第一 DMA描述符命令包括用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址,所述第一 DMA描述符數(shù)據(jù)包括DMA主機地址以及第ニ用于緩沖存儲器的地址;其中,所述第一用于緩沖存儲器的地址同所述第一存儲單元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應;用于在所述存儲設備和所述信息處理設備之間依據(jù)所述DMA主機地址和所述第ニ用于緩沖存儲器的地址進行DMA傳輸?shù)哪K;用于接收來自所述存儲設備的消息的模塊,所述消息指示所述存儲設備對第一DMA描述符已執(zhí)彳丁完成;用于釋放所述第一存儲單元與所述第二存儲單元的模塊。本發(fā)明的第七實施例提供了一種在信息處理設備和存儲設備之間進行數(shù)據(jù)傳輸?shù)难b置,所述存儲設備包括緩沖存儲器和閃存芯片,所述裝置包括用于接收第一寫請求的裝置,所述第一寫請求包括要寫入的數(shù)據(jù)和用于所述存儲設備的閃存芯片的地址;用于為所述第一寫請求在所述信息處理設備中分配第一存儲單元的裝置;用于向所述存儲設備發(fā)送第一寫命令的裝置,所述第一寫命令中包括數(shù)據(jù)、用于所述存儲設備的閃存芯片的地址以及用于所述緩沖存儲器的地址;其中,所述用于緩沖存儲器的地址同所述第一存儲單元相對應;用于接收來自所述存儲設備的消息的裝置,所述消息指示所述存儲設備對所述寫命令已執(zhí)行完成;用于釋放所述第一存儲單元的裝置。根據(jù)第七實施例,還包括用于為所述第一寫請求分配第二存儲單元,并在所述第ニ存儲單元中存儲指向所述第一存儲單元的指針的裝置;以及用于基于所述消息,釋放所述第一存儲單元與所述第二存儲單元的裝置。根據(jù)本發(fā)明的第五實施例、第六實施例和第七實施例,還包括用于在分配所述第一存儲單元后,在所說第一存儲單元中存儲用于標識所述第一 IO請求的指針的裝置。
當連同附圖閱讀時,通過參考后面對示出性的實施例的詳細描述,將最佳地理解本發(fā)明以及優(yōu)選的使用模式和其進ー步的目的和優(yōu)點,其中附圖包括圖I是根據(jù)本發(fā)明實施例的存儲設備的結構框圖;圖2A、2B是根據(jù)本發(fā)明實施例的寫入命令的示意圖;圖3是根據(jù)本發(fā)明實施例的存儲設備執(zhí)行寫入命令的方法的流程圖;
圖4是根據(jù)本發(fā)明實施例的主機的示意圖;圖5是根據(jù)本發(fā)明實施例的主機執(zhí)行寫入操作的流程圖;圖6是根據(jù)本發(fā)明實施例的第二寫入命令的示意圖;圖7A、7B是根據(jù)本發(fā)明實施例的存儲設備執(zhí)行第二寫入命令的流程圖;圖7C中展示了用于實施圖7A、7B中的執(zhí)行第二寫入命令的存儲設備的硬件方框圖;圖8是根據(jù)本發(fā)明實施例的主機的軟件方框圖9A是根據(jù)本發(fā)明實施例的主機創(chuàng)建并執(zhí)行第二寫入命令的流程圖;圖9B是根據(jù)本發(fā)明另一實施例的主機創(chuàng)建并執(zhí)行第二寫入命令的流程圖;圖IOA是根據(jù)本發(fā)明的一實施例的在存儲設備的緩沖存儲器中創(chuàng)建鏈表的流程圖;圖IOB是根據(jù)本發(fā)明的一實施例的在存儲設備的緩沖存儲器中創(chuàng)建鏈表的流程圖;圖IOC是根據(jù)本發(fā)明的ー實施例的存儲設備利用在緩沖存儲器中創(chuàng)建的鏈表執(zhí)行DMA描述符的流程圖;圖11A-11F展示出了與圖10B、圖IOC相關聯(lián)的緩沖存儲器的多種狀態(tài); 圖12是根據(jù)本發(fā)明的又一實施例的存儲設備的硬件方框圖13是根據(jù)現(xiàn)有技術的存儲設備的方框圖。
具體實施例方式圖I是根據(jù)本發(fā)明實施例的存儲設備的結構框圖。如圖I所示的實施例包括主機101以及同主機101相耦合的存儲設備102。主機101同存儲設備102之間可通過多種方式相耦合,耦合方式包括但不限于通過例如SATA、IDE、USB、PCIE、S CSI、以太網(wǎng)、光纖通道、無線通信網(wǎng)絡等連接主機101與存儲設備102。主機101可以是能夠通過上述方式同存儲設備相通信的信息處理設備,例如,個人計算機、平板電腦、服務器、便攜式計算機、網(wǎng)絡交換機、路由器、蜂窩電話、個人數(shù)字助理等。存儲設備102包括主機接ロ 103、控制電路104、一個或多個閃存芯片105以及緩沖存儲器106。主機接ロ 103可適配于通過例如SATA、IDE、USB、PCIE、SCSI、以太網(wǎng)、光纖通道等方式與主機101交換數(shù)據(jù)??刂齐娐?04用于控制在主機接ロ 103、閃存芯片105以及緩沖存儲器106之間的數(shù)據(jù)傳輸,還用于閃存管理、主機邏輯地址到閃存物理地址映射、擦除均衡、壞塊管理等??赏ㄟ^軟件、硬件、固件或其組合的多種方式實現(xiàn)控制電路104。控制電路104可以是FPGA(Field_pro grammable gate array,現(xiàn)場可編程門陣列)、ASIC (Application Specific Integrated Circuit,應用專用集成電路)或者其組合的形式??刂齐娐?04也可以包括處理器或者控制器。根據(jù)本發(fā)明的一個實施例,主機101向存儲設備102發(fā)出讀出命令或者寫入命令。控制電路104經(jīng)由主機接ロ 103接收到該讀出命令或寫入命令。在附圖2中詳細描述了作為例子的第一寫入命令200。參看圖2A、2B,圖2A是根據(jù)本發(fā)明實施例的寫入命令的示意圖。寫入命令200包括字段201、202、203和204。字段201指示該命令為寫入命令,字段202為閃存地址,字段203為數(shù)據(jù),該寫入命令200指示存儲設備102將數(shù)據(jù)字段203中的數(shù)據(jù)基于由字段202所指示的閃存地址寫入閃存芯片105。字段204為緩沖存儲器地址,存儲設備102接收到該寫入命令200時,先將數(shù)據(jù)字段203中的數(shù)據(jù)基于寫入由字段204所指示緩沖存儲器地址寫入緩沖存儲器106,再將數(shù)據(jù)字段203中的數(shù)據(jù)基于由字段202所指示的閃存地址寫入閃存芯片105。在一個例子中,存儲設備102將數(shù)據(jù)字段203中的數(shù)據(jù)基于寫入由字段204所指示緩沖存儲器地址寫入緩沖存儲器106后,再從緩沖存儲器106中讀出該數(shù)據(jù),繼而將該數(shù)據(jù)寫入到閃存芯片105。將數(shù)據(jù)寫入到緩沖存儲器106的操作,同將存儲器106中的另ー數(shù)據(jù)讀出并寫入到閃存芯片105的操作可以并發(fā)執(zhí)行,從而使得主機101向存儲設備102的寫入操作的并發(fā)性能得到提升,并且不會顯著增加控制電路104的復雜度,因為控制電路104無需處理緩沖存儲器106的空間分配任務。在一個實施例中,字段204中可以是緩沖存儲器106的完整地址,而在另一個實施例中,字段204是相對某一基地址的偏移值。在一個實施例中,字段203中攜帯要寫入閃存105的數(shù)據(jù)。而在另一個實施例中,字段203中可攜帯一個指針,該指針指向要寫入存儲設備102的數(shù)據(jù),而該數(shù)據(jù)可以存儲在主機101的存儲器中,在此情況下,存儲設備102通過隨后的DMA傳輸過程從主機101獲得該數(shù)據(jù)。在依然另ー個實施例中,字段203可攜帯一個指針,該指針指向要寫入存儲設備102的數(shù)據(jù),而該數(shù)據(jù)可以存儲在存儲設備1 02的緩沖存儲器中。字段202可以是要將數(shù)據(jù)寫入的閃存芯片105的物理地址或邏輯地址。字段202也可以是ー個指針,指向緩沖存儲器106,在其中存儲有用于閃存芯片105的物理地址或邏輯地址。邏輯地址到物理地址的轉換過程,可以通過查找地址映射表的方式實現(xiàn)。所屬領域技術人員將容易意識到,寫入命令可以具有多種具體編碼方式和字段順序。例如,參看圖2B,指示寫入命令210的類型是寫操作的字段214可以在寫入命令210的末尾或者其他位置。而在字段211中攜帶緩沖存儲器地址,在字段212中攜帯數(shù)據(jù)或指向數(shù)據(jù)的存放位置的指針。在字段213中存放閃存地址,或者指向存放閃存地址的指針,閃存地址可以是邏輯地址或物理地址。圖3是根據(jù)本發(fā)明實施例的存儲設備執(zhí)行寫入命令的方法的流程圖。在步驟301,存儲設備102從主機101接收到寫入命令200。存儲設備102的控制電路104通過主機接ロ 103接收到寫入命令200后,提取出包含于寫入命令200中的用于指示操作類型為寫操作的字段201,用于指示要寫入的閃存的地址的字段202,用于指示要寫入的數(shù)據(jù)的字段203,以及用于指示緩沖存儲器106的地址的字段204。在步驟302,響應于該寫入命令200,控制電路104基于字段204得到用于緩沖存儲器106的地址,并基于字段203得到要寫入的數(shù)據(jù),以及將要寫入的數(shù)據(jù)寫入到緩沖存儲器106中由字段204所指示的位置。當將數(shù)據(jù)寫入到緩沖存儲器106中后,存儲設備102可向主機發(fā)送消息以指示寫入命令200的執(zhí)行完成,雖然數(shù)據(jù)此時尚未被實際寫入到閃存芯片105之中。以此方式,在主機101看來,在步驟302執(zhí)行完成后,寫入命令200已經(jīng)執(zhí)行完成,從而提升了存儲設備102的執(zhí)行寫入命令200的性能。向主機發(fā)送的消息可以包含于存儲設備102向主機101所發(fā)送的中斷請求之中,也可以基于主機101與存儲設備102之間的耦合方式(SATA、IDE、USB、PCIE、SCSI、以太網(wǎng)、光纖通道、無線通信網(wǎng)絡等)而選擇適當?shù)钠渌l(fā)送方式。在將要寫入的數(shù)據(jù)寫入到緩沖存儲器106之后,在控制電路104的控制下,將由字段203所指示的要寫入的數(shù)據(jù),基于由字段202所指示的閃存地址,寫入到閃存芯片105中(步驟303)。當將數(shù)據(jù)寫入到閃存芯片105中后,存儲設備102也可向主機發(fā)送消息以指示寫入命令200的執(zhí)行完成,特別地,此時主機可以在寫入命令200中再次指定將數(shù)據(jù)寫入該用于指示緩沖存儲器106的地址,而不會因對該地址處的數(shù)據(jù)的重寫而導致數(shù)據(jù)錯誤。在一個例子中,如果字段202所指示的是用于閃存芯片105的邏輯地址,則將該邏輯地址轉換為用于閃存芯片105的物理地址。邏輯地址到物理地址的轉換方式是所屬領域技術人員所了解的。在一個例子中,在步驟303,從緩沖存儲器106中重新取得所寫入的數(shù)據(jù),并將該數(shù)據(jù)寫入到閃存芯片105。所屬領域技術人員將意識到,在控制電路104的控制下,步驟302中將數(shù)據(jù)寫入到緩沖存儲器106的操作,與步驟303中將數(shù)據(jù)寫入到閃存存儲器105的操作,可以并行執(zhí)行。這樣,在存儲設備102中可以同時處理多個寫入命令,其中,在ー個時刻,基于ー個寫入命令,控制電路104將第一數(shù)據(jù)寫入到緩沖存儲器106中;而基于另ー個寫入命令,控制電路104將存在于緩沖存儲器106中的第二數(shù)據(jù)寫入到閃存芯片105中。緩沖存儲器106可以是雙端ロ存儲器,使得在經(jīng)由第一端ロ向緩沖存儲器106寫入第一數(shù)據(jù)的同時,可以從第二端ロ從緩沖存儲器106讀出第二數(shù)據(jù)。所屬領域技術人員可意識到緩沖存儲器106的其他實施方式,以支持對多份數(shù)據(jù)的同時讀出和/或寫入操作。通過在寫入命令中攜帯用于指示緩沖存儲器106的地址的字段204,將維護緩沖存儲器106的工作從控制電路104移除了,并且使主機101擁有了更靈活控 制存儲設備102的能力。圖4是根據(jù)本發(fā)明實施例的主機的示意圖。圖4是示出了主機400的軟件組成的方框圖。主機400可以是個人計算機、服務器計算機或者其他具有計算能力的設備。主機400包括一個或多個用戶應用程序401、402和403,以及操作系統(tǒng)404。操作系統(tǒng)404中具有存儲設備驅動程序405。在根據(jù)本發(fā)明的實施例中,驅動程序405中包括緩沖區(qū)控制塊406,用以在主機400中控制存儲設備102的緩沖存儲器106。緩沖區(qū)控制塊406由多個存儲
單元(411、412......41η)組成,緩沖區(qū)控制塊406中的每個存儲單元(411、412......41η)
對應于緩沖存儲器106中的一個存儲単元,并記錄緩沖存儲器106中的對應存儲單元的エ
作狀態(tài)。在一個實施例中,緩沖區(qū)控制塊406中的存儲單元(411、412......41η)的每ー個,
記錄緩沖存儲器106中的對應存儲單元是空閑的還是已經(jīng)被占用。在進ー步的一個實施例中,在發(fā)送給存儲設備102的ー個讀/寫命令中涉及緩沖存儲器中的多個存儲単元,例如2個。在此情況下,將緩沖區(qū)控制塊406中的2個存儲單元(411、412)關聯(lián)在一起,在存儲單元411、412中還記錄存儲單元411與412之間的這種關聯(lián)關系,例如,在存儲單元411中記錄指向存儲單元412的ー個或多個指針。在依然進ー步的實施例中,在存儲單元412中還記錄指向存儲單元411的ー個或多個指針。圖5是根據(jù)本發(fā)明實施例的主機執(zhí)行寫入操作的流程圖。當用戶應用程序或者其他程序請求執(zhí)行將數(shù)據(jù)寫入到存儲設備的操作時,應用程序或其他程序會發(fā)送寫請求。圖4中的存儲設備驅動程序405接收該寫請求(步驟501 ),該寫請求中包括應用程序或其他程序所提供的要寫入的數(shù)據(jù)已經(jīng)用于存儲設備的地址,用于存儲設備的地址可以是文件路徑及偏移值,并進一歩被轉換為用于存儲設備的邏輯地址。在一個例子中,該邏輯地址是用于存儲設備上的閃存芯片的邏輯地址,該寫請求要將數(shù)據(jù)基于該邏輯地址寫入到閃存芯片中。在步驟502,存儲設備驅動程序405為該寫請求分配空閑的緩沖存儲器。具體地,遍歷緩沖區(qū)控制塊406,找到其中為空閑狀態(tài)的存儲單元,例如,存儲單元411。存儲單元411為空閑狀態(tài),表示在存儲設備102的緩沖存儲器106中的對應存儲單元為空閑狀態(tài),可以接收寫入的數(shù)據(jù)。在步驟503中,存儲設備驅動程序405向存儲設備102發(fā)送寫命令,在寫命令中包括要寫入的數(shù)據(jù)以及用于存儲設備102的地址,在該寫命令中還包括同存儲單元411相對應的用于緩沖存儲器106的地址。所屬領域技術人員將意識到,有多種方式獲得存儲單元411與緩沖存儲器106中的對應存儲單元的對應關系。例如,緩沖區(qū)控制塊406中有η個存
儲單元(411、412......41η),而緩沖存儲器106中也包括η個存儲單元,存儲單元411對應
于緩沖存儲器106中的第一個存儲単元,而存儲単元412對應于緩沖存儲器106中的第二個存儲単元,以及類似地,存儲單元41η對應于緩沖存儲器106中的第η個存儲単元,使得基于存儲單元411在緩沖區(qū)控制塊406中的位置可計算出緩沖存儲器106中的對應存儲單
元的地址。依然作為ー個例子,還可以在存儲單元(411、412......412)中存儲緩沖存儲器
106中的對應存儲單元的地址。在依然另ー個例子中,在寫命令中攜帯ー個序號,該序號既指示存儲單元411在緩沖區(qū)控制塊406中的位置,又指示在緩沖存儲器106中的對應存儲單元的位置。在步驟504,接收到來自存儲設備102的消息。在一個例子中,該消息是中斷請求,該中斷請求指示在步驟503中發(fā)送的寫命令已經(jīng)執(zhí)行完畢。如前面所述的,在一個例子中,存儲設備102中的控制電路104在將寫命令中的數(shù)據(jù)寫入到緩沖存儲器106 (特別地,寫入到緩沖存儲器106中與緩沖區(qū)控制塊406的存儲單元411相對應的存儲單元)之后,存儲設備即發(fā)送中斷,指示該寫命令執(zhí)行完成。在一個例子中,控制電路104將數(shù)據(jù)寫入到閃存芯 片105之后,存儲設備102向主機101發(fā)送中斷。在一個例子中,該中斷請求中還包括指示步驟503中發(fā)送的寫命令相關的緩沖區(qū)控制塊406的存儲單元的信息。該信息可以是ー個
或多個存儲單元(411、412......41η)的地址,ー個或多個存儲單元(411、412......41η)
的序號。在步驟505,響應于在步驟504中接收到的該中斷請求,并基于該中斷請求中所指示的與該寫命令相關的緩沖區(qū)控制塊406的存儲單元的信息,釋放與該寫命令相關的緩
沖區(qū)控制塊406的存儲單元(411、412......41η)。釋放存儲單元(411、412......41η)具
體可以是在存儲單元(411、412......41η)中設置緩沖存儲器106中的對應存儲單元是空
閑狀態(tài)。在一個例子中,步驟503中的寫命令涉及緩沖區(qū)控制塊406的兩個存儲單元411與412,并且,存儲單元411與412中分別記錄了指向彼此的指針,以表示這兩個存儲單元411,412關聯(lián)于同一個寫命令。在步驟504中接收到的中斷請求中,既可以指示存儲單元411也可以指示存儲單元412。在步驟505中,基于指示存儲單元411與412之一的指針,可獲得兩個存儲単元411與412,并將其釋放。類似地,所屬領域技術人員可意識到以此方式還可以在寫命令中關聯(lián)三個或更多的存儲單元(411、412......41η)。圖6是根據(jù)本發(fā)明實施例的第二寫入命令的示意圖。第二寫入命令指示存儲設備102以DMA方式從主機101獲得數(shù)據(jù)并寫入到閃存芯片105中。第二寫入命令可以是DMA描述符600。DMA描述符600包括DMA命令610以及ー個或多個DMA數(shù)據(jù)(620、630)。DMA命令610包括字段611,用于指示DMA方式,即該DMA描述符600指示的操作,其可以為閃存讀、寫、擦除或者其他操作。字段612指示存儲設備的邏輯地址。字段613指示該DMA描述符600的長度,即該DMA描述符600所包括的DMA數(shù)據(jù)(620、630)的個數(shù),其可以為I個或多個。字段614指示緩沖存儲器106的地址。DMA數(shù)據(jù)620、630分別包括字段621、631,用于指示DMA傳輸中的主機地址。DMA數(shù)據(jù)620、630還分別包括字段622、632,用于指示緩沖存儲器106的地址。DMA命令610中的字段612的存儲設備的邏輯地址可用于DMA數(shù)據(jù)620、630。在DMA描述符600中僅包括ー個DMA數(shù)據(jù)620的情況下,存儲設備102根據(jù)字段621指示的主機地址和字段622指示的緩沖存儲器地址,在主機101和存儲設備102之間發(fā)起DMA傳輸,并最終將接收到的數(shù)據(jù)存儲到由字段612所指示的閃存芯片105中。在DMA描述符600包括DMA數(shù)據(jù)620與630的情況下,存儲設備102將根據(jù)DMA數(shù)據(jù)620而執(zhí)行DMA傳輸所得的數(shù)據(jù),最終存儲在由字段612所指示的閃存芯片105中,而存儲設備102還將根據(jù)DMA數(shù)據(jù)630而執(zhí)行DMA傳輸所得的數(shù)據(jù),最終存儲在由字段612加上一預定偏移值所指示的閃存芯片I 05中。換句話說,DMA描述符600可以指示在主機101和存儲設備102之間的多次DMA傳輸,每次DMA傳輸同DMA數(shù)據(jù)620、630中的一個相對應,每次DMA傳輸中傳輸相同數(shù)量的數(shù)據(jù)(例如4K字節(jié)),并且DMA數(shù)據(jù)620與DMA數(shù)據(jù)630所對應的DMA傳輸?shù)拇鎯υO備的邏輯地址是連續(xù)的(例如,相距預定的偏移值,該偏移值可以與DMA傳輸?shù)臄?shù)據(jù)量相對應)。這樣,可以在DMA描述符600中僅攜帶一個存儲設備邏輯地址(字段612)。而DMA數(shù)據(jù)620與DMA數(shù)據(jù)630所對應的DMA傳輸?shù)膬蓚€DMA主機地址(字段621、631)可以是不連續(xù)的,這樣可以支持分散-收集(Scatter-Gather)方式的DMA傳輸。在對應于DMA數(shù)據(jù)620的DMA傳輸中,將來自字段621所指示的DMA主機地址的數(shù)據(jù),寫入到字段622所指示的緩沖存儲器106中,繼而再寫入到閃存芯片105中。在對應于DMA數(shù)據(jù)630的DMA傳輸中,將來自字段631所指示的DMA主機地址的數(shù)據(jù),寫入到字段632所指示的緩沖存儲器106中,繼而再寫入到閃存芯片105中。 字段614是可選的。在字段614所對應的緩沖存儲器地址處,作為ー個例子,可保存字段613所指示的DMA描述符600的長度。從而可以記錄DMA多個數(shù)據(jù)620、630所對應的DMA傳輸有多少已經(jīng)得到執(zhí)行,或者有多少尚未被執(zhí)行。對于DMA描述符600,當其全部DMA數(shù)據(jù)620、630所對應的DMA傳輸均已執(zhí)行完畢后,例如,所對應的數(shù)據(jù)均寫入到閃存芯片105中后,存儲設備102向主機101發(fā)送中斷,以指示對DMA描述符600的執(zhí)行完成。這樣,對于DMA描述符600,雖然其對應于2次DMA傳輸過程,但僅向主機101發(fā)送一次中斷。減少中斷請求次數(shù),將有助于降低主機101的工作負荷。圖7A、7B是根據(jù)本發(fā)明實施例的存儲設備執(zhí)行第二寫入命令的流程圖。第二寫入命令可以是如圖6所示的描述符600。參看圖7A,在步驟701,存儲設備102接收DMA描述符600。在DMA描述符600中包括用于主機的地址(例如,DMA主機地址621、631),用于閃存芯片105的地址(例如,存儲設備邏輯地址612)以及用于緩沖存儲器106的地址(例如,緩沖存儲器地址622、632)。雖然在圖6中的DMA描述符600包括DMA命令610、DMA數(shù)據(jù)620、630,但這僅是為了清楚表達的目的。DMA命令610、DMA數(shù)據(jù)620、630也可以組合在一起。存儲設備102從DMA描述符600中提取出用于主機的地址,用于閃存芯片105的地址以及用于緩沖存儲器106的地址。在步驟702,存儲設備102基于用于主機的地址和用于緩沖存儲器的地址,以DMA傳輸方式從主機101將數(shù)據(jù)寫入到緩沖存儲器106。在步驟703,基于用于閃存存儲器的地址和用于緩沖存儲器,將在步驟702中寫入到緩沖存儲器中的數(shù)據(jù),寫入到閃存芯片105。在一個例子中,在步驟702,將數(shù)據(jù)寫入到緩沖存儲器106之后,向主機101發(fā)送中斷,以指示對DMA傳輸?shù)膱?zhí)行完成。如果DMA描述符600中僅包括這一次DMA傳輸(例如,DMA描述600僅包括DMA命令610與DMA數(shù)據(jù)620),則該中斷也表示對DMA描述符600的執(zhí)行完成。在一個例子中,在步驟703,將數(shù)據(jù)寫入到閃存芯片105之后,向主機101發(fā)送中斷,以指示對DMA傳輸?shù)膱?zhí)行完成。參看圖7B,其示出了對包含多個DMA數(shù)據(jù)(620、630)的DMA描述符600的更詳細的處理過程。在步驟711,存儲設備102接收DMA描述符600,DMA描述符600包括DMA命令610、DMA數(shù)據(jù)620以及DMA數(shù)據(jù)630。在步驟712,基于DMA描述符600,將DMA數(shù)據(jù)620變換為第一 DMA微指令,將DMA數(shù)據(jù)630變換為第二 DMA微指令。第一 DMA微指令中包括DMA主機地址621和緩沖存儲器地址622。基于第一 DMA微指令,還可以獲得與其對應的存儲設備的邏輯地址612、DMA操作類型以及DMA描述符長度613。該存儲設備的邏輯地址612和DMA操作類型可以是第一DMA微指令的一部分,也可以是存儲在緩沖存儲器106中,并通過在第一 DMA微指令中的索引來訪問,還可以通過將第一 DMA微指令放置在特定的操作隊列(讀、寫、擦除、其他)中,以標識第一 DMA微指令的操作類型。作為依然另ー個例子,對于第一 DMA微指令,根據(jù)緩沖存儲器地址622與ー預定的偏移值得到存儲在緩沖存儲器106中的指針,基于該指針,獲得存儲設備的邏輯地址612和/或DMA描述符長度613。通過類似的方式,對于第二 DMA微指令,根據(jù)緩沖存儲器地址632與一預定偏移值得到存儲在緩沖存儲器106中的指針,基于該指針,獲得存儲設備的邏 輯地址612和/或DMA描述符長度613。 在優(yōu)選的實施例中,基于緩沖存儲器地址614,將DMA描述符長度613存儲在緩沖存儲器106中,其中DMA描述符長度等同于DMA描述符600中的DMA數(shù)據(jù)的個數(shù)(或者DMA描述符600中的DMA命令與DMA數(shù)據(jù)的總計個數(shù),從中可以得到DMA數(shù)據(jù)的個數(shù)),并通過在第一 DMA微指令中的索引來訪問DMA描述符長度613。這樣,第一 DMA微指令與第二 DMA微指令的執(zhí)行順序變得不重要。每執(zhí)行ー個DMA微指令,將緩沖存儲器106中的DMA描述符長度遞減(例如,減I或減去單位長度),當緩沖存儲器106中的DMA描述符長度變?yōu)镺吋,表示對該DMA描述符600的所有DMA操作全都執(zhí)行完成。在步驟713,對于第一 DMA微指令,基于DMA主機地址621和緩沖存儲器地址622,以DMA傳輸方式將數(shù)據(jù)寫入到相應緩沖存儲器106中。在步驟714,對于第二 DMA微指令,基于DMA主機地址631和緩沖存儲器地址632,以DMA傳輸方式將相應數(shù)據(jù)寫入到緩沖存儲器106中。在步驟715,向主機發(fā)送中斷,以指示對DMA描述符600的操作完成。在一個例子中,步驟713,還包括將同第一 DMA微指令相對應的寫入到緩沖存儲器106中的數(shù)據(jù),基于存儲設備邏輯地址612,寫入到閃存芯片105中。步驟714還包括將同第二 DMA微指令相對應的寫入到緩沖存儲器106中的數(shù)據(jù),基于存儲設備邏輯地址612加上預定偏移值的和,寫入到閃存芯片105中。在優(yōu)選的實施例中,在步驟713、714中,將相應數(shù)據(jù)寫入到緩沖存儲器106中之后,還基于在第一、第二微指令中的索引,訪問存儲在緩沖存儲器中的DMA描述符長度613,并將DMA描述符長度613遞減(例如,減I或減去單位長度)。這樣,當該DMA描述符長度613變?yōu)镺時,意味著對DMA描述符600的操作完成。以此方式,可以在存儲設備102中同時處理多個DMA描述符600,并且第一 DMA微指令與第二 DMA微指令的執(zhí)行順序也是不重要的。還可以采用其他方式來識別DMA描述符600中的多個DMA數(shù)據(jù)均被執(zhí)行。例如,在緩沖存儲器或寄存器中為每個DMA描述符600的每個DMA數(shù)據(jù)提供標志,每當ー個DMA數(shù)據(jù)(DMA微指令)被執(zhí)行后,將相應的標志置位。還可以順序執(zhí)行DMA描述符600中的每個DMA數(shù)據(jù)(DMA微指令),當最后ー個DMA數(shù)據(jù)(DMA微指令)被執(zhí)行后,意味著對該DMA描述符600的執(zhí)行完成。
在依然另ー個實施例中,當DMA描述符600中的每ー個DMA微指令被執(zhí)行后,向主機101發(fā)送中斷,并由主機驅動程序來分析對DMA描述符600的執(zhí)行是否已完成。分析方法同上面所描述的存儲設備102中識別DMA描述符600中的多個DMA數(shù)據(jù)是否均被執(zhí)行的過程相類似。圖7C中展示了用于實施圖7A、7B中的執(zhí)行第二寫入命令的存儲設備的硬件方框圖。圖7C中,主機101包括PCIE控制器721和主機存儲器722。主機存儲器722可以是隨機訪問存儲器(RAM),PCIE控制器721用于同存儲設備經(jīng)由PCIE總線進行通信。存儲設備102中包括PCIE接ロ 731、DMA指令分析器732、微指令FIFO (先進先出緩沖器)733、DMA寫操作控制器734、DMA寫接ロ 735、邏輯地址到物理地址轉換電路736、Flash接ロ控制器737、閃存芯片105以及緩沖存儲器106。
PCIE接ロ 731接收主機101通過PCIE控制器721發(fā)送的DMA描述符600。主機101與存儲設備102之間的連接不限于PCIE方式,還可以通過SATA、IDE、USB、PCIE、SCSI、以太網(wǎng)、光纖通道等連接主機101與存儲設備102。DMA指令分析器732將PCIE接ロ 731接收到的DMA描述符600變換為DMA微指令。對于如圖6所示的DMA描述符600,其中包括DMA數(shù)據(jù)620和DMA數(shù)據(jù)630,則DMA指令分析器將其變換為對應于DMA數(shù)據(jù)620的第一 DMA微指令和對應于第二 DMA數(shù)據(jù)630的第二 DMA微指令。第一 DMA微指令與第二 DMA微指令的結構已在上文中詳細介紹。DMA指令分析器732還從DMA描述符600的DMA命令610中提取出DMA描述符長度,并對其加以保存,可以保存在緩沖存儲器106、一個寄存器或者類似物中。DMA描述符長度指示了 DMA描述符600所包括的DMA數(shù)據(jù)的數(shù)量,也指示了從該DMA描述符600所得到的DMA微指令的個數(shù)。DMA指令分析器732將第一 DMA微指令與第二 DMA微指令存儲在微指令FIFO 733中。微指令FIFO 733能夠緩存DMA微指令,并按照先進先出的方式向DMA寫操作控制器734提供DMA微指令。雖然這里僅以寫操作為例,描述了將與DMA寫操作對應的DMA微指令緩存在微指令FIF0733中,所屬領域技術人員將意識到可以將與DMA讀操作對應的DMA微指令同與DMA寫操作對應的DMA微指令混合緩存在微指令FIF0733。還可以將微指令FIF0733配置為兩部分或多個部分,其中一部分專用于存儲與DMA讀操作對應的DMA微指令,而將另一部分專用于存儲與DMA寫操作對應的DMA微指令。對于與DMA寫操作對應的DMA微指令,例如,前面所提到的第一 DMA微指令與第二DMA微指令,DMA寫操作控制器734基于這些DMA微指令來執(zhí)行D MA寫操作。如同前面所提到的,第一 DMA微指令中包括,DMA主機地址621和緩沖存儲器地址622。DMA寫操作控制器734利用DMA主機地址621和緩沖存儲器地址622,通過DMA寫接ロ 735在主機101和存儲設備102之間發(fā)起DMA寫操作,將存儲在DMA主機地址621處的數(shù)據(jù),傳輸?shù)骄彌_存儲器地址622所指示的位置,所傳輸?shù)臄?shù)據(jù)可以具有預定的長度(例如4K字節(jié))。對于第二 DMA微指令,DMA寫操作控制器734執(zhí)行類似的操作,將存儲在DMA主機地址631處的數(shù)據(jù),傳輸?shù)骄彌_存儲器地址632所指示的位置。從第一 DMA微指令和第二 DMA微指令可獲得用于各自的存儲設備的邏輯地址。在邏輯地址到物理地址轉換電路736,為每條DMA微指令的存儲設備的邏輯地址轉換為用于閃存芯片105的物理地址。對于每一條DMA微指令,F(xiàn)lash接ロ控制器737將寫入到緩沖存儲器106的數(shù)據(jù),基于邏輯地址到物理地址轉換電路736所提供的物理地址,寫入到閃存芯片105中。Flash接ロ控制器737還基于在第一、第二微指令中的索引,訪問所保存的從DMA描述符600的DMA命令610中提取出DMA描述符長度,并將DMA描述符遞減(例如,減I或減去單位長度)。這樣,當該DMA描述符長度變?yōu)镺吋,意味著對DMA描述符600的操作完成。繼而,可向主機發(fā)送中斷,以指示對DMA描述符600的操作完成。在一個例子中,DMA寫操作控制器也訪問所保存的DMA描述符長度,并確定是否已將與DMA描述符600相對應的所有數(shù)據(jù)均寫入到緩沖存儲器106中,井向主機發(fā)送指示所有數(shù)據(jù)已寫入到緩沖存儲器106的中斷。圖8是根據(jù)本發(fā)明實施例的主機的軟件方框圖。圖8是示出了主機800的軟件的方框圖,其同圖4中展示的主機的軟件方框圖相類似。不同之處在干,圖8中的緩沖區(qū)控制塊406中還包括IO請求鏈表801。IO請求鏈表801是利用緩沖區(qū)控制塊406中的存儲單
元(411、412......41η)組成的鏈表。IO請求鏈表801可以是單向鏈表、雙向鏈表或循環(huán)
鏈表。在生成如圖6所不的DMA描述符600時,對于一個DMA描述符600,創(chuàng)建一個與之相對應的IO請求鏈表801,其中包括分別與DMA命令610、DMA數(shù)據(jù)620、DMA數(shù)據(jù)630分別相對應的存儲單元(811、812、813)。需要指出的是,存儲單元(811、812、813)是緩沖區(qū)控制塊
406的存儲單元(411、412......41η)中的三個存儲單元,并通過設置相應的指針,形成IO
請求鏈表801。在圖8中,將存儲單元(811、812、813)與存儲單元(411、412......4 In)分
開展示,僅僅是為了清楚地描述的需要。圖9Α是根據(jù)本發(fā)明實施例的主機創(chuàng)建并執(zhí)行第二寫入命令的流程圖。在ー個實施例中,步驟901,由主機的存儲設備驅動程序405接收IO請求。該IO請求指示將分散在主機存儲器的不同物理地址的多個數(shù)據(jù)塊寫入到存儲設備102中,為此將在主機與存儲設備之間執(zhí)行分散-收集DMA操作。下面將以舉例的方式描述主機向存儲器寫入數(shù)據(jù)的操作過程。在步驟902,結合圖8,從緩沖區(qū)控制塊406中取出一個空閑狀態(tài)的存儲單元,例如存儲單元411。在步驟904,根據(jù)IO請求的內容,創(chuàng)建DMA描述符600的DMA命令610,填充DMA命令610中的DMA方式字段611 (在該例子中,是寫操作)、存儲設備邏輯地址字段612 (從IO請求中可獲得該信息)、DMA描述符長度字段613 (從IO請求中可獲得該信息)以及緩沖存儲器地址字段614 (與步驟902中所分配的存儲單元411相對應)。繼而將所創(chuàng)建的DMA命令610發(fā)送給存儲設備102。并將存儲單元411作為用于該IO請求的IO請求鏈表801的起始節(jié)點(例如存儲單元811)。創(chuàng)建IO請求鏈表801,用于在存儲設備102執(zhí)行完DMA描述符600之后,將所占用的存儲單元歸還給緩沖區(qū)控制塊406,并就該IO請求的執(zhí)行完成通知應用軟件或其他上層軟件。為此目的,在一個例子中,還在存儲單元411中存儲對應于該IO請求的指針?;贒MA描述符長度,還可獲得DMA數(shù)據(jù)部分的剩余長度。在生成第一個DMA數(shù)據(jù)之前,DMA數(shù)據(jù)部分的剩余長度是DMA描述符600中的DMA數(shù)據(jù)(620、630)的個數(shù),作為ー個例子,其為DMA描述符長度減I。在步驟906,從緩沖區(qū)控制塊406中取出一個空閑狀態(tài)的存儲單元,例如,存儲單元412。根據(jù)IO請求的內容,創(chuàng)建DMA描述符600的DMA數(shù)據(jù)620,填充DMA數(shù)據(jù)620中的DMA主機地址字段621 (從IO請求中可獲得該信息)以及緩沖存儲器地址622 (與所分配的存儲單元412相對應,例如,存儲單元412在緩沖區(qū)控制塊406中的偏移值或序號)。繼而將所創(chuàng)建的DMA數(shù)據(jù)620發(fā)送給存儲設備102。并將存儲單元412作為用于該IO請求的IO請求鏈表801的節(jié)點(例如存儲單元812)。在步驟908,將DMA數(shù)據(jù)部分剩余長度遞減,得到DMA描述符600中尚未發(fā)送給存儲設備的DMA數(shù)據(jù)的個數(shù)。在步驟909,如果DMA數(shù)據(jù)部分的剩余長度為0,則表示DMA描述符600的生成已經(jīng)完成,進而在步驟910存儲設備驅動程序405將等待存儲設備102返回的表示DMA描述符600的處理已經(jīng)完成的中斷,并依據(jù)該中斷找到與之對應的IO請求鏈表801,以及將IO請求鏈表801中的存儲單元(811、812)釋放。換句話說,將由IO請求鏈表801中的存儲單元(811、812)的狀態(tài)設置為空閑,從而使得通過緩沖區(qū)控制塊406可以獲知存儲單元411、412的狀態(tài)為空閑。在一個例子中,在DMA描述符600指示讀操作,且主機101的CPU包括高速緩沖存儲器的情況下,還通知同DMA描述符600的DMA主機地址(621、631)相關聯(lián)的CPU高速緩沖存儲器執(zhí)行一致性處理,以反映出DMA主機地址(621、631)處的數(shù)據(jù)可能因讀 DMA讀操作而發(fā)生變化。在一個例子中,存儲設備102返回的中斷中包括指示IO請求鏈表801中的多個存儲單元(811、812)之一(或者緩沖存儲器地址622、632之一)的內容,依據(jù)該內容,通過IO請求鏈表801將存儲單元(811、812)釋放。在步驟909,如果DMA數(shù)據(jù)部分的剩余長度大于0,則表示DMA描述符600的生成尚未完成,還需要為IO請求生成ー個或多個DMA數(shù)據(jù),那么處理將返回到步驟906并重復執(zhí)行步驟906、908和909。圖9B是根據(jù)本發(fā)明另一實施例的主機創(chuàng)建并執(zhí)行第二寫入命令的流程圖。在該實施例中,將緩沖區(qū)控制塊406中的空閑存儲單元進一步組織為空閑存儲單元池,以有助于DMA描述符600的創(chuàng)建過程。通過將緩沖區(qū)控制塊406中狀態(tài)為空閑的存儲單元(411、
412......41η)組織成鏈表來形成空閑存儲單元池。當需要從緩沖區(qū)控制塊406中獲得空
閑存儲單元時,可以從空閑存儲単元池中取出存儲單元,從而省去了在緩沖區(qū)控制塊406中查找空閑存儲単元的開銷。在一個實施例中,步驟921,由主機的存儲設備驅動程序405接收IO請求。同圖9Α相類似,該IO請求指示將分散在主機存儲器的不同物理地址的多個數(shù)據(jù)塊寫入到存儲設備102中,為此將在主機與存儲設備之間執(zhí)行分散-收集DMA操作。在步驟922,根據(jù)IO請求的內容,計算出用于與相同該IO請求相對應的DMA描述符的長度(例如,DMA命令以及DMA數(shù)據(jù)的個數(shù))。注意到在圖9Α公開的實施例中,是在步驟904創(chuàng)建DMA命令610的過程中獲得DMA描述符長度,所屬領域技術人員將意識到各個步驟并非必然以本實施例中所公開的順序執(zhí)行。在步驟923,判斷空閑存儲単元池中是否為空。如果空閑存儲單元池非空,S卩緩沖區(qū)控制塊406中存在處于空閑狀態(tài)的存儲單元,則進行到步驟924,并從空閑存儲單元池中取出一個空閑存儲單元(例如存儲單元411)。如果空閑存儲單元池為空,意味著緩沖區(qū)控制塊406中沒有空閑的存儲單元。則在步驟925,等待空閑存儲單元池被更新,以出現(xiàn)空閑的存儲單元。當DMA描述符的執(zhí)行完成后,與之相關的存儲單元會被釋放,從而在空閑存儲單元池中出現(xiàn)空閑的存儲單元。后面對此會詳細介紹。在步驟926,確定當前要生成用于DMA描述符600的DMA命令字段還是DMA數(shù)據(jù)字段。一般而言,DMA描述符600包括ー個DMA命令和ー個或多個DMA數(shù)據(jù)。當要生成DMA命令時,處理轉向步驟927,并根據(jù)IO請求的內容,創(chuàng)建DMA描述符600的DMA命令610,填充DMA命令610中的各個字段(611、612、613、614)。在一個例子中,還在存儲單元411中存儲對應于該IO請求的指針,以便在該IO請求的執(zhí)行完成后,可識別該IO請求并通知應用軟件或其他上層軟件。當要生成DMA數(shù)據(jù)時,處理轉向步驟928,并根據(jù)IO請求的內容,創(chuàng)建DMA描述符600的DMA數(shù)據(jù)620,填充DMA數(shù)據(jù)620的各個字段(621、622)。接下來,在步驟929,將所生成的DMA命令或DMA數(shù)據(jù)發(fā)送給存儲設備102。并在步驟930,將在步驟924中獲得的存儲單元411設置在IO請求鏈表801中。作為ー個例子,第一個進入到IO請求鏈表801的存儲單元,將作為IO請求鏈表801的頭節(jié)點,但是,也將意識到當IO請求鏈表801被組織為環(huán)形鏈表時,其中并不存在“頭節(jié)點”。在步驟930,還將DMA描述符長度遞減。在步驟931,如果DMA描述符長度為0,意味著DMA描述符600的生成已經(jīng)完成,進而在步驟932存儲設備驅動程序405將等待存儲設備102返回的表示DMA描述符600的 處理已經(jīng)完成的中斷,并依據(jù)該中斷找到與之對應的IO請求鏈表801,以及將IO請求鏈表801中的存儲單元(811、812)釋放。換句話說,將由IO請求鏈表801中的存儲單元(811、812)的狀態(tài)設置為空閑,從而使得通過緩沖區(qū)控制塊406可以獲知存儲單元411、412的狀態(tài)為空閑,并將存儲單元411、412放入空閑存儲單元池中。在一個例子中,存儲設備102返回的中斷中包括指示IO請求鏈表801中的多個存儲単元(811、812)之一的內容,依據(jù)該內容,通過IO請求鏈表801將存儲單元(811、812)釋放。在步驟931,如果DMA描述符長度大于0,則表示DMA描述符600的生成尚未完成,還需要為IO請求生成ー個或多個DMA數(shù)據(jù),那么處理將返回到步驟923并重復執(zhí)行步驟923-931。上面結合圖9A、9B描述了 DMA描述符600的生成過程。DMA描述符600用于在分散-收集DMA中描述要執(zhí)行的多個DMA操作,該多個DMA操作的數(shù)據(jù)來源于存儲在連續(xù)或不聯(lián)系的存儲空間中。所屬領域技術人員將容易意識到,DMA描述符600的生成方式包括但不限于上面圖9A、9B中描述的具體方式。圖IOA是根據(jù)本發(fā)明的實施例的在存儲設備的緩沖存儲器中創(chuàng)建鏈表的流程圖。在如圖7A-7C所公開的存儲設備處理DMA描述符600的過程中,將DMA描述符600轉換為ー個或多個微指令。在進ー步的實施例中,為了有效處理ー個或多個微指令之間的關聯(lián)關系(例如,這些微指令均同DMA描述符600相關聯(lián)),存儲設備102響應于主機101所傳輸?shù)腄MA描述符600,還在緩沖存儲器106中建立鏈表,該鏈表將對應于同一 DMA描述符600的多個微指令關聯(lián)起來。如圖IOA所示,在步驟1002,主機101向存儲設備102發(fā)送DMA描述符600。DMA描述符600包括DMA命令610與DMA數(shù)據(jù)620、630。前面已經(jīng)結合圖9A與圖9B而描述了主機101向存儲設備102發(fā)送DMA描述符600的過程的例子。還應當意識到,在存儲設備的緩沖存儲器中創(chuàng)建鏈表,將有助于存儲設備對IO操作的執(zhí)行,特別是對多個IO操作的并發(fā)/亂序執(zhí)行,多個IO操作可通過訪問各自的鏈表而關聯(lián)在一起。這樣不具備關聯(lián)關系的IO操作可以在存儲設備中并發(fā)執(zhí)行。因而,還可以響應除DMA命令之外的其他類型的IO命令或其他命令,以在存儲設備中創(chuàng)建鏈表。
在步驟1004,判斷所接收到的是DMA命令610還是DMA數(shù)據(jù)620、630。如果接收到DMA命令610,在步驟1006,從其中的緩沖存儲器地址字段610中提取出用于該DMA命令610的緩沖存儲器地址,并基于該緩沖存儲器地址,為該DMA命令610在緩沖存儲器106中分配存儲空間。接下來,在步驟1008,保存為該DMA命令610所分配的緩沖存儲器地址,用來在為DMA數(shù)據(jù)620、630分配緩沖存儲器地址時使用。如果在步驟1004判斷出所接收到的是DMA數(shù)據(jù)620,則在步驟1010,從DMA數(shù)據(jù)620的緩沖存儲器地址字段622從提取出用于該DMA數(shù)據(jù)620的緩沖存儲器地址, 并基于該緩沖存儲器地址,為該DMA數(shù)據(jù)620在緩沖存儲器106中分配存儲空間。并在步驟1012中,在為該DMA數(shù)據(jù)620所分配的緩沖存儲器的存儲空間中,存儲在步驟1008中保存的DMA命令610的緩沖存儲器地址。這樣,在緩沖存儲器106中,為DMA命令610和DMA數(shù)據(jù)620所分配的存儲空間形成了鏈表,其中為DMA命令610所分配的存儲空間是鏈表的頭節(jié)點,為DMA數(shù)據(jù)620所分配的存儲空間連接到鏈表的頭節(jié)點。在DMA描述符600還包括DMA數(shù)據(jù)630的情況下,通過步驟1010和步驟1012,基于DMA數(shù)據(jù)630中的緩沖存儲器地址632為DMA數(shù)據(jù)630在緩沖存儲器106中分配存儲空間,并在為DMA數(shù)據(jù)630所分配的緩沖存儲器的存儲空間中,保存DMA命令610的緩沖存儲器地址。所屬領域技術人員將意識到,也可以在為DMA數(shù)據(jù)630所分配的緩沖存儲器106的存儲空間中,保存用于DMA數(shù)據(jù)620的緩沖存儲器地址,從而形成不同類型的鏈表。在其他例子中,將緩沖存儲器106中為DMA命令610、DMA數(shù)據(jù)620、630所分配的存儲空間創(chuàng)建為循環(huán)鏈表或雙向鏈表。上面結合圖7A、7B、7C已經(jīng)描述了存儲設備102基于DMA數(shù)據(jù)(620、630)生成DMA微指令,并保存在微指令FIFO 733中。DMA數(shù)據(jù)(620、630)生成DMA微指令的操作可以發(fā)生于步驟1012之后,并在DMA微指令中攜帶為DMA數(shù)據(jù)(620、630)所分配的緩沖存儲器地址。圖IOB是根據(jù)本發(fā)明的一實施例的在存儲設備的緩沖存儲器中創(chuàng)建鏈表的流程圖。同圖IOA所提供的實施例相比,圖IOB的實施例中,還將與DMA描述符的處理或執(zhí)行相關的信息存儲在所創(chuàng)建的鏈表中。圖IOC是根據(jù)本發(fā)明的ー實施例的存儲設備利用在緩沖存儲器中創(chuàng)建的鏈表執(zhí)行DMA描述符的流程圖。圖11A-11F展示出了與圖IOB與圖IOC相關聯(lián)的緩沖存儲器的多種狀態(tài)。在圖11A-11F中,1100指示緩沖存儲器106中的存儲空間。具體地,在步驟1020,主機101向存儲設備102發(fā)送DMA描述符600。在步驟1022,判斷所接收到的是DMA命令610還是DMA數(shù)據(jù)620、630。如果接收到DMA命令610,在步驟1024,從緩沖存儲器地址字段610中提取出緩沖存儲器地址,并基于該緩沖存儲器地址,為該DMA命令610在緩沖存儲器106中分配存儲空間。參看圖11A,為DMA命令610分配存儲空間1101。以及還從DMA命令610中提取出DMA描述符長度字段613,從DMA描述符長度613可以得到該DMA描述符600的DMA數(shù)據(jù)部分的長度(例如,DMA描述符長度減I)。接下來,在步驟1026,保存為該DMA命令610所分配的緩沖存儲器地址,用來在為DMA數(shù)據(jù)620、630分配緩沖地址時使用。并且,將DMA數(shù)據(jù)部分的長度記錄在為該DMA命令610所分配的緩沖存儲器中。參看圖11A,在存儲空間1101中保存了 DMA數(shù)據(jù)部分的長度(在這個例子中,DMA數(shù)據(jù)部分的長度為2)。
如果在步驟1022判斷出所接收到的是DMA數(shù)據(jù)620,則在步驟1028,從DMA數(shù)據(jù)620的緩沖存儲器地址字段622從提取出用于該DMA數(shù)據(jù)620的緩沖存儲器地址,并基于該緩沖存儲器地址,為該DMA數(shù)據(jù)620在緩沖存儲器106中分配存儲空間。參看圖11B,為DMA數(shù)據(jù)620分配存儲空間1112。并在步驟1030中,在為該DMA數(shù)據(jù)620所分配的緩沖存儲器的存儲空間1112中,存儲在步驟1026中保存的DMA命令610的緩沖存儲器地址。這樣,在緩沖存儲器106中,為DMA命令610和DMA數(shù)據(jù)620所分配的存儲空間(1101與1112)形成了鏈表,其中為DMA命令610所分配的存儲空間1101是鏈表的頭節(jié)點,為DMA數(shù)據(jù)620所分配的存儲空間1112連接到鏈表的頭節(jié)點。還在存儲空間1112中存儲同DMA數(shù)據(jù)620相對應的DMA主機地址。
在DMA描述符600還包括DMA數(shù)據(jù)630的情況下,通過步驟1028和步驟1030,基于DMA數(shù)據(jù)630中的緩沖存儲器地址632為DMA數(shù)據(jù)630在緩沖存儲器106中分配存儲空間1123 (參看圖11C),并在存儲空間1123中,保存DMA命令610的緩沖存儲器地址。以及還在存儲空間1123中存儲同DMA數(shù)據(jù)630相對應的DMA主機地址。因而,在緩沖存儲器106中形成了同DMA描述符600相對應的鏈表,其中存儲空間1101是鏈表的頭節(jié)點,存儲空間1112和1123是鏈表的節(jié)點,并指向該鏈表的頭節(jié)點。所屬領域技術人員將意識到,也可以在為DMA數(shù)據(jù)630所分配的緩沖存儲器106的存儲空間1123中,保存用于DMA數(shù)據(jù)620的緩沖存儲器地址,從而形成不同類型的鏈表。在其他例子中,將緩沖存儲器106中為DMA命令610、DMA數(shù)據(jù)620、630所分配的存儲空間創(chuàng)建為循環(huán)鏈表或雙向鏈表。圖IOC是根據(jù)本發(fā)明的ー實施例的存儲設備利用在緩沖存儲器中創(chuàng)建的鏈表執(zhí)行DMA描述符的流程圖。上面結合圖7A、7B、7C已經(jīng)描述了存儲設備102基于DMA數(shù)據(jù)(620、630)生成DMA微指令,并保存在微指令FIFO 733中。在存儲設備102對DMA微指令的執(zhí)行中,在一個例子中,利用在緩沖存儲器106中的鏈表。在DMA微指令中,包括緩沖存儲器地址,通過該緩沖存儲器地址,可以獲得為同該DMA微指令相對應的DMA數(shù)據(jù)所分配的緩沖存儲器106中的存儲空間,進而可以獲得與該DMA數(shù)據(jù)所對應的DMA主機地址以及與該DMA數(shù)據(jù)所對應的DMA描述符中的DMA數(shù)據(jù)部分長度或DMA數(shù)據(jù)的個數(shù)。在下面的描述中,將對應于DMA數(shù)據(jù)620的DMA微指令用第一 DMA微指令指示,將對應于DMA數(shù)據(jù)630的DMA微指令用第二 DMA微指令指示。在步驟1040,從微指令FIF0733中獲得將第一 DMA微指令。在步驟1042,第一 DMA微指令中包括為DMA數(shù)據(jù)620所分配的緩沖存儲器106的存儲空間1112的地址,并從存儲空間1112中獲得DMA主機地址。該DMA主機地址是由DMA數(shù)據(jù)620中的DMA主機地址字段621所提供的。基于DMA主機地址,在主機101和存儲設備102之間進行DMA傳輸,將主機101的該DMA主機地址處的預定長度(例如,4KB)的數(shù)據(jù),以DMA方式傳輸?shù)酱鎯υO備102的緩沖存儲器中。對于第二 DMA微指令,執(zhí)行類似的操作,將主機101的由DMA數(shù)據(jù)630的DMA主機地址字段632所提供的DMA主機地址處的數(shù)據(jù),以DMA方式傳輸?shù)酱鎯υO備102的緩沖存儲器的為DMA數(shù)據(jù)632所分配的存儲空間1123處。在圖IID中,示出了執(zhí)行完第一 DMA微指令與第二 DMA微指令后,存儲了以DMA方式傳輸?shù)臄?shù)據(jù)的存儲空間1112和存儲空間1123。在步驟1044,繼續(xù)對第一 DMA微指令加以執(zhí)行。通過第一 DMA微指令中的存儲空間1112的地址,從存儲空間中取出預定長度的數(shù)據(jù),該數(shù)據(jù)是在步驟1042中,通過DMA操作從主機101傳輸?shù)骄彌_存儲器106的存儲空間1112的。并通過閃存接ロ控制器(例如,圖7C中的Flash接ロ控制器737)將該數(shù)據(jù)基于第一 DMA微指令中所包括的用于閃存存儲器的地址,寫入到閃存芯片105。該用于閃存存儲器的地址是通過DMA命令610中的存儲設備邏輯地址字段612所得到的。對第二 DMA微指令以類似的方式加以執(zhí)行。通過第二 DMA微指令中包括的存儲空間1123的地址,從存儲空間中取出預定長度的數(shù)據(jù),并將該數(shù)據(jù)通過閃存接ロ控制器,基于第二 DMA微指令中所包括的用于閃存存儲器的地址,寫入到閃存芯片105。第二 DMA微指令中所包括的用于閃存存儲器的地址,是通過DMA命令610中的存儲設備邏輯地址字段612加上預定值(例如對應于DMA傳輸?shù)臄?shù)據(jù)的長度,在該例子中,是4KB)所得到的。在一個例子中,將DMA命令610中的存儲設備邏輯地址轉換為存儲設備的物理地址,并基于該物理地址將數(shù)據(jù)寫入到閃存芯片105中。從存儲設備的邏輯地址到物理地址的映射過程,是所屬領域技術人員所熟知的。在步驟1046,繼續(xù)對第一 DMA微指令加以執(zhí)行。通過第一 DMA微指令中的存儲空間1112的地址,獲得為DMA命令610所分配的存儲空間1101的地址,并在存儲空間1101 中獲得DMA數(shù)據(jù)部分長度,以及將存儲1101中存儲的DMA數(shù)據(jù)部分長度遞減(例如,減I或者減去單位長度)。參看圖11E,對于第一 DMA微指令,將存儲空間1101中的DMA數(shù)據(jù)部分長度遞減后,其值由2變?yōu)镮。并且,存儲空間1112中不再保存存儲空間1101的地址,用于表明對DMA數(shù)據(jù)620的執(zhí)行已經(jīng)完成。在步驟1048,由于DMA數(shù)據(jù)部分的長度不為0,意味著對DMA描述符600的操作尚未完成,因為其還包含另ー個DMA數(shù)據(jù)630,此時,不進行進ー步的處理。當?shù)诙?DMA微指令在步驟1046被執(zhí)行時,通過第二 DMA微指令中的存儲空間1123的地址,獲得為DMA命令610所分配的存儲空間1101的地址,并在存儲空間1101中獲得DMA數(shù)據(jù)部分長度,以及將存儲1101中存儲的DMA數(shù)據(jù)部分長度遞減(例如,減I或者減去單位長度)。參看圖11F,對于第二 DMA微指令,將存儲空間1101中的DMA數(shù)據(jù)部分長度遞減后,其值由I變?yōu)镺。并且,存儲空間1123中不再保存存儲空間1101的地址,用于表明對DMA數(shù)據(jù)630的執(zhí)行已經(jīng)完成。此時,當?shù)诙?DMA描述符在步驟1048被執(zhí)行時,由于DMA數(shù)據(jù)部分的長度為0,意味著對DMA描述符600的執(zhí)行已經(jīng)完成。接下來,在步驟1050,向主機101發(fā)送中斷,以指示對DMA描述600的執(zhí)行已經(jīng)完成。再次參看圖11F,存儲空間1112與1123均不再保存存儲空間1101的地址。存儲空間1101中的DMA數(shù)據(jù)部分長度的值為O。在此情況下,意味著對DMA描述符600的執(zhí)行已經(jīng)完成,對存儲空間1101、1112與1123均不會再加以使用,這些存儲空間可以被釋放以用于對其他DMA描述符的執(zhí)行。在一個例子中,由主機101控制對相應存儲空間的釋放和再利用,在上面已結合圖9A與圖9B對IO請求鏈表801中的存儲空間的釋放。由于緩沖區(qū)
控制塊406中的存儲單元(411、412......41η)與緩沖存儲器106中的存儲空間相對應,因
而對IO請求鏈表801中的存儲空間的釋放,意味著對緩沖存儲器中的存儲空間1101、1112與1123的釋放。上面結合圖10B、10C、11A_11F而描述了在緩沖存儲器106中存儲對應于第一與第ニ微指令的DMA主機地址的方案,從而使得DMA微指令中不必攜帶DMA主機地址而減少了對電路資源的占用,并通過緩沖存儲器106將對應于同一 DMA描述符600的第一、第二 DMA微指令關聯(lián)在一起的方案。所屬領域技術人員將意識到,還可以將對應于第一與第二微指令的存儲設備邏輯地址和/或DMA主機地址存儲在緩沖存儲器中,從而進一步減少DMA微指令的長度及其對電路資源的占用。圖12是根據(jù)本發(fā)明的又一實施例的存儲設備的硬件方框圖。與圖7C中公開的相似,主機101包括PCIE控制器721和主機存儲器722。存儲設備102中包括PCIE接ロ 731、DMA指令分析器732、微指令先進先出緩沖器(FIFO)733、DMA寫操作控制器734、DMA寫接ロ735、邏輯地址到物理地址轉換電路736以及緩沖存儲器106。存儲設備102中還包括DMA讀寫微指令判斷電路1210,DMA讀接ロ 1212,閃存控制器1221、1222、1223,閃存接ロ 1231、1232、1233,完成控制電路1242、多路選擇器1241以及多路共享器1243。閃存接ロ 1231、1232、1233耦合于閃存芯片105。PCIE接ロ 731接收主機101通過PCIE控制器721發(fā)送的DMA描述符600。主機101與存儲設備102之間的連接不限于PCIE方式。DMA指令分析器732將PCIE接ロ 731 接收到的DMA描述符600變換為DMA微指令。對于如圖6所示的DMA描述符600,則DMA指令分析器將其變換為對應于DMA數(shù)據(jù)620的第一 DMA微指令和對應于DMA數(shù)據(jù)630的第二DMA微指令。在一個例子中,第一與第二 DMA微指令中分別包括指示該微指令類型(讀/寫/擦除/其他)的字段、指示與其對應的緩沖存儲器106中的存儲單元的地址的字段、指示存儲設備的邏輯地址的字段。參看圖IOB與圖11C,DMA指令分析器732還針對DMA命令610,在緩沖存儲器106中分配存儲單元,并在其中存儲DMA數(shù)據(jù)部分的長度。DMA指令分析器還針對DMA數(shù)據(jù)620,在緩沖存儲器106中分配存儲單元,并在其中存儲為DMA命令610所分配的存儲單元的地址,以及存儲DMA數(shù)據(jù)620中的DMA主機地址。DMA指令分析器還針對DMA數(shù)據(jù)630,在緩沖存儲器106中分配存儲單元,并在其中存儲為DMA命令610所分配的存儲單元的地址,以及存儲DMA數(shù)據(jù)63 O中的DMA主機地址。DMA指令分析器732將第一 DMA微指令與第二 DMA微指令存儲在微指令FIFO 733中。微指令FIFO 733能夠緩存DMA微指令,并按照先進先出的方式向DMA讀寫微指令判斷電路1210提供DMA微指令。在DMA讀寫微指令判斷電路1210,判斷所獲得的DMA微指令的類型。對于與DMA寫操作對應的DMA微指令,例如,前面所提到的第一 DMA微指令與第二 DMA微指令,DMA寫操作控制器734基于這些DMA微指令來執(zhí)行DMA寫操作。DMA寫操作控制器734利用第一DMA微指令中的指示與其對應的緩沖存儲器106中的存儲單元的地址的字段,從緩沖存儲器106中獲得DMA主機地址,并通過DMA寫接ロ 735在主機101和存儲設備102之間發(fā)起DMA寫操作,將存儲在DMA主機地址中的數(shù)據(jù),傳輸?shù)脚c第一 DMA微指令相對應的緩沖存儲器106的存儲單元中,所傳輸?shù)臄?shù)據(jù)可以具有預定的長度(例如4K字節(jié))。對于第二 DMA微指令,DMA寫操作控制器734利用與其對應的緩沖存儲器106中的存儲單元的地址的字段,從緩沖存儲器106中獲得DMA主機地址,并在主機101和存儲設備102之間發(fā)起DMA寫操作,將存儲在DMA主機地址中的數(shù)據(jù),傳輸?shù)脚c第二 DMA微指令相對應的緩沖存儲器106的存儲單元中。
從第一 DMA微指令和第二 DMA微指令的指示存儲設備的邏輯地址的字段獲得用于各自的存儲設備的邏輯地址。在邏輯地址到物理地址轉換電路736,將每條DMA微指令的存儲設備的邏輯地址轉換為用于閃存芯片105的物理地址。對于每一條DMA微指令,F(xiàn)lash控制器1221、1222、1223基于邏輯地址到物理地址轉換電路736所提供的物理地址,通過閃存接ロ 1231、1232、1233將寫入到緩沖存儲器106的數(shù)據(jù),寫入到閃存芯片105中,其中,F(xiàn)lash控制器1221同閃存接ロ 1231相耦合,F(xiàn)lash控制器1222同閃存接ロ 1232相耦合,F(xiàn)lash控制器1223同閃存接ロ 1233相耦合。而閃存接ロ 1231、1232、1233分別耦合到各自的閃存芯片。因而對于從DMA微指令中的存儲設備的邏輯地址轉換得到的用于閃存芯片105的物理地址,該物理地址指示了特定的閃存芯片,并且該閃存芯片與閃存接ロ 1231、1232、1233的特定一個相耦合。因而,基于該物理地址,可以確定使用閃存接ロ 1231、1232、1233中的哪ー個將數(shù)據(jù)寫入閃存芯片,也可以確定使用Flash控制器12 21、1222、1223中的哪ー個。閃存接ロ 1231、1232、1233還通過多路選擇器1241與緩沖存儲器相耦合。基于該物理地址,多路選擇器1241將數(shù)據(jù)從緩沖存儲器106傳送給閃存接ロ 1231、1232、1233中的特定ー個。閃存接ロ 1231、1232、1233將數(shù)據(jù)寫入到閃存芯片105中之后,完成控制電路1242還基于在第一、第二微指令中的指示與其對應的緩沖存儲器106中的存儲單元的地址的字段,訪問緩沖存儲器106,并進而訪問緩沖存儲器中為DMA命令610所分配的存儲單元,從中獲得DMA數(shù)據(jù)部分的長度,并將DMA數(shù)據(jù)部分的長度遞減(例如,減I或減去單位長度)。這樣,當為DMA命令610所分配的存儲單元中的該DMA數(shù)據(jù)部分的長度變?yōu)镺吋,意味著對DMA描述符600的操作完成。繼而,可向主機發(fā)送中斷,以指示對DMA描述符600的操作完成。雖然圖12中以舉例的方式展示了包括三個Flash控制器1221、1222、1223以及三個閃存接ロ 1231、1232、1233的實施例,所屬領域技術人員將意識到可以使用多種不同數(shù)量的Flash控制器與閃存接ロ,以同閃存芯片的數(shù)量相適應。對于與DMA讀操作對應的DMA微指令,DMA讀寫微指令判斷電路1210將其直接傳送給邏輯地址到物理地址轉換電路736,并得到用于閃存芯片105的物理地址。Flash控制器1221、1222、1223基于該物理地址,通過閃存接ロ 1231、1232、1233將從閃存芯片105中讀出數(shù)據(jù)。并基于DMA微指令中的指示與其對應的緩沖存儲器106中的存儲單元的地址的字段,從緩沖存儲器106中獲得與該DMA微指令相對應的DMA主機地址,以及經(jīng)由DMA讀接ロ 1212在主機101與存儲設備102之間發(fā)起DMA傳輸,將讀出數(shù)據(jù)傳輸?shù)街鳈C101的主機RAM 722中由該DMA主機地址所指示的位置處。閃存接ロ 1231、1232、1233經(jīng)由多路共享器1243與DMA讀接ロ 1212相耦合,使得從閃存接ロ 1231、1232、1233獲得的數(shù)據(jù)均可以通過DMA讀接ロ 1212傳輸?shù)街鳈CRAM 722。當閃存接ロ 1231、1232、1233從閃存芯片105讀出數(shù)據(jù)后,完成控制電路1242也基于在DMA微指令中的指示與其對應的緩沖存儲器106中的存儲單元的地址的字段,訪問緩沖存儲器106,并進而獲得DMA數(shù)據(jù)部分的長度,并將DMA數(shù)據(jù)部分的長度遞減(例如,減I或減去單位長度)。這樣,當該DMA數(shù)據(jù)部分的長度變?yōu)镺吋,意味著對該DMA描述符的操作完成。繼而,可向主機發(fā)送中斷,以指示對該DMA描述符的操作完成。 在圖12所公開的存儲設備中,可以支持對多個DMA描述符600的并發(fā)操作。對于多個DMA描述符600的每ー個,通過在緩沖存儲器106中創(chuàng)建的鏈表,將與ー個DMA描述符600相對應的DMA數(shù)據(jù)關聯(lián)在一起,使得對多個DMA微指令的操作順序變得不重要。上面已經(jīng)詳細描述了存儲設備執(zhí)行數(shù)據(jù)寫入操作或與寫操作相關的DMA描述符的執(zhí)行。顯然,存儲設備執(zhí)行讀操作也可以從本發(fā)明公開中獲益。例如,可以在讀取命令中同時指定閃存芯片地址和緩沖存儲器地址,并利用緩沖存儲器作為讀出數(shù)據(jù)的緩沖。也可以在與讀操作相關的DMA描述符中描述緩沖存儲器地址,在將數(shù)據(jù)從閃存芯片中讀出后,可利用緩沖存儲器作為讀出數(shù)據(jù)的緩存。
已經(jīng)為了示出和描述的目的而展現(xiàn)了對本發(fā)明的描述,并且不g在以所公開的形式窮盡或限制本發(fā)明。對所屬領域技術人員,許多調整和變化是顯而易見的。
權利要求
1.一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)姆椒?,所述存儲設備包括緩沖存儲器和閃存芯片,所述方法包括 接收第一 IO請求; 為所述第一 IO請求分配第一存儲單元與第二存儲單元; 向所述存儲設備發(fā)送所述第一 DMA描述符,所述第一 DMA描述符包括用于信息處理設備的地址、用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址與第二用于緩沖存儲器的地址,其中,所述第一用于緩沖存儲器的地址同所述第一存儲單元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應; 在所述存儲設備和所述信息處理設備之間依據(jù)所述第一 DMA描述符進行DMA傳輸; 接收來自所述存儲設備的消息,所述消息指示所述存儲設備對第一 DMA描述符已執(zhí)行完成; 釋放所述第一存儲單元與所述第二存儲單元。
2.根據(jù)權利要求I所述的方法,其中分配第一存儲單元與第二存儲單元進ー步包括,在所述第二存儲單元中存儲指向所述第一存儲單元的地址。
3.一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)姆椒?,所述存儲設備包括緩沖存儲器和閃存芯片,所述方法包括 接收第一 IO請求; 為所述第一 IO請求分配第一存儲單元與第二存儲單元; 向所述存儲設備發(fā)送所述第一 DMA描述符,所述第一 DMA描述符包括第一 DMA描述符命令和第一 DMA描述符數(shù)據(jù),所述第一 DMA描述符命令包括用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址,所述第一 DMA描述符數(shù)據(jù)包括用于信息處理設備的地址以及第ニ用于緩沖存儲器的地址;其中,所述第一用于緩沖存儲器的地址同所述第一存儲單元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應; 在所述存儲設備和所述信息處理設備之間依據(jù)所述用于信息處理設備的地址和所述第二用于緩沖存儲器的地址進行DMA傳輸; 接收來自所述存儲設備的消息,所述消息指示所述存儲設備對第一 DMA描述符已執(zhí)行完成; 釋放所述第一存儲單元與所述第二存儲單元。
4.根據(jù)權利要求1-3之一所述的方法,其中,所述第一IO請求指示將所述用于信息處理設備的地址處的數(shù)據(jù)寫入到用于所述存儲設備的閃存芯片的地址處。
5.根據(jù)權利要求1-3之一所述的方法,還包括將空閑的存儲單元鏈接在一起形成空閑存儲單元池,在分配第一存儲單元與第二存儲單元時,從所述空閑存儲單元池中取出空閑的存儲單元,在釋放所述第一存儲單元與所述第二存儲單元吋,將所述所述第一存儲單元與所述第二存儲單元插入到所述空閑存儲單元池。
6.根據(jù)權利要求1-5之一所述的方法,還包括將空閑的存儲單元鏈接在一起形成空閑存儲單元池,在分配第一存儲單元與第二存儲單元時,若所述空閑存儲單元池為空,則等待一個或多個存儲単元被插入到所述空閑存儲單元池。
7.一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)姆椒?,所述存儲設備包括緩沖存儲器和閃存芯片,所述方法包括接收第一 IO請求; 為所述第一 IO請求分配第一存儲單元、第二存儲單元與第三存儲單元; 向所述存儲設備發(fā)送所述第一 DMA描述符,所述第一 DMA描述符包括第一 DMA描述符命令、第一 DMA描述符數(shù)據(jù)和第二 DMA描述符數(shù)據(jù),所述第一 DMA描述符命令包括用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址,所述第一 DMA描述符數(shù)據(jù)包括第一用于信息處理設備的地址以及第ニ用于緩沖存儲器的地址,所述第二 DMA描述符數(shù)據(jù)包括第二用于信息處理設備的地址以及第三用于緩沖存儲器的地址;其中,所述第一用于緩沖存儲器的地址同所述第一存儲單元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應,所述第三用于緩沖存儲器的地址同所述第三存儲單元相對應; 在所述存儲設備和所述信息處理設備之間依據(jù)所述第一用于信息處理設備的地址和所述第二用于緩沖存儲器的地址進行DMA傳輸,以及依據(jù)所述第二用于信息處理設備的地址和所述第三用于緩沖存儲器的地址進行DMA傳輸; 接收來自所述存儲設備的消息,所述消息指示所述存儲設備對第一 DMA描述符已執(zhí)行完成; 釋放所述第一存儲單元、所述第二存儲單元與所述第三存儲單元。
8.根據(jù)權利要求7所述的方法,所述第一IO請求指示將所述第一用于信息處理設備的地址處的數(shù)據(jù)以及所述第二用于信息處理設備的地址處的數(shù)據(jù)寫入到用于所述存儲設備的閃存芯片的地址處。
9.根據(jù)權利要求7、8中的方法,其中分配第一存儲單元、第二存儲單元與第三存儲單元后,將所述第一存儲單元、所述第二存儲單元和所述第三存儲單元鏈接為循環(huán)鏈表。
10.根據(jù)權利要求9之一的方法,所述來自所述存儲設備的消息中包括指示所述第一存儲單元、所述第二存儲單元和所述第三存儲單元之一的內容。
11.根據(jù)權利要求1、3、7之一的方法,其中分配所述第一存儲單元后,在所說第一存儲単元中存儲用于標識所述第一 IO請求的指針。
12.—種在信息處理設備和存儲設備之間進行數(shù)據(jù)傳輸?shù)姆椒?,所述存儲設備包括緩沖存儲器和閃存芯片,所述方法包括 接收第一寫請求,所述第一寫請求包括要寫入的數(shù)據(jù)和用于所述存儲設備的閃存芯片的地址; 為所述第一寫請求在所述信息處理設備中分配第一存儲單元; 向所述存儲設備發(fā)送第一寫命令,所述第一寫命令中包括數(shù)據(jù)、用于所述存儲設備的閃存芯片的地址以及用于所述緩沖存儲器的地址;其中,所述用于緩沖存儲器的地址同所述第一存儲單元相對應; 接收來自所述存儲設備的消息,所述消息指示所述存儲設備對所述寫命令已執(zhí)行完成; 釋放所述第一存儲單元。
13.跟據(jù)權利要求12所述的方法,其中還為所述第一寫請求分配第二存儲單元,并在所述第二存儲單元中存儲指向所述第一存儲單元的指針; 基于所述消息,釋放所述第一存儲單元與所述第二存儲單元。
14.一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)难b置,所述存儲設備包括緩沖存儲器和閃存芯片,所述裝置包括 用于接收第一 IO請求的模塊; 用于為所述第一 IO請求分配第一存儲單元與第二存儲單元的模塊; 用于向所述存儲設備發(fā)送所述第一 DMA描述符的模塊,所述第一 DMA描述符包括用于信息處理設備的地址、用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址與第二用于緩沖存儲器的地址,其中,所述第一用于緩沖存儲器的地址同所述第一存儲単元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應; 用于在所述存儲設備和所述信息處理設備之間依據(jù)所述第一 DMA描述符進行DMA傳輸?shù)哪K; 用于接收來自所述存儲設備的消息的模塊,所述消息指示所述存儲設備對第一 DMA描述符已執(zhí)行完成; 用于釋放所述第一存儲單元與所述第二存儲單元的模塊。
15.一種在信息處理設備和存儲設備之間進行DMA傳輸?shù)难b置,所述存儲設備包括緩沖存儲器和閃存芯片,所述裝置包括 用于接收第一 IO請求的模塊; 用于為所述第一 IO請求分配第一存儲單元與第二存儲單元的模塊; 用于向所述存儲設備發(fā)送所述第一 DMA描述符的模塊,所述第一 DMA描述符包括第一DMA描述符命令和第一 DMA描述符數(shù)據(jù),所述第一 DMA描述符命令包括用于所述存儲設備的閃存芯片的地址以及第一用于緩沖存儲器的地址,所述第一 DMA描述符數(shù)據(jù)包括用于信息處理設備的地址以及第ニ用于緩沖存儲器的地址;其中,所述第一用于緩沖存儲器的地址同所述第一存儲單元相對應,所述第二用于緩沖存儲器的地址同所述第二存儲單元相對應; 用于在所述存儲設備和所述信息處理設備之間依據(jù)所述用于信息處理設備的地址和所述第二用于緩沖存儲器的地址進行DMA傳輸?shù)哪K; 用于接收來自所述存儲設備的消息的模塊,所述消息指示所述存儲設備對第一 DMA描述符已執(zhí)行完成; 用于釋放所述第一存儲單元與所述第二存儲單元的模塊。
16.一種在信息處理設備和存儲設備之間進行數(shù)據(jù)傳輸?shù)难b置,所述存儲設備包括緩沖存儲器和閃存芯片,所述裝置包括 用于接收第一寫請求的裝置,所述第一寫請求包括要寫入的數(shù)據(jù)和用于所述存儲設備的閃存芯片的地址; 用于為所述第一寫請求在所述信息處理設備中分配第一存儲單元的裝置; 用于向所述存儲設備發(fā)送第一寫命令的裝置,所述第一寫命令中包括數(shù)據(jù)、用于所述存儲設備的閃存芯片的地址以及用于所述緩沖存儲器的地址;其中,所述用于緩沖存儲器的地址同所述第一存儲單元相對應; 用于接收來自所述存儲設備的消息的裝置,所述消息指示所述存儲設備對所述寫命令已執(zhí)行完成; 用于釋放所述第一存儲單元的裝置。
全文摘要
提供了DMA傳輸方法及系統(tǒng)。一種在信息處理設備和存儲設備之間進行數(shù)據(jù)傳輸?shù)姆椒?,所述存儲設備包括緩沖存儲器和閃存芯片,所述方法包括接收第一寫請求,所述第一寫請求包括要寫入的數(shù)據(jù)和用于所述存儲設備的閃存芯片的地址;為所述第一寫請求在所述信息處理設備中分配第一存儲單元;向所述存儲設備發(fā)送第一寫命令,所述第一寫命令中包括數(shù)據(jù)、用于所述存儲設備的閃存芯片的地址以及用于所述緩沖存儲器的地址;其中,所述用于緩沖存儲器的地址同所述第一存儲單元相對應;接收來自所述存儲設備的消息,所述消息指示所述存儲設備對所述寫命令已執(zhí)行完成;釋放所述第一存儲單元。
文檔編號G06F13/28GK102693198SQ201210147619
公開日2012年9月26日 申請日期2012年5月12日 優(yōu)先權日2012年5月12日
發(fā)明者路向峰 申請人:北京憶恒創(chuàng)源科技有限公司