国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種mips平臺(tái)下并行多核配置鎖的實(shí)現(xiàn)方法

      文檔序號(hào):6615783閱讀:304來(lái)源:國(guó)知局
      專利名稱:一種mips平臺(tái)下并行多核配置鎖的實(shí)現(xiàn)方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及MIPS ( Microprocessor without interlocked piped stages,無(wú)內(nèi)部 互鎖流水級(jí)微處理器)多核技術(shù)領(lǐng)域,尤其涉及一種MIPS平臺(tái)下并行多核配 置鎖的實(shí)現(xiàn)方法。
      背景技術(shù)
      基于MIPS指令集的MIPS多核處理器在嵌入式系統(tǒng)中占據(jù)了主流地位。目 前在機(jī)頂盒、信息終端、網(wǎng)絡(luò)連接設(shè)備中占有大部分市場(chǎng),而且已經(jīng)進(jìn)入到網(wǎng) 絡(luò)安全設(shè)備領(lǐng)域。在多核并行的框架上,對(duì)于一些共享資源的并行訪問(wèn)問(wèn)題是 整個(gè)體系結(jié)構(gòu)中的關(guān)鍵技術(shù)。
      Linux系統(tǒng)提供了最基本的鎖,包括讀鎖(read—lock):對(duì)于同一資源 可以同時(shí)上多個(gè)讀鎖,從而可以并行執(zhí)行這些代碼;寫(xiě)鎖(write—lock):對(duì)于 同一資源在同一時(shí)間只能上一個(gè)寫(xiě)鎖,且不能并行訪問(wèn)要保護(hù)的資源;自旋鎖 (spin—lock):如果上鎖不成功,就一直等下去,直到上鎖成功為止。
      在事件響應(yīng)處理過(guò)程中,有時(shí)會(huì)出現(xiàn)鎖重入現(xiàn)象,所謂鎖重入現(xiàn)象是指, 一個(gè)notifier處理函數(shù)中又觸發(fā)了一個(gè)notifier事件;在現(xiàn)有的鎖技術(shù)中,還沒(méi)有 解決鎖重入問(wèn)題的方案。

      發(fā)明內(nèi)容
      本發(fā)明提供一種MIPS平臺(tái)下并行多核配置鎖的實(shí)現(xiàn)方法,用以解決現(xiàn)有 技術(shù)中存在的鎖重入問(wèn)題。 本發(fā)明方法包括
      步驟A:根據(jù)系統(tǒng)提供的基本的鎖,預(yù)定義多個(gè)鎖,包括應(yīng)用層系統(tǒng)調(diào) 用加鎖、應(yīng)用層系統(tǒng)調(diào)用解鎖、應(yīng)用層系統(tǒng)調(diào)用重加鎖、定時(shí)器加鎖、定時(shí)器解鎖、定時(shí)器重加鎖;
      步驟B:根據(jù)所述預(yù)定義的多個(gè)鎖,再定義兩個(gè)鎖事件響應(yīng)更新鎖和事 件響應(yīng)恢復(fù)鎖;
      步驟C:在事件響應(yīng)處理過(guò)程中,當(dāng)發(fā)生鎖重入問(wèn)題時(shí),在事件響應(yīng)函數(shù) 中調(diào)用事件響應(yīng)更新鎖來(lái)加鎖或者更新到新的鎖;
      步驟D:在事件響應(yīng)函數(shù)處理結(jié)束后,調(diào)用事件響應(yīng)恢復(fù)鎖來(lái)解鎖或者恢 復(fù)到以前加的鎖。
      進(jìn)一步地,所述步驟A中,所述應(yīng)用層系統(tǒng)調(diào)用加鎖中設(shè)置有兩個(gè)原子計(jì) 數(shù)器,則預(yù)定義所述應(yīng)用層系統(tǒng)調(diào)用加鎖的過(guò)程具體包括
      判斷CPU是否上了鎖,如果已經(jīng)上了鎖就異常退出,否則把兩個(gè)原子計(jì) 數(shù)器加1;
      試圖加配置鎖,當(dāng)確認(rèn)加配置鎖成功時(shí),試圖加鏈表鎖;
      當(dāng)確認(rèn)加鏈表鎖成功時(shí),保存進(jìn)程持有的鎖和保存CPU加的鎖并返回, 否則解配置讀鎖,并重復(fù)試圖加配置鎖。
      進(jìn)一步地,所述步驟A中,所述應(yīng)用層系統(tǒng)調(diào)用解鎖設(shè)置有兩個(gè)原子計(jì)數(shù) 器,則預(yù)定義所述應(yīng)用層系統(tǒng)調(diào)用解鎖的過(guò)程具體包括
      判斷CPU是否上鎖,如果已經(jīng)上了鎖就異常退出,否則解鏈表鎖,原子計(jì) 數(shù)器app—wrconfig—locks減1;
      解配置鎖,并清除進(jìn)程持有的鎖和CPU加的鎖;
      原子計(jì)數(shù)器app—locks減1 。
      進(jìn)一步地,所述步驟A中,所述應(yīng)用層系統(tǒng)調(diào)用重加鎖的預(yù)定義過(guò)程具體 包括
      判斷CPU是否已經(jīng)上了鎖,如果沒(méi)加鎖就異常退出,否則先依次把已經(jīng)加 的鎖解開(kāi),然后再按新的需求依次加鎖。
      進(jìn)一步地,所述步驟A中,預(yù)定義所述定時(shí)器加鎖的過(guò)程具體包括 原子計(jì)數(shù)器app一wrconfig-locks加l,保證其他低優(yōu)先級(jí)的鎖不能獲得請(qǐng)求;依次加配置鎖和鏈表鎖;
      原子計(jì)數(shù)器app—wrconfigjocks減1 ,保存該CPU加的鎖。 進(jìn)一步地,所述步驟A中,預(yù)定義所述定時(shí)器解鎖的過(guò)程具體包括 首先解鏈表鎖,然后解配置鎖,最后清除CPU保存的鎖。 進(jìn)一步地,所述步驟A中,預(yù)定義所述定時(shí)器重加鎖的過(guò)程具體包括 判斷CPU是否已經(jīng)上了鎖。如果沒(méi)上鎖,就異常退出,否則先依次解開(kāi)已 經(jīng)上的鎖,然后再依次加上請(qǐng)求的鎖,并保存新的鎖。 進(jìn)一步地,所述步驟C具體包括 更新CPU持有的鎖的類型;
      判斷CPU持有的鎖和要更新的鎖的類型是否一致,如果一致,直接返回, 否則判斷CPU是否上鎖;
      如果這個(gè)CPU原來(lái)沒(méi)有上鎖,通過(guò)調(diào)用定時(shí)器加鎖或應(yīng)用層系統(tǒng)調(diào)用加 鎖,直接加配置鎖和鏈表鎖;如果CPU已經(jīng)上了鎖,那么就通過(guò)調(diào)用定時(shí)器 重加鎖或應(yīng)用層系統(tǒng)調(diào)用重加鎖,保存原來(lái)持有的鎖到臨時(shí)變量,然后再加要 更新的鎖。
      進(jìn)一步地,所述步驟D具體包括
      恢復(fù)CPU持有的鎖的類型;
      判斷CPU持有的鎖和要更新的鎖的類型是否一致,如果一致,直接返回, 否則判斷CPU是否上鎖;
      如果CPU原來(lái)沒(méi)有鎖,那么就通過(guò)調(diào)用定時(shí)器解鎖或應(yīng)用層系統(tǒng)調(diào)用解 鎖,直接解配置鎖和鏈表鎖;如果CPU已經(jīng)上了鎖,那么就通過(guò)調(diào)用定時(shí)器重 加鎖或應(yīng)用層系統(tǒng)調(diào)用重加鎖,解CPU要更新的鎖,并且加原來(lái)持有的鎖。
      綜上所述,本發(fā)明提供了一種MIPS平臺(tái)下并行多核配置鎖的實(shí)現(xiàn)方法, 當(dāng)發(fā)生鎖重入問(wèn)題時(shí),在事件響應(yīng)函數(shù)中首先調(diào)用notifier—upgrade—biglock—fun 鎖來(lái)加鎖或者更新到新的鎖,在事件響應(yīng)函數(shù)處理結(jié)束后,調(diào)用 notifier—restore—biglock—ftm鎖來(lái)解鎖或者恢復(fù)到以前加的鎖。通過(guò)本發(fā)明所述方法,使得多核體系結(jié)構(gòu)上的操作系統(tǒng)能夠具有良好的穩(wěn)定性、健壯性、擴(kuò)展 性、安全性和并行性。


      圖1為本發(fā)明實(shí)施例中,
      圖2為本發(fā)明實(shí)施例中, 圖3為本發(fā)明實(shí)施例中, 圖4為本發(fā)明實(shí)施例中, 圖5為本發(fā)明實(shí)施例中, 圖6為本發(fā)明實(shí)施例中, 圖7為本發(fā)明實(shí)施例中, 圖8為本發(fā)明實(shí)施例中, 圖9為本發(fā)明實(shí)施例中, 圖IO為本發(fā)明實(shí)施例中 圖11為本發(fā)明實(shí)施例中
      鎖重入問(wèn)題的原理示意圖; 定義應(yīng)用層系統(tǒng)調(diào)用加鎖的流程示意圖; 定義應(yīng)用層系統(tǒng)調(diào)用解鎖的流程示意圖; 定義應(yīng)用層系統(tǒng)調(diào)用重加鎖的流程示意圖 定義定時(shí)器加鎖的流程示意圖; 定義定時(shí)器解鎖的流程示意圖; 定義定時(shí)器重加鎖的流程示意圖; 事件響應(yīng)加鎖方法的流程示意圖; 事件響應(yīng)解鎖方法的流程示意圖。 快速路徑加鎖方法的流程示意圖。 快速路徑解鎖方法的流程示意圖。
      具體實(shí)施例方式
      下面結(jié)合附圖來(lái)具體描述本發(fā)明的優(yōu)先實(shí)施例,其中,附圖構(gòu)成本申請(qǐng)一 部分,并與本發(fā)明的實(shí)施例一起用于闡釋本發(fā)明的原理。
      本發(fā)明的核心思想是當(dāng)出現(xiàn)鎖重入問(wèn)題時(shí),在加鎖過(guò)程中,把以前加的 鎖更新到新請(qǐng)求的鎖;在解鎖過(guò)程中,先解新加的鎖,再把以前加的鎖恢復(fù)加 上。另外,本發(fā)明在自定義的鎖中加了原子計(jì)數(shù)器,并通過(guò)原子計(jì)數(shù)器來(lái)實(shí)現(xiàn) 自定義的鎖的優(yōu)先級(jí)。
      下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例所述方法進(jìn)行詳細(xì)闡述。
      通常情況下,在多核CPU上分別運(yùn)行不同的系統(tǒng)/代碼,包括TOS和fastjath 兩部分。他們將通過(guò)不同的接口來(lái)訪問(wèn)防火墻配置和內(nèi)部鏈表資源。其中TOS要修改配置和鏈表資源所以上寫(xiě)鎖,而fastjath不需要修改配置所以只上配置 讀鎖。這里TOS上鎖部分最為復(fù)雜,包括systemjall(系統(tǒng)調(diào)用)、schedule (進(jìn) 程調(diào)度)、timer(定時(shí)器)、hook (數(shù)據(jù)包處理的HOOK點(diǎn))、notifier (事件響應(yīng))。 system—call(系統(tǒng)調(diào)用)用戶通過(guò)用戶接口來(lái)修改配置,這時(shí)需要加寫(xiě)鎖; schedule (進(jìn)程調(diào)度)systen^call加的寫(xiě)鎖,在執(zhí)行過(guò)程中可能被調(diào)度出進(jìn)程 隊(duì)列,這時(shí)需要先解鎖,調(diào)度進(jìn)來(lái)時(shí)需要再重新加鎖;timer(定時(shí)器)TOS中 的定時(shí)器會(huì)修改配置和鏈表,這時(shí)需要加配置和鏈表的讀/寫(xiě)鎖;hook(數(shù)據(jù)包 處理的HOOK點(diǎn))TOS系統(tǒng)中對(duì)每個(gè)數(shù)據(jù)包的處理需要讀配置和修改鏈表,這 時(shí)需要加配置讀鎖,鏈表寫(xiě)鎖;notifier (事件響應(yīng))事件響應(yīng)需要修改配置 和修改鏈表,這時(shí)需要加配置寫(xiě)鎖和鏈表寫(xiě)鎖。
      其中,事件響應(yīng)處理過(guò)程中,有時(shí)會(huì)出現(xiàn)鎖重入現(xiàn)象,所謂鎖重入現(xiàn)象是 指, 一個(gè)notifier處理函數(shù)中又觸發(fā)了一個(gè)notifier事件,具體原理如圖l所示, 即,函數(shù)在訪問(wèn)需要保護(hù)的配置時(shí),首先加了鎖;然后進(jìn)行處理工作,這時(shí)它 有可能又調(diào)用了這個(gè)函數(shù)本身,這時(shí)就出現(xiàn)了鎖重入問(wèn)題,鎖重入問(wèn)題實(shí)際上 是由遞歸調(diào)用引起的。這里我們遇到的是二次遞歸調(diào)用,所以在這里,我們只 處理二次遞歸調(diào)用引起的鎖重入問(wèn)題。
      為了解決鎖重入問(wèn)題,在系統(tǒng)提供的基本的讀鎖、寫(xiě)鎖、自旋鎖的基礎(chǔ)上, 定義了多個(gè)鎖,包括app—enter—critical加鎖(應(yīng)用層系統(tǒng)調(diào)用加鎖)、 app—leave—critical解鎖(應(yīng)用層系統(tǒng)調(diào)用解鎖)、app—reenter一caitical力口鎖(應(yīng)用 層系統(tǒng)調(diào)用重力口鎖)、timer—enter—critical力口鎖(定時(shí)器)力口鎖、timer—leave—critical 解鎖(定時(shí)器解鎖)、timer一reenter一critical加鎖(定時(shí)器重加鎖),下面分別予 以說(shuō)明。
      如圖2所示,圖2定義了一個(gè)app—enter—critical加鎖,在這個(gè)鎖里面有2 個(gè)原子計(jì)數(shù)器app—locks和app—wrconfig—locks,這2個(gè)原子計(jì)數(shù)器是用來(lái)實(shí)現(xiàn) 鎖的優(yōu)先級(jí)的,其中,app—locks是控制應(yīng)用層系統(tǒng)調(diào)用和HOOK鎖之間的優(yōu) 先級(jí)的,而app—wrconfig_lock是控制應(yīng)用層系統(tǒng)調(diào)用和快速路徑之間的優(yōu)先級(jí)的。
      具體過(guò)程包括首先判斷這個(gè)CPU是否上了鎖,如杲已經(jīng)上了鎖就異常退 出,否則把2個(gè)原子計(jì)數(shù)器加1,試圖加配置鎖(即配置讀/寫(xiě)鎖),如果加鎖成 功就試圖加鏈表鎖(即鏈表讀/寫(xiě)鎖),如果加鎖成功就保存進(jìn)程持有的鎖和保 存CPU加的鎖,并返回。這個(gè)鎖是一個(gè)優(yōu)先級(jí)最高的鎖。
      如圖3所示,圖3定義了一個(gè)app一leave—critical解鎖,在這個(gè)鎖里面也有2個(gè) 原子計(jì)數(shù)器app—1ocks和app—wrconfig—locks。應(yīng)用層系統(tǒng)調(diào)用解鎖與應(yīng)用層系統(tǒng) 調(diào)用加鎖成對(duì)使用,其具體過(guò)程與圖2所示的過(guò)程相反,包括首先判斷這個(gè) CPU是否上鎖,如果已經(jīng)上了鎖就異常退出,否則解鏈表讀/寫(xiě)鎖,原子計(jì)^t器 app—wrconfig—locks減l;然后解配置讀/寫(xiě)鎖,并清除進(jìn)程持有的鎖和CPU加的 鎖,最后原子計(jì)數(shù)器app一locks減l。
      如圖4所示,圖4定義了 一個(gè)應(yīng)用層系統(tǒng)調(diào)用在已經(jīng)獲得鎖后又要加鎖的 app_reenter—caitical加鎖。這個(gè)鎖是用來(lái)解決鎖重入問(wèn)題的。在一個(gè)加鎖請(qǐng)求中 判斷如果這個(gè)CPU已經(jīng)加了鎖,那么我們就調(diào)用這個(gè)鎖。這個(gè)鎖首先判斷這個(gè) CPU是否已經(jīng)上了鎖,如果沒(méi)加鎖就異常退出。如果這個(gè)CPU上了鎖,就先依 次把已經(jīng)加的鎖解開(kāi),然后再按新的需求依次加鎖。
      如圖5所示,圖5定義了-個(gè)timer—enter一critica^。鎖。如果一個(gè)定時(shí)器要訪問(wèn) 配置和鏈表資源就需要加這個(gè)鎖,它的優(yōu)先級(jí)中等。具體定義過(guò)程可以為首 先把原子計(jì)數(shù)器app一wrconfig—locks加l,保證其他低優(yōu)先級(jí)的鎖不能獲得請(qǐng)求。 然后加配置讀/寫(xiě)鎖,加鏈表讀/寫(xiě)鎖,把原子計(jì)數(shù)器app一wrconfig—locks減l,保 存這個(gè)CPU加的鎖。
      如圖6所示,圖6定義了一個(gè)timerjeave—critica解鎖。具體定義過(guò)程可以為 首先解鏈表讀/寫(xiě)鎖,然后解配置讀/寫(xiě)鎖,最后清除CPU保存的鎖。
      如圖7所示,圖7定義了 一個(gè)定時(shí)器已經(jīng)獲得鎖后又要加鎖的 timer—reenter一critical加鎖。它首先判斷這個(gè)CPU是否已經(jīng)上了鎖。如果沒(méi)上鎖, 就異常退出。否則先依次解開(kāi)已經(jīng)上的鎖,然后在依次加上請(qǐng)求的鎖,并保存新的鎖。
      以前面定義的6個(gè)鎖為基礎(chǔ),再定義兩個(gè)大鎖, 一個(gè) notifier_upgrade—biglock—fUn鎖(事件響應(yīng)更新鎖)和 一 個(gè) notifier—restore—biglock—flm4貞(事4牛響應(yīng)'1"灰復(fù)4貞)。
      在事件響應(yīng)處理過(guò)程中,當(dāng)發(fā)生鎖重入問(wèn)題時(shí),在事件響應(yīng)函數(shù)中首先調(diào) 用notifier—upgrade—biglock—ftin鎖來(lái)加鎖或者更新到新的鎖,在事件響應(yīng)函數(shù)處 理結(jié)束后,調(diào)用notifier—restore—biglock—fun鎖來(lái)解鎖或者恢復(fù)到以前加的鎖。 其中,事件響應(yīng)加鎖的具體處理過(guò)程如圖8所示,可以包括以下步驟 在事件響應(yīng)加鎖處理過(guò)程中,由于可能出現(xiàn)鎖重入問(wèn)題,所以在加鎖時(shí)首先 要記錄下每個(gè)CPU持有的鎖,并且更新這個(gè)CPU所持有的鎖。也就是說(shuō),在事 件響應(yīng)加鎖過(guò)程中,調(diào)用事件響應(yīng)更新鎖,首先需要更新這個(gè)CPU持有的鎖的 類型,如果原來(lái)CPU持有的鎖和現(xiàn)在要更新的鎖的類型一致,那么就直接返回; 否則,判斷CPU是否上鎖,如果這個(gè)CPU原來(lái)沒(méi)有鎖,那么就通過(guò)調(diào)用 timer—enter—critical力口4貞或app—enter—critical力口4貞,直4妄力口酉己置和鏈表4貞;^t口果這 個(gè)CPU已經(jīng)上了鎖,那么就通過(guò)調(diào)用timer—reenter—critical重力口鎖或 app一reenteLcritical重加鎖,保存原來(lái)持有的鎖到臨時(shí)變量,然后再加要更新的 鎖。
      事件響應(yīng)解鎖的具體處理過(guò)程如圖9所示,可以包括以下步驟 在事件響應(yīng)解鎖處理過(guò)程中,由于之前可能出現(xiàn)鎖重入問(wèn)題,所以在解鎖 時(shí)要根據(jù)之前記錄的CPU持有的鎖來(lái)做判斷。也就是說(shuō),在事件響應(yīng)解鎖過(guò)程 中,調(diào)用事件響應(yīng)恢復(fù)鎖,首先需要判斷CPU持有的鎖和要更新的鎖是否一致, 如果CPU所持有的鎖和要更新的鎖的類型一致,那么就直接返回,否則判斷 CPU是否上鎖,如果CPU原來(lái)沒(méi)有鎖,那么就通過(guò)調(diào)用time—leave—critical解鎖 或app_leave—critical解鎖,直接解配置鎖和鏈表鎖;否則,就通過(guò)調(diào)用 timer—reente—critical重力口鎖'或app—reenter—critical重力口鎖:,解這個(gè)CPU要更#斤的 鎖,并且加原來(lái)持有的鎖。下面對(duì)本發(fā)明實(shí)施例中涉及到的配置鎖的優(yōu)先級(jí)的實(shí)現(xiàn)過(guò)程進(jìn)行說(shuō)明。 圖10是快速路徑訪問(wèn)配置后的加鎖方法的流程示意圖,因?yàn)樵诩优渲面i之
      前要等到原子計(jì)數(shù)器app一wrconfig—locks為0才能去加鎖,如果原子計(jì)數(shù)器 app_wrconfig—locks不為O,表明有其他的CPU已經(jīng)加了配置鎖,這樣我們就一 直等下去。通過(guò)這種方法就實(shí)現(xiàn)了配置鎖的優(yōu)先級(jí)。
      具體的說(shuō)就是,在圖2中應(yīng)用層系統(tǒng)調(diào)用加鎖時(shí),把a(bǔ)pp一wrconfig一locks 原子計(jì)數(shù)器加l,這時(shí)如果其他的快速路徑CPU要加鎖,那么他首先探測(cè) app_wrconfig—locks原子計(jì)數(shù)器是否為0 (現(xiàn)在為1 ),那么在圖10中快速路徑 在加鎖時(shí)就用一個(gè)while循環(huán)一直探測(cè)這個(gè)計(jì)數(shù)器是否為0。當(dāng)那個(gè)應(yīng)用層系 統(tǒng)調(diào)用解鎖后(圖3 ),就把a(bǔ)pp_wrconfig_locks減1,就等于0 了 。此時(shí)圖10 中的快速路徑CPU就探測(cè)到app—wrconfig—locks為0 ,就繼續(xù)后面的加鎖。這 樣就實(shí)現(xiàn)了鎖的優(yōu)先級(jí)。
      圖ll是快速路徑訪問(wèn)配置后的解鎖方法的流程示意圖,與圖IO的加鎖方法 相對(duì)應(yīng),解鎖不涉及優(yōu)先級(jí)的問(wèn)題。
      以上所述為本發(fā)明的優(yōu)選實(shí)施例,這里,本發(fā)明所述方法可以只保護(hù)一種 資源,或者把要保護(hù)的資源細(xì)分成多個(gè)資源,然后用多個(gè)鎖保護(hù)這些資源。另 外,運(yùn)行在多核CPU上的系統(tǒng)可能不同可能有多于2個(gè)的系統(tǒng)/代碼段運(yùn)行在 多核CPU上,但他們可以并行訪問(wèn) 一些要保護(hù)的資源。
      綜上所述,本發(fā)明實(shí)施例中,當(dāng)發(fā)生鎖重入問(wèn)題時(shí),通過(guò)預(yù)定義的 notifier_upgrade—biglock一flm鎖和notifier—restore—biglock一fun鎖進(jìn)行力口鎖和解 鎖,在加鎖過(guò)程中,把以前加的鎖更新到新請(qǐng)求的鎖;在解鎖過(guò)程中,先解新 加的鎖,再把以前加的鎖恢復(fù)加上。另外,本發(fā)明在自定義的鎖中加了原子計(jì) 數(shù)器,并通過(guò)原子計(jì)數(shù)器來(lái)實(shí)現(xiàn)自定義的鎖的優(yōu)先級(jí)。通過(guò)本發(fā)明實(shí)施例所述 方法,可以使多系統(tǒng)安全、穩(wěn)定的運(yùn)行在多核平臺(tái)上,可以使多系統(tǒng)安全、快 速、并行的訪問(wèn)共享資源,還可以使用戶的請(qǐng)求由高優(yōu)先級(jí)鎖保證得到及時(shí)響 應(yīng)。明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及 其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
      權(quán)利要求
      1、一種MIPS平臺(tái)下并行多核配置鎖的實(shí)現(xiàn)方法,其特征在于,包括步驟A根據(jù)系統(tǒng)提供的基本的鎖,預(yù)定義多個(gè)鎖,包括應(yīng)用層系統(tǒng)調(diào)用加鎖、應(yīng)用層系統(tǒng)調(diào)用解鎖、應(yīng)用層系統(tǒng)調(diào)用重加鎖、定時(shí)器加鎖、定時(shí)器解鎖、定時(shí)器重加鎖;步驟B根據(jù)所述預(yù)定義的多個(gè)鎖,再定義兩個(gè)鎖事件響應(yīng)更新鎖和事件響應(yīng)恢復(fù)鎖;步驟C在事件響應(yīng)處理過(guò)程中,當(dāng)發(fā)生鎖重入問(wèn)題時(shí),在事件響應(yīng)函數(shù)中調(diào)用事件響應(yīng)更新鎖來(lái)加鎖或者更新到新的鎖;步驟D在事件響應(yīng)函數(shù)處理結(jié)束后,調(diào)用事件響應(yīng)恢復(fù)鎖來(lái)解鎖或者恢復(fù)到以前加的鎖。
      2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A中,所述應(yīng)用 層系統(tǒng)調(diào)用加鎖中設(shè)置有兩個(gè)原子計(jì)數(shù)器,則預(yù)定義所述應(yīng)用層系統(tǒng)調(diào)用加鎖 的過(guò)程具體包括判斷CPU是否上了鎖,如果已經(jīng)上了鎖就異常退出,否則把兩個(gè)原子計(jì) 數(shù)器加1;試圖加配置鎖,當(dāng)確認(rèn)加配置鎖成功時(shí),試圖加鏈表鎖; 當(dāng)確認(rèn)加鏈表鎖成功時(shí),保存進(jìn)程持有的鎖和保存CPU加的鎖并返回, 否則解配置讀鎖,并重復(fù)試圖加配置鎖。
      3、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A中,所述應(yīng)用 層系統(tǒng)調(diào)用解鎖設(shè)置有兩個(gè)原子計(jì)數(shù)器,則預(yù)定義所述應(yīng)用層系統(tǒng)調(diào)用解鎖的 過(guò)程具體包括判斷CPU是否上鎖,如果已經(jīng)上了鎖就異常退出,否則解鏈表鎖,原子計(jì) 數(shù)器app一wrconfigJocks減1;解配置鎖,并清除進(jìn)程持有的鎖和CPU加的鎖; 原子計(jì)數(shù)器app一locks減1 。
      4、 根據(jù)權(quán)利要求所述的方法,其特征在于,所述步驟A中,所述應(yīng)用層 系統(tǒng)調(diào)用重加鎖的預(yù)定義過(guò)程具體包括判斷CPU是否已經(jīng)上了鎖,如果沒(méi)加鎖就異常退出,否則先依次把已經(jīng)加 的鎖解開(kāi),然后再按新的需求依次加鎖。
      5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A中,預(yù)定義所 述定時(shí)器加鎖的過(guò)程具體包括原子計(jì)數(shù)器app—wrconfig一locks加l ,保證其他低優(yōu)先級(jí)的鎖不能獲得請(qǐng)求;依次加配置鎖和鏈表鎖;原子計(jì)數(shù)器app—wrconfigjocks減1 ,保存該CPU加的鎖。
      6、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟A中,預(yù)定義所 述定時(shí)器解鎖的過(guò)程具體包括首先解鏈表鎖,然后解配置鎖,最后清除CPU保存的鎖。
      7、 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述步驟A中,預(yù)定義所述 定時(shí)器重加鎖的過(guò)程具體包括判斷CPU是否已經(jīng)上了鎖。如果沒(méi)上鎖,就異常退出,否則先依次解開(kāi)已 經(jīng)上的鎖,然后再依次加上請(qǐng)求的鎖,并保存新的鎖。
      8、 根據(jù)權(quán)利要求1到7中任意一項(xiàng)所述的方法,其特征在于,所述步驟 C具體包括更新CPU持有的鎖的類型;判斷CPU持有的鎖和要更新的鎖的類型是否一致,如果一致,直接返回, 否則判斷CPU是否上鎖;如果這個(gè)CPU原來(lái)沒(méi)有上鎖,通過(guò)調(diào)用定時(shí)器加鎖或應(yīng)用層系統(tǒng)調(diào)用加 鎖,直接加配置鎖和鏈表鎖;如果CPU已經(jīng)上了鎖,那么就通過(guò)調(diào)用定時(shí)器 重加鎖或應(yīng)用層系統(tǒng)調(diào)用重加鎖,保存原來(lái)持有的鎖到臨時(shí)變量,然后再加要 更新的鎖。
      9、根據(jù)權(quán)利要求1到7中任意一項(xiàng)所述的方法,其特征在于,所述步驟 D具體包括恢復(fù)CPU持有的鎖的類型;判斷CPU持有的鎖和要更新的鎖的類型是否一致,如果一致,直接返回, 否則判斷CPU是否上鎖;如果CPU原來(lái)沒(méi)有鎖,那么就通過(guò)調(diào)用定時(shí)器解鎖或應(yīng)用層系統(tǒng)調(diào)用解 鎖,直接解配置鎖和鏈表鎖;如果CPU已經(jīng)上了鎖,那么就通過(guò)調(diào)用定時(shí)器重 加鎖或應(yīng)用層系統(tǒng)調(diào)用重加鎖,解CPU要更新的鎖,并且加原來(lái)持有的鎖。
      全文摘要
      本發(fā)明公開(kāi)了一種MIPS平臺(tái)下并行多核配置鎖的實(shí)現(xiàn)方法,用以解決現(xiàn)有技術(shù)中的鎖重入問(wèn)題。所述方法包括根據(jù)系統(tǒng)提供的基本的鎖,預(yù)定義多個(gè)鎖,包括應(yīng)用層系統(tǒng)調(diào)用加鎖、應(yīng)用層系統(tǒng)調(diào)用解鎖、應(yīng)用層系統(tǒng)調(diào)用重加鎖、定時(shí)器加鎖、定時(shí)器解鎖、定時(shí)器重加鎖;根據(jù)所述預(yù)定義的多個(gè)鎖,再定義兩個(gè)鎖事件響應(yīng)更新鎖和事件響應(yīng)恢復(fù)鎖;在事件響應(yīng)處理過(guò)程中,當(dāng)發(fā)生鎖重入問(wèn)題時(shí),在事件響應(yīng)函數(shù)中調(diào)用事件響應(yīng)更新鎖來(lái)加鎖或者更新到新的鎖;在事件響應(yīng)函數(shù)處理結(jié)束后,調(diào)用事件響應(yīng)恢復(fù)鎖來(lái)解鎖或者恢復(fù)到以前加的鎖。通過(guò)本發(fā)明所述方法,使得多核體系結(jié)構(gòu)上的操作系統(tǒng)具有良好的穩(wěn)定性、健壯性、擴(kuò)展性、安全性和并行性。
      文檔編號(hào)G06F9/46GK101470627SQ20071030476
      公開(kāi)日2009年7月1日 申請(qǐng)日期2007年12月29日 優(yōu)先權(quán)日2007年12月29日
      發(fā)明者吳亞飚, 張宏君, 震 王 申請(qǐng)人:北京天融信網(wǎng)絡(luò)安全技術(shù)有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1