欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種透明、通用的文件緩存系統(tǒng)的制作方法

文檔序號:6585353閱讀:545來源:國知局
專利名稱:一種透明、通用的文件緩存系統(tǒng)的制作方法
技術領域
本發(fā)明涉及一種文件緩存系統(tǒng),特別是涉及一種透明、通用的文件緩存系統(tǒng)。本發(fā)
明屬于計算機技術領域。
背景技術
目前,隨著計算機技術與互聯(lián)網的飛速發(fā)展,用戶對應用的需求已不僅僅限于功能方面,對應用的性能需求逐漸成為了影響用戶體驗的主要因素。 對于企業(yè)網站來說,如何為來自全球的用戶提供快速穩(wěn)定和高質量的網站體驗,以提升用戶滿意度和提高收入對企業(yè)而言是一個具有戰(zhàn)略性意義的重要課題。美國Gomez網絡公司曾做過一個2000個用戶的調查,結果顯示,當一個網站響應速度很慢時,50%的用戶會放棄訪問而轉向競爭對手的網站。而隨著電子商務逐漸普及,如何為用戶提供高速的購買流程也將直接影響到用戶體驗。有研究表明,當用戶的購買流程失敗了三次以上時,94%的用戶會選擇永遠放棄這個網站。而更嚴重的是,近五成的用戶會將這種不好的體驗告訴5個以上朋友或同事。根據(jù)0MD的最新調查,網頁負載時間與bounce rate存在的密切關系。隨著負載時間延長,bo皿ce rate會不斷增加。因此,提高頁面的下載速度將有助于降低bounce rate。 近年來,以提升網站系統(tǒng)性能為目標,大量的技術與相關研究被提出與應用。其中,文件緩存技術,作為一種改善網站系統(tǒng)的性能的技術方案,今年來得到了廣泛的應用。它通過對高訪問頻率的文件進行緩存,提高熱點文件的主存Cache命中率,提升訪問速度,減小訪問延遲。 目前,文件緩存技術被廣泛使用于Web服務器應用中。典型的代表有基于Apache的mocLproxy反向代理系統(tǒng)、Web代理與緩存服務器系統(tǒng)Squid、HTTP與反向代理服務器系統(tǒng)Nginx、HTTP服務加速系統(tǒng)Varnish、分布式緩存系統(tǒng)Memcached和分布式的對象存儲緩存系統(tǒng)NCache等。通過在Web服務器集群前端部署緩存服務器,將文件緩存到緩存服務器的磁盤中,并進行集中的組織管理,提升熱點文件的主存Cache命中率,從而提高文件的訪問速度。 綜觀這些Web服務器系統(tǒng)對文件緩存技術的實現(xiàn)與應用,普遍存在以下幾個問題l)依靠專門的硬件構建緩存服務器,成本較高;2)緩存的文件依舊存儲在緩存服務器的磁盤中,磁盤訪問性能依舊較低;3)緩存服務器的主存Cache命中率仍舊無法保證;4)各系統(tǒng)均采用各自的緩存實現(xiàn)方案且與應用系統(tǒng)本身相關聯(lián),不具有通用性,無法被別的應用重用。 另外,對文件緩存的需求并不僅僅停留在Web應用上,大量的桌面應用同樣可以利用文件緩存技術提升性能。而前面所提到的諸多系統(tǒng),雖然均實現(xiàn)并應用了某種文件緩存技術,但各系統(tǒng)的實現(xiàn)存在較大差別,且均與系統(tǒng)本身緊耦合,不具有通用性。

發(fā)明內容
1.目的 本發(fā)明的目的在于提供一種透明、通用的文件緩存系統(tǒng)。該系統(tǒng)有兩個主要的特
征l)高效性,能夠高效地進行緩存操作,同時為應用提供高效的服務;2)透明性,緩存系
統(tǒng)對應用具有高透明性,從而,應用不需經過修改就能夠應用本緩存系統(tǒng),提升性能;3)通
用性,模塊化設計與良好的用戶接口 ,使系統(tǒng)能夠應用于各類緩存應用場景中,且易于與其
他系統(tǒng)集成。 2.技術方案 本發(fā)明一種透明、通用的文件緩存系統(tǒng),它包括核心模塊、配置管理模塊、消息隊 列管理模塊、通信模塊和緩存操作模塊,共五個模塊組成,參見圖1. 核心模塊是系統(tǒng)首先啟動的模塊,它的主要功能包括1)和配置管理模塊交互, 載入用戶配置;2)為其他模塊創(chuàng)建運行所需的子線程;3)初始化消息隊列管理模塊、緩存 操作模塊、通信模塊;4)啟動、停止消息隊列管理模塊、緩存操作模塊、通信模塊;5)接收并 處理來自命令行的命令。 配置管理模塊的主要功能包括1)讀取并解析系統(tǒng)配置文件;2)將解析出的配置 信息放入存儲配置信息的相應數(shù)據(jù)結構中,方便后續(xù)的訪問與操作;3)為核心模塊提供訪 問配置信息數(shù)據(jù)結構的訪問器方法,防止對配置信息的修改。
消息隊列管理模塊的主要功能包括1)組織管理"待處理"緩存消息隊列,為系統(tǒng)
接收到的緩存操作消息提供緩沖機制,對用戶提供較高的可用性;2)組織管理"已處理"緩
存消息隊列,使緩存消息的處理情況能夠由緩存操作模塊反饋給通信模塊,從而將處理情
況反饋給客戶;3)為位于不同線程中的其它模塊提供互斥訪問消息隊列的接口。 緩存操作模塊是整個緩存系統(tǒng)最重要的功能模塊,其主要功能包括1)接收、解
析緩存操作消息;2)根據(jù)緩存操作消息,采用鏈接修改技術,執(zhí)行文件的緩存建立、緩存刪
除、緩存狀態(tài)查詢功能。
通信模塊是整個緩存系統(tǒng)與用戶進行交互的界面,其主要功能包括1)與用戶建
立通信連接;2)接收用戶提交的緩存操作消息;3)將緩存操作消息通過消息隊列操作模塊
加入消息隊列中;4)將緩存操作的結果及消息隊列的狀態(tài)返回給用戶。 整個系統(tǒng)采用單進程多線程的模型,參見圖2。其中核心模塊、配置管理模塊位于
線程0中運行,通信模塊位于線程1中運行,緩存操作模塊位于線程2中運行,消息隊列管
理模塊為全局共享。 系統(tǒng)首先啟動核心模塊,由核心模塊啟動配置管理模塊,讀取并解析配置文件信 息。接著,核心模塊獲取配置信息,并用這些配置信息調用消息隊列管理模塊、通信模塊、緩 存操作模塊的模塊初始化函數(shù),啟動這些模塊。 系統(tǒng)由消息隊列管理模塊負責維護"待處理"和"已處理"兩個消息隊列。通過內部 的互斥訪問鎖及對外提供的訪問接口,為其它模塊提供消息隊列的互斥訪問和存取機制。
通信模塊負責與客戶間的通信。模塊啟動后,將等待來自客戶的連接請求。 一旦連 接建立,通信模塊就創(chuàng)建子線程,并啟動消息接收循環(huán),準備接收來自用戶的消息。當消息 到來,通信模塊通過調用消息隊列管理模塊的訪問函數(shù),將接收到的消息加入到"待處理" 消息隊列中。然后,通信模塊從"已處理"消息隊列中取出緩存消息,將其發(fā)送回客戶端。
緩存操作模塊負責根據(jù)緩存操作消息,執(zhí)行緩存操作。模塊啟動后,將創(chuàng)建子線 程,并啟動緩存消息操作循環(huán)。每次循環(huán)將依次完成從"待處理"消息隊列中取出一個消息, 解析消息,調用相應的緩存操作子程序完成緩存操作任務,最后將處理后的消息加入到"已 處理"消息隊列中。
3.優(yōu)點及功效 本發(fā)明一種透明、通用的文件緩存系統(tǒng),其優(yōu)點及功效是1)該系統(tǒng)利用內存文 件系統(tǒng)組織存放緩存文件,直接保證服務器的主存Cache命中率,避免了訪問磁盤帶來的 性能開銷,顯著地提高應用的緩存訪問性能;2)本系統(tǒng)是一個獨立的文件緩存系統(tǒng),所有 希望使用文件緩存技術的應用都作為其用戶,緩存系統(tǒng)通過定義良好的協(xié)議與接口與應用 交互,緩存系統(tǒng)具有較好的通用性;3)系統(tǒng)使用了基于鏈接修改的緩存技術,一方面保證 了文件緩存過程的高效性,降低其帶來的性能開銷;另一方面巧妙地實現(xiàn)了對應用系統(tǒng)的 透明性。


