專利名稱:同步的消息隊(duì)列的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實(shí)施例主要涉及通信。更特別地,這些實(shí)施例涉及在消息中繼服務(wù)器中有效地存儲(chǔ)消息的系統(tǒng)和方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)和無(wú)線通信越來(lái)越普及,網(wǎng)絡(luò)設(shè)計(jì)者和服務(wù)提供商面臨著許多性能關(guān)注。一個(gè)特別的關(guān)注涉及消息路由選擇。消息路由器從發(fā)送器主機(jī)接收消息并將這些消息轉(zhuǎn)發(fā)到一個(gè)或多個(gè)目的地主機(jī)。該接收和發(fā)送消息的進(jìn)程有時(shí)被稱為事務(wù)處理(transaction),是任何聯(lián)網(wǎng)結(jié)構(gòu)的重要組件。對(duì)于一個(gè)高性能消息路由器來(lái)說(shuō)被要求每秒完成好幾百次事務(wù)處理并不罕見(jiàn)。
傳統(tǒng)的消息接發(fā)系統(tǒng)使用存儲(chǔ)-轉(zhuǎn)發(fā)模型用于消息路由選擇。在這種方法下,當(dāng)路由器接收消息時(shí),該消息被存儲(chǔ)在非易失性存儲(chǔ)器(“NVM”)中,這樣當(dāng)沒(méi)有電源提供給該存儲(chǔ)器時(shí),內(nèi)容能夠被保存。NVM的實(shí)例包括,但并不僅限于,電子可擦除可編程只讀存儲(chǔ)器(“EEPROM”)和磁盤(pán)。將消息存儲(chǔ)到NVM使得在系統(tǒng)崩潰或者電源故障的事件中能夠恢復(fù)消息。從NVM讀取和向NVM寫(xiě)入的初級(jí)技術(shù)相對(duì)慢,會(huì)產(chǎn)生網(wǎng)絡(luò)中的性能瓶頸。
圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的一種通信系統(tǒng)的框圖。
圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的,圖1中網(wǎng)關(guān)服務(wù)器的框圖。
圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例的,一種恢復(fù)隊(duì)列索引文件的方法的流程圖。
圖4是根據(jù)本發(fā)明一個(gè)實(shí)施例的,一種處理流進(jìn)數(shù)據(jù)的方法的實(shí)例的流程圖。
圖5是根據(jù)本發(fā)明一個(gè)替換實(shí)施例的,一種處理流進(jìn)數(shù)據(jù)的方法的實(shí)例的流程圖。
圖6是根據(jù)本發(fā)明一個(gè)實(shí)施例的,確定寫(xiě)請(qǐng)求是否應(yīng)當(dāng)觸發(fā)一批寫(xiě)的進(jìn)程的進(jìn)程流程圖。
具體實(shí)施例方式本發(fā)明的實(shí)施例可以組合幾種技術(shù)來(lái)最小化由于寫(xiě)數(shù)據(jù)到非易失性存儲(chǔ)器而產(chǎn)生的性能瓶頸。這些技術(shù)可以包括相連地和/或基本相連地寫(xiě)數(shù)據(jù)到盤(pán)以便利用大多數(shù)現(xiàn)代硬盤(pán)系統(tǒng)的相連布局。這些技術(shù)還可以包括分批執(zhí)行寫(xiě)請(qǐng)求以便最小化對(duì)盤(pán)系統(tǒng)的寫(xiě)請(qǐng)求的總數(shù)量,還包括使用單獨(dú)的同步助手進(jìn)程以便讓同步的盤(pán)寫(xiě)入被異步地執(zhí)行。這些技術(shù)還可以包括最小化要被同步寫(xiě)入到盤(pán)的數(shù)據(jù);并最小化從隊(duì)列中刪除數(shù)據(jù)的成本。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,一個(gè)或多個(gè)足夠大尺寸的文件可以在非易失性存儲(chǔ)器(NVM)中被建立并且存儲(chǔ)器映射到易失性存儲(chǔ)器。要被列隊(duì)的消息和/或數(shù)據(jù)可以被復(fù)制到其中一個(gè)文件的存儲(chǔ)器映射區(qū)域中,其可以被稱為隊(duì)列數(shù)據(jù)文件。索引數(shù)據(jù)結(jié)構(gòu)可以在與隊(duì)列數(shù)據(jù)文件相關(guān)聯(lián)的易失性存儲(chǔ)器中被維護(hù),并且在索引數(shù)據(jù)結(jié)構(gòu)中的入口可以被用來(lái)記錄在隊(duì)列數(shù)據(jù)文件中已經(jīng)寫(xiě)消息/數(shù)據(jù)的位置。通常,消息/數(shù)據(jù)可以被寫(xiě)入到隊(duì)列數(shù)據(jù)文件中的順序區(qū)域中以便減小寫(xiě)的等待時(shí)間。消息/數(shù)據(jù)的處理可以涉及操作索引數(shù)據(jù)結(jié)構(gòu)并訪問(wèn)在存儲(chǔ)器映射的隊(duì)列數(shù)據(jù)文件區(qū)域中的消息/數(shù)據(jù),其本質(zhì)上使得隊(duì)列數(shù)據(jù)文件在消息/數(shù)據(jù)被最初寫(xiě)入隊(duì)列數(shù)據(jù)文件之后不被物理地接觸。如果由于某些原因,消息不能被立即處理,那么該消息可以被忽略并稍后處理或者移動(dòng)到二級(jí)隊(duì)列中。為了幫助最小化數(shù)據(jù)丟失并提高恢復(fù)效率,該索引數(shù)據(jù)結(jié)構(gòu)可以被周期性地寫(xiě)入到非易失性存儲(chǔ)器(NVM)中。
類似地,在本發(fā)明的當(dāng)前實(shí)施例中,為了防止數(shù)據(jù)丟失并為了確保順序的盤(pán)寫(xiě),隊(duì)列數(shù)據(jù)文件寫(xiě)可以被同步地寫(xiě)入到盤(pán)中。因?yàn)橥綄?xiě)數(shù)據(jù)到盤(pán)中是與異步輸入/輸出(“I/O”)環(huán)境不相兼容的,并且通常顯著降低了寫(xiě)性能,所以同步助手進(jìn)程可以被用來(lái)分批處理和分類隊(duì)列數(shù)據(jù)文件寫(xiě)請(qǐng)求。該同步助手進(jìn)程可以分批處理和分類所述隊(duì)列數(shù)據(jù)文件寫(xiě)請(qǐng)求,這樣在隊(duì)列數(shù)據(jù)文件中的存儲(chǔ)器映射區(qū)域以有效和可靠的方式與盤(pán)同步(也就是說(shuō),物理地被寫(xiě))。
圖1是根據(jù)本發(fā)明一個(gè)實(shí)施例的,一種通信系統(tǒng)的框圖。在圖1中,系統(tǒng)10可以具有耦接到網(wǎng)關(guān)服務(wù)器12a的終端14和耦接到網(wǎng)關(guān)服務(wù)器12b的終端18。根據(jù)本實(shí)施例,終端14可以是發(fā)送器主機(jī),諸如郵件客戶終端,終端18可以是目的地主機(jī),諸如郵件服務(wù)器。例如,終端14,18可以包括計(jì)算機(jī)、工作站、個(gè)人數(shù)字助理(PDA)、陸上線路和無(wú)線電話。發(fā)送器主機(jī)14可以與網(wǎng)關(guān)服務(wù)器12a(例如,郵件網(wǎng)關(guān))通信,目的地主機(jī)18可以和網(wǎng)關(guān)服務(wù)器12b(例如,郵件網(wǎng)關(guān))通信,而服務(wù)器12a,12b可以經(jīng)由網(wǎng)絡(luò)16互相通信。網(wǎng)絡(luò)16可以包括互聯(lián)網(wǎng),局域網(wǎng)(LAN),和/或廣域網(wǎng)(WAN)。應(yīng)當(dāng)認(rèn)識(shí)到,網(wǎng)關(guān)服務(wù)器12a和12b可以是服務(wù)器,路由器,交換機(jī)等等。還應(yīng)當(dāng)認(rèn)識(shí)到,系統(tǒng)10可以包括其他被省略的組件,設(shè)備和/或系統(tǒng)。
雖然在這里將參考至目的地主機(jī)的消息的路由選擇來(lái)描述某些實(shí)例,但是本發(fā)明的實(shí)施例并不是這樣限制的。實(shí)際上,這里描述的原理可以被容易地應(yīng)用于任何類型的流進(jìn)數(shù)據(jù)而不偏離本發(fā)明實(shí)施例的實(shí)質(zhì)和范圍。例如,圖像、聲音文件和其他類型的數(shù)據(jù)也可以獲益于在這里所述的原理。仍然,還有許多非常適合于本發(fā)明實(shí)施例的消息的方面。還應(yīng)當(dāng)注意,一條消息可以去往多個(gè)接收方(未示出)和/或目的地主機(jī),而每個(gè)目的地主機(jī)服務(wù)于被連接到特定接收器主機(jī)的接收方。
應(yīng)當(dāng)注意,數(shù)據(jù)分組的傳統(tǒng)的互聯(lián)網(wǎng)協(xié)議(“IP”)路由選擇被設(shè)計(jì)來(lái)容忍一定數(shù)量的數(shù)據(jù)丟失,而路由選擇消息(諸如電子郵件消息)需要更高級(jí)別的可靠性。結(jié)果,消息路由器或服務(wù)器通常更少地容忍數(shù)據(jù)丟失,并且已經(jīng)傳統(tǒng)地使用了上面討論的存儲(chǔ)-轉(zhuǎn)發(fā)模型。雖然某些實(shí)施例將參考一個(gè)或多個(gè)上述協(xié)議來(lái)描述,但是應(yīng)當(dāng)注意本發(fā)明的實(shí)施例并不是這樣限制的。實(shí)際上,任何當(dāng)前存儲(chǔ)技術(shù)可以被實(shí)現(xiàn)的協(xié)議可以被使用。
圖2是根據(jù)本發(fā)明一個(gè)實(shí)施例的,圖1的網(wǎng)關(guān)服務(wù)器的框圖。在圖2中,網(wǎng)關(guān)服務(wù)器12a可以包括多媒體消息網(wǎng)關(guān)(“MMG”)20,其可以耦接到終端14和網(wǎng)絡(luò)16。MMG 20還可以耦接到盤(pán)隊(duì)列22,更具體而言耦接到盤(pán)隊(duì)列22中的隊(duì)列數(shù)據(jù)文件24和索引文件26。MMG 20可以進(jìn)一步耦接到同步組件28,其進(jìn)而又可以耦接到隊(duì)列數(shù)據(jù)文件24。同步組件28可以實(shí)現(xiàn)為分批處理和分類隊(duì)列數(shù)據(jù)文件24寫(xiě)請(qǐng)求的進(jìn)程,以便在隊(duì)列數(shù)據(jù)文件24中的存儲(chǔ)器映射區(qū)域可以被有效地和可靠地同步(也就是說(shuō),物理地同步地被寫(xiě))到隊(duì)列數(shù)據(jù)文件24被存儲(chǔ)器映射的盤(pán)文件。
在圖2中,MMG20可以在所有流出和流進(jìn)消息(例如,電子郵件消息)被傳遞之前將這些消息存儲(chǔ)到盤(pán)隊(duì)列22中。例如,在本實(shí)施例中,寫(xiě)入盤(pán)隊(duì)列22(其可以包括隊(duì)列數(shù)據(jù)文件24和索引文件26)是順序的;在確認(rèn)之前每次寫(xiě)可以與盤(pán)隊(duì)列22同步;并且在啟動(dòng)時(shí)MMG 20可以恢復(fù)盤(pán)隊(duì)列22以便重新開(kāi)始隊(duì)列活動(dòng)。在隊(duì)列數(shù)據(jù)文件24中的每個(gè)消息可以被存儲(chǔ)器映射到存儲(chǔ)器并且被MMG20上所有活動(dòng)的進(jìn)程共享。在隊(duì)列數(shù)據(jù)文件24中的每個(gè)消息可以具有一個(gè)相關(guān)聯(lián)的索引文件26,當(dāng)系統(tǒng)崩潰時(shí)可以從該索引文件26中恢復(fù)隊(duì)列處理狀態(tài)。索引文件26在下文中可互換地被稱為隊(duì)列索引文件26。此外,有限數(shù)量的消息可以被列隊(duì),如果隊(duì)列數(shù)據(jù)文件24滿的話可以拒絕新消息。索引入口的數(shù)量可以由主要存儲(chǔ)器、盤(pán)大小和隊(duì)列文件的大小來(lái)限制。索引文件26還可以被存儲(chǔ)器映射到MMG20中并且可以被所有其他的MMG 20進(jìn)程共享。
根據(jù)本實(shí)施例,隊(duì)列數(shù)據(jù)文件24中的每個(gè)消息可以在索引文件26中具有一個(gè)入口。索引文件26可以在系統(tǒng)安裝的時(shí)候被創(chuàng)建成在專用盤(pán)分區(qū)上最大允許的大小。索引文件26可以由MMG 20進(jìn)行存儲(chǔ)器映射,并且與盤(pán)文件的同步可以周期地發(fā)生(例如,每10秒)。索引文件26到非易失性存儲(chǔ)器(NVM)的周期的同步可以被異步地執(zhí)行,并且通常MMG 20并不等待確認(rèn)該寫(xiě)已經(jīng)成功完成。周期的同步可以導(dǎo)致復(fù)制消息被傳遞,但是如果在完成同步之前系統(tǒng)崩潰的話,將不丟失任何消息。索引文件26可以由一個(gè)“隊(duì)列_索引”結(jié)構(gòu)構(gòu)成,其進(jìn)而又可以包括一個(gè)“索引_入口”結(jié)構(gòu)的數(shù)組。這還可以是一個(gè)互斥(mutex)變量,其可以起到共享互斥鎖的作用,并且可以被所有訪問(wèn)該索引的運(yùn)行的MMG20進(jìn)程所共享。該互斥變量可以起到防止隊(duì)列索引被不止一個(gè)MMG 20進(jìn)程同時(shí)改變。根據(jù)本實(shí)施例,在任何報(bào)頭數(shù)據(jù)的讀或?qū)懼?,以及在鎖定索引入口之前可以獲得互斥。索引文件26可以幫助提供對(duì)隊(duì)列數(shù)據(jù)有效的訪問(wèn)。特別地,索引文件26可以保持指針指向隊(duì)列消息的位置。當(dāng)刪除一個(gè)消息時(shí),索引文件26可以被更新以便刪除那個(gè)入口,從而取消對(duì)隊(duì)列數(shù)據(jù)文件24的物理修改的需求。結(jié)果,“成本”,也就是,從盤(pán)隊(duì)列22刪除數(shù)據(jù)所需的時(shí)間和處理資源可以被最小化。此外,索引文件26可以保持有限的狀態(tài)信息量,例如,重試可以被MMG頻繁使用的數(shù)據(jù)。從索引文件26中可以比從隊(duì)列數(shù)據(jù)文件24中更快和更有效地檢索并檢查消息的重試數(shù)據(jù)。
根據(jù)本發(fā)明的實(shí)施例,索引文件26的數(shù)據(jù)結(jié)構(gòu)可以定義如下struct queue_index{int head;//使用中的LL的報(bào)頭的索引int tail;//使用中的LL的報(bào)尾的索引//對(duì)應(yīng)于寫(xiě)入的最后入口int free;//自由列表的報(bào)頭int num_entries;time_t last_sync;struct index_entry[];}struct index_entry{int offset;//隊(duì)列文件的偏移int len; //在隊(duì)列文件中的數(shù)據(jù)的長(zhǎng)度int lock; //已經(jīng)鎖定該入口的進(jìn)程的pid//或者如果未鎖定就是0byte type; //索引入口的類型,例如SMS,SMTPint status;int checksum;int retry_count;time_t last_retry;//在unix時(shí)間中,最后重試的日期int prev; //在鏈接表中前一個(gè)項(xiàng)目的索引int next;//在鏈接表中下一個(gè)項(xiàng)目的索引}應(yīng)當(dāng)注意,上述索引文件26的數(shù)據(jù)結(jié)構(gòu)只是一個(gè)可能的表示,決不應(yīng)當(dāng)理解為限制現(xiàn)在可預(yù)期的可能的替換實(shí)施例。例如,可以預(yù)期這樣的替換實(shí)施例,其中,可以包括更少的字段、額外的字段以及上述兩者的組合,還可以包括其它的字段。
為了確保從索引_入口寫(xiě)數(shù)據(jù)到盤(pán)是一個(gè)院子操作,單個(gè)的索引_入口不應(yīng)該跨越不止一個(gè)盤(pán)塊。對(duì)該問(wèn)題的一個(gè)可能解決方案就是添加填充(padding)到索引_入口結(jié)構(gòu)以便確保其大小是操作系統(tǒng)的盤(pán)塊大小的因子。例如,如果盤(pán)塊大小是4096字節(jié),那么索引_入口數(shù)據(jù)結(jié)構(gòu)可以擴(kuò)展到4096字節(jié)的因子的大小,例如32字節(jié)。如果,例如,在索引文件26中的每個(gè)入口占32字節(jié),那么32兆字節(jié)的索引文件將被要求來(lái)支持一百萬(wàn)個(gè)索引入口。
在系統(tǒng)崩潰之后,索引文件2 6和隊(duì)列數(shù)據(jù)文件24可以被MMG20讀取來(lái)恢復(fù)在系統(tǒng)崩潰之前存在的隊(duì)列處理狀態(tài)。
每一個(gè)MMG 20隊(duì)列可以使用一個(gè)或多個(gè)專用的數(shù)據(jù)文件和專用索引文件。每個(gè)數(shù)據(jù)文件可以在單個(gè)的盤(pán)分區(qū)上被創(chuàng)建,通常,在該分區(qū)中沒(méi)有其他盤(pán)文件。同隊(duì)列索引文件26一樣,隊(duì)列數(shù)據(jù)文件24可以在系統(tǒng)安裝時(shí)被創(chuàng)建成它們各自的最大允許的大小。這幫助確保了隊(duì)列數(shù)據(jù)文件24由相連的盤(pán)塊組成并使得有可能相連的盤(pán)寫(xiě)入隊(duì)列數(shù)據(jù)文件24。多個(gè)隊(duì)列文件可以放在單獨(dú)的物理盤(pán)中以便提高并行性。隊(duì)列數(shù)據(jù)文件和隊(duì)列索引文件可以被放在單獨(dú)的物理盤(pán)中以便提高并行性。在MMG 20的初始化期間,隊(duì)列數(shù)據(jù)文件24可以通過(guò)MMG 20被存儲(chǔ)器映射以便存儲(chǔ)消息。在每個(gè)消息被添加到隊(duì)列數(shù)據(jù)文件24之后,盤(pán)和存儲(chǔ)器文件可以被同步以便防止數(shù)據(jù)丟失。
單個(gè)的隊(duì)列數(shù)據(jù)文件大小可以被限制為,例如2GB或更多,但是4GB是最大的文件大小,其中偏移(offset)可以使用32比特?zé)o符號(hào)整數(shù)表示。超過(guò)4GB的隊(duì)列數(shù)據(jù)文件的大小是可能的,但要求該隊(duì)列入口位置(隊(duì)列數(shù)據(jù)文件偏移)使用長(zhǎng)整數(shù)(例如64比特)來(lái)表示。如果平均的流進(jìn)消息大小是4k個(gè)八位字節(jié),那么2GB的隊(duì)列數(shù)據(jù)文件24可以存儲(chǔ)最大大約500k(k=1024)消息。除了實(shí)際的消息內(nèi)容,報(bào)頭信息也可以被寫(xiě)入隊(duì)列數(shù)據(jù)文件24。這樣的報(bào)頭信息可以包含消息號(hào)碼,創(chuàng)建日期和被寫(xiě)的消息的大小。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,每個(gè)消息可以以一定的順序和封裝信息一起被寫(xiě)入隊(duì)列數(shù)據(jù)文件24。因?yàn)殛?duì)列恢復(fù)進(jìn)程可能不總是能夠依靠正完成的索引文件26,通常,隊(duì)列數(shù)據(jù)文件24應(yīng)當(dāng)包括足夠的信息來(lái)為該消息重建索引入口。因此,隊(duì)列數(shù)據(jù)文件24入口格式可以包括,例如
根據(jù)本發(fā)明的一個(gè)實(shí)施例,可以包括隊(duì)列索引文件恢復(fù)過(guò)程,因?yàn)殛?duì)列索引文件26通常不同步地寫(xiě)入到盤(pán)中。為了促進(jìn)恢復(fù)過(guò)程,隊(duì)列索引文件26(如上所述的數(shù)據(jù)結(jié)構(gòu)中所示)可以包括字段“time_t_last_sync”,其可以指定索引文件被寫(xiě)入盤(pán)的最后的時(shí)間。通常,time_t_last_sync數(shù)據(jù)可以僅僅在文件被同步到盤(pán)之前立即被修改。在隊(duì)列數(shù)據(jù)文件24中的每個(gè)隊(duì)列入口可以在一個(gè)偏移開(kāi)始,其通常是在預(yù)定的邊界,例如256字節(jié)的邊界。隊(duì)列數(shù)據(jù)文件入口可以是預(yù)先考慮的,也就是說(shuō)預(yù)先固定的,使用固定的4字節(jié)特征標(biāo)作為入口的前4個(gè)字節(jié),例如“\252\88\132\133”。為了確保其反映隊(duì)列數(shù)據(jù)文件24的正確的索引信息,隊(duì)列索引文件26可以使用證實(shí)過(guò)程被證實(shí)。例如,根據(jù)本發(fā)明的一個(gè)實(shí)施例,一個(gè)可能的證實(shí)過(guò)程可以如以下偽碼過(guò)程中所述的那樣實(shí)現(xiàn)scan queue index file″inuse″linked list;if loop discovered,break loop;if any entry is locked,unlock;if any entry is marked as free,move to″free″list;scan queue index file″free″list;if loop discovered,break loop;if the entry is marked as″inuse″and the entry points to valid data,movethe entry to″inuse″list;for any entries not on the″inuse″list or the″free″list;if locked,unlock the entry;if not marked free,and the entry points to valid data,move the entry to the″inuse″list;if not marked free,but the entry points to invalid data,move the entry tothe″free″list;if free,move the entry to the″free″list. 圖3是根據(jù)本發(fā)明一個(gè)實(shí)施例的,在系統(tǒng)崩潰后將信息恢復(fù)到隊(duì)列索引文件的方法的流程圖。在圖3中,對(duì)于隊(duì)列索引文件26可能的入口,在隊(duì)列數(shù)據(jù)文件24中的記錄可以按例如預(yù)定的邊界間隔(諸如,以256字節(jié)的間隔)被掃描(310)。入口是否需要被恢復(fù)到隊(duì)列索引文件26中可以被確定(320)。確定(320)該入口需要被恢復(fù)可以包括確定該入口是否有效。如果以下兩個(gè)條件都是真,該入口就可以被確定為有效1)前4個(gè)字節(jié)匹配固定的4個(gè)字節(jié)報(bào)頭;和2)入口校驗(yàn)和是正確的。確定(320)入口是否需要被恢復(fù)還可以包括確定一個(gè)有效的入口是否從隊(duì)列索引文件26中丟失。如果以下任一個(gè)條件為真,有效的入口就可以被確定為丟失1)入口的日期字段包含在隊(duì)列索引文件26的last_sync時(shí)間字段所包含的日期之后的日期,或者2)入口沒(méi)有在隊(duì)列索引文件26中。因此,入口可以被添加(330)到隊(duì)列索引文件26,如果入口被確定(320)為既有效又丟失的。在隊(duì)列數(shù)據(jù)文件24中是否具有更多記錄可以被確定(340)。如果更多記錄被確定(340)在隊(duì)列數(shù)據(jù)文件24中,該方法可以使掃描在隊(duì)列數(shù)據(jù)文件24中向前跳到下一個(gè)記錄(350)。要被跳過(guò)(350)的距離或者等于預(yù)定的邊界間隔,或是等于可選地約等于最相近邊界間隔的入口的長(zhǎng)度字段的距離。通常,不管用于記錄的入口是否被確定(320)存在,要被跳過(guò)(350)的距離可以是預(yù)定的邊界間隔。然而,如果記錄被確定(320)存在,那么要被跳過(guò)(350)的距離可以由可選地約等于最相近邊界間隔的入口的長(zhǎng)度字段所確定,其可以在跳過(guò)(350)預(yù)定邊界間隔上提供一些性能提高。該方法可以循環(huán)回以便繼續(xù)掃描(310)隊(duì)列數(shù)據(jù)文件24,如上所述。否則,該方法就可以終止,如果沒(méi)有更多的記錄被確定(340)在隊(duì)列數(shù)據(jù)文件24中。
消息數(shù)據(jù)可以具有根據(jù)消息類型的特定格式。例如,根據(jù)本發(fā)明的一個(gè)實(shí)施例,SMTP消息數(shù)據(jù)可以具有以下格式
類似地,根據(jù)本發(fā)明的一個(gè)實(shí)施例,SMS消息可以具有以下格式
此外,傳遞指令可以被添加到該消息格式,諸如例如,郵件服務(wù)器主機(jī)名稱,或者SMSC位置,以防止用戶被執(zhí)行兩次授權(quán)(例如,輕量級(jí)目錄訪問(wèn)協(xié)議(“LDAP”)查詢)。MMG 20列隊(duì)任務(wù)。返回到圖2,根據(jù)本發(fā)明的一個(gè)實(shí)施例,盤(pán)隊(duì)列22可以包括隊(duì)列數(shù)據(jù)文件24(雖然其他實(shí)施例可能使用不止一個(gè)隊(duì)列數(shù)據(jù)文件來(lái)實(shí)現(xiàn))和索引文件26。而在本實(shí)施例中,隊(duì)列數(shù)據(jù)文件24和索引文件26可以被存儲(chǔ)在物理盤(pán)上,隊(duì)列數(shù)據(jù)文件24的各個(gè)部分也可以被存儲(chǔ)器映射到主要的存儲(chǔ)器中以便提高處理效率。
將消息添加到隊(duì)列中。該任務(wù)可以添加消息到隊(duì)列數(shù)據(jù)文件24。當(dāng)接收到確認(rèn)該消息已經(jīng)被寫(xiě)入盤(pán)中時(shí),可以認(rèn)為該添加是成功的。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)隊(duì)列索引文件26中的一個(gè)入口已經(jīng)被成功分配并且當(dāng)在隊(duì)列數(shù)據(jù)文件24中有足夠的空間容納該消息時(shí),消息可以被添加。否則,該消息將被拒絕。如果該消息被添加,那么消息的內(nèi)容可以被復(fù)制到隊(duì)列數(shù)據(jù)文件24的保留空間,并且在對(duì)隊(duì)列數(shù)據(jù)文件24完成復(fù)制操作之后可以執(zhí)行盤(pán)同步。
存儲(chǔ)可用性檢測(cè)。通常,當(dāng)執(zhí)行隊(duì)列存儲(chǔ)可用性檢測(cè)時(shí),要考慮兩種情況。此外,重要的是要知道隊(duì)列數(shù)據(jù)文件24正在被讀(R)和寫(xiě)(W)所位于的當(dāng)前偏移、要保留(S)的大小和隊(duì)列數(shù)據(jù)文件24的最大大小(Q)。
在本實(shí)施例中,R可以對(duì)應(yīng)于第一隊(duì)列入口的偏移位置,W可以對(duì)應(yīng)于最后一個(gè)隊(duì)列入口的偏移加上該入口的長(zhǎng)度。因此,根據(jù)本發(fā)明的一個(gè)實(shí)施例,隊(duì)列索引的數(shù)據(jù)結(jié)構(gòu)可以定義為struct queue_index q_index;[...]R=q_index.index_entry[q_index.head].offset;W=q_index.index_entry[q_index.tail].offset+q_index.index_entry[q_index_tail].len;
應(yīng)當(dāng)理解,所有的算法可以是隊(duì)列數(shù)據(jù)文件24大小的模,雖然這里為了可讀性而省略了詳細(xì)的細(xì)節(jié)。
在第一種情況下,根據(jù)本實(shí)施例,當(dāng)前讀偏移R可以小于當(dāng)前寫(xiě)偏移W。用于存儲(chǔ)的可用的空間可以表示為s=Q-W,并且如果S小于s,那么分配就成功。否則,W可以被重置或者環(huán)繞到隊(duì)列數(shù)據(jù)文件24的開(kāi)始,并且空間可用性檢查可以在以下所述的情況下再一次執(zhí)行。
在第二種情況下,根據(jù)本實(shí)施例,當(dāng)前的寫(xiě)偏移W可以小于當(dāng)前的讀偏移R,并且用于存儲(chǔ)的可用的空間可以表示為s=R-W。如果s小于S,那么在偏移R的隊(duì)列入口可以被跳過(guò)。
雖然,之前已經(jīng)描述了如何檢查在隊(duì)列數(shù)據(jù)文件24中的空閑的存儲(chǔ)空間,但是如果讀和寫(xiě)位置太靠近,那么就沒(méi)有空間放新的消息數(shù)據(jù)。當(dāng)隊(duì)列數(shù)據(jù)文件24滿的時(shí)候就會(huì)發(fā)生這種情況,在該情況下,就沒(méi)有選擇,只能拒絕流進(jìn)的消息。幸運(yùn)的是,這種可能性非常小。但是更可能的是,讀和寫(xiě)位置之間的空間可以很小,因?yàn)樵谧x位置(q_index.head)的消息非常舊。在這種情況下,舊的消息可以通過(guò)將其從列表的頭移動(dòng)到尾而不被跳過(guò)。這可以例如通過(guò)以下代碼段來(lái)實(shí)現(xiàn)MMG_mutex_acquire(index_lock)int tmp=q_index.head;q_index.head=q_index.indexL_entry[q_index.head].next;q_index.index_entry[q_index.head].prev=-1;//NONEq_index..index_entry[q_index.tail].next=tmp;q_index.index_entry[tmp].prev=q_index.tail;q_index.index_entry[tmp].next=-1; //NONEq_index.tail=tmp;MMG_mutex_release(index_lock);該操作具有移動(dòng)寫(xiě)指針(W)和讀指針(R)的效果。
索引入口分配。根據(jù)本發(fā)明的一個(gè)實(shí)施例,索引入口可以存儲(chǔ)在數(shù)組中。當(dāng)該索引最初被實(shí)例化時(shí),可以建立空閑索引入口的鏈接表。例如,q_index.free可以指向該鏈接表的頭。在該空閑列表中的每個(gè)入口可以使用它的index_entry.next值來(lái)指向列表中下一個(gè)入口。該列表可以以a-1結(jié)束。當(dāng)需要新的索引時(shí),該進(jìn)程可以首先獲取index_lock,然后其可以將第一項(xiàng)目從棧q_index.free中出棧,如以下代碼段所示
int new_entry=q_index.free;if(new_entry==-1)return ERROR_NO_MORE_INDEX_ENTRIES;q_index.free=q_index.index_entries[q_index.free].next;
隊(duì)列處理。根據(jù)本發(fā)明的一個(gè)實(shí)施例,隊(duì)列處理進(jìn)程或線程,通常,按順序地將消息從根索引中的消息隊(duì)列中取出。每個(gè)消息可以被鎖定用于處理,然后如果其不能被成功處理就解鎖定。如果消息的重試限制被超過(guò),那么通過(guò)將該消息的相應(yīng)索引入口從索引文件的in_use列表移動(dòng)到空閑列表從而可以從隊(duì)列中刪除該消息。在該消息被成功地或者不成功地處理之后,該索引入口可以類似地從in_use列表移動(dòng)到空閑列表。
根據(jù)本發(fā)明的實(shí)施例,存儲(chǔ)器內(nèi)索引可以被用來(lái)分組所有指向相同的主機(jī)或域的消息。這使許多消息被一次發(fā)送到單個(gè)的主機(jī)。
隊(duì)列文件同步。根據(jù)本發(fā)明的一個(gè)實(shí)施例,隊(duì)列文件同步可以使用同步命令(例如,msync())實(shí)現(xiàn),以確保數(shù)據(jù)被成功地保存到盤(pán)中。然而,因?yàn)橥秸{(diào)用msync()會(huì)阻塞所有其他線程的操作并阻塞對(duì)盤(pán)隊(duì)列的所有訪問(wèn),因此,助手進(jìn)程(例如,如圖2所示,同步組件28)可以用來(lái)處理同步。MMG 20可以使用先進(jìn)、先出(“FIFO”)隊(duì)列來(lái)與同步組件28通信。
圖4是根據(jù)本發(fā)明一個(gè)實(shí)施例的處理流進(jìn)數(shù)據(jù)的方法的實(shí)例的流程圖。在圖4中,顯示了能夠產(chǎn)生好的并行的用于同步組件28的兩階段、分批的方法。該方法可以使用4個(gè)FIFO隊(duì)列requestfifo 401-MMG 201發(fā)送請(qǐng)求到同步組件28receiptifio 401-同步組件28確認(rèn)收到請(qǐng)求confirmfifo 403-同步組件28確認(rèn)完成所有接收的請(qǐng)求confconffifo 404-MMG 20確認(rèn)每個(gè)接收的同步組件28的確認(rèn)。
在圖4中,同步組件28可以偵聽(tīng)用于msync數(shù)據(jù)命令的requestfifo 401。該命令可以是4字節(jié)整數(shù)的偏移,之后是4字節(jié)整數(shù)的長(zhǎng)度。該命令也可以是4字節(jié)整數(shù)的偏移,之后是8字節(jié)長(zhǎng)整數(shù)的長(zhǎng)度。該偏移可以表示隊(duì)列數(shù)據(jù)文件24中在存儲(chǔ)器映射文件中的位置。
在圖4中,MMG線程,例如MMG線程1,可以獲取(410)互斥并經(jīng)由requestfifo 401發(fā)送(412)同步(“sync”)請(qǐng)求到同步組件28。MMG線程1可以等待(414)指示sync請(qǐng)求被接收的收據(jù),同步組件28可以列隊(duì)(416)該接收的sync請(qǐng)求并經(jīng)由receiptfifo 402發(fā)送(418)該sync請(qǐng)求已經(jīng)被接收的確認(rèn)到MMG線程1。在接收到該請(qǐng)求被接收的確認(rèn)之后,MMG線程1可以釋放(420)互斥并等待(421)來(lái)自confirmfifo403的該請(qǐng)求被處理的確認(rèn)。在一個(gè)時(shí)間不止一個(gè)MMG 20可以等待confirmfifo 403。
在圖4中,第二個(gè)MMG線程,MMG線程2,可以在互斥被MMG線程1釋放(420)之后獲取(422)該互斥。MMG線程2可以經(jīng)由requestfifo401發(fā)送(424)另一個(gè)sync請(qǐng)求到同步組件28并等待(426)指示該sync請(qǐng)求被接收的收據(jù),同步組件28可以列隊(duì)(428)該接收的sync請(qǐng)求并發(fā)送(430)該sync請(qǐng)求被接收的確認(rèn)回到MMG線程2。MMG線程2可以釋放(432)該互斥并等待(433)msync的確認(rèn)。
在圖4中,當(dāng)請(qǐng)求被接收時(shí),同步組件28可以分批請(qǐng)求。例如,同步組件28可以繼續(xù)分批sync請(qǐng)求,直到其已經(jīng)接收了一組相連的或基本相連的sync請(qǐng)求,或者一些預(yù)定的事件或超時(shí)發(fā)生。此時(shí),同步組件28可以停止接受新的在requestfifo401上的sync請(qǐng)求并執(zhí)行(434)所有接收的sync請(qǐng)求。如果映射文件的恰當(dāng)部分已經(jīng)被存儲(chǔ)器映射,那么簡(jiǎn)單的msync可以被調(diào)用(434)。如果不是,那么恰當(dāng)部分可以被存儲(chǔ)器映射,然后msync可以被調(diào)用(434)。同步組件28可以發(fā)送(436)出N個(gè)sync確認(rèn)到受影響的線程(例如,MMG線程1和MMG線程2)并等待(438)發(fā)送N個(gè)sync確認(rèn)的一個(gè)或多個(gè)確認(rèn)。N是在等待確認(rèn)的MMG線程的數(shù)量。雖然未示出,但是如果接收的sync請(qǐng)求和寫(xiě)請(qǐng)求的當(dāng)前批沒(méi)有基本相連的資格,那么根據(jù)一些配置參數(shù),該被接收的sync請(qǐng)求可以被延遲,直到下一批的開(kāi)始,該被中繼的sync請(qǐng)求可以在下一批中被處理。
會(huì)存在競(jìng)爭(zhēng)情況,其中在附加的MMG線程開(kāi)始聽(tīng)confirmfifo403之前,不是每個(gè)MMG線程已經(jīng)從confirmfifo 403中接收到信號(hào)。因此,confconffifo 404可以被使用,這樣每個(gè)MMG線程被要求來(lái)確認(rèn)每個(gè)確認(rèn)的接收。當(dāng)每個(gè)確認(rèn)已經(jīng)被確認(rèn)時(shí),同步組件28可以再一次開(kāi)始接收和確認(rèn)其他sync請(qǐng)求的收到。例如,MMG線程1可以發(fā)送(440)對(duì)發(fā)送(436)的msync確認(rèn)的確認(rèn)回到同步組件28,MMG線程2可以發(fā)送(442)對(duì)發(fā)送的(436)msync確認(rèn)的確認(rèn)回到同步組件28。同步組件28可以返回(444)以便繼續(xù)從活動(dòng)線程中接收和列隊(duì)(416)msync請(qǐng)求。
超時(shí)可以在同步組件28中利用來(lái)處理在MMG 20能夠經(jīng)由confconffifo 404確認(rèn)接收確認(rèn)之前就停止運(yùn)行的情況。類似地,MMG 20可以具有超時(shí),這樣其可以檢測(cè)同步組件28何時(shí)停止運(yùn)行以及何時(shí)重新啟動(dòng)。
在低吞吐量時(shí),利用單獨(dú)的同步組件可以比簡(jiǎn)單的同步請(qǐng)求/響應(yīng)系統(tǒng)更慢,但是該方法具有更高的最大吞吐量。這可以產(chǎn)生更少的系統(tǒng)調(diào)用msync,因?yàn)槊總€(gè)調(diào)用將要求msync來(lái)同步更多的數(shù)據(jù)。同步組件28越長(zhǎng)時(shí)間地等待sync請(qǐng)求以便形成相連的塊,那么能夠獲得的吞吐量就越高,但是這意味著低吞吐量系統(tǒng)效率更低并經(jīng)歷更高的等待時(shí)間。因此,許多配置選項(xiàng)可以被指定給同步組件28來(lái)微調(diào)同步組件28的性能。例如,以下配置選項(xiàng)可以在同步組件中設(shè)置以字節(jié)指定的最大批大小;由寫(xiě)請(qǐng)求數(shù)量指定的最大批大小;最大批收集時(shí)間;沒(méi)有新寫(xiě)請(qǐng)求的最大允許時(shí)間;其中新寫(xiě)請(qǐng)求將不再認(rèn)為是基本相連的最大偏移(以頁(yè)或字節(jié))。
存儲(chǔ)器映射操作。多個(gè)區(qū)域可以被存儲(chǔ)器映射到隊(duì)列數(shù)據(jù)文件24用于向和從隊(duì)列數(shù)據(jù)文件24寫(xiě)和讀消息。當(dāng)映射感興趣的區(qū)域時(shí)可以使用以八位字節(jié)的預(yù)定大小,并且在選擇大小的時(shí)候應(yīng)當(dāng)小心,這樣該系統(tǒng)不用頻繁地執(zhí)行重映射。通常,要被映射的區(qū)域的大小應(yīng)當(dāng)是盤(pán)頁(yè)大小的倍數(shù)。主要的是應(yīng)當(dāng)注意,每個(gè)線程或進(jìn)程可以具有其自己的隊(duì)列數(shù)據(jù)文件24的映射。
例如,根據(jù)本發(fā)明的一個(gè)實(shí)施例,本方法可以是具有一個(gè)用于讀的映射區(qū)域和另一個(gè)用于寫(xiě)的映射區(qū)域。這意味著當(dāng)寫(xiě)到“寫(xiě)”區(qū)域時(shí)可以重新映射“讀”區(qū)域。另一個(gè)重要的事情就是在對(duì)每個(gè)映射區(qū)域進(jìn)行任何操作之前檢查該區(qū)域的邊界。當(dāng)執(zhí)行盤(pán)同步任務(wù)時(shí),同步組件28可以使用其自己的存儲(chǔ)器映射。
根據(jù)本發(fā)明的另一個(gè)實(shí)施例,一種方法可以用來(lái)維持存儲(chǔ)器映射區(qū)域的可配置大小的池,其可以被鎖定以便被任何單獨(dú)的線程或進(jìn)程排它地使用,可選地由線程和進(jìn)程重映射,讀或?qū)?,然后?dāng)線程或進(jìn)程結(jié)束時(shí)解鎖定。在該實(shí)施例中,當(dāng)多個(gè)線程請(qǐng)求一個(gè)映射區(qū)域時(shí),線程的等待-列隊(duì)被保持,然后在池中就具有映射的區(qū)域。
圖5是根據(jù)本發(fā)明一個(gè)替換實(shí)施例的處理流進(jìn)數(shù)據(jù)的方法的實(shí)例的流程圖。在圖5中,可以從運(yùn)行進(jìn)程中接收(505)寫(xiě)請(qǐng)求,該方法可以確定(510)是否添加寫(xiě)請(qǐng)求到一批基本相連的盤(pán)寫(xiě)。如果確定(510)添加寫(xiě)請(qǐng)求到該批基本相連的盤(pán)寫(xiě),那么該寫(xiě)請(qǐng)求可以被添加(515)到該批基本相連的盤(pán)寫(xiě)。該方法可以確定(520)是否將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器,如果確定了將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器,那么就可以確定(525)該批基本相連的盤(pán)寫(xiě)是否是存儲(chǔ)器映射的。
在圖5中,如果確定(525)該批基本相連的盤(pán)寫(xiě)是存儲(chǔ)器映射的,那么該批基本相連的盤(pán)寫(xiě)可以被寫(xiě)(530)到非易失性存儲(chǔ)器。確認(rèn)該批基本相連的盤(pán)寫(xiě)的寫(xiě)入可以被發(fā)送(535)到寫(xiě)請(qǐng)求最初從中接收的一個(gè)或多個(gè)進(jìn)程。該方法可以等待從發(fā)送(535)寫(xiě)確認(rèn)的一個(gè)或多個(gè)進(jìn)程中的每一個(gè)接收(540)對(duì)所發(fā)送(535)確認(rèn)的確認(rèn)。如果對(duì)所發(fā)送(535)確認(rèn)的確認(rèn)被從一個(gè)或多個(gè)進(jìn)程中的每一個(gè)接收(540),那么該批基本相連的盤(pán)寫(xiě)可以被清除(545),并且能夠確定(550)是否有任何跳過(guò)的寫(xiě)請(qǐng)求和/或是否在臨時(shí)存儲(chǔ)器中保存了寫(xiě)請(qǐng)求。如果確定(550)在臨時(shí)存儲(chǔ)器中保存了寫(xiě)請(qǐng)求,那么該方法可以循環(huán)到確定(510)是否添加其中一個(gè)保存的寫(xiě)請(qǐng)求到一批基本相連的盤(pán)寫(xiě)并如上所述繼續(xù)。如果確定(550)在臨時(shí)存儲(chǔ)器中沒(méi)有保存任何寫(xiě)請(qǐng)求,那么該方法可以循環(huán)到接收(505)新的寫(xiě)請(qǐng)求并如上所述繼續(xù)。
在圖5中,如果確定(510)不添加接收的寫(xiě)請(qǐng)求到該批基本相連的盤(pán)寫(xiě),那么可以確定(555)是否跳過(guò)或保存該寫(xiě)請(qǐng)求到臨時(shí)存儲(chǔ)器中。如果確定(555)跳過(guò)該寫(xiě)請(qǐng)求,那么該方法可以循環(huán)到接收(505)新的寫(xiě)請(qǐng)求并如上所述繼續(xù)。如果確定(555)保存該寫(xiě)請(qǐng)求到臨時(shí)存儲(chǔ)器,那么該方法可以保存(560)該寫(xiě)請(qǐng)求到臨時(shí)存儲(chǔ)器中并循環(huán)到接收(505)新的寫(xiě)請(qǐng)求并如上所述繼續(xù)。
在圖5中,如果確定(525)該批基本相連的盤(pán)寫(xiě)并不是使用非易失性存儲(chǔ)器進(jìn)行存儲(chǔ)器映射,那么該方法可以使用非易失性存儲(chǔ)器對(duì)該寫(xiě)請(qǐng)求進(jìn)行存儲(chǔ)器映射(565)。該方法可以寫(xiě)(530)該批基本相連的盤(pán)寫(xiě)到非易失性存儲(chǔ)器并如上所述繼續(xù)。
圖6是顯示根據(jù)本發(fā)明的一個(gè)實(shí)施例的確定無(wú)狀態(tài)路由是否適當(dāng)?shù)倪M(jìn)程的進(jìn)程流程圖。在圖6中,寫(xiě)請(qǐng)求可以從運(yùn)行的進(jìn)程中接收(610),該方法可以添加(620)該寫(xiě)請(qǐng)求到一批基本相連的盤(pán)寫(xiě)操作中。該方法可以確定(630)是否將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器中,并且如果確定(630)將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器,那么該批基本相連的盤(pán)寫(xiě)可以被寫(xiě)(640)到非易失性存儲(chǔ)器。對(duì)該批基本相連的盤(pán)寫(xiě)的寫(xiě)的確認(rèn)可以被發(fā)送(650)到寫(xiě)請(qǐng)求最初從之接收的進(jìn)程。該方法可以從每個(gè)發(fā)送(650)寫(xiě)確認(rèn)的進(jìn)程接收(660)對(duì)所發(fā)送(650)確認(rèn)的確認(rèn)。該批基本相連的盤(pán)寫(xiě)可以被清除(670),該方法可以循環(huán)到接收(610)新的寫(xiě)請(qǐng)求并如上所述繼續(xù)。
在圖6中,如果確定(630)不寫(xiě)該批基本相連的盤(pán)寫(xiě),那么該方法可以循環(huán)到接收(610)新的寫(xiě)請(qǐng)求并如上所述繼續(xù)。
本領(lǐng)域的技術(shù)人員將理解從以上描述中,本發(fā)明的實(shí)施例的廣泛的技術(shù)可以以各種形式實(shí)現(xiàn)。因此,雖然本發(fā)明的實(shí)施例已經(jīng)通過(guò)其特定實(shí)例來(lái)描述,但是本發(fā)明實(shí)施例的真實(shí)范圍不應(yīng)當(dāng)這樣限制,因?yàn)樵谘芯扛綀D、實(shí)施例和以下權(quán)利要求而進(jìn)行的其他修改對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)是顯而易見(jiàn)的。
權(quán)利要求
1. 一種方法,包括接收寫(xiě)請(qǐng)求;添加該寫(xiě)請(qǐng)求到一批基本相連的盤(pán)寫(xiě);確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器;將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器;發(fā)送對(duì)寫(xiě)該批基本相連的盤(pán)寫(xiě)的確認(rèn);接收對(duì)該寫(xiě)確認(rèn)的確認(rèn);和清除該批基本相連的盤(pán)寫(xiě)。
2. 權(quán)利要求1的方法,其中接收寫(xiě)請(qǐng)求包括接收對(duì)與在該批基本相連的盤(pán)寫(xiě)中的存儲(chǔ)器位置相連的存儲(chǔ)器位置的寫(xiě)請(qǐng)求。
3. 權(quán)利要求1的方法,其中接收寫(xiě)請(qǐng)求包括從處理線程中接收寫(xiě)請(qǐng)求。
4. 權(quán)利要求3的方法,其中從處理線程中接收寫(xiě)請(qǐng)求包括從位于多媒體消息網(wǎng)關(guān)的處理線程中接收寫(xiě)請(qǐng)求。
5.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定自從前一次將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器后已經(jīng)流逝預(yù)定時(shí)間段。
6.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該批基本相連的盤(pán)寫(xiě)的預(yù)定大小已經(jīng)被超過(guò)。
7.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該批基本相連的盤(pán)寫(xiě)包含多個(gè)相連的寫(xiě)請(qǐng)求。
8.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該批基本相連的盤(pán)寫(xiě)的大小超過(guò)預(yù)定的最大字節(jié)數(shù)量。
9.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定在該批基本相連的盤(pán)寫(xiě)中存儲(chǔ)的寫(xiě)請(qǐng)求數(shù)量超過(guò)預(yù)定的最大數(shù)量。
10.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定收集該批基本相連的盤(pán)寫(xiě)的預(yù)定最大時(shí)間已經(jīng)被超過(guò)。
11.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定自從最后一次寫(xiě)請(qǐng)求收到之后的預(yù)定最大時(shí)間已經(jīng)被超過(guò)。
12.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該寫(xiě)請(qǐng)求超過(guò)該批基本相連的盤(pán)寫(xiě)中最大允許的頁(yè)偏移。
13.權(quán)利要求1的方法,其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該寫(xiě)請(qǐng)求超過(guò)該批基本相連的盤(pán)寫(xiě)中最大允許的字節(jié)偏移。
14.權(quán)利要求1的方法,其中將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器包括將該批基本相連的盤(pán)寫(xiě)異步地寫(xiě)到該非易失性存儲(chǔ)器。
15.權(quán)利要求1的方法,其中將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器包括確定該批基本相連的盤(pán)寫(xiě)是否是存儲(chǔ)器映射的;如果該批基本相連的盤(pán)寫(xiě)不是存儲(chǔ)器映射的,就存儲(chǔ)器映射該批基本相連的盤(pán)寫(xiě);和將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器。
16.權(quán)利要求1的方法,還包括確定在臨時(shí)存儲(chǔ)器中是否有未解決的未處理的寫(xiě)請(qǐng)求;和如果在臨時(shí)存儲(chǔ)器中有未解決的未處理的寫(xiě)請(qǐng)求,那么將該未解決的未處理的寫(xiě)請(qǐng)求添加到新的一批基本相連的盤(pán)寫(xiě)中。
17.一種在其上存儲(chǔ)了多條可運(yùn)行指令來(lái)執(zhí)行一種方法的機(jī)器可讀介質(zhì),該方法包括接收寫(xiě)請(qǐng)求;添加寫(xiě)請(qǐng)求到一批基本相連的盤(pán)寫(xiě);確定有可能將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器;將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器;發(fā)送對(duì)寫(xiě)該批基本相連的盤(pán)寫(xiě)的確認(rèn);接收對(duì)寫(xiě)確認(rèn)的確認(rèn);和清除該批基本相連的盤(pán)寫(xiě)。
18.權(quán)利要求17的機(jī)器可讀介質(zhì),其中接收寫(xiě)請(qǐng)求包括接收對(duì)與在該批基本相連的盤(pán)寫(xiě)中的存儲(chǔ)器位置相連的存儲(chǔ)器位置的寫(xiě)請(qǐng)求。
19.權(quán)利要求17的機(jī)器可讀介質(zhì),其中接收寫(xiě)請(qǐng)求包括從處理線程中接收寫(xiě)請(qǐng)求。
20.權(quán)利要求19的機(jī)器可讀介質(zhì),其中從處理線程中接收寫(xiě)請(qǐng)求包括從位于多媒體消息網(wǎng)關(guān)的處理線程中接收寫(xiě)請(qǐng)求。
21.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定自從前一次該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器后已經(jīng)流逝預(yù)定時(shí)間段。
22.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該批基本相連的盤(pán)寫(xiě)的預(yù)定大小已經(jīng)被超過(guò)。
23.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定有可能將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該批基本相連的盤(pán)寫(xiě)包含多個(gè)相連的寫(xiě)請(qǐng)求。
24.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該批基本相連的盤(pán)寫(xiě)的大小超過(guò)預(yù)定的最大字節(jié)數(shù)量。
25.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定在該批基本相連的盤(pán)寫(xiě)中存儲(chǔ)的寫(xiě)請(qǐng)求的數(shù)量超過(guò)預(yù)定的最大數(shù)量。
26.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定收集該批基本相連的盤(pán)寫(xiě)的預(yù)定最大時(shí)間已經(jīng)被超過(guò)。
27.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定自從最后一次寫(xiě)請(qǐng)求收到之后的預(yù)定最大時(shí)間已經(jīng)被超過(guò)。
28.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該寫(xiě)請(qǐng)求超過(guò)該批基本相連的盤(pán)寫(xiě)中最大允許的頁(yè)偏移。
29.權(quán)利要求17的機(jī)器可讀介質(zhì),其中確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器包括確定該寫(xiě)請(qǐng)求超過(guò)該批基本相連的盤(pán)寫(xiě)中最大允許的字節(jié)偏移。
30.權(quán)利要求17的機(jī)器可讀介質(zhì),其中將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器包括將該批基本相連的盤(pán)寫(xiě)異步地寫(xiě)到該非易失性存儲(chǔ)器。
31.權(quán)利要求17的機(jī)器可讀介質(zhì),其中將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器包括將該批基本相連的盤(pán)寫(xiě)異步地寫(xiě)到該非易失性存儲(chǔ)器。
32.權(quán)利要求17的機(jī)器可讀介質(zhì),其中將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器包括確定該批基本相連的盤(pán)寫(xiě)是否是存儲(chǔ)器映射的;如果該批基本相連的盤(pán)寫(xiě)不是存儲(chǔ)器映射的,就存儲(chǔ)器映射該批基本相連的盤(pán)寫(xiě);和將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器。
33.權(quán)利要求17的機(jī)器可讀介質(zhì),還包括確定在臨時(shí)存儲(chǔ)器中是否有未解決的未處理的寫(xiě)請(qǐng)求;和如果在臨時(shí)存儲(chǔ)器中有未解決的未處理的寫(xiě)請(qǐng)求,那么將該未解決的未處理的寫(xiě)請(qǐng)求添加到新的一批基本相連的盤(pán)寫(xiě)中。
34.一種方法,包括由第一線程或進(jìn)程獲得對(duì)共享互斥鎖的控制;從第一線程或進(jìn)程發(fā)送第一寫(xiě)請(qǐng)求到同步進(jìn)程;通過(guò)同步線程或進(jìn)程列隊(duì)第一寫(xiě)請(qǐng)求;發(fā)送對(duì)接收到第一寫(xiě)請(qǐng)求的確認(rèn)到第一線程或進(jìn)程;一旦接收到對(duì)接收到第一寫(xiě)請(qǐng)求的確認(rèn),就由第一線程或進(jìn)程釋放對(duì)共享互斥鎖的控制;由第二線程或進(jìn)程獲得對(duì)共享互斥鎖的控制;從第二線程或進(jìn)程發(fā)送第二寫(xiě)請(qǐng)求到同步進(jìn)程;如果第一和第二寫(xiě)請(qǐng)求是到基本相連的存儲(chǔ)器位置,就由同步進(jìn)程對(duì)第二寫(xiě)請(qǐng)求和第一寫(xiě)請(qǐng)求列隊(duì);發(fā)送對(duì)接收到第二寫(xiě)請(qǐng)求的確認(rèn)到第二線程或進(jìn)程;一旦接收到對(duì)接收到第二寫(xiě)請(qǐng)求的確認(rèn),就由第二線程或進(jìn)程釋放對(duì)共享互斥鎖的控制;將列隊(duì)的第一和第二寫(xiě)請(qǐng)求寫(xiě)到非易失性存儲(chǔ)器;發(fā)送對(duì)寫(xiě)到非易失性存儲(chǔ)器的確認(rèn)到第一進(jìn)程和第二進(jìn)程中的每一個(gè);從第一進(jìn)程和第二進(jìn)程中的每一個(gè)發(fā)送對(duì)接收到寫(xiě)確認(rèn)的確認(rèn);和如果從第一進(jìn)程和第二進(jìn)程中的每一個(gè)接收到了對(duì)接收到寫(xiě)確認(rèn)的確認(rèn),就重新開(kāi)始該方法。
35.權(quán)利要求34的方法,其中將列隊(duì)的第一和第二寫(xiě)請(qǐng)求寫(xiě)到非易失性存儲(chǔ)器包括確定是否已經(jīng)發(fā)生預(yù)定條件;和如果已經(jīng)發(fā)生預(yù)定條件,就將列隊(duì)的第一和第二寫(xiě)請(qǐng)求寫(xiě)到非易失性存儲(chǔ)器。
36.權(quán)利要求34的方法,其中該預(yù)定條件包括預(yù)定時(shí)間段被超過(guò)。
37.權(quán)利要求34的方法,其中該預(yù)定條件包括該列隊(duì)的寫(xiě)請(qǐng)求基本上互相相連。
38.權(quán)利要求34的方法,其中該預(yù)定條件包括列隊(duì)的寫(xiě)請(qǐng)求的大小超過(guò)了預(yù)定最大字節(jié)數(shù)量。
39.權(quán)利要求34的方法,其中該預(yù)定條件包括列隊(duì)的寫(xiě)請(qǐng)求的數(shù)量超過(guò)了預(yù)定最大數(shù)量。
40.權(quán)利要求34的方法,其中該預(yù)定條件包括收集列隊(duì)的寫(xiě)請(qǐng)求的預(yù)定最大時(shí)間已經(jīng)被超過(guò)。
41.權(quán)利要求34的方法,其中該預(yù)定條件包括自從最后一次接收到寫(xiě)請(qǐng)求之后的預(yù)定最大時(shí)間已經(jīng)被超過(guò)。
42.權(quán)利要求34的方法,其中該預(yù)定條件包括新的寫(xiě)請(qǐng)求超過(guò)了從列隊(duì)寫(xiě)請(qǐng)求的最大允許的頁(yè)偏移。
43.權(quán)利要求34的方法,其中該預(yù)定條件包括新的寫(xiě)請(qǐng)求超過(guò)了從列隊(duì)寫(xiě)請(qǐng)求的最大允許的字節(jié)偏移。
44.一種在其上存儲(chǔ)了多條可運(yùn)行指令來(lái)執(zhí)行一種方法的機(jī)器可讀介質(zhì),該方法包括由第一線程或進(jìn)程獲得對(duì)共享互斥鎖的控制;從第一線程或進(jìn)程發(fā)送第一寫(xiě)請(qǐng)求到同步進(jìn)程;通過(guò)同步線程或進(jìn)程列隊(duì)第一寫(xiě)請(qǐng)求;發(fā)送對(duì)接收到第一寫(xiě)請(qǐng)求的確認(rèn)到第一線程或進(jìn)程;一接收到對(duì)接收到第一寫(xiě)請(qǐng)求的確認(rèn)就由第一線程或進(jìn)程釋放對(duì)共享互斥鎖的控制;由第二線程或進(jìn)程獲得對(duì)共享互斥鎖的控制;從第二線程或進(jìn)程發(fā)送第二寫(xiě)請(qǐng)求到同步進(jìn)程;如果第一和第二寫(xiě)請(qǐng)求是到基本相連的存儲(chǔ)器位置,就由同步進(jìn)程對(duì)第二寫(xiě)請(qǐng)求和第一寫(xiě)請(qǐng)求列隊(duì);發(fā)送對(duì)接收到第二寫(xiě)請(qǐng)求的確認(rèn)到第二線程或進(jìn)程;一接收到對(duì)接收到第二寫(xiě)請(qǐng)求的確認(rèn)就由第二線程或進(jìn)程釋放對(duì)共享互斥鎖的控制;將列隊(duì)的第一和第二寫(xiě)請(qǐng)求寫(xiě)到非易失性存儲(chǔ)器;發(fā)送對(duì)寫(xiě)到非易失性存儲(chǔ)器的確認(rèn)到第一進(jìn)程和第二進(jìn)程的每一個(gè);從第一進(jìn)程和第二進(jìn)程的每一個(gè)發(fā)送對(duì)接收到寫(xiě)確認(rèn)的確認(rèn);和如果從第一進(jìn)程和第二進(jìn)程的每一個(gè)接收到了對(duì)接收到寫(xiě)確認(rèn)的確認(rèn),就重新開(kāi)始該方法。
45.權(quán)利要求44的機(jī)器可讀介質(zhì),其中列隊(duì)第一寫(xiě)請(qǐng)求包括在一批文件中存儲(chǔ)第一寫(xiě)請(qǐng)求。
46.權(quán)利要求45的機(jī)器可讀介質(zhì),其中列隊(duì)第二寫(xiě)請(qǐng)求包括在該批文件中存儲(chǔ)第二寫(xiě)請(qǐng)求。
47.權(quán)利要求44的機(jī)器可讀介質(zhì),其中在發(fā)生預(yù)定條件時(shí)寫(xiě)列隊(duì)的第一和第二寫(xiě)請(qǐng)求。
48.權(quán)利要求47的機(jī)器可讀介質(zhì),其中該預(yù)定條件包括預(yù)定時(shí)間段被超過(guò)。
49.權(quán)利要求47的機(jī)器可讀介質(zhì),其中該預(yù)定條件包括該列隊(duì)的寫(xiě)請(qǐng)求互相相連。
50.權(quán)利要求44的機(jī)器可讀介質(zhì),其中該預(yù)定條件包括列隊(duì)的寫(xiě)請(qǐng)求的大小超過(guò)了預(yù)定最大字節(jié)數(shù)量。
51.權(quán)利要求44的機(jī)器可讀介質(zhì),其中該預(yù)定條件包括列隊(duì)的寫(xiě)請(qǐng)求的數(shù)量超過(guò)了預(yù)定最大數(shù)量。
52.權(quán)利要求44的機(jī)器可讀介質(zhì),其中該預(yù)定條件包括收集列隊(duì)的寫(xiě)請(qǐng)求的預(yù)定最大時(shí)間已經(jīng)被超過(guò)。
53.權(quán)利要求44的機(jī)器可讀介質(zhì),其中該預(yù)定條件包括自從最后一次接收到寫(xiě)請(qǐng)求之后的預(yù)定最大時(shí)間已經(jīng)被超過(guò)。
54.權(quán)利要求44的機(jī)器可讀介質(zhì),其中該預(yù)定條件包括新的寫(xiě)請(qǐng)求超過(guò)了從列隊(duì)寫(xiě)請(qǐng)求的最大允許的頁(yè)偏移。
55.權(quán)利要求44的機(jī)器可讀介質(zhì),其中該預(yù)定條件包括新的寫(xiě)請(qǐng)求超過(guò)了從列隊(duì)寫(xiě)請(qǐng)求的最大允許的字節(jié)偏移。
56.一種裝置,包括網(wǎng)關(guān);耦接到網(wǎng)關(guān)的隊(duì)列數(shù)據(jù)文件;耦接到網(wǎng)關(guān)的索引文件;和耦接到網(wǎng)關(guān)和隊(duì)列數(shù)據(jù)文件的同步組件,該同步組件用于接收寫(xiě)請(qǐng)求;添加寫(xiě)請(qǐng)求到一批基本相連的盤(pán)寫(xiě);確定是否將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器;將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器;發(fā)送對(duì)寫(xiě)該批基本相連的盤(pán)寫(xiě)的確認(rèn);接收對(duì)寫(xiě)確認(rèn)的確認(rèn);和清除該批基本相連的盤(pán)寫(xiě)。
57.權(quán)利要求56的裝置,其中網(wǎng)關(guān)包括多媒體消息網(wǎng)關(guān)。
58.權(quán)利要求56的裝置,其中隊(duì)列數(shù)據(jù)文件和索引文件被包括在盤(pán)隊(duì)列中。
59.權(quán)利要求56的裝置,其中隊(duì)列數(shù)據(jù)文件包括包含足以重建相關(guān)的用于索引文件中記錄的入口的信息的記錄。
60.權(quán)利要求56的裝置,其中索引文件包括與隊(duì)列數(shù)據(jù)文件中記錄相關(guān)聯(lián)的入口,該入口包括具有索引分量和入口信息分量的數(shù)據(jù)結(jié)構(gòu)。
61.權(quán)利要求56的裝置,其中網(wǎng)關(guān)用于讀取隊(duì)列數(shù)據(jù)文件和索引文件以便恢復(fù)在裝置的系統(tǒng)崩潰之前存在的隊(duì)列處理狀態(tài)。
62.權(quán)利要求56的裝置,其中隊(duì)列數(shù)據(jù)文件位于單個(gè)的盤(pán)分區(qū)上。
63.權(quán)利要求56的裝置,其中隊(duì)列數(shù)據(jù)文件包括多個(gè)相連的盤(pán)塊。
64.一種方法,包括接收寫(xiě)請(qǐng)求;確定是否添加該寫(xiě)請(qǐng)求到一批未解決的請(qǐng)求中;如果確定要添加該寫(xiě)請(qǐng)求到該批中,就添加該寫(xiě)請(qǐng)求到該批;確定是否將該批寫(xiě)到非易失性存儲(chǔ)器中;如果確定要將該批寫(xiě)到非易失性存儲(chǔ)器,那么就確定該批是否是存儲(chǔ)器映射到非易失性存儲(chǔ)器;如果確定該批是存儲(chǔ)器映射到非易失性存儲(chǔ)器,那就將該批寫(xiě)到非易失性存儲(chǔ)器;發(fā)送對(duì)寫(xiě)該批的確認(rèn)到與該批中每個(gè)寫(xiě)請(qǐng)求相關(guān)聯(lián)的進(jìn)程;確定是否所有的對(duì)寫(xiě)該批的確認(rèn)已經(jīng)被接收;如果所有的對(duì)寫(xiě)該批的確認(rèn)已經(jīng)被接收,就清除該批;確定是否有任何寫(xiě)請(qǐng)求被跳過(guò)或者被存儲(chǔ)在臨時(shí)存儲(chǔ)器中;以及如果確定沒(méi)有被跳過(guò)或者被存儲(chǔ)的寫(xiě)請(qǐng)求,就循環(huán)回去以接收下一個(gè)寫(xiě)請(qǐng)求。
65.權(quán)利要求64的方法,還包括如果確定未解決的未處理的寫(xiě)請(qǐng)求在臨時(shí)存儲(chǔ)器中,就添加未處理的寫(xiě)請(qǐng)求到新的一批未解決的請(qǐng)求。
66.權(quán)利要求64的方法,還包括如果確定要將寫(xiě)請(qǐng)求存儲(chǔ)在臨時(shí)存儲(chǔ)器,就存儲(chǔ)寫(xiě)請(qǐng)求在臨時(shí)存儲(chǔ)器中;以及如果確定要跳過(guò)該寫(xiě)請(qǐng)求,就循環(huán)回去以接收下一個(gè)寫(xiě)請(qǐng)求。
67.權(quán)利要求64的方法,還包括如果確定不將該批寫(xiě)到非易失性存儲(chǔ)器,那就循環(huán)回去以接收下一個(gè)寫(xiě)請(qǐng)求。
68.權(quán)利要求64的方法,還包括如果確定該批不是與非易失性存儲(chǔ)器存儲(chǔ)器映射的,那就就在將該批寫(xiě)到非易失性存儲(chǔ)器之前使該批與非易失性存儲(chǔ)器存儲(chǔ)器映射。
69.權(quán)利要求64的方法,還包括如果確定被保存的寫(xiě)請(qǐng)求在臨時(shí)存儲(chǔ)器中,那么就確定是否將保存的寫(xiě)請(qǐng)求寫(xiě)到非易失性存儲(chǔ)器中。
70.一種在其上存儲(chǔ)了多條可運(yùn)行指令來(lái)執(zhí)行一種方法的機(jī)器可讀介質(zhì),該方法包括接收寫(xiě)請(qǐng)求;確定是否添加該寫(xiě)請(qǐng)求到一批未解決的請(qǐng)求中;如果確定要添加該寫(xiě)請(qǐng)求到該批中,就添加該寫(xiě)請(qǐng)求到該批;確定是否將該批寫(xiě)到非易失性存儲(chǔ)器中;如果確定要將該批寫(xiě)到非易失性存儲(chǔ)器,那么就確定該批是否是存儲(chǔ)器映射到非易失性存儲(chǔ)器;如果確定該批是存儲(chǔ)器映射到非易失性存儲(chǔ)器,那就將該批寫(xiě)到非易失性存儲(chǔ)器;發(fā)送對(duì)寫(xiě)該批的確認(rèn)到與該批中每個(gè)寫(xiě)請(qǐng)求相關(guān)聯(lián)的進(jìn)程;確定是否所有的對(duì)寫(xiě)該批的確認(rèn)已經(jīng)被接收;如果所有的對(duì)寫(xiě)該批的確認(rèn)已經(jīng)被接收,就清除該批;確定是否有任何寫(xiě)請(qǐng)求被跳過(guò)或者被存儲(chǔ)在臨時(shí)存儲(chǔ)器中;以及如果確定沒(méi)有被跳過(guò)或者被存儲(chǔ)的寫(xiě)請(qǐng)求,就循環(huán)回去以接收下一個(gè)寫(xiě)請(qǐng)求。
71.權(quán)利要求70的機(jī)器可讀介質(zhì),其中該方法還包括如果確定了未解決的未處理的寫(xiě)請(qǐng)求在臨時(shí)存儲(chǔ)器中,就添加未處理的寫(xiě)請(qǐng)求到新的一批未解決的請(qǐng)求。
72.權(quán)利要求70的機(jī)器可讀介質(zhì),其中該方法還包括如果確定要將寫(xiě)請(qǐng)求存儲(chǔ)在臨時(shí)存儲(chǔ)器,就存儲(chǔ)寫(xiě)請(qǐng)求在臨時(shí)存儲(chǔ)器中;以及如果確定要跳過(guò)該寫(xiě)請(qǐng)求,就循環(huán)回去以接收下一個(gè)寫(xiě)請(qǐng)求。
73.權(quán)利要求70的機(jī)器可讀介質(zhì),其中該方法還包括如果確定不將該批寫(xiě)到非易失性存儲(chǔ)器,那就循環(huán)回去以接收下一個(gè)寫(xiě)請(qǐng)求。
74.權(quán)利要求70的機(jī)器可讀介質(zhì),其中該方法還包括如果確定該批不是與非易失性存儲(chǔ)器存儲(chǔ)器映射的,那就在將該批寫(xiě)到非易失性存儲(chǔ)器之前將該批與非易失性存儲(chǔ)器存儲(chǔ)器映射。
75.權(quán)利要求70的機(jī)器可讀介質(zhì),其中該方法還包括如果確定被保存的寫(xiě)請(qǐng)求在臨時(shí)存儲(chǔ)器中,那么就確定是否將保存的寫(xiě)請(qǐng)求寫(xiě)到非易失性存儲(chǔ)器中。
全文摘要
一種方法包括接收寫(xiě)請(qǐng)求;添加寫(xiě)請(qǐng)求到一批基本相連的盤(pán)寫(xiě);確定將該批基本相連的盤(pán)寫(xiě)寫(xiě)到非易失性存儲(chǔ)器;將該批基本相連的盤(pán)寫(xiě)寫(xiě)到該非易失性存儲(chǔ)器;發(fā)送寫(xiě)該批基本相連的盤(pán)寫(xiě)的確認(rèn);接收確認(rèn)寫(xiě)的確認(rèn);和清除該批基本相連的盤(pán)寫(xiě)。
文檔編號(hào)G06F17/30GK101084490SQ200580017660
公開(kāi)日2007年12月5日 申請(qǐng)日期2005年3月25日 優(yōu)先權(quán)日2004年3月31日
發(fā)明者G·H·奧加薩瓦拉, J·施瓦茨, D·斯通 申請(qǐng)人:雙子星移動(dòng)科技公司