亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種共享內(nèi)存的訪問(wèn)控制方法、裝置及系統(tǒng)與流程

文檔序號(hào):11949849閱讀:316來(lái)源:國(guó)知局
一種共享內(nèi)存的訪問(wèn)控制方法、裝置及系統(tǒng)與流程

本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及內(nèi)核態(tài)安全訪問(wèn)用戶態(tài)共享內(nèi)存的控制方法、裝置及系統(tǒng)。



背景技術(shù):

在Linux系統(tǒng)中,用戶態(tài)進(jìn)程與操作系統(tǒng)內(nèi)核通過(guò)共享內(nèi)存進(jìn)行通信,用戶態(tài)進(jìn)程和操作系統(tǒng)內(nèi)核能夠訪問(wèn)同一塊內(nèi)存,以實(shí)現(xiàn)數(shù)據(jù)通信。

在實(shí)際應(yīng)用場(chǎng)景中,用戶態(tài)進(jìn)程由于某些原因?qū)е逻M(jìn)程崩潰,需要自動(dòng)重啟。而在用戶態(tài)進(jìn)程發(fā)生崩潰到完成重啟這一段時(shí)間內(nèi),用戶態(tài)進(jìn)程異常退出,其占用的共享內(nèi)存就會(huì)被回收,再被重新分配給其他的進(jìn)程使用,而訪問(wèn)該用戶態(tài)進(jìn)程的操作系統(tǒng)內(nèi)核卻不知道用戶態(tài)進(jìn)程已經(jīng)崩潰,還是一如既往地繼續(xù)訪問(wèn)共享內(nèi)存,此時(shí),從共享內(nèi)存讀取的數(shù)據(jù),對(duì)于操作系統(tǒng)內(nèi)核而言就是錯(cuò)誤數(shù)據(jù),嚴(yán)重時(shí),該錯(cuò)誤數(shù)據(jù)會(huì)導(dǎo)致操作系統(tǒng)內(nèi)核產(chǎn)生無(wú)法恢復(fù)的異常問(wèn)題,導(dǎo)致系統(tǒng)死機(jī)。



技術(shù)實(shí)現(xiàn)要素:

本申請(qǐng)所要解決的技術(shù)問(wèn)題是提供共享內(nèi)存的訪問(wèn)控制方法,能夠在一定程度上防止內(nèi)核模塊訪問(wèn)錯(cuò)誤數(shù)據(jù),從而避免出現(xiàn)由于錯(cuò)誤數(shù)據(jù)導(dǎo)致了操作系統(tǒng)內(nèi)核產(chǎn)生無(wú)法恢復(fù)的異常問(wèn)題,在一定程度上能夠提高操作系統(tǒng)運(yùn)行的穩(wěn)定性和健壯性。

另外,本申請(qǐng)還提供了一種共享內(nèi)存的訪問(wèn)控制裝置及系統(tǒng),用于保證上述方法在實(shí)際中的實(shí)現(xiàn)以及應(yīng)用。

在本申請(qǐng)第一方面提供了一種共享內(nèi)存的訪問(wèn)控制方法,所述方法包括:

監(jiān)控用戶態(tài)進(jìn)程的狀態(tài);

若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存;

當(dāng)所述線程結(jié)束訪問(wèn)時(shí),觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

可選的,所述方法還包括:

設(shè)置所述用戶態(tài)進(jìn)程對(duì)應(yīng)的訪問(wèn)計(jì)數(shù)器;所述訪問(wèn)計(jì)數(shù)器用于記錄所述用戶態(tài)進(jìn)程的共享內(nèi)存正在被訪問(wèn)的次數(shù);

則所述若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存,包括:

若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),且根據(jù)所述訪問(wèn)計(jì)數(shù)器的計(jì)數(shù)值,控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存。

可選的,所述控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存,包括:

禁止發(fā)起新線程訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存;或,

控制正在訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存的線程,盡快結(jié)束訪問(wèn)。

可選的,所述方法還包括:

監(jiān)控正在訪問(wèn)所述共享內(nèi)存的線程是否在預(yù)設(shè)時(shí)間內(nèi)結(jié)束訪問(wèn),如果否,則再次通知正在訪問(wèn)所述共享內(nèi)存的線程盡快結(jié)束訪問(wèn)。

可選的,所述方法還包括:

禁止中央處理器對(duì)所述線程發(fā)起進(jìn)程調(diào)度,并在所述線程訪問(wèn)完畢時(shí),解除禁止。

可選的,所述方法還包括:

預(yù)先注冊(cè)與所述用戶態(tài)進(jìn)程相關(guān)的回調(diào)函數(shù);

則通過(guò)所述回調(diào)函數(shù)被調(diào)用方式,監(jiān)控得到用戶態(tài)進(jìn)程的狀態(tài)。

可選的,所述方法還包括:

設(shè)置所述用戶態(tài)進(jìn)程調(diào)用預(yù)設(shè)的字符設(shè)備驅(qū)動(dòng)中的release函數(shù)實(shí)現(xiàn)用戶態(tài)進(jìn)程的退出;所述release函數(shù)用于感知所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),并在確定訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存的線程結(jié)束訪問(wèn)時(shí),再觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

可選的,所述方法還包括:

設(shè)置所述用戶態(tài)進(jìn)程調(diào)用預(yù)設(shè)的字符設(shè)備驅(qū)動(dòng)中的open函數(shù)實(shí)現(xiàn)用戶態(tài)進(jìn)程的啟動(dòng);所述open函數(shù)用于實(shí)時(shí)感知用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)。

在本申請(qǐng)第二方面提供了一種共享內(nèi)存的訪問(wèn)控制裝置,所述裝置包括:

監(jiān)控模塊、線程訪問(wèn)控制模塊、用戶態(tài)進(jìn)程退出控制模塊;

其中,所述監(jiān)控模塊,用于監(jiān)控用戶態(tài)進(jìn)程的狀態(tài);若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),觸發(fā)所述線程訪問(wèn)控制模塊;

所述線程訪問(wèn)控制模塊,用于若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存;當(dāng)所述線程結(jié)束訪問(wèn)時(shí),觸發(fā)用戶態(tài)進(jìn)程退出控制模塊;

