本公開涉及數(shù)據(jù)讀寫,特別是涉及一種動(dòng)態(tài)高效緩沖區(qū)的數(shù)據(jù)讀寫裝置、方法、電子設(shè)備及介質(zhì)。
背景技術(shù):
1、環(huán)形緩存區(qū)域是嵌入式系統(tǒng)中十分重要的一種數(shù)據(jù)結(jié)構(gòu),它是一種具有固定大小的緩沖區(qū)。環(huán)形緩存區(qū)域的存儲(chǔ)區(qū)域是一段線性的內(nèi)存,通過軟件將這段內(nèi)存處理成邏輯上首尾相連的環(huán)形的存儲(chǔ)區(qū)域。當(dāng)需要存儲(chǔ)數(shù)據(jù)或者讀取數(shù)據(jù)的時(shí)候,每次都需要通過軟件的方式判斷數(shù)據(jù)是否已經(jīng)到達(dá)線性內(nèi)存的尾部,當(dāng)?shù)竭_(dá)線性內(nèi)存的尾部以后再將數(shù)據(jù)回滾到線性內(nèi)存的頭部。
2、相關(guān)技術(shù)中,對于環(huán)形緩存區(qū)域需要提前分配固定大小的存儲(chǔ)空間,然而,申請過大浪費(fèi)存儲(chǔ)空間,申請過小緩存區(qū)不夠用且導(dǎo)致數(shù)據(jù)溢出程序出錯(cuò),分配存儲(chǔ)空間完全根據(jù)經(jīng)驗(yàn),沒有固定的方法。
技術(shù)實(shí)現(xiàn)思路
1、為克服相關(guān)技術(shù)中存在的問題,本公開提供一種動(dòng)態(tài)高效緩沖區(qū)的數(shù)據(jù)讀寫裝置、方法、電子設(shè)備及介質(zhì)。本公開的技術(shù)方案如下:
2、根據(jù)本公開實(shí)施例的第一方面,提供一種動(dòng)態(tài)高效緩沖區(qū)的數(shù)據(jù)讀寫裝置,包括:
3、環(huán)形緩存區(qū)域,包括多個(gè)塊地址組成的虛擬地址;
4、內(nèi)存文件,與所述環(huán)形緩存區(qū)域關(guān)聯(lián),用于存儲(chǔ)寫入到塊地址的數(shù)據(jù);
5、異常處理函數(shù),用于設(shè)置所述多個(gè)塊地址的塊屬性,所述塊屬性包括:寫模式、讀模式和不可讀寫模式;
6、在進(jìn)行數(shù)據(jù)讀寫時(shí),按照塊地址的塊屬性,執(zhí)行數(shù)據(jù)讀取操作;或,從所述內(nèi)存文件中確定塊地址映射的頁文件,執(zhí)行數(shù)據(jù)寫入操作。
7、可選地,包括:
8、所述異常處理函數(shù),還用于在所述數(shù)據(jù)寫入操作的寫入地址超過了所述塊地址的情況下,從所述內(nèi)存文件中確定下一個(gè)塊地址映射的頁文件,將所述塊地址的塊屬性修改為讀模式;并將所述下一個(gè)塊地址的塊屬性修改為寫模式;
9、所述異常處理函數(shù),還用于在所述數(shù)據(jù)讀取操作讀取塊屬性為寫模式的塊地址的情況下,確定所述數(shù)據(jù)讀取操作的讀取長度信息,判斷是否改變所述塊地址的塊屬性。
10、可選地,還包括:
11、讀指針,用于指向所述環(huán)形緩存區(qū)域?qū)?yīng)的虛擬地址中可讀的數(shù)據(jù)位置;
12、寫指針,用于指向所述環(huán)形緩存區(qū)域?qū)?yīng)的虛擬地址中可寫的數(shù)據(jù)位置;
13、通過移動(dòng)所述寫指針將數(shù)據(jù)存儲(chǔ)到所述環(huán)形緩存區(qū)域?qū)?yīng)的虛擬地址等待被讀?。煌ㄟ^移動(dòng)所述讀指針將數(shù)據(jù)讀出所述環(huán)形緩存區(qū)域?qū)?yīng)的虛擬地址并釋放所述環(huán)形緩存區(qū)域。
14、可選地,包括:
15、所述異常處理函數(shù),還用于在所述讀指針處于所述虛擬地址的最末端的情況下,和/或,所述寫指針處于所述虛擬地址的最末端的情況下,將對應(yīng)的指針回滾到虛擬地址的起始;所述虛擬地址的起始表征:組成所述虛擬地址的第一個(gè)塊地址的起始。
16、根據(jù)本公開實(shí)施例的第二方面,提供一種動(dòng)態(tài)高效緩沖區(qū)的數(shù)據(jù)讀寫方法,包括:
17、獲取數(shù)據(jù)狀態(tài),所述數(shù)據(jù)狀態(tài)包括:讀數(shù)據(jù)和寫數(shù)據(jù);
18、在所述數(shù)據(jù)狀態(tài)為讀數(shù)據(jù)的情況下,按照塊地址的塊屬性,執(zhí)行數(shù)據(jù)讀取操作;
19、在所述數(shù)據(jù)狀態(tài)為寫數(shù)據(jù)的情況下,從內(nèi)存文件中確定塊地址映射的頁文件,執(zhí)行數(shù)據(jù)寫入操作。
20、可選地,所述塊屬性包括寫模式、讀模式和不可讀寫模式,在所述數(shù)據(jù)狀態(tài)為讀數(shù)據(jù)的情況下,按照塊地址的塊屬性,執(zhí)行數(shù)據(jù)讀取操作,包括:
21、在所述數(shù)據(jù)讀取操作讀取所述塊屬性為讀模式的塊地址的情況下,直接對所述塊地址中的數(shù)據(jù)進(jìn)行讀??;
22、在所述數(shù)據(jù)讀取操作讀取所述塊屬性為寫模式的塊地址的情況下,確定所述數(shù)據(jù)讀取操作的讀取長度信息;根據(jù)所述讀取長度信息,確定所述數(shù)據(jù)讀取操作的執(zhí)行動(dòng)作。
23、可選地,所述根據(jù)所述讀取長度信息,確定所述數(shù)據(jù)讀取操作的執(zhí)行動(dòng)作,包括:
24、在所述數(shù)據(jù)讀取操作的讀取長度信息小于所述塊地址中的數(shù)據(jù)長度的情況下,將所述塊地址的塊屬性修改為讀模式;從所述塊地址中讀取數(shù)據(jù);在所述數(shù)據(jù)讀取操作執(zhí)行完成之后,將所述塊地址的塊屬性修改回寫模式;
25、在所述數(shù)據(jù)讀取操作的讀取長度大于所述塊地址中的數(shù)據(jù)長度的情況下,取消對所述塊地址的數(shù)據(jù)讀取操作。
26、可選地,在所述數(shù)據(jù)讀取操作的讀取長度大于所述塊地址中的數(shù)據(jù)長度的情況下,還包括:
27、使所述數(shù)據(jù)讀取操作處于等待狀態(tài);
28、在所述塊地址中的數(shù)據(jù)長度大于所述數(shù)據(jù)讀取操作的讀取長度的情況下,喚醒所述數(shù)據(jù)讀取操作,并將所述塊地址的塊屬性修改為讀模式,所述數(shù)據(jù)讀取操作從所述塊地址中讀取數(shù)據(jù);在數(shù)據(jù)讀取完成之后,將所述塊地址的塊屬性修改回寫模式。
29、可選地,對所述塊地址中的數(shù)據(jù)進(jìn)行讀取,還包括:
30、在所述數(shù)據(jù)讀取操作讀取到所述塊地址的最末端的情況下,釋放所述塊地址映射的頁文件。
31、可選地,按照所述塊地址的順序依次執(zhí)行所述數(shù)據(jù)寫入操作,在所述數(shù)據(jù)狀態(tài)為寫數(shù)據(jù)的情況下,從所述內(nèi)存文件中確定塊地址映射的頁文件,包括:
32、將當(dāng)前執(zhí)行數(shù)據(jù)寫入操作的塊地址確定為第一塊地址,在所述第一塊地址未映射頁文件的情況下,從所述內(nèi)存文件中確定所述第一塊地址映射的頁文件;將所述第一塊地址的塊屬性確定為寫模式;所述寫模式表征:所述塊地址只允許數(shù)據(jù)寫入,且所述塊地址未寫滿;
33、對所述第一塊地址執(zhí)行數(shù)據(jù)寫入操作;
34、在所述數(shù)據(jù)寫入操作的寫入地址超過了所述第一塊地址的情況下,將與所述第一塊地址相鄰的下一個(gè)塊地址確定為第二塊地址,從所述內(nèi)存文件中確定所述第二塊地址映射的頁文件;將所述第二塊地址的塊屬性確定為寫模式,并將所述第一塊地址的塊屬性確定為讀模式;所述讀模式表征:所述塊地址已寫滿,允許數(shù)據(jù)讀取操作;
35、對第二塊地址執(zhí)行數(shù)據(jù)寫入操作。
36、可選地,各個(gè)塊地址按地址順序組成虛擬地址,還包括:
37、在所述數(shù)據(jù)讀取操作讀取到所述虛擬地址的最末端的情況下,或,在所述數(shù)據(jù)寫入操作寫入到所述虛擬地址的最末端的情況下,將地址回滾到所述虛擬地址的起始,從所述虛擬地址中的第一個(gè)所述塊地址的起始開始執(zhí)行數(shù)據(jù)寫入操作或數(shù)據(jù)讀取操作。
38、根據(jù)本公開實(shí)施例的第三方面,提供一種電子設(shè)備,包括:存儲(chǔ)器、處理器及存儲(chǔ)在所述存儲(chǔ)器上并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被所述處理器執(zhí)行時(shí),實(shí)現(xiàn)如第二方面中所述的動(dòng)態(tài)高效緩沖區(qū)的數(shù)據(jù)讀寫方法的步驟。
39、根據(jù)本公開實(shí)施例的第四方面,提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí),實(shí)現(xiàn)如第二方面中所述的動(dòng)態(tài)高效緩沖區(qū)的數(shù)據(jù)讀寫方法的步驟。
40、根據(jù)本公開實(shí)施例的第五方面,提供一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)第二方面所述的動(dòng)態(tài)高效緩沖區(qū)的數(shù)據(jù)讀寫方法的步驟。
41、本公開將多個(gè)塊地址組成的虛擬地址作為環(huán)形緩存區(qū)域,通過設(shè)置塊地址的塊屬性,以根據(jù)數(shù)據(jù)的實(shí)際需求和狀態(tài)靈活地處理數(shù)據(jù)讀寫操作,按照塊地址的塊屬性,執(zhí)行對應(yīng)的數(shù)據(jù)讀取操作或者數(shù)據(jù)寫入操作,無需每一次都判斷數(shù)據(jù)是否到達(dá)環(huán)形緩存區(qū)域的尾部;通過將環(huán)形緩存區(qū)域確定為一個(gè)虛擬地址,并將虛擬地址與內(nèi)存文件進(jìn)行關(guān)聯(lián),在執(zhí)行數(shù)據(jù)寫入操作的時(shí)候,從內(nèi)存文件中確定一個(gè)頁文件與塊地址進(jìn)行映射,可以有效利用內(nèi)存空間;通過異常處理函數(shù)來改變塊地址的塊屬性,實(shí)現(xiàn)對塊地址讀取狀態(tài)的管理,不用考慮讀寫回滾問題,使主程序不用處理額外的讀寫邏輯。