Linux C lock pages

来源:http://www.cnblogs.com/san-fu-su/archive/2016/08/05/5743022.html
-Advertisement-
Play Games

虛擬記憶體按頁劃分,我們可以明確告訴系統:某一個虛擬記憶體頁需要和實際記憶體幀相關聯。這樣一來,該記憶體頁就被換進來了,而且不會被系統換出去。這一行為叫做鎖頁(locking a page)。 一般來講頁的換進換出是透明的,一般程式接觸不到這一層。但是呢,鎖頁可以為我們帶來如下好處: 1、速度:如果你的程式 ...


 

  虛擬記憶體按頁劃分,我們可以明確告訴系統:某一個虛擬記憶體頁需要和實際記憶體幀相關聯。這樣一來,該記憶體頁就被換進來了,而且不會被系統換出去。這一行為叫做鎖頁(locking a page)。

  一般來講頁的換進換出是透明的,一般程式接觸不到這一層。但是呢,鎖頁可以為我們帶來如下好處:

  1、速度:如果你的程式對速度有嚴格的要求,頁錯誤導致頁的換進換出會浪費掉一定的事件。當然為了提高程式速度,你可能還需要提高程式的優先順序。

  2、隱私安全:沒錯鎖頁可以讓你的程式更加安全。如果你的密碼恰好存放在某一頁上,而這一頁恰好被換出到硬碟的交換區,別人就有更多的機會獲取你的密碼了。

  然而你不能鎖太多的頁(這樣就搶了別的程式的資源)

具體細節:

  記憶體鎖只面向虛擬頁,實際記憶體我們不關心。一個實際記憶體頁可以對應多個虛擬記憶體頁,只要有一個虛擬記憶體頁是鎖著的,實際物理記憶體頁就不會被換出。

  你不可以給一個虛擬記憶體頁疊加鎖,最多只能有一把鎖。

  記憶體鎖在兩種情況下會被解開:1、進程自行解鎖,2、進程退出,一個進程對應一個虛擬記憶體,這時候其對應的虛擬記憶體無效,可以理解虛擬記憶體頁解鎖了(門都沒了還要鎖幹嘛?)。

  記憶體鎖無法被子進程繼承,(註意:現在的UNIX系統中,一旦進行fork操作產生子進程後,子進程和父進程的虛擬記憶體對應這相同的實際記憶體幀頁。雖然沒有繼承鎖,但實際享受到了所帶來的好處)

  由於會對其他進程帶來影響,所以只有超級用戶才可以鎖頁。但任何進程都可以解鎖頁。

  系統會對一個進程可以鎖多少記憶體加以限制。

  即便兩個虛擬記憶體頁沒有共用記憶體,但內核仍可能會把兩個虛擬記憶體頁關聯到同一個記憶體幀。(事關效率,兩個虛擬記憶體頁具有完全相同的數據,為何要用兩個不同的記憶體幀與之對應)如果有一個虛擬記憶體頁發生數據修改,內核會進行寫時複製(copy-on-write)。

 

相關函數:

 mlock:

int mlock (const void *addr, size_t len)
//以addr為起始地址,len為長度的記憶體塊所在頁鎖起來。(如果頁本來被喚出了,這時候頁會被調入,然後鎖起來)
//返回值詳見man手冊

 munlock:

int munlock (const void *addr, size_t len)
//執行與mlock相反的操作,解鎖

還有其他的一些函數: mlockall和unmallocall。不多介紹了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 枚舉(Enumeration)介面雖然它本身不屬於數據結構,但它在其他數據結構的範疇里應用很廣。 枚舉(The Enumeration)介面定義了一種從數據結構中取回連續元素的方式。 例如,枚舉定義了一個叫nextElement 的方法,該方法用來得到一個包含多元素的數據結構的下一個元素。 枚舉定義 ...
  • 一、SpringMVC 使用 ModelAndView 來處理返回值問題。 1.ModelAndView 官方描述: Holder for both Model and View in the web MVC framework.Note that these are entirely distin ...
  • 1. VirtualBox的安裝 參考常規安裝方式即可。 VirtualBox 4.3.14 for Windows hosts:http://download.virtualbox.org/virtualbox/4.3.14/VirtualBox-4.3.14-95030-Win.exe 2. U ...
  • 在windows2008伺服器上安裝wampserver3.0.4集成環境,預設卻是無法遠程訪問,如果要遠程訪問需要修改apache的配置文件httpd.conf,修改如下: <Directory "D:/wamp64/www/"> # # Possible values for the Optio ...
  • 註釋規範 1、 類註釋 在每個類前面必須加上類註釋,註釋模板如下: 2、 屬性註釋 在每個屬性前面必須加上屬性註釋,註釋模板如下: 3、 方法註釋 在每個方法前面必須加上方法註釋,註釋模板如下: 4、 構造方法註釋 在每個構造方法前面必須加上註釋,註釋模板如下: 5、 方法內部註釋 在方法內部使用單 ...
  • 函數指針、回調函數、系統調用區別1.函數指針 2.回調函數 體現: 1.函數名作為參數傳遞給調用函數。 2.將調用者和被調函數分開,回調函數實現具體的功能,調用者無需關註實現的具體細節。3.系統調用系統調用 --> (0x80)軟中斷(系統調用表) --> 內核函數 --> 返回到系統調用層 rea ...
  • 用遞歸的方法實現無限極分類 通常我在寫項目的時候,在寫一些例如商城分類的時候會實現對應分類的上級分類,或者其它項目部門管理的上級部門的時候一般就會用到無限極分類來進行分類 第一步:首先在數據表設計的時候,如果要實現無限極分類,一般我會在數據表多添加一個欄位pid,下麵我通過一張新建的數據表來說明一下 ...
  • php程式是部署在IIS7上面,ajax提交數據時,遇到了兩個問題,一個就是跨域,一個php程式總會被執行兩次。 第一個問題的解決方法,是百度出來的,添加下麵幾行代碼就可以了: header('Access-Control-Allow-Origin:*'); header("Access-Contr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...