所述用戶態(tài)進(jìn)程退出控制模塊,用于當(dāng)所述線程結(jié)束訪問(wèn)時(shí),觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

可選的,所述裝置還包括:

訪問(wèn)計(jì)數(shù)模塊,用于設(shè)置所述用戶態(tài)進(jìn)程對(duì)應(yīng)的訪問(wèn)計(jì)數(shù)器;所述訪問(wèn)計(jì)數(shù)器用于記錄所述用戶態(tài)進(jìn)程的共享內(nèi)存正在被訪問(wèn)的次數(shù);

則所述線程訪問(wèn)控制模塊,具體用于:

若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),且根據(jù)所述訪問(wèn)計(jì)數(shù)器的計(jì)數(shù)值,控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存。

可選的,所述線程訪問(wèn)控制模塊,包括:

禁止子模塊,用于禁止發(fā)起新線程訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存;或,

控制子模塊,用于控制正在訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存的線程,盡快結(jié)束訪問(wèn)。

可選的,所述裝置還包括:

延遲再通知模塊,用于監(jiān)控正在訪問(wèn)所述共享內(nèi)存的線程是否在預(yù)設(shè)時(shí)間內(nèi)結(jié)束訪問(wèn),如果否,則再次通知正在訪問(wèn)所述共享內(nèi)存的線程盡快結(jié)束訪問(wèn)。

可選的,所述裝置還包括:

禁止模塊,用于禁止中央處理器對(duì)所述線程發(fā)起進(jìn)程調(diào)度,并在所述線程訪問(wèn)完畢時(shí),解除禁止。

可選的,所述裝置還包括:

注冊(cè)模塊,用于預(yù)先注冊(cè)與所述用戶態(tài)進(jìn)程相關(guān)的回調(diào)函數(shù);

則所述監(jiān)控模塊具體通過(guò)所述回調(diào)函數(shù)被調(diào)用方式,監(jiān)控得到用戶態(tài)進(jìn)程的狀態(tài)。

可選的,所述裝置還包括:

第一設(shè)置模塊,用于設(shè)置所述用戶態(tài)進(jìn)程調(diào)用預(yù)設(shè)的字符設(shè)備驅(qū)動(dòng)中的release函數(shù)實(shí)現(xiàn)用戶態(tài)進(jìn)程的退出;所述release函數(shù)用于感知所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),并在確定訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存的線程結(jié)束訪問(wèn)時(shí),再觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

可選的,所述裝置還包括:

第二設(shè)置模塊,用于設(shè)置所述用戶態(tài)進(jìn)程調(diào)用預(yù)設(shè)的字符設(shè)備驅(qū)動(dòng)中的open函數(shù)實(shí)現(xiàn)用戶態(tài)進(jìn)程的啟動(dòng);所述open函數(shù)用于實(shí)時(shí)感知用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)。

在本申請(qǐng)第三方面提供了一種共享內(nèi)存的訪問(wèn)控制系統(tǒng),所述系統(tǒng)包括:

狀態(tài)感知模塊、消息發(fā)布模塊、以及配置有上述第二方面描述的共享內(nèi)存的訪問(wèn)控制裝置的內(nèi)核模塊;

其中,所述狀態(tài)感知模塊,用于實(shí)時(shí)感知用戶態(tài)進(jìn)程的狀態(tài),并將所述狀態(tài)發(fā)送至所述消息發(fā)布模塊;

所述消息發(fā)布模塊,用于向所述內(nèi)核模塊發(fā)布所述用戶態(tài)進(jìn)程的狀態(tài)。

可選的,所述狀態(tài)感知模塊包括:

第一感知子模塊,用于通過(guò)預(yù)設(shè)的open函數(shù)實(shí)時(shí)感知所述用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài),并觸發(fā)所述消息發(fā)布模塊向所述內(nèi)核模塊發(fā)布所述用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)的消息;

第二感知子模塊,用于通過(guò)預(yù)設(shè)的release函數(shù)實(shí)時(shí)感知所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),觸發(fā)所述消息發(fā)布模塊向所述內(nèi)核模塊發(fā)布所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)的消息;其中,所述release函數(shù)被設(shè)置為在確定訪問(wèn)所述共享內(nèi)存的線程都結(jié)束時(shí),再執(zhí)行退出。

可選的,所述消息發(fā)布模塊,包括:

注冊(cè)記錄子模塊,用于記錄所述內(nèi)核模塊預(yù)先注冊(cè)的、與所述用戶態(tài)進(jìn)程對(duì)應(yīng)的回調(diào)函數(shù);

消息發(fā)布子模塊,用于通過(guò)調(diào)用與所述用戶態(tài)進(jìn)程對(duì)應(yīng)的回調(diào)函數(shù)地方式,向所述內(nèi)核模塊發(fā)布所述用戶態(tài)進(jìn)程的狀態(tài)。

與現(xiàn)有技術(shù)相比,本申請(qǐng)?zhí)峁┑募夹g(shù)方案具有以下優(yōu)點(diǎn):

本申請(qǐng)?zhí)峁┑募夹g(shù)方案提出了用戶態(tài)進(jìn)程狀態(tài)的監(jiān)控機(jī)制和內(nèi)核模塊根據(jù)用戶態(tài)進(jìn)程狀態(tài)控制訪問(wèn)的工作機(jī)制;基于該監(jiān)控機(jī)制,內(nèi)核模塊能夠在第一時(shí)間了解到用戶態(tài)進(jìn)程的狀態(tài),并按照這種工作機(jī)制,在發(fā)現(xiàn)用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)時(shí),及時(shí)控制正在訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存的線程,盡快停止訪問(wèn);并且該內(nèi)核模塊停止發(fā)起新的訪問(wèn)進(jìn)程。在訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存的線程都結(jié)束訪問(wèn)時(shí),用戶態(tài)進(jìn)程才會(huì)完全退出,在用戶態(tài)進(jìn)程完全退出時(shí),其占用的共享內(nèi)存才會(huì)被操作系統(tǒng)回收再利用??梢钥闯觯罕旧暾?qǐng)?zhí)岢隽诉@種監(jiān)控機(jī)制和內(nèi)核模塊的工作機(jī)制,內(nèi)核模塊在用戶態(tài)進(jìn)程崩潰重啟階段,不會(huì)訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存,不會(huì)獲取到錯(cuò)誤數(shù)據(jù),從而能夠避免因錯(cuò)誤數(shù)據(jù)引發(fā)操作系統(tǒng)穩(wěn)定性問(wèn)題。