參圖l:系統(tǒng)結構示意圖 參圖2 :系統(tǒng)運行結構示意圖 參圖3 :核心模塊初始化流程 參圖4 :核心模塊清理流程 參圖5:配置文件示例 參圖6 :消息隊列管理模塊初始化流程 參圖7 :緩存操作模塊初始化流程 參圖8 :緩存操作模塊清理流程 參圖9 :緩存消息操作循環(huán) 參圖10:緩存添加流程 參圖11 :緩存刪除流程 參圖12 :通信模塊初始化流程 參圖13 :通信模塊清理流程 參圖14 :通信模塊消息循環(huán)流程 參圖15 :緩存反饋消息發(fā)送流程 圖中符號說明如下 11核心模塊;11配置管理模塊;11消息隊列管理模塊; ii通信模塊;^i緩存操作模塊; 1111 1119 :核心模塊初始化流程的步驟序號; 5181 5184 :核心模塊清理流程的步驟序號; 31101 31104 :消息隊列管理模塊初始化流程的步驟序號; 4141 4145 :緩存操作模塊初始化流程的步驟序號; 4151 4154 :緩存操作模塊清理流程的步驟序號; 4181 41812 :緩存消息操作循環(huán)的步驟序號; 41191 411920 :緩存添加流程的步驟序號;
41201 412033 :緩存刪除流程的步驟序號; 5171 5179 :通信模塊初始化流程的步驟序號; 5181 5184 :通信模塊清理流程的步驟序號; 5191 51912 :通信模塊消息循環(huán)流程的步驟序號; 51111 51116 :緩存反饋消息發(fā)送流程的步驟序號。
具體實施例方式
參見圖1、圖2.本發(fā)明一種透明、通用的文件緩存系統(tǒng),為一個單進程多線程的系
統(tǒng),它由核心模塊ii、配置管理模塊li、消息隊列管理模塊紅、通信模塊ii和緩存操作模塊^i,共五個模塊組成;其中 核心模塊il、配置管理模塊^l位于線程0中運行,通信模塊ii位于線程1中運
行,緩存操作模塊位于線程2中運行,消息隊列管理模塊紅為全局共享。 本發(fā)明所述的緩存系統(tǒng)運行于Li皿x操作系統(tǒng),并且需要有內存文件系統(tǒng)Tmpfs
提供文件緩存的底層支持。 參見圖l 圖15本發(fā)明的一個具體實施例如下 1.核心模塊ii 本模塊由四部分組成 1)模塊初始化函數(shù)ill ; 2)模塊清理函數(shù)ii^; 3)命令處理函數(shù)丄益; 各部分具體實現(xiàn)如下 1)模塊初始化函數(shù)Hi 模塊初始化函數(shù)iii用于本模塊啟動時完成一系列初始化工作,參見圖3其具體步驟如下-步驟:調用配置管理模塊11的初始化函數(shù)啟動該模塊;-步驟皿調用配置管理模塊且的配置信息讀取函數(shù)li互,獲取消息隊列最大
長度;-步驟皿調用配置管理模塊且的配置信息讀取函數(shù)ll旦,獲取通信模塊的監(jiān)聽端口號;-步驟:調用配置管理模塊11的配置信息讀取函數(shù)MI,獲取需緩存根路徑;-步驟皿調用配置管理模塊11的配置信息讀取函數(shù)1M,獲取緩存根路徑;-步驟皿調用消息隊列管理模塊的初始化函數(shù)3110啟動該模塊;-步驟:調用通信模塊的初始化函數(shù)MI啟動該模塊;-步驟皿調用緩存操作模塊ii的初始化函數(shù)iH啟動該模塊; _歩驟1119 :調用侖令處理函數(shù)113,以接收、處理來自命令行的管理命令。
2)模塊清理函數(shù)m 模塊清理函數(shù)皿在命令處理函數(shù)m接收退出命令后執(zhí)行,它用于本模塊退出
時完成一系列清理工作,參見圖4。其具體步驟如下-步驟皿調用通信模塊的清理函數(shù)停止該模塊;
6
-步驟皿調用緩存操作模塊11的清理函數(shù)11^停止該模塊;
-步驟皿調用消息隊列管理模塊11的清理函數(shù)mi停止該模塊;
-步驟:調用配置管理模塊11的清理函數(shù)Hi停止該模塊。 3)命令處理函數(shù)iH 命令處理函數(shù)m接收和處理來自命令行的管理命令。它在一個無限循環(huán)中等待
來自命令行的輸入,并對每個輸入進行解析。如果檢測到停止緩存系統(tǒng)命令,則結束循環(huán), 然后調用模塊清理函數(shù)m。2.配置管理模塊li該模塊由以下7個部分組成i)配置信息結構m;2)配置信息結構指針212 ;3)模塊初始化函數(shù)213 ;4)模塊清理函數(shù)Hi ;5)配置信息讀取函數(shù)215、216、217、218 :6)配置載入函數(shù)liS;7)系統(tǒng)配置文件2110。各部分具體實現(xiàn)如下i)配置信息結構m配置信息結構211包含如下4個字段-消息隊列最大長度,無符號短整型-監(jiān)聽端口號,無符號短整型-緩存根路徑,字符型指針-需緩存根路,字符型指針其中,消息隊列最大長度字段表示消息隊列的最大長度監(jiān)聽端口號字段表示通
信樽塊監(jiān)昕的端口號緩存根路徑字段表示允許緩存的路徑的根需緩存根路徑字段表示緩存文件存放的路徑的根。
2)配置信息結構指針212配置信息結構指針212為配置信息結構211類型的指針,用于存取系統(tǒng)配置文件
2110獲取的配置信息。
3)模塊初始化函數(shù)213模塊初始化函數(shù)213在模塊啟動時被調用,完成配置信息結構指針212的空間分
配,然后調用配置載入函數(shù)219載入配置信息。
4)模塊清理函數(shù)214模塊清理函數(shù)214回收為配置信息結構指針212分配的空間。5)配置信息讀取函數(shù)215、216、217、218配置信息讀取函數(shù)共4個,分別是-獲取消息隊列最大長度函數(shù)215消息隊列最大長度函數(shù)215返回消息隊列最大長度,類型為無符號短整型。-獲取監(jiān)聽的端口號2160111 ] 監(jiān)聽端口號返回監(jiān)聽端口號,類型為無符號短整型。 0112]-獲取需緩存根路徑MI
0113] 需緩存根路徑^1I返回需緩存根路徑,類型為字符型指針。
0114]-獲取緩存根路徑IM
0115] 緩存根路徑^M返回緩存根路徑,類型為字符型指針。
0116]上述配置信息讀取函數(shù)^、^M、^il、^M是配置管理模塊11對外提供的接口 ,通
過這四個函數(shù),核心模塊ii能夠方便地獲取系統(tǒng)的配置信息,同時預防了配置文件皿的 意外修改。
0117] 6)配置載入函數(shù)11S
0118] 配置載入函數(shù),在初始化函數(shù)^中被調用,它讀取并解析系統(tǒng)的配置文件
皿,然后將配置信息存儲到由配置信息結構指針M^指向的空間中,并返回給調用者。
0119] 7)系統(tǒng)配置文件2110
0120] 系統(tǒng)配置文件皿是一個位于同一目錄下的名為aclm. config的文本文件。其 格式參見圖5。
0121] 3.消息隊列管理模塊旦
0122] 該模塊由以下11個部分組成
0123] i)緩存操作消息結構m
0124] 2)消息隊列項結構;
0125] 3)消息隊列最大長度變量m ;
0126] 4)當前"待處理"消息隊列長度變量Mi;
0127] 5)"待處理"消息隊列隊頭指針M^;
0128] 6)"待處理"消息隊列互斥訪問鎖,;
0129] 7)當前"已處理"消息隊列長度變量MI;
0130] 8)"已處理"消息隊列隊頭指針,;
0131] 9)"已處理"消息隊列互斥訪問鎖m;
0132] 10)模塊初始化函數(shù)皿;
0133] 11)模塊清理函數(shù)皿;
0134] 12)消息隊列操作函數(shù)3112、3113、3114、3115、3116。
0135] 本發(fā)明中,消息隊列采用鏈表進行實現(xiàn)。各部分具體實現(xiàn)如下
0136] i)緩存操作消息結構m
0137] 緩存操作消息結構Hi定義包含如下3個字段,及一個隱含字段 0138]-緩存操作消息類型字段,無符號字符型 0139]-緩存操作消息狀態(tài)字段,無符號字符型 0140]-緩存消息長度字段,無符號短整型 0141]-帶操作的文件名字符串字段,隱含字段
0142] 緩存操作消息類型字段表示緩存操作消息的類型,包括"緩存添加操作"和"緩存 刪除操作"。 緩存操作消息狀態(tài)字段用于表示本緩存操作消息的狀態(tài)。用戶向緩存系統(tǒng)發(fā)送緩 存操作消息時,將該域設置為"待處理"狀態(tài)。當緩存系統(tǒng)處理了該緩存操作消息后,將會設置該域。用戶能夠通過檢查接收到的反饋消息中該域的值,判斷緩存的工作情況。根據(jù)緩存操作的不同結果,該狀態(tài)字段一共可以取下面這些狀態(tài)值-緩存添加終止,文件不可以緩存_緩存添加完成-緩存添加完成,文件已緩存-緩存添加終止,目標文件丟失-緩存添加終止,找不到文件-緩存刪除完成-緩存刪除完成,備份文件丟失-緩存刪除完成,緩存文件丟失-緩存刪除完成,鏈接文件丟失-緩存刪除完成,鏈接文件、備份文件丟失-緩存刪除完成,鏈接文件、緩存文件丟失-緩存刪除終止,文件不可以緩存-緩存刪除終止,鏈接文件丟失-緩存刪除終止,常規(guī)鏈接文件-緩存刪除失敗,備份文件、緩存文件丟失-緩存刪除失敗,所有文件丟失-未知消息類型 緩存消息長度字段用于提取該緩存消息的消息體。由于消息體的長度無法在編譯時確定,因此消息體并沒有采用顯式的域表示,其緊跟在域緩存消息長度字段之后。因此,需要通過指針加偏移量的方式訪問消息體。消息體中包含帶操作的文件的完整路徑名稱。
2)消息隊列項結構M^ 消息隊列項結構M1定義了一個鏈表節(jié)點,其定義包含如下2個字段
-緩存操作消息字段,緩存操作消息結構Hi類型指針
_鏈表下一結點指針字段,消息隊列項結構Ml類型指針 緩存操作消息字段為緩存操作消息結構311指針,將在緩存操作樽塊41中詳細介紹。 3)消息隊列最大長度變量m 消息隊列最大長度變量M^為靜態(tài)無符號短整型,在模塊初始化函數(shù)皿中完成初始化,存儲了從配置文件皿中得到的消息隊列最大長度。它用于限制"待處理"隊列與"已處理"隊列的最大長度。 4)當前"待處理"消息隊列長度變量Mi 當前"待處理"消息隊列長度變量Mi為靜態(tài)無符號短整型,表示當前"待處理"消息隊列的長度。 5)"待處理"消息隊列隊頭指針M^"待處理"消息隊列隊頭指針巡為靜態(tài)消息隊列項結構巡類型的指針,指向"待處理"消息隊列的隊頭,用于對"待處理"消息隊列項的訪問。
6)"待處理"消息隊列互斥訪問鎖,
"待處理"消息隊列互斥訪問鎖為靜態(tài)pthread—muteX_t類型,它為"待處理"
消息隊列提供互斥訪問機制。消息隊列操作函數(shù)mi、mi、mi、m^、,首先需要獲
取互斥鎖M旦,如果成功,則執(zhí)行隊列操作,如果失敗,則等待鎖。
7)當前"已處理"消息隊列長度變量MI 當前"已處理"消息隊列長度變量MI為靜態(tài)無符號短整型,表示當前"已處理"隊列的長度。 8)"已處理"消息隊列隊頭指針,"已處理"消息隊列隊頭指針,為靜態(tài)消息隊列項結構類型的指針,指向"已處理"消息隊列的隊頭,用于對"已處理"消息隊列項的訪問。
9)"已處理"消息隊列互斥訪問鎖MS"已處理"消息隊列互斥訪問鎖MS為靜態(tài)pthread—muteX_t類型,它"已處理"消息隊列提供互斥訪問機制。消息隊列操作函數(shù)皿、皿、皿、皿、皿首先需要獲取互斥鎖MA如果成功,則執(zhí)行隊列操作,如果失敗,則等待鎖。 io)模塊初始化函數(shù)im 模塊初始化函數(shù)皿用于本模塊啟動時完成一系列初始化工作,該函數(shù)接收一
無符號短整型參數(shù),該參數(shù)說明消息隊列最大長度,參見圖6,其具體歩驟如下-步驟^1 :根據(jù)參數(shù),設置消息隊列的最大長度變量M^ ;-步驟31102 :初始化"待處理"消息隊列隊頭指針巡; _步驟31103 :初始化"已處理"消息隊列隊頭指針,;-步驟31104 :初始化"待處理"消息隊列互斥訪問鎖,;-步驟m^ :初始化"已處理"消息隊列互斥訪問鎖,。 11)模塊清理函數(shù)皿 模塊清理函數(shù)皿在模塊退出時執(zhí)行,負責清空"待處理"和"已處理"兩個消息隊列。 12)消息隊列操作函數(shù)3112、3113、3114、3115、3116 消息隊列操作函數(shù)共5個,分別是-消息入隊函數(shù) 消息入隊函數(shù)皿將一個緩存操作消息加入到消息隊列中,該函數(shù)接收兩個參數(shù),分別是待操作隊列的標識和待入隊的緩存操作消息結構111指針。
-消息出隊函數(shù) 消息出隊函數(shù)皿從消息隊列中取出一個緩存操作消息,該函數(shù)接收待操作隊列的標識參數(shù),并返回取出的緩存操作消息結構111指針。-判斷隊列是否空函數(shù)mi 判斷隊列是否空函數(shù)mi判斷指定的消息隊列是否為空,該函數(shù)接收待操作隊
列的標識參數(shù),如果隊列空,返回l,否則返回0。
-獲取當前隊列狀態(tài)函數(shù)皿 獲取當前隊列狀態(tài)函數(shù),用于獲取指定的消息隊列的狀態(tài),該函數(shù)接收待操
作隊列的標識參數(shù),并返回當前隊列長度,以及允許的最大長度。 -清空隊列函數(shù)3116
清空隊列函數(shù),清空指定的消息隊列,該函數(shù)接收待操作隊列的標識參數(shù)。 卜.沭消息隊列操作函數(shù)3112、3113、3114、3115、3116是消息隊列管理模塊31向其它模塊提供的接口 ,它能夠提供對"待處理"和"已處理"兩個消息隊列的互斥訪問。 待操作隊列的標識用于指定函數(shù)所要作用的消息隊列,其可能為"待處理隊列"和"已完成隊列"。 4.緩存操作模塊ii 該模塊由以下20個部分組成 1)需緩存根路徑變量Hi ; 2)緩存根路徑變量ii^ ; 3)消息循環(huán)狀態(tài)變量ill ; 4)模塊初始化函數(shù)Mi ; 5)模塊清理函數(shù)ii^; 6)掛載內存文件系統(tǒng)函數(shù),; 7)卸載內存文件系統(tǒng)函數(shù)iil; 8)緩存消息操作循環(huán)函數(shù)iM ; 9)檢查文件是否可緩存函數(shù)ii^ ; 10)提取相對路徑函數(shù)im ; 11)生成緩存路徑函數(shù); 12)檢查文件是否存在函數(shù)im ; 13)檢杳文件是否為鏈接文件函數(shù)4113 ; 14)獲取鏈接文件的目標文件名函數(shù); 15)重命名文件函數(shù)im; 16)創(chuàng)建鏈接文件函數(shù)im ; 17)刪除文件函數(shù); 18)拷貝文件函數(shù)4118 ; 19)添加緩存im ; 20)刪除緩存4120 : 各部分具體實現(xiàn)如下 1)需緩存根路徑變量ill 需緩存根路徑變量iii為靜態(tài)字符型指針,它在模塊初始化函數(shù)1H中被初始化。它保存了可緩存的根路徑,所有位于根路徑下的所有文件可以被緩存,其余文件不可被緩存。提取相對路徑函數(shù)皿需要使用該變量提取帶緩存文件相對于需緩存根路徑的相對路徑。 2)緩存根路徑變量ii^ 緩存根路徑變量ii^為靜態(tài)字符型指針,它在模塊初始化函數(shù)Mi中被初始化。它保存了緩存的根路徑,是內存文件系統(tǒng)的掛載點。生成緩存路徑函數(shù)iiii需要使用該變量及相對路徑,生成緩存文件完整路徑。 3)消息循環(huán)狀態(tài)變量iM 消息循環(huán)狀態(tài)變量iM為靜態(tài)整型,用于控制緩存消息操作循環(huán)函數(shù)iM的執(zhí)行
11狀態(tài),其可能取值為"消息循環(huán)啟用"和"消息循環(huán)禁用"。
4)模塊初始化函數(shù)iH 模塊初始化函數(shù)iH用于本模塊啟動時完成一系列初始化工作,其接收兩個字符型指針參數(shù),分別表示需緩存根路徑與緩存根路徑。參見圖7,其具體步驟如下
_步驟用參數(shù)初始化需緩存根路徑變量ill和緩存根路徑變量ii^ ;
-步驟1H^ :調用函數(shù)掛載內存文件系統(tǒng)到緩存根路徑變量ii^表示的路徑下;-步驟IMS :設置消息循環(huán)狀態(tài)變量iM為"緩存操作消息循環(huán)啟用";
-步驟:創(chuàng)建子線程2 ;-步驟,在子線程2中開始執(zhí)行緩存消息操作循環(huán)函數(shù)iM。
5)模塊清理函數(shù)ii^ 模塊清理函數(shù)ii^在模塊退出時完成一系列清理工作,參見圖8,其具體步驟如下-步驟ii^i :設置消息循環(huán)狀態(tài)變量iM為"緩存操作消息循環(huán)禁用";
-步驟,等待子線程2結束;-步驟,調用函數(shù)MI卸載緩存根路徑變量Ml表示的路徑下的內存文件系統(tǒng); _步驟MM :釋放需緩存根路徑變量ill和緩存根路徑變量ii^的內存空間。
6)掛載內存文件系統(tǒng)函數(shù)iM 內存文件系統(tǒng)是使用本發(fā)明必須使用的關鍵技術,它是緩存文件的存儲位置。本發(fā)明可以使用多種常見的內存文件系統(tǒng)。本實施示例使用Tmpfs。 掛載內存文件系統(tǒng)函數(shù)1M接收一個字符型指針參數(shù),表示緩存根路徑。該函數(shù)在模塊初始化函數(shù)Mi中被調用,用于掛載內存文件系統(tǒng)Tmpfs到緩存根路徑參數(shù)表示的路徑下。函數(shù)lM中,使用操作系統(tǒng)的system()系統(tǒng)調用執(zhí)行內存文件系統(tǒng)掛載命令,例如mount tmpfs/cache/_t tmpfs-o size = 128m。 當使用其它內存文件系統(tǒng)時,需要將system()系統(tǒng)調用運行的命令做相應的替換。 7)卸載內存文件系統(tǒng)函數(shù)iil 卸載內存文件系統(tǒng)函數(shù)MI接收一個字符型指針參數(shù),表示緩存根路徑。該函數(shù)在模塊清理函數(shù)ii^中被調用,用于卸載已經掛載到緩存根路徑參數(shù)表示的路徑下的內存文件系統(tǒng)。 8)緩存消息操作循環(huán)函數(shù)iM 緩存消息操作循環(huán)函數(shù)1M在子線程2中開始啟動,負責執(zhí)行緩存消息中指定的緩存操作,參見圖9,其具體步驟如下
-步驟皿開始無限循環(huán); _步驟,檢查消息循環(huán)狀態(tài)變量1M,如果為"緩存操作消息循環(huán)禁用",則轉向步驟41812,否則繼續(xù)歩驟4183 ;-步驟,調用消息隊列管理模塊的消息出隊函數(shù)皿從"待處理"消息隊列中取出一個緩存操作消息;
12
-步驟MM :如果成功獲取緩存消息,則轉向步驟IMS ;否則繼續(xù)步驟,;
_歩驟4185 :等待10毫秒,然后轉向歩驟4183 :
-步驟,判斷取出的緩存操作消息類型 B如果類型為"緩存刪除操作",則是緩存文件刪除消息,轉向步驟1MI ;
B如果類型為"緩存添加操作",則是緩存文件添加消息,轉向步驟,;
B其他情況,轉向步驟M^;-步驟,調用緩存刪除函數(shù)皿,轉向步驟MM ;
-步驟,調用緩存添加函數(shù)im,轉向步驟MM ; _步驟,將函數(shù)返回值存入該緩存消息的狀態(tài)域中,轉向步驟iMii ;
-步驟41810 :設置該緩存消息的狀態(tài)域為"未知消息類型";-步驟iMii:調用消息隊列管理模塊紅的消息入隊函數(shù)皿將該緩存消息加入 "已處理"消息隊列中,轉向步驟,;
-步驟41812 :結束循環(huán)。
9)檢查文件是否可緩存函數(shù)ii^ 檢查文件是否可緩存函數(shù)M£接收一個字符型指針參數(shù),表示待檢查的文件名。 函數(shù)通過將參數(shù)和需緩存根路徑變量ill表示的字符串進行比較,從而檢查參數(shù)表示的文 件是否位于系統(tǒng)的可緩存路徑下。
如果是,則返回l,表示可以緩存該文件;否則,返回O,表示不可以緩存該文件。
10)提取相對路徑函數(shù)im 提取相對路徑函數(shù)皿接收一個字符型指針參數(shù),表示文件的完整路徑名。函數(shù) 通過在參數(shù)表示的完整路徑名中截取除去需緩存根路徑變量411表示的字符串的一個子 串,作為待緩存對象的相對路徑名,并返回該路徑名字符串的指針。 例如,參數(shù)為,,/W/www/html/index. html",需緩存根路徑變量411為,,/W/www/ html/",則函數(shù)iim將返回"index, html"。
11)生成緩存路徑函數(shù)iiii 生成緩存路徑函數(shù)iiii接收一個字符型指針參數(shù),表示文件的相對路徑名。函數(shù) 通過將參數(shù)表示的相對路徑名與緩存根路徑變量ii^表示的字符串進行拼接,生成完整的 緩存文件路徑名,并返回該路徑名字符串的指針。 例如,參數(shù)為"index, html",緩存根路徑變量為"/cache/",則函數(shù)iiU將返
回,,/cache/index, html ,,。 12)檢查文件是否存在函數(shù)im 檢查文件是否存在函數(shù)im接收一個字符型指針參數(shù),表示待檢查的文件名。函 數(shù)通過系統(tǒng)調用access (const char *pathname, int mode)檢查參數(shù)表示的文件是否存 在。 如果是,返回1 ;否則返回0。 13)檢查文件是否為鏈接文件函數(shù)im 檢查文件是否為鏈接文件函數(shù)im接收一個字符型指針參數(shù),表示待檢查的文 {牛名。函數(shù)通過系纟充i周用lstat (const char承restrict pathname, struct stat承restrict buf)及系統(tǒng)宏S—ISLNK(),檢查參數(shù)表示的文件是否存在。
如果是,返回1 ;否則返回0。 14)獲取鏈接文件的目標文件名函數(shù)11H 獲取鏈接文件的目標文件名函數(shù)iiii接收一個字符型指針參數(shù),表示待操作的鏈接文件名。函數(shù)通過系統(tǒng)調用readl ink (const char承restrict path謹e,char*restrict buf, size_t bufsize)獲取鏈接文件參數(shù)指向的真實文件的完整路徑名。
如果成功,返回指向獲取的路徑名字符指針;否則,返回NULL。
15)重侖名文件函數(shù)4115 重命名文件函數(shù)接收兩個字符型指針參數(shù),分別表示舊文件名與新文件名。函數(shù)通過系統(tǒng)調用rename (const char *oldname, const char *newname)將舊文件名參數(shù)表示的文件重命名為新文件名參數(shù)表示的文件名。
如果操作成功,返回1 ;否則返回0。
16)創(chuàng)建鏈接文件函數(shù) 創(chuàng)建鏈接文件函數(shù)接收兩個字符型指針參數(shù),分別表示待創(chuàng)建的鏈接文件
名與鏈接文件將指向的目標文件名。函數(shù)通過系統(tǒng)調用symlink (const chai^actualpath,
const char *sympath),創(chuàng)建由鏈接文件名參數(shù)指定的符號鏈接文件,該鏈接文件指向由
目標文件名參數(shù)指定的文件。 如果操作成功,返回1 ;否則返回0。 17)刪除文件函數(shù)4117 刪除文件函數(shù)liil接收一個字符型指針參數(shù),表示待刪除的文件名。函數(shù)通過系統(tǒng)調用remove (const char *pathname)刪除參數(shù)表示的文件。
如果操作成功,返回1 ;否則返回0。
18)拷貝文件函數(shù)4118 拷貝文件函數(shù)接收兩個字符型指針參數(shù),分別表示待拷貝的源文件名與目標文件名。函數(shù)通過系統(tǒng)調用system(const char *comstring)調用命令行cp命令,將參數(shù)表示的源文件拷貝生成參數(shù)表示的目標文件。
如果操作成功,返回1 ;否則返回0。
19)添加緩存函數(shù)4119 添加緩存函數(shù)im接收一個字符型指針參數(shù),表示待添加的緩存文件。參見圖
ll,具體流程如下。為了步驟的敘述簡便,用src—name表示待添加緩存的文件名,用cache—name表示存儲在緩存中的緩存文件完整路徑名,用ret表示用于保存需要返回的狀態(tài)的變-步驟iim:調用函數(shù)il豆,檢查待緩存文件是否位于需緩存根路徑下,如果是,繼續(xù)步驟41192 ;否則轉到步驟41193 ;-步驟111^:設置狀態(tài)變量1~"為"緩存添加終止,文件不可以緩存",然后轉到步驟411920 :-步驟41193 :調用函數(shù)im,提取待緩存文件的相對路徑名,存到變量name中;
-步驟41194 :調用函數(shù)iiii,生成緩存文件完整路徑名,存到變量cache—name中;-步驟41195 :調用函數(shù)4112,檢查是否存在文件src—name,如果是,繼續(xù)步驟41196 :否則,轉向歩驟411919 :-歩驟41196 :調用函數(shù)4113,柃杳文件srC_name是否為鏈接文件,如果不是,繼 續(xù)步驟41197 ;否則,轉向步驟411911 ;-步驟41197 :調用函數(shù)iii^,拷貝文件src_name到文件cache_name ;
-步驟41198 :調用函數(shù)4115,將文件src_name重命名為src—name, aclm ;
-步驟41199 :調用函數(shù)im,創(chuàng)建鏈接文件src_name,指向文件cache_name ;
-步驟411910 :設置狀態(tài)變量ret為"緩存添加完成",然后轉到歩驟411920 ;
-步驟411911 :調用函數(shù)iiii,檢查src—name是否指向cache_name,如果是,繼續(xù) 步驟411912 ;否則,轉向步驟41198 ;-歩驟411912 :調用函數(shù)4112,柃杳是否存在文件cache_name,如果是,繼續(xù)步驟 411913 :否則,轉向歩驟411914 :-步驟411913 :設置狀態(tài)變量ret為"緩存添加完成,文件己緩存",然后轉到步驟 411920 ;-歩驟411914 :調用函數(shù)4112,檢杳是否存在文件src name, aclm,如果是,繼續(xù)歩 驟411915 ;否則,轉向步驟411917 ; -步驟411915 :調用函數(shù)4118,拷貝文件src_name. aclm到文件cache_name ;
-步驟411916 :設置狀態(tài)變量ret為"緩存添加完成",然后轉到步驟411920 ;
-歩驟411917 :調用函數(shù)4117,刪除失效的鏈接文件src_name ;
-步驟iUiM:設置狀態(tài)變量ret為"緩存添加終止,目標文件丟失",然后轉到步 驟411920 :-步驟411919 :設置狀態(tài)變量ret為"緩存添加終止,找不到文件",然后轉到步驟 411920-步驟111^:本函數(shù)結束,返回狀態(tài)變量^1。
20)刪除緩存函數(shù)4120 刪除緩存函數(shù)im接收一個字符型指針參數(shù),表示待刪除的緩存文件。參見圖 11 ,具體流程如下。為了歩驟的敘述簡便,用src—name表示待刪除緩存的文件名,用cache— name表示存儲在緩存中的緩存文件完整路徑名,用ret表示用于保存需要返回的狀態(tài)的變-步驟41201 :調用函數(shù)M£,檢查文件srC_name是否位于需緩存根路徑下,如果 是,繼續(xù)步驟4匿;否則轉到步驟412015 ;-步驟4匿:調用函數(shù)皿,提取待緩存文件的相對路徑名,存到變量name中;
-步驟4腦:調用函數(shù)iiii,生成緩存文件完整路徑名cache_name ;
-步驟41204 :調用函數(shù)im ,檢查是否存在文件src—name ,如果是,繼續(xù)步驟 41205 ;否則,轉向步驟412023 ;-歩驟41205 :調用函數(shù)4113,檢杳文件srC_name是否為鏈接文件,如果是,繼續(xù) 步驟41206 ;否則,轉向步驟412016 ;-歩驟41206 :調用函數(shù)iUi,檢查文件src_name是否指向文件cache_name,如果 是,繼續(xù)步驟41207 ;否則,轉向步驟412017 ;-步驟41207 :調用函數(shù)im,檢查是否存在文件cache—name,如果是,繼續(xù)步驟41208 ;否則,轉向步驟412018 ;-步驟41208 :調用函數(shù)iiiZ,刪除文件src_name ;-步驟41209 :調用函數(shù)4118,拷貝文件cache_name到文件src_name ;-步驟412010 :調用函數(shù)iiil,刪除文件cache_name ;-歩驟412011 :調用函數(shù)im,檢查是否存在文件src—name. aclm,如果是,繼續(xù)步 驟412012 :否則,轉向歩驟412014 ;-步驟412012 :調用函數(shù)iUZ,刪除文件src_name. aclm ;
-步驟412013 :設置狀態(tài)變量ret為"緩存刪除完成",然后轉到步驟412034 ;
-步驟412014 :設置狀態(tài)變量ret為"緩存刪除完成,備份文件丟失",然后轉到步 驟412034 :-步驟412015 :設置狀態(tài)變量ret為"緩存刪除終止,文件不可以緩存",然后轉到 步驟412034 ;-步驟412016 :設置狀態(tài)變量ret為"緩存刪除終止,鏈接文件丟失",然后轉到步 驟412034 :-步驟412017 :設置狀態(tài)變量ret為"緩存刪除終止,常規(guī)鏈接文件",然后轉到步 驟412034 :-歩驟412018 :調用函數(shù)im,檢查是否存在文件src—name. aclm,如果是,繼續(xù)步 驟412019 :否則,轉向歩驟412023 ;-步驟412019 :調用函數(shù)im,刪除文件src_name ;-步驟412020 :調用函數(shù)4118,拷貝文件src_name. aclm到文件src_name ;
-步驟412021 :調用函數(shù)iUI,刪除文件src_name. aclm ;-步驟4匿2 :設置狀態(tài)變量ret為"緩存刪除完成,緩存文件丟失",然后轉到步 驟412034 :-步驟11^:設置狀態(tài)變量1~"為"緩存刪除失敗,備份文件、緩存文件丟失",然 后轉到步驟412034 ;-歩驟412024 :調用函數(shù)4112,檢杳是否存在文件cache_name,如果是,繼續(xù)步驟 412025 :否則,轉向歩驟412030 :-步驟412025 :調用函數(shù)4118,拷貝文件cache_name到文件src_name ;-歩驟412026 :調用函數(shù)im,檢查是否存在文件src_name. aclm,如果是,繼續(xù)步
驟412027 :否則,轉向歩驟412029 ;-步驟412027 :調用函數(shù)iUI,刪除文件src_name. aclm ;-步驟11^:設置狀態(tài)變量1~"為"緩存刪除完成,鏈接文件丟失",然后轉到步 驟412034 :-步驟11^:設置狀態(tài)變量1~"為"緩存刪除完成,鏈接文件、備份文件丟失",然 后轉到步驟412034 ;-歩驟412030 :調用函數(shù)im,檢查是否存在文件src_name. aclm,如果是,繼續(xù)步 驟412031 :否則,轉向歩驟412033 ;-步驟412031 :調用函數(shù)4118,拷貝文件src_name. aclm到文件src_name ;
-步驟11^:設置狀態(tài)變量1~"為"緩存刪除完成,鏈接文件、緩存文件丟失",然
16后轉到步驟412034 ;-步驟11^:設置狀態(tài)變量1~"為"緩存刪除失敗,所有文件丟失",然后轉到步 驟412034 :-步驟412034 :結束緩存從刪除流程,返回狀態(tài)變量ret。 5.通信模塊a 該模塊由以下8個部分組成 1)消息隊列狀態(tài)通告結構旦ii ; 2)監(jiān)聽端口號變量; 3)客戶端地址結構變量M2; 4)消息循環(huán)狀態(tài)變量Mi ; 5)監(jiān)聽套接字變量; 6)客戶套接字變量; 7)模塊初始化函數(shù)MZ ; 8)模塊清理函數(shù)M^; 9)消息循環(huán)函數(shù)519 : 10)隊列狀態(tài)通告發(fā)送函數(shù),; 11)緩存反饋消息發(fā)送函數(shù)皿。 各部分具體實現(xiàn)如下 1)消息隊列狀態(tài)通告結構^ii 消息隊列狀態(tài)通告結構^ii定義包含如下兩個字段
-消息隊列待處理消息數(shù)量字段,無符號短整形
-消息隊列剩余大小字段,無符號短整型 結構m定義了消息隊列的狀態(tài)通告結構。其中,消息隊列待處理消息數(shù)暈字段 表示當前消息隊列中待處理的消息數(shù)量,消息隊列剩余大小字段表示當前消息隊列中還可 以容納的消息數(shù)量。 通信模塊處將在"待處理"消息隊列長度Mi分別達到消息隊列最大長度m的 80 % , 85 % , 90 % , 95 %時,向用戶發(fā)送消息隊列狀態(tài)通告m。當"待處理"消息隊列長度 Mi達到消息隊列最大長度m時,通信模塊^i將丟棄該消息,并向用戶發(fā)送隊列已滿的消
息隊列狀態(tài)通告^ii。 2)監(jiān)聽端口號變量M^ 監(jiān)聽端口號變量Ml為靜態(tài)無符號短整型變量,在模塊初始化函數(shù)MI中完成初 始化,用于保存通信模塊監(jiān)聽用戶連接的端口號。
3)客戶端地址結構變量M^ 客戶端地址結構變量為靜態(tài)sockaddr—in類型變量,在模塊初始化函數(shù)MI 中被賦值,用于保存當前連接到系統(tǒng)的用戶的地址信息。該地址信息在緩存反饋消息發(fā)送 函數(shù)5111中需要使用。
4)消息循環(huán)狀態(tài)變量Mi 消息循環(huán)狀態(tài)變量Mi為靜態(tài)整型變量,用于控制消息循環(huán)函數(shù)M^的執(zhí)行狀態(tài), 其可能取值為"消息循環(huán)啟用"和"消息循環(huán)禁用"。
5)監(jiān)聽套接字變量 監(jiān)聽套接字變量為靜態(tài)socket類型變量,在模塊初始化函數(shù)MI中初始化,
用于監(jiān)聽來自用戶的連接。 6)客戶套接字變量M^ 客戶套接字變量為靜態(tài)socket類型變量,在模塊初始化函數(shù)517中初始化,
在和用戶建立連接后進行數(shù)據(jù)收發(fā)。 7)模塊初始化函數(shù)MZ 模塊初始化函數(shù)MI用于本模塊啟動時完成一系列初始化工作。函數(shù)接收一個無
符號短整型參數(shù),用于指定監(jiān)聽的端口號。參見圖12,其具體步驟如下-步驟Mil :根據(jù)參數(shù),設置監(jiān)聽端口號變量;-步驟MZ2 :設置消息循環(huán)狀態(tài)變量Mi為"消息循環(huán)啟動";-步驟MZS :調用socket創(chuàng)建監(jiān)聽套接字;-步驟MIi:調用bind將套接字515與監(jiān)聽端口號變量M^指定的端口綁定;
-步驟:調用listen啟動監(jiān)聽套接字互丘監(jiān)聽;
-步驟MIS :調用acc印t等待客戶端連接;-步驟Mil :將acc印t返回的socket實例保存到客戶套接字巡中;
-步驟,創(chuàng)建子線程1 ;-步驟:在子線程1中執(zhí)行消息循環(huán)函數(shù)MS開始消息循環(huán)。 8)模塊清理函數(shù) 模塊清理函數(shù)M^在模塊退出時完成一系列清理工作。參見圖13,其具體步驟如 下-步驟,設置消息循環(huán)狀態(tài)變量Mi為"消息循環(huán)啟用";
-步驟,等待子線程1結束; _歩驟5183 :關閉客戶套接字516 :
-歩驟5184 :關閉監(jiān)聽套接字515。 9)消息循環(huán)函數(shù)M^ 消息循環(huán)函數(shù)M^在子線程1中開始啟動,負責通信模塊的消息接收、發(fā)送,參見 圖14,其具體步驟如下-步驟,調用消息隊列管理模塊丑的返回當前隊列狀態(tài)函數(shù)111旦,獲取當前 隊列的長度及最大運行的隊列長度,并保存在臨時變量current和max中;
-步驟,開始無限循環(huán);-步驟MM :檢查消息循環(huán)狀態(tài)變量^M,如果為"消息循環(huán)禁用",則轉向步驟 51912,否則繼續(xù)歩驟5194 ;-步驟MM :調用recv從客戶套接字中接收數(shù)據(jù);-步驟MM :根據(jù)current和max計算隊列的使用情況,并做如下判斷 B如果隊列使用達到100%,轉向歩驟5196 : 國如果隊列使用達到80%,85%,90%,95%,轉向步驟^^; B其他情況,繼續(xù)步驟MM ;-步驟MM:丟棄本次接收到的消息;
18
-步驟MSI :構造隊列狀態(tài)通告消息^i丄,調用隊列狀態(tài)通告發(fā)送函數(shù),向用
戶發(fā)送該通告消息,然后轉向步驟MM^ ;-步驟MM :構造隊列狀態(tài)通告消息^i丄,調用隊列狀態(tài)通告發(fā)送函數(shù),向用 戶發(fā)送該通告消息;-步驟MM :調用消息隊列管理模塊的消息入隊函數(shù)mi將接收到的消息加 入"待處理"消息隊列中; _步驟^^:重新調用消息隊列管理模塊31的返回當前隊列狀態(tài)函數(shù)m互,獲 取當前隊列的長度及最大運行的隊列長度,并更新臨時變量current和max ;
-步驟MSii:調用緩存反饋消息發(fā)送函數(shù)皿發(fā)送反饋消息,然后轉向步驟 5193 ;-步驟51912 :結束循環(huán)。 io)隊列狀態(tài)通告發(fā)送函數(shù)m^ 隊列狀態(tài)通告發(fā)送函數(shù),接收一個消息隊列狀態(tài)通告結構^ii類型的參數(shù),調 用send函數(shù),將參數(shù)指向的隊列狀態(tài)通告^ii發(fā)送給連接到系統(tǒng)的用戶。 11)緩存反饋消息發(fā)送函數(shù)皿 緩存反饋消息發(fā)送函數(shù)皿負責向用戶發(fā)送緩存反饋消息,參見圖15,具體步驟 如下-步驟^1111:調用消息隊列管理模塊31的返回當前隊列狀態(tài)函數(shù)皿;-步驟^1111:將返回的隊列狀態(tài)中的當前隊列長度的一半,作為需要出隊的消息 數(shù)量N ; _步驟^1^ :調用消息隊列管理模塊31的消息出隊函數(shù)皿,從"已處理"消息 隊列中取出一個緩存消息;-步驟^1111:調用緩存反饋消息發(fā)送函數(shù)皿,將取出緩存消息依次發(fā)送給客 戶; _歩驟51115 :將N減1 :-步驟51116 :如果N大于0,則轉向步驟51113 ;否則結束本函數(shù)。
權利要求
一種透明、通用的文件緩存系統(tǒng),它包括核心模塊、配置管理模塊、消息隊列管理模塊、通信模塊和緩存操作模塊,共五個模塊核心模塊是系統(tǒng)首先啟動的模塊,它的功能包括1)和配置管理模塊交互,載入用戶配置;2)為其他模塊創(chuàng)建運行所需的子線程;3)初始化消息隊列管理模塊、緩存操作模塊、通信模塊;4)啟動、停止消息隊列管理模塊、緩存操作模塊、通信模塊;5)接收并處理來自命令行的命令;配置管理模塊的功能包括1)讀取并解析系統(tǒng)配置文件;2)將解析出的配置信息放入存儲配置信息的相應數(shù)據(jù)結構中,方便后續(xù)的訪問與操作;3)為核心模塊提供訪問配置信息數(shù)據(jù)結構的訪問器方法,防止對配置信息的修改;消息隊列管理模塊的功能包括1)組織管理“待處理”緩存消息隊列,為系統(tǒng)接收到的緩存操作消息提供緩沖機制,對用戶提供較高的可用性;2)組織管理“已處理”緩存消息隊列,使緩存消息的處理情況能夠由緩存操作模塊反饋給通信模塊,從而將處理情況反饋給客戶;3)為位于不同線程中的其它模塊提供互斥訪問消息隊列的接口;緩存操作模塊是整個緩存系統(tǒng)最重要的功能模塊,其功能包括1)接收、解析緩存操作消息;2)根據(jù)緩存操作消息,采用鏈接修改技術,執(zhí)行文件的緩存建立、緩存刪除、緩存狀態(tài)查詢功能;通信模塊是整個緩存系統(tǒng)與用戶進行交互的界面,其功能包括1)與用戶建立通信連接;2)接收用戶提交的緩存操作消息;3)將緩存操作消息通過消息隊列操作模塊加入消息隊列中;4)將緩存操作的結果及消息隊列的狀態(tài)返回給用戶。
2. 根據(jù)權利要求1所述的一種透明、通用的文件緩存系統(tǒng),特征在于整個系統(tǒng)采用單進程多線程的模型,其中核心模塊、配置管理模塊位于線程0中運行,通信模塊位于線程1中運行,緩存操作模塊位于線程2中運行,消息隊列管理模塊為全局共享。
3. 根據(jù)權利要求1所述的一種透明、通用的文件緩存系統(tǒng),特征在于系統(tǒng)首先啟動核心模塊,由核心模塊啟動配置管理模塊,讀取并解析配置文件信息;接著,核心模塊獲取配置信息,并用這些配置信息調用消息隊列管理模塊、通信模塊、緩存操作模塊的模塊初始化函數(shù),啟動這些模塊;系統(tǒng)由消息隊列管理模塊負責維護"待處理"和"已處理"兩個消息隊列,通過內部的互斥訪問鎖及對外提供的訪問接口,為其它模塊提供消息隊列的互斥訪問和存取機制;通信模塊負責與客戶間的通信,模塊啟動后,將等待來自客戶的連接請求, 一旦連接建立,通信模塊就創(chuàng)建子線程,并啟動消息接收循環(huán),準備接收來自用戶的消息;當消息到來,通信模塊通過調用消息隊列管理模塊的訪問函數(shù),將接收到的消息加入到"待處理"消息隊列中,然后,通信模塊從"已處理"消息隊列中取出緩存消息,將其發(fā)送回客戶端;緩存操作模塊負責根據(jù)緩存操作消息,執(zhí)行緩存操作;模塊啟動后,將創(chuàng)建子線程,并啟動緩存消息操作循環(huán);每次循環(huán)將依次完成從"待處理"消息隊列中取出一個消息,解析消息,調用相應的緩存操作子程序完成緩存操作任務,最后將處理后的消息加入到"已處理"消息隊列中。
全文摘要
本發(fā)明涉及一種文件緩存系統(tǒng),特別是涉及一種透明、通用的文件緩存系統(tǒng)。系統(tǒng)由核心模塊、配置管理模塊、消息隊列管理模塊、通信模塊和緩存操作模塊,共五個模塊組成。整個系統(tǒng)采用單進程多線程的模型,其中核心模塊、配置管理模塊位于線程0中運行,通信模塊位于線程1中運行,緩存操作模塊位于線程2中運行,消息隊列管理模塊為全局共享。系統(tǒng)由核心模塊負責讀取配置信息并初始化其它功能模塊。通過消息隊列管理模塊,其它功能模塊能夠實現(xiàn)對消息隊列的互斥訪問和存取。系統(tǒng)通過通信模塊與客戶進行通信,接收緩存消息,并交由緩存操作模塊處理,然后將處理結果返回給客戶。本發(fā)明通過應用鏈接修改技術,能夠高效地實現(xiàn)文件緩存操作。其次,應用鏈接修改技術,系統(tǒng)對應用提供高透明性。再次,模塊化的設計與良好的用戶接口,使系統(tǒng)具有良好的通用性。
文檔編號G06F17/30GK101710341SQ200910243678
公開日2010年5月19日 申請日期2009年12月22日 優(yōu)先權日2009年12月22日
發(fā)明者余彬彬, 張偉, 徐威, 李秀橋, 肖利民, 肖育前, 阮利 申請人:北京航空航天大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
武乡县| 阿荣旗| 静海县| 石家庄市| 青岛市| 南靖县| 泾阳县| 镇平县| 丰原市| 宣汉县| 乌兰县| 勐海县| 兴义市| 鄂温| 淮南市| 调兵山市| 菏泽市| 盱眙县| 库尔勒市| 新晃| 合作市| 长春市| 祁阳县| 河间市| 驻马店市| 新邵县| 威信县| 宣威市| 高雄县| 竹山县| 陇西县| 永福县| 肥乡县| 奎屯市| 太白县| 杭锦后旗| 临夏市| 渭南市| 麻江县| 宁蒗| 黑水县|