[發明專利]一種用戶線程訪問內核的方法有效
| 申請號: | 201911063323.4 | 申請日: | 2019-11-04 |
| 公開(公告)號: | CN110543373B | 公開(公告)日: | 2020-03-17 |
| 發明(設計)人: | 龍恢;管志堅 | 申請(專利權)人: | 長沙新弘軟件有限公司 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54 |
| 代理公司: | 長沙市標致專利代理事務所(普通合伙) 43218 | 代理人: | 徐邵華 |
| 地址: | 410205 湖南省長沙市*** | 國省代碼: | 湖南;43 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 用戶 線程 訪問 內核 方法 | ||
一種用戶線程訪問內核的方法,使用基于原子操作的訪問隊列。訪問目標對象時記錄獲取共享訪問的次數:釋放共享訪問時計數值減1,計數值為0時共享訪問結束,計數值不為0時無法獲取獨占訪問。每個用戶進程包含多個用戶線程和一個訪問隊列。調用系統接口時,調用參數進入內核態后保存到線程切換上下文中。進行只讀訪問時,通過訪問隊列獲取共享訪問;進行相關資源修改時,獲取獨占訪問。本發明有效避免了用戶線程對內核態堆棧的過度占用。
技術領域
本發明涉及計算機系統軟件編程領域,特別是一種用戶線程訪問內核的方法。
背景技術
在計算機操作系統軟件中應用程序對內核資源和設備的訪問是通過調用系統接口(API)來實現的,在這些系統接口中通過特殊的系統調用指令使運行在用戶態的線程進入到內核態,同時堆棧指針也需要切換到內核空間的堆棧上。對于一般的API,調用周期很短,很快就返回用戶態了。但對于需要以互斥的方式訪問內核資源或以只讀的方式訪問內核資源時,就需要用到互斥鎖或者讀寫鎖,而鎖機制的使用有可能導致用戶線程在內核空間的堆棧上掛起。因為必須將鎖操作之前的一些臨時變量駐留在堆棧上,以便線程恢復運行時使用,所以基本上每個用戶線程都需要占據一個內核態的堆棧,這會造成內核空間很大的浪費。
發明內容
本發明的目的是克服現有技術的上述不足而提供一種通過訪問隊列實現多個用戶線程之間互斥或共享訪問內核的機制,使得用戶線程訪問內核資源掛起時不需要駐留在內核空間的堆棧上。
本發明的技術方案是:一種用戶線程訪問內核的方法,該方法包括一種基于原子操作的訪問隊列,該隊列由首指針、尾指針、共享訪問計數值和訪問者結點構成。首指針指向隊列的第一個結點,尾指針指向隊列的最后一個結點。每個結點包含一個鏈接指針,結點與結點之間通過鏈接指針連接起來。在訪問目標對象時,共享訪問計數值用于記錄獲取共享訪問的次數,在釋放共享訪問時該計數值會被減1,當該計數值被減為0時表示所有共享訪問都已結束。當共享訪問計數值不為0時,無法獲取對目標對象的獨占訪問。
訪問者通過訪問隊列獲取共享訪問時包含如下步驟:
步驟101.取原共享訪問計數值和原尾結點指針。
步驟102.使新共享訪問計數值等于原共享訪問計數值,新尾結點指針等于訪問者結點指針并打上共享訪問的標記。
步驟103.判斷原尾結點指針是否為空指針,若為空指針則直接進入步驟105。
步驟104.判斷原共享訪問計數值是否為0,若為0則直接進入步驟106。
步驟105.將新共享訪問計數值加1,使新尾結點指針等于原尾結點指針。
步驟106.使用原子比較并交換(CAS)操作嘗試同時將共享訪問計數值和尾指針跟原共享訪問計數值和原尾結點指針進行比較并原子化的替換為新共享訪問計數值和新尾結點指針。
步驟107.如果步驟106替換操作失敗則返回步驟101,如果步驟106替換操作成功則執行步驟108。
步驟108.判斷新共享訪問計數值是否為0,若不為0則表示獲取共享訪問成功且操作步驟結束,若為0則還需要執行步驟109。
步驟109.將原尾結點的鏈接指針指向新尾結點,表示獲取共享訪問失敗且訪問者結點被添加到隊列尾部。
訪問者通過訪問隊列獲取獨占訪問時包含如下步驟:
步驟201.取原共享訪問計數值和原尾結點指針。
步驟202.使新共享訪問計數值等于原共享訪問計數值,新尾結點指針等于訪問者結點指針并打上獨占訪問的標記。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于長沙新弘軟件有限公司,未經長沙新弘軟件有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911063323.4/2.html,轉載請聲明來源鉆瓜專利網。