附圖說(shuō)明

為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1是本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制方法的流程圖;

圖2是本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制裝置的結(jié)構(gòu)圖;

圖3是本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制系統(tǒng)的結(jié)構(gòu)圖;

圖4是本申請(qǐng)?zhí)峁┑膱D3所示控制系統(tǒng)的工作原理圖。

具體實(shí)施方式

下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。

本申請(qǐng)可用于眾多通用或?qū)S玫挠?jì)算裝置環(huán)境或配置中。例如:個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器裝置、包括以上任何裝置或設(shè)備的分布式計(jì)算環(huán)境等等。

本申請(qǐng)可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本申請(qǐng),在這些分布式計(jì)算環(huán)境中,由通過(guò)通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。

本申請(qǐng)?zhí)峁┑募夹g(shù)方案提供了一種共享內(nèi)存的訪問(wèn)控制方法,與現(xiàn)有技術(shù)所不同的是,在本申請(qǐng)中內(nèi)核模塊不是盲目地發(fā)起線程直接訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存,而是基于本申請(qǐng)?zhí)峁┑膬?nèi)核模塊工作機(jī)制,根據(jù)用戶態(tài)進(jìn)程的狀態(tài),控制線程對(duì)共享內(nèi)存的訪問(wèn)情況。尤其是在,用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)時(shí),內(nèi)核模塊能夠及時(shí)控制線程結(jié)束對(duì)共享內(nèi)存的訪問(wèn),并在所有線程完成對(duì)共享內(nèi)存的訪問(wèn)時(shí),再觸發(fā)用戶態(tài)進(jìn)程完成退出。由于用戶態(tài)進(jìn)程崩潰或者出現(xiàn)異常時(shí),用戶態(tài)進(jìn)程就會(huì)進(jìn)入退出狀態(tài),在用戶態(tài)進(jìn)程完成退出時(shí),系統(tǒng)才會(huì)回收用戶態(tài)進(jìn)程占用的共享內(nèi)存。因此,利用本申請(qǐng)?zhí)峁┑募夹g(shù)方案,內(nèi)核模塊能夠根據(jù)用戶態(tài)進(jìn)程的實(shí)際狀態(tài),及時(shí)控制線程的訪問(wèn)情況,從而避免盲目訪問(wèn)共享內(nèi)存得到錯(cuò)誤數(shù)據(jù)引發(fā)操作系統(tǒng)穩(wěn)定性的問(wèn)題。

另一方面為了保證本申請(qǐng)的建立方法在實(shí)際中的應(yīng)用和實(shí)現(xiàn),基于與上述方法相同的技術(shù)思路,本申請(qǐng)還提供了一種共享內(nèi)存的訪問(wèn)控制裝置、一種共享內(nèi)存的訪問(wèn)控制系統(tǒng)。該裝置、該系統(tǒng)能夠達(dá)到與方法相同的技術(shù)效果。

為了方便本領(lǐng)域技術(shù)人員很好地理解本申請(qǐng)的技術(shù)方案,先對(duì)本申請(qǐng)涉及到的技術(shù)名詞進(jìn)行簡(jiǎn)單介紹。

一般來(lái)說(shuō),進(jìn)程即可在用戶模式下運(yùn)行,又可在內(nèi)核模式下運(yùn)行。內(nèi)核模式的權(quán)限高于用戶模式的權(quán)限。進(jìn)程每次調(diào)用一個(gè)系統(tǒng)調(diào)用時(shí),進(jìn)程的運(yùn)行方式就發(fā)生變化:從用戶模式切換到內(nèi)核模式,然后繼續(xù)執(zhí)行。

可見:一個(gè)進(jìn)程在CPU上運(yùn)行可以有兩種運(yùn)行模式(進(jìn)程狀態(tài)):用戶模式和內(nèi)核模式。如果當(dāng)前運(yùn)行的是用戶程序(用戶代碼),那么對(duì)應(yīng)進(jìn)程就處于用戶模式(用戶態(tài))。則本申請(qǐng)中提到的用戶態(tài)進(jìn)程就是指運(yùn)行在用戶模式下的進(jìn)程。

Linux內(nèi)核引入了內(nèi)核模塊機(jī)制,通過(guò)動(dòng)態(tài)加載內(nèi)核模塊,使得在運(yùn)行過(guò)程中擴(kuò)展內(nèi)核的功能,不需要的時(shí)候,卸載該內(nèi)核模塊。可以理解的是,內(nèi)核模塊是一種沒(méi)有經(jīng)過(guò)鏈接,不能獨(dú)立運(yùn)行的目標(biāo)文件,是在內(nèi)核空間中運(yùn)行的程序。

為了方便本領(lǐng)域技術(shù)人員很好地理解本申請(qǐng)的技術(shù)方案,接下來(lái),對(duì)本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制方法進(jìn)行介紹。

參見圖1,圖1是本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制方法的流程圖,該方法是應(yīng)用于操作系統(tǒng)的內(nèi)核模塊中,如圖1所示,該方法包括:步驟101至步驟103:

步驟101:監(jiān)控用戶態(tài)進(jìn)程的狀態(tài)。

步驟102:若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存。

步驟103:當(dāng)所述線程結(jié)束訪問(wèn)時(shí),觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

在實(shí)現(xiàn)時(shí),為了能夠?qū)崟r(shí)監(jiān)控到用戶態(tài)進(jìn)程的狀態(tài),則圖1所示方法還可以包括:

設(shè)置所述用戶態(tài)進(jìn)程調(diào)用預(yù)設(shè)的字符設(shè)備驅(qū)動(dòng)中的release函數(shù)實(shí)現(xiàn)用戶態(tài)進(jìn)程的退出;所述release函數(shù)用于感知所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),并在確定訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存的線程結(jié)束訪問(wèn)時(shí),再觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

進(jìn)一步地,為了實(shí)時(shí)獲知用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài),則圖1所示方法還可以包括:

設(shè)置所述用戶態(tài)進(jìn)程調(diào)用預(yù)設(shè)的字符設(shè)備驅(qū)動(dòng)中的open函數(shù)實(shí)現(xiàn)用戶態(tài)進(jìn)程的啟動(dòng);所述open函數(shù)用于實(shí)時(shí)感知用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)。

這樣,用戶態(tài)進(jìn)程在調(diào)用release函數(shù),就能夠在第一時(shí)間感知到用戶態(tài)進(jìn)行進(jìn)入退出狀態(tài);或者,用戶態(tài)進(jìn)程調(diào)用open函數(shù)時(shí),就能夠在第一時(shí)間感知到用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)。

進(jìn)一步地,發(fā)明人考慮到一個(gè)內(nèi)核模塊可能發(fā)起多個(gè)線程訪問(wèn)同一用戶態(tài)進(jìn)程的共享內(nèi)存,而這多個(gè)線程間經(jīng)常是不同步的,因此,基于這種應(yīng)用場(chǎng)景的考慮,為了盡可能地防止出現(xiàn)內(nèi)核模塊訪問(wèn)錯(cuò)誤數(shù)據(jù)引起操作系統(tǒng)穩(wěn)定性問(wèn)題,發(fā)明人提供了可選的方案,該方案是在圖1所示方法的基礎(chǔ)上,增加如下步驟:

設(shè)置所述用戶態(tài)進(jìn)程對(duì)應(yīng)的訪問(wèn)計(jì)數(shù)器;所述訪問(wèn)計(jì)數(shù)器用于記錄所述用戶態(tài)進(jìn)程的共享內(nèi)存正在被訪問(wèn)的次數(shù);

則所述若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存,包括:

若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),且根據(jù)所述訪問(wèn)計(jì)數(shù)器的計(jì)數(shù)值,控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存。

在實(shí)現(xiàn)時(shí),所述內(nèi)核模塊發(fā)起線程訪問(wèn)所述共享內(nèi)存時(shí),控制所述訪問(wèn)計(jì)數(shù)器執(zhí)行一次計(jì)數(shù),在線程訪問(wèn)結(jié)束時(shí),控制該訪問(wèn)計(jì)數(shù)器撤銷一次計(jì)數(shù);(例如:在線程發(fā)起訪問(wèn)時(shí),控制該訪問(wèn)計(jì)數(shù)器執(zhí)行加一,在線程訪問(wèn)結(jié)束時(shí),控制所述訪問(wèn)計(jì)數(shù)器執(zhí)行減一;),則該訪問(wèn)計(jì)數(shù)器就能夠記錄共享內(nèi)存正在被訪問(wèn)的次數(shù)。

其中,所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),且根據(jù)所述訪問(wèn)計(jì)數(shù)器的計(jì)數(shù)值,控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存,可以包括:

若所述狀態(tài)標(biāo)識(shí)所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),且所述訪問(wèn)計(jì)數(shù)器的計(jì)數(shù)值為零,則禁止發(fā)起新線程訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存;若所述狀態(tài)標(biāo)識(shí)所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),且所述訪問(wèn)計(jì)數(shù)器的計(jì)數(shù)值不為零,則禁止發(fā)起新線程訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存,并控制正在訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存的線程,盡快結(jié)束訪問(wèn)。

由于每個(gè)線程的訪問(wèn)情況不同,因此,為了控制線程盡快結(jié)束訪問(wèn),在所述方法的基礎(chǔ)上,所述方法還可以包括:

監(jiān)控正在訪問(wèn)所述共享內(nèi)存的線程是否在預(yù)設(shè)時(shí)間內(nèi)結(jié)束訪問(wèn),如果否,則再次通知正在訪問(wèn)所述共享內(nèi)存的線程盡快結(jié)束訪問(wèn)。

可以看出:通過(guò)時(shí)間監(jiān)控,多次通知的方式控制線程盡快結(jié)束對(duì)共享內(nèi)存的訪問(wèn)。

另外,本申請(qǐng)發(fā)明人還考慮到操作系統(tǒng)在實(shí)際運(yùn)行過(guò)程中,CPU(Central Processing Unit,中央處理器)是可以根據(jù)需求調(diào)度進(jìn)程的,被調(diào)度的進(jìn)程會(huì)暫停進(jìn)程處理,待調(diào)度結(jié)束后,進(jìn)程在恢復(fù)處理。但考慮到,如果內(nèi)核模塊發(fā)起的線程如果被調(diào)用,訪問(wèn)共享內(nèi)存的過(guò)程就會(huì)被打斷,導(dǎo)致引用計(jì)數(shù)長(zhǎng)期得不到釋放,因此,為了保證內(nèi)核模塊的工作機(jī)制正常進(jìn)行,發(fā)明人提供了可選的方案,該方案是在圖1所示方法的基礎(chǔ)上,還可以包括如下步驟:

禁止中央處理器對(duì)所述線程發(fā)起進(jìn)程調(diào)度,并在所述線程訪問(wèn)完畢時(shí),解除禁止。

可以理解為,在所述內(nèi)核模塊發(fā)起線程訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存之前,禁止中央處理器對(duì)所述內(nèi)核模塊發(fā)起進(jìn)程調(diào)度,并在所述線程執(zhí)行完畢訪問(wèn)時(shí),解除禁止。即,在線程訪問(wèn)共享內(nèi)存期間,整個(gè)訪問(wèn)過(guò)程不會(huì)被隨意打斷。

可以看出:利用“禁止-解除CPU調(diào)度”機(jī)制,既能夠避免CPU在內(nèi)核模塊訪問(wèn)共享內(nèi)存過(guò)程中對(duì)進(jìn)程的隨意調(diào)度,又能夠在第一時(shí)間解除禁止,盡可能減少對(duì)CPU調(diào)度需求的影響。

另外,為了兼容系統(tǒng)的底層實(shí)現(xiàn),本申請(qǐng)還提供了以下方案,用于實(shí)現(xiàn)實(shí)時(shí)監(jiān)控用戶態(tài)進(jìn)程的狀態(tài),則在圖1所示方法的基礎(chǔ)上,還可以包括如下步驟:

預(yù)先注冊(cè)與所述用戶態(tài)進(jìn)程相關(guān)的回調(diào)函數(shù);

則通過(guò)所述回調(diào)函數(shù)被調(diào)用方式,監(jiān)控得到用戶態(tài)進(jìn)程的狀態(tài)。

即,對(duì)于內(nèi)核模塊而言,需要預(yù)先在內(nèi)核中注冊(cè)待訪問(wèn)的用戶態(tài)進(jìn)程相關(guān)的回調(diào)函數(shù),然后,在實(shí)現(xiàn)時(shí),就可以通過(guò)回調(diào)函數(shù)在第一時(shí)間向內(nèi)核模塊發(fā)布關(guān)于用戶態(tài)進(jìn)程所處狀態(tài)的消息,則內(nèi)核模塊可以在第一時(shí)間監(jiān)控到用戶態(tài)進(jìn)程的狀態(tài)。

可以看出,本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制方法,該方法運(yùn)行在內(nèi)核中,該方法提出了監(jiān)控機(jī)制和線程訪問(wèn)控制機(jī)制,基于該監(jiān)控機(jī)制,內(nèi)核模塊能夠在第一時(shí)間了解到用戶態(tài)進(jìn)程的狀態(tài),并按照這種工作機(jī)制,在發(fā)現(xiàn)用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)時(shí),及時(shí)控制正在訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存的線程,盡快停止訪問(wèn);并且該內(nèi)核模塊停止發(fā)起新的訪問(wèn)進(jìn)程。在訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存的線程都結(jié)束訪問(wèn)時(shí),用戶態(tài)進(jìn)程才會(huì)完全退出,在用戶態(tài)進(jìn)程完全退出時(shí),其占用的共享內(nèi)存才會(huì)被操作系統(tǒng)回收再利用。而在用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)時(shí),則表明用戶態(tài)進(jìn)程處于正常運(yùn)行狀態(tài),此時(shí)內(nèi)核模塊可以發(fā)起線程訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存。因此,本申請(qǐng)?zhí)岢隽诉@種監(jiān)控機(jī)制和內(nèi)核模塊的工作機(jī)制,內(nèi)核模塊在用戶態(tài)進(jìn)程崩潰重啟階段,不會(huì)訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存,不會(huì)獲取到錯(cuò)誤數(shù)據(jù),從而能夠避免因錯(cuò)誤數(shù)據(jù)引發(fā)操作系統(tǒng)穩(wěn)定性問(wèn)題。

與上述方法相對(duì)應(yīng)的,本申請(qǐng)還提供了一種共享內(nèi)存的訪問(wèn)控制裝置,接下來(lái)結(jié)合圖2對(duì)該裝置進(jìn)行解釋說(shuō)明。

參見圖2,圖2示出了本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制裝置的結(jié)構(gòu)圖,該裝置應(yīng)用于內(nèi)核模塊中,如圖2所示,該裝置可以包括:監(jiān)控模塊201、線程訪問(wèn)控制模塊202、用戶態(tài)進(jìn)程退出控制模塊203;下面結(jié)合該裝置的工作原理,對(duì)其內(nèi)部各模塊的功能及其聯(lián)接關(guān)系進(jìn)行解釋說(shuō)明。

其中,所述監(jiān)控模塊201,用于監(jiān)控用戶態(tài)進(jìn)程的狀態(tài);若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),觸發(fā)所述線程訪問(wèn)控制模塊202。

所述線程訪問(wèn)控制模塊202,用于若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存;當(dāng)所述線程結(jié)束訪問(wèn)時(shí),觸發(fā)用戶態(tài)進(jìn)程退出控制模塊203。

所述用戶態(tài)進(jìn)程退出控制模塊203,用于當(dāng)所述線程結(jié)束訪問(wèn)時(shí),觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

可選的,所述裝置還包括:

訪問(wèn)計(jì)數(shù)模塊,用于設(shè)置所述用戶態(tài)進(jìn)程對(duì)應(yīng)的訪問(wèn)計(jì)數(shù)器;所述訪問(wèn)計(jì)數(shù)器用于記錄所述用戶態(tài)進(jìn)程的共享內(nèi)存正在被訪問(wèn)的次數(shù);

則所述線程訪問(wèn)控制模塊,具體用于:

若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),且根據(jù)所述訪問(wèn)計(jì)數(shù)器的計(jì)數(shù)值,控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存。

可選的,所述線程訪問(wèn)控制模塊,包括:

禁止子模塊,用于禁止發(fā)起新線程訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存;或,

控制子模塊,用于控制正在訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存的線程,盡快結(jié)束訪問(wèn)。

可選的,所述裝置還包括:

延遲再通知模塊,用于監(jiān)控正在訪問(wèn)所述共享內(nèi)存的線程是否在預(yù)設(shè)時(shí)間內(nèi)結(jié)束訪問(wèn),如果否,則再次通知正在訪問(wèn)所述共享內(nèi)存的線程盡快結(jié)束訪問(wèn)。

可選的,所述裝置還包括:

禁止模塊,用于禁止中央處理器對(duì)所述線程發(fā)起進(jìn)程調(diào)度,并在所述線程訪問(wèn)完畢時(shí),解除禁止。

可選的,所述裝置還包括:

注冊(cè)模塊,用于預(yù)先注冊(cè)與所述用戶態(tài)進(jìn)程相關(guān)的回調(diào)函數(shù);

則所述監(jiān)控模塊具體通過(guò)所述回調(diào)函數(shù)被調(diào)用方式,監(jiān)控得到用戶態(tài)進(jìn)程的狀態(tài)。

可選的,所述裝置還包括:

第一設(shè)置模塊,用于設(shè)置所述用戶態(tài)進(jìn)程調(diào)用預(yù)設(shè)的字符設(shè)備驅(qū)動(dòng)中的release函數(shù)實(shí)現(xiàn)用戶態(tài)進(jìn)程的退出;所述release函數(shù)用于感知所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),并在確定訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存的線程結(jié)束訪問(wèn)時(shí),再觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

可選的,所述裝置還包括:

第二設(shè)置模塊,用于設(shè)置所述用戶態(tài)進(jìn)程調(diào)用預(yù)設(shè)的字符設(shè)備驅(qū)動(dòng)中的open函數(shù)實(shí)現(xiàn)用戶態(tài)進(jìn)程的啟動(dòng);所述open函數(shù)用于實(shí)時(shí)感知用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)。

可以看出,在操作系統(tǒng)內(nèi)核中部署本申請(qǐng)?zhí)峁┑墓蚕韮?nèi)存的訪問(wèn)控制裝置,能夠有效控制內(nèi)核模塊在用戶態(tài)進(jìn)程崩潰重啟階段,不會(huì)訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存,不會(huì)獲取到錯(cuò)誤數(shù)據(jù),從而能夠避免因錯(cuò)誤數(shù)據(jù)引發(fā)操作系統(tǒng)穩(wěn)定性問(wèn)題。

以上是對(duì)本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制方法、裝置進(jìn)行了解釋說(shuō)明。接下來(lái)對(duì)本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制系統(tǒng)進(jìn)行解釋說(shuō)明。參見圖3,圖3是本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制系統(tǒng)的結(jié)構(gòu)圖,如圖3所示,該系統(tǒng)300包括:

狀態(tài)感知模塊301、消息發(fā)布模塊302、以及內(nèi)核模塊303;

其中,所述狀態(tài)感知模塊301,用于實(shí)時(shí)感知用戶態(tài)進(jìn)程的狀態(tài),并將所述狀態(tài)發(fā)送至所述消息發(fā)布模塊;

所述消息發(fā)布模塊302,用于向所述內(nèi)核模塊通知所述用戶態(tài)進(jìn)程的狀態(tài);

所述內(nèi)核模塊303配置有本申請(qǐng)?zhí)峁┑囊环N共享內(nèi)存的訪問(wèn)控制裝置,該裝置的具體結(jié)構(gòu)和功能在上文中給出具體解釋說(shuō)明,可以參見上文以及圖2描述的內(nèi)容,此處不再贅述。

在本申請(qǐng)中,所述內(nèi)核模塊303,用于在所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)時(shí),控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存,并當(dāng)所述進(jìn)程結(jié)束訪問(wèn)時(shí),再觸發(fā)所述用戶態(tài)進(jìn)程完成退出。但需要說(shuō)明的是,在實(shí)現(xiàn)時(shí),該系統(tǒng)可以包括一個(gè)內(nèi)核模塊,也可以包括多個(gè)內(nèi)核模塊,多個(gè)內(nèi)核模塊可以對(duì)同一用戶態(tài)進(jìn)程的共享內(nèi)存進(jìn)行訪問(wèn),也可以對(duì)不同用戶態(tài)進(jìn)程的共享內(nèi)存進(jìn)行訪問(wèn)。圖3所示包含一個(gè)內(nèi)核模塊的結(jié)構(gòu),僅僅是為了便于解釋說(shuō)明,并不局限該系統(tǒng)的實(shí)際結(jié)構(gòu)。

當(dāng)該系統(tǒng)包括多個(gè)內(nèi)核模塊時(shí),則消息發(fā)布模塊與這多個(gè)內(nèi)核模塊進(jìn)行通信,向每個(gè)內(nèi)核模塊通知該內(nèi)核模塊所要訪問(wèn)的用戶態(tài)進(jìn)程的狀態(tài)情況。

關(guān)于狀態(tài)感知模塊301,本申請(qǐng)?zhí)峁┝艘环N可選的實(shí)現(xiàn)方案,該狀態(tài)感知模塊301可以包括:

第一感知子模塊,用于通過(guò)預(yù)設(shè)的open函數(shù)實(shí)時(shí)感知所述用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài),并觸發(fā)所述消息發(fā)布模塊向所述內(nèi)核模塊發(fā)布所述用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)的消息;

第二感知子模塊,用于通過(guò)預(yù)設(shè)的release函數(shù)實(shí)時(shí)感知所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),觸發(fā)所述消息發(fā)布模塊向所述內(nèi)核模塊發(fā)布所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)的消息,并且,設(shè)置所述release函數(shù)在確定訪問(wèn)所述共享內(nèi)存的線程都結(jié)束時(shí),再執(zhí)行退出。

這里需要說(shuō)明的是,本申請(qǐng)中提出的realease函數(shù)是專用于實(shí)時(shí)感知用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)的,并且,在該release函數(shù)返回之前,用戶態(tài)進(jìn)程是不會(huì)退出,用戶態(tài)進(jìn)程占用的共享內(nèi)存也不會(huì)被清理。即,用戶態(tài)進(jìn)程的退出過(guò)程必須調(diào)用release函數(shù),只有release函數(shù)返回后,用戶態(tài)進(jìn)程才能夠執(zhí)行退出,操作系統(tǒng)才清理用戶態(tài)進(jìn)程占用的共享內(nèi)存。但在用戶態(tài)進(jìn)程真正執(zhí)行退出之前,所有線程已經(jīng)結(jié)束了對(duì)用戶態(tài)進(jìn)程的共享內(nèi)存的訪問(wèn),因此,內(nèi)核模塊就不會(huì)訪問(wèn)到錯(cuò)誤數(shù)據(jù)。

這里需要說(shuō)明的是,在本申請(qǐng)中狀態(tài)感知模塊中預(yù)先配置有字符設(shè)備文件和字符設(shè)備驅(qū)動(dòng),其中字符設(shè)備驅(qū)動(dòng)包括:release函數(shù)和open函數(shù);預(yù)先配置好的字符設(shè)備文件和字符設(shè)備驅(qū)動(dòng)可理解為虛擬的字符設(shè)備文件和字符設(shè)備驅(qū)動(dòng),其是本申請(qǐng)為了實(shí)現(xiàn)實(shí)時(shí)監(jiān)控專門設(shè)置的,其不同于具有實(shí)際業(yè)務(wù)功能的字符設(shè)備文件、字符設(shè)備驅(qū)動(dòng)。

一個(gè)用戶態(tài)進(jìn)程啟動(dòng)或退出時(shí),是通過(guò)系統(tǒng)調(diào)用具有實(shí)際業(yè)務(wù)功能的字符設(shè)備文件、字符設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)的,但在本申請(qǐng)中,設(shè)置了虛擬的字符設(shè)備文件、虛擬的字符設(shè)備驅(qū)動(dòng),該設(shè)置的作用是,強(qiáng)制要求用戶態(tài)進(jìn)程在啟動(dòng)或退出時(shí),既按照傳統(tǒng)的方式系統(tǒng)調(diào)用具有實(shí)際業(yè)務(wù)功能的字符設(shè)備文件、字符設(shè)備驅(qū)動(dòng)的同時(shí),還需要通過(guò)系統(tǒng)調(diào)用本申請(qǐng)的虛擬的字符設(shè)備文件、虛擬的字符設(shè)備驅(qū)動(dòng)。

由于,用戶態(tài)進(jìn)程在啟動(dòng)時(shí),首先通過(guò)open系統(tǒng)調(diào)用打開狀態(tài)感知模塊中預(yù)設(shè)的字符設(shè)備文件,open系統(tǒng)調(diào)用最終一定會(huì)調(diào)用該設(shè)備的open函數(shù),因此,狀態(tài)感知模塊能夠通過(guò)open函數(shù)在第一時(shí)間感知到用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)。

而在用戶態(tài)進(jìn)程即將退出時(shí),操作系統(tǒng)會(huì)自動(dòng)關(guān)閉該用戶態(tài)進(jìn)程已打開的文件,該文件至少包括:狀態(tài)感知模塊對(duì)應(yīng)的字符設(shè)備文件,在關(guān)閉該字符設(shè)備文件時(shí),會(huì)自動(dòng)調(diào)用該設(shè)備的release函數(shù),因此,狀態(tài)感知模塊通過(guò)release函數(shù)就能夠在第一時(shí)間感知到用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)。因此,狀態(tài)感知模塊通過(guò)open函數(shù)和release函數(shù)就能夠在第一時(shí)間感知到用戶態(tài)進(jìn)程的狀態(tài)。

關(guān)于消息發(fā)布模塊302,本申請(qǐng)?zhí)峁┝丝蛇x的實(shí)現(xiàn)方案,該消息發(fā)布模塊302,可以包括:

注冊(cè)記錄子模塊,用于記錄所述內(nèi)核模塊預(yù)先注冊(cè)的、與所述用戶態(tài)進(jìn)程對(duì)應(yīng)的回調(diào)函數(shù);

消息發(fā)布子模塊,用于通過(guò)調(diào)用與所述用戶態(tài)進(jìn)程對(duì)應(yīng)的回調(diào)函數(shù)地方式,向所述內(nèi)核模塊發(fā)布所述用戶態(tài)進(jìn)程的狀態(tài)。

可以看出:消息發(fā)布模塊,通過(guò)注冊(cè)記錄子模塊為內(nèi)核模塊提供了注冊(cè)通道,內(nèi)核模塊先通過(guò)該注冊(cè)通道,注冊(cè)待訪問(wèn)的用戶態(tài)進(jìn)程對(duì)應(yīng)的回調(diào)函數(shù)。針對(duì)同一待訪問(wèn)的用戶態(tài)進(jìn)程,不同的內(nèi)核模塊注冊(cè)的回調(diào)函數(shù)不同;消息發(fā)布模塊根據(jù)內(nèi)核模塊的注冊(cè)情況,通過(guò)注冊(cè)記錄子模塊來(lái)記錄“內(nèi)核模塊標(biāo)識(shí)、待訪問(wèn)的用戶態(tài)進(jìn)程標(biāo)識(shí)、回調(diào)函數(shù)”三者之間的唯一對(duì)應(yīng)關(guān)系。

進(jìn)一步地,消息發(fā)布模塊在獲得某個(gè)用戶態(tài)進(jìn)程的狀態(tài)時(shí),通過(guò)消息發(fā)布子模塊,遍歷注冊(cè)記錄子模塊所記錄的對(duì)應(yīng)關(guān)系,通過(guò)調(diào)用回調(diào)函數(shù)的方式,向內(nèi)核模塊發(fā)布關(guān)于用戶態(tài)進(jìn)程狀態(tài)的消息。

另外,考慮到一個(gè)內(nèi)核模塊可以發(fā)起多個(gè)進(jìn)程對(duì)同一用戶態(tài)進(jìn)程的共享內(nèi)存進(jìn)行訪問(wèn),而這多個(gè)進(jìn)程間可能是不同步的,因此,基于這種應(yīng)用場(chǎng)景的考慮,為了盡可能地防止出現(xiàn)內(nèi)核模塊訪問(wèn)錯(cuò)誤數(shù)據(jù)引起操作系統(tǒng)穩(wěn)定性問(wèn)題,則內(nèi)核模塊可以包括:

監(jiān)控模塊、線程訪問(wèn)控制模塊、用戶態(tài)進(jìn)程退出控制模塊、以及訪問(wèn)計(jì)數(shù)模塊;

其中,所述監(jiān)控模塊,用于監(jiān)控用戶態(tài)進(jìn)程的狀態(tài);若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),觸發(fā)所述線程訪問(wèn)控制模塊。

所述訪問(wèn)計(jì)數(shù)模塊,用于設(shè)置所述用戶態(tài)進(jìn)程對(duì)應(yīng)的訪問(wèn)計(jì)數(shù)器;所述訪問(wèn)計(jì)數(shù)器用于記錄所述用戶態(tài)進(jìn)程的共享內(nèi)存正在被訪問(wèn)的次數(shù);

所述線程訪問(wèn)控制模塊,用于若所述用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),且根據(jù)所述訪問(wèn)計(jì)數(shù)器的計(jì)數(shù)值,控制線程停止訪問(wèn)所述用戶態(tài)進(jìn)程的共享內(nèi)存;當(dāng)所述線程結(jié)束訪問(wèn)時(shí),觸發(fā)用戶態(tài)進(jìn)程退出控制模塊。

所述用戶態(tài)進(jìn)程退出控制模塊,用于當(dāng)所述線程結(jié)束訪問(wèn)時(shí),觸發(fā)所述用戶態(tài)進(jìn)程完成退出。

可以理解的是,內(nèi)核模塊針對(duì)需要訪問(wèn)的用戶態(tài)進(jìn)程的共享內(nèi)存創(chuàng)建一個(gè)訪問(wèn)計(jì)數(shù)器,該訪問(wèn)計(jì)數(shù)器能夠記錄共享內(nèi)存正在被訪問(wèn)的次數(shù)。當(dāng)內(nèi)核模塊發(fā)起的線程對(duì)共享內(nèi)存進(jìn)行訪問(wèn)時(shí),該訪問(wèn)計(jì)數(shù)器就計(jì)數(shù)一次(例如執(zhí)行加一操作),而當(dāng)訪問(wèn)完畢時(shí),訪問(wèn)計(jì)數(shù)器就撤銷計(jì)數(shù)一次(例如執(zhí)行減一操作)。因此,訪問(wèn)計(jì)數(shù)器能夠記錄用戶態(tài)進(jìn)程的共享內(nèi)存正在被訪問(wèn)的次數(shù)情況。

基于此,內(nèi)核模塊不僅可能有效控制即將發(fā)起的對(duì)共享內(nèi)存的訪問(wèn),又能夠有效控制已經(jīng)發(fā)起的但還未結(jié)束的、對(duì)共享內(nèi)存的訪問(wèn),在用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)時(shí),能夠及時(shí)有效地控制線程盡快完成訪問(wèn),從而避免訪問(wèn)到錯(cuò)誤數(shù)據(jù)對(duì)操作系統(tǒng)的穩(wěn)定性影響。

上文從系統(tǒng)的結(jié)構(gòu)、各個(gè)模塊的功能以及數(shù)據(jù)連接關(guān)系的角度進(jìn)行解釋說(shuō)明。為了方便本領(lǐng)域技術(shù)人員進(jìn)一步了解本申請(qǐng)?zhí)峁┑南到y(tǒng)的實(shí)現(xiàn)方式,下面結(jié)合圖4對(duì)該系統(tǒng)的核心工作原理進(jìn)行解釋說(shuō)明。

參見圖4,圖4示出了圖3所示系統(tǒng)的各個(gè)模塊的交互過(guò)程,為了方便說(shuō)明,在圖4中還示出了用戶態(tài)進(jìn)程與系統(tǒng)中各個(gè)模塊的交互過(guò)程,主要是便于本領(lǐng)域技術(shù)人員理解,本申請(qǐng)的系統(tǒng)本身并不包含具體的用戶態(tài)進(jìn)程。

如圖4所示,內(nèi)核模塊303執(zhí)行操作1:先向消息發(fā)布模塊302發(fā)起注冊(cè)請(qǐng)求,注冊(cè)關(guān)于用戶態(tài)進(jìn)程的回調(diào)函數(shù);該操作1可以在操作系統(tǒng)的初始化過(guò)程中完成。用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)階段,對(duì)應(yīng)圖2中的操作2至操作4,即,用戶態(tài)進(jìn)程通過(guò)open系統(tǒng)調(diào)用開始啟動(dòng),狀態(tài)感知模塊301感知到用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài),并及時(shí)通知消息發(fā)布模塊302,同時(shí),消息發(fā)布模塊302也在第一時(shí)間通知內(nèi)核模塊303,內(nèi)核模塊303在用戶態(tài)進(jìn)程進(jìn)入啟動(dòng)狀態(tài)時(shí),可以執(zhí)行操作5,即,發(fā)起線程對(duì)用戶態(tài)進(jìn)程的共享內(nèi)存進(jìn)行訪問(wèn)。用戶態(tài)進(jìn)程正常運(yùn)行過(guò)程中,就一直處于啟動(dòng)狀態(tài),在此過(guò)程中,內(nèi)核模塊303可以持續(xù)重復(fù)執(zhí)行操作5。

當(dāng)用戶態(tài)進(jìn)程進(jìn)入退出階段時(shí),執(zhí)行操作6,狀態(tài)感知模塊301感知到用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài),并及時(shí)通知消息發(fā)布模塊302,消息發(fā)布模塊302也在第一時(shí)間通知內(nèi)核模塊303,內(nèi)核模塊303在用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)時(shí),立刻執(zhí)行操作9,即,控制線程停止對(duì)共享內(nèi)存的訪問(wèn),和/或,控制正在訪問(wèn)共享內(nèi)存的線程盡快結(jié)束訪問(wèn)。在所有線程結(jié)束訪問(wèn)時(shí),用戶態(tài)進(jìn)程才能夠完成退出,即執(zhí)行操作10。

本申請(qǐng)?zhí)峁┑墓蚕韮?nèi)存的訪問(wèn)控制系統(tǒng),提出了用戶態(tài)進(jìn)程狀態(tài)的監(jiān)控機(jī)制和內(nèi)核模塊根據(jù)用戶態(tài)進(jìn)程狀態(tài)控制訪問(wèn)的工作機(jī)制;基于該監(jiān)控機(jī)制,內(nèi)核模塊能夠在第一時(shí)間了解到用戶態(tài)進(jìn)程的狀態(tài),并按照這種工作機(jī)制,在發(fā)現(xiàn)用戶態(tài)進(jìn)程進(jìn)入退出狀態(tài)時(shí),及時(shí)控制正在訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存的線程,盡快停止訪問(wèn);并且該內(nèi)核模塊停止發(fā)起新的訪問(wèn)進(jìn)程。在訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存的線程都結(jié)束訪問(wèn)時(shí),用戶態(tài)進(jìn)程才會(huì)完全退出,在用戶態(tài)進(jìn)程完全退出時(shí),其占用的共享內(nèi)存才會(huì)被操作系統(tǒng)回收再利用??梢钥闯觯罕旧暾?qǐng)?zhí)岢隽诉@種監(jiān)控機(jī)制和內(nèi)核模塊的工作機(jī)制,內(nèi)核模塊在用戶態(tài)進(jìn)程崩潰重啟階段,不會(huì)訪問(wèn)用戶態(tài)進(jìn)程的共享內(nèi)存,不會(huì)獲取到錯(cuò)誤數(shù)據(jù),從而能夠避免因錯(cuò)誤數(shù)據(jù)引發(fā)操作系統(tǒng)穩(wěn)定性問(wèn)題。

需要說(shuō)明的是,本說(shuō)明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)于裝置類實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說(shuō)明即可。

最后,還需要說(shuō)明的是,在本文中,諸如第一、第二、第三、第四等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。

以上對(duì)本申請(qǐng)所提供的一種共享內(nèi)存的訪問(wèn)控制方法、裝置及系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1