內存大(巨)頁

一、大(巨)頁

大(巨)頁,很好理解,就是的大的頁。說這個大頁前,得先把計算機中內存的管理簡單說明一下,否則可能對于一些新手或者把操作系統中內存管理的方法的開發者不太友好。最早的計算機,是沒有內存管理這一說的,程序直接向內存里寫,直接操作內存;而后出現了分區管理(靜態的內存分配和動態的內存分配),目的只有一個能夠更好的利用內存。前面這些都可以算是早期的內存管理,簡單粗暴,但好用,也好出意外。隨著計算機硬件技術的不斷發展,可以容納更多的程序在內存中同時運行。特別是隨著操作系統的出現,多任務成為必然,那么對內存管理也就提到了一個重要的程度。這時,計算機的先行者們分別從段和頁兩個方面開始處理內存的管理,它們各有優缺點。分頁可以更好的去除外部的內存碎片,管理簡單高效并且支持虛擬內存;當然也有缺點,仍然無法解決頁內的碎片問題和管理頁一定會存在著開銷。分段管理的優點是更符合開發者的認知,像代碼段、數據段等等,耳熟能詳。同時,不同的分段可以有效的保護數據和實現共享,并且可以動態對段進行擴展。當然缺點也很明顯,最典型的就是產生外部的內存碎片,管理相對復雜。所以就有高手想到了把二者結合起來。在X86的32位架構操作系統中,段頁式管理是標準,即使到了64位系統,為了保持向下的兼容,X86上的操作系統仍然保留著段這個概念,但幾乎已經沒用了實際作用。大家可以簡單理解為在64位的系統中,已經使用了純分頁的管理。
好,現在就可以說什么是大頁了。一般來說,在普通的系統分頁機制下,一個頁(Page)的大小是4K。可以這樣說,這個大小是目前主流的平臺的分頁的大小。但隨著軟硬件技術的發展,它們都支持將分頁的大小提高到了2M。在一些特定的場景下還支持1G大小的分頁。當然,不是說必然是這種大小,不同的平臺可能也會有細微的不同,但一般來說,1G大小的分頁一定是大頁。
是不是很簡單,大的內存頁,就是大頁,很容易明白。
這里再簡單的說明一下,主要是針對一些才剛剛學習的小白,所謂分頁,大家可以理解成書籍的一頁頁的紙,在字體樣式固定的情況下,一頁的大小決定了能印刷多少字。當然,頁面越大,字數也就越多;反之則越少。大頁可以理解成某些書籍采用了特別大的頁(比如小人書之比大學的課本)。

二、大頁的作用

那么好好的分出來的頁的大小,為什么要搞成那么大呢?先看一個例子,大家都知曉一些軍隊的編制,從班到排到連到營到團到師到軍再到集團軍。可以理解班就是一個基礎的頁,那么如果一項命令需要快速的傳達到班,則需要從集團軍向下一級級的傳遞,大家很容易想到,這效率是不是有點低?隨著信息化的到來,可不可以撤掉其中的一些層級,采用較為扁平化的管理,比如把軍、師和團的建制去除,設一個旅的編制,然后,集團軍直接操作旅,由旅直接下放到營,而忽略班排連。大家再看看現代的大國們的軍改方向,基本就是這樣(當然,實際情況可能各有不同,也不可能像這里說的這么簡單和理想)。此時,營就是一個大頁,集團軍就可以管理更多的部隊人數。
內存也是如此,如果內存管理是以4K為基礎的話,在早中期,計算機的物理內存和虛擬內存都不大的情況下,它是相對合理的和高效的。但當操作系統的虛擬內存增加到64位后,這種大小的頁導致管理的頁表開始劇烈的膨脹,不但占用浪費了更多的空間也由于使用了更多層級的頁表而導致效率的低下。同時,TLB緩存的內存數量相比之下變得太少,它會導致內存命中率的嚴重下降從而產生缺頁訪問。學過操作系統的都知道,缺頁會導致性能的開銷巨大。所以大頁就在這種情況下產生了。
其實1G可能大家現在認為是一個大頁,但所謂的大小永遠是相對的。假設物理內存的大小已經超過了256位,虛擬內存已經達到了1024位,那時如果還是采用頁機制管理的話,一頁可能標準的就是1T了。那時的大頁可能會更大。當然,這種想法只是一種簡單的攤大餅的想法,可能真到了那種情況會出現更優秀的管理方法了。
綜合上面的分析,可以明白了,大頁的優缺點,其優點主要有:

  1. 提升TLB緩存的命中率
  2. 由于降低了頁表的層級從而提高了訪問的效率
  3. 由于大量的連續內存的訪問,提高了訪問速度和效率
    缺點主要有:
  4. 不恰當的應用可能導致內存碎片的迅速增加并浪費大量的內存
  5. 大頁管理相對較難,對物理內存和系統的開發都有較高的要求。由于大頁一般是靜態分配,所以其動態分配和和釋放要復雜
  6. 大頁的分配比較麻煩,畢竟尋找一個如此大的連續的頁面相對要難很多

三、大頁的應用

既然大頁有大頁的好處,標準頁有標準頁的優秀之處,那么到底在什么情況下使用大頁呢?畢竟大家常用的電腦和服務器,一般來說都是使用的4K做為標準頁。

  1. 海量存儲的數據庫
    非常容易想到的便是海量型的數據庫,特別是基于內存的海量型數據庫。
  2. 大數據的處理
    經常對大數據進行處理和轉發的情況下,也需要大頁內存管理,如Hadoop、Flink和Spakr等以及前面分析的DPDK。
  3. 高性能和科學計算
    大量的數據存儲在內存中,盡量不要產生缺頁中斷。大頁就可以滿足這種情況從而提高計算的速度和效率。比如需要同時對大小1M的1000張圖像進行分析,大頁就很有優勢。
  4. 虛擬化管理
    這個看上去比較難理解,其實換個角度就好理解了。虛擬化管理的單元是一個個的硬件甚至是一個虛擬的電腦,那么其分配的單元一定不會太小。現在的計算機誰還看到過內存只有4K的,一般網上的云服務器最低也得1G吧。

四、總結

正如剛剛所講,大和小永遠是相對的。技術的發展不會停滯,設計和架構的思想也在不斷完善。技術的發展不是簡單的一加一,在量變發展到一定程度后,就會產生質變。也就是說,可能以后就沒有了所謂的段頁的管理,產生更新的技術框架。所以對廣大的開發者來說,永遠不要停下自己追尋技術前沿的腳步,才是根本。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/922111.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922111.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922111.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

langgraph astream使用詳解

langgraph中graph的astream(stream)方法分別實現異步(同步)流式應答,在langgraph-api服務也是核心方法,實現與前端的對接,必須要把這個方法弄明白。該方法中最重要的參數是stream_mode&#xff…

【C++】模板進階:非類型參數、模板特化與分離編譯

目錄 1. 非類型模板參數 2. 模板的特化 3. 分離編譯 1. 非類型模板參數 模板參數分類類型形參與非類型形參。 類型形參即:出現在模板參數列表中,跟在class或者typename之類的參數類型名稱。 非類型形參,就是用一個常量作為類(函數)模板…

棧-1047.刪除字符串中的所有相鄰重復項-力扣(LeetCode)

一、題目解析 1、反復執行重復項刪除操作 2、s僅由小寫英文字母組成 二、算法原理 該題并不難,難的是能不能想到用棧這個數據結構解題 解法:棧模擬 橫著看起來不好理解,我們把它豎起來,是不是和消消樂很類似,兩兩消…

【每日算法】移除元素 LeetCode

雙指針方法是解決數組或鏈表問題中非常高效的技巧之一,尤其適用于原地修改數組或減少時間復雜度的場景。以下是對雙指針方法的詳細講解。1. 雙指針方法的核心思想雙指針方法通常使用兩個指針(或索引)在數組或鏈表中協同工作,通過一…

Android 項目:畫圖白板APP開發(六)——分頁展示

本篇將介紹如何為我們的畫板應用添加分頁展示功能,讓用戶可以創建多個畫布并在它們之間輕松切換。這章沒有啥知識點的講解,主要介紹一下每頁保存的數據結構是什么樣的。 一、ListView 多頁數據的管理我們使用ListView。之前有文章講過ListView這里就不多…

智能眼鏡產品成熟度分析框架與評估

引言 當前(2025年9月12日),智能眼鏡(Smart Glasses)市場正處于快速演進階段,從早期的新奇設備向主流消費電子轉型。AI整合、AR顯示和多模態交互的進步推動了這一轉變。根據最新數據,2025年AI眼鏡發貨量預計達686萬臺,同比增長265%,全球市場規模從2024年的約19.3億美元…

(網絡編程)網絡編程套接字 UDP的socket API 代碼解析

網絡編程基礎 為什么需要網絡編程?--豐富的網絡資源 用戶在瀏覽器中,打開在線視頻網站,如優酷看視頻,實質是通過網絡,獲取到網絡上的一個視頻資源。與本地打開視頻文件類似,只是視頻文件這個資源的來源是網絡。 相比本地資源來說,網絡提供了更為豐富的網絡資源:所謂的網絡資源…

【STM32】狀態機(State Machine)

這篇博客介紹 狀態機(State Machine),適合用于嵌入式開發、驅動開發、協議解析、按鍵識別等多種場景。 一、什么是狀態機(State Machine)? 狀態機(State Machine)是一種用于描述系統…

深度學習在離崗檢測中的應用

離崗檢測技術正逐步成為現代企業精細化管理和安全生產的重要工具。這項基于計算機視覺和人工智能的應用,通過自動化、實時化的監測方式,有效提升了工作紀律性和運營效率,為項目管理者和企業提供了創新的監管解決方案。在許多工作場景中&#…

Spring緩存(二):解決緩存雪崩、擊穿、穿透問題

1. 緩存穿透問題與解決方案 1.1 什么是緩存穿透 緩存穿透是指查詢一個不存在的數據,由于緩存中沒有這個數據,每次請求都會直接打到數據庫。 如果有惡意用戶不斷請求不存在的數據,就會給數據庫帶來巨大壓力。 這種情況下,緩存失去了…

PHP 與 WebAssembly 的 “天然隔閡”

WebAssembly(簡稱 WASM)是一種低級二進制指令格式,旨在為高級語言提供高性能的編譯目標,尤其在瀏覽器環境中實現接近原生的執行效率。它主要用于前端性能密集型場景(如游戲引擎、視頻編解碼、3D 渲染等)&am…

unity中通過拖拽,自定義scroll view中子物體順序

1.在每個content的子物體上掛載DragHandler腳本,并且添加Canvs Group組件,設置見圖2.DragHandler腳本內容:using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections.Generic; using System.Coll…

用 Matplotlib 繪制餅圖:從基礎語法到實戰美化,全面掌握分類數據可視化技巧

用 Matplotlib 繪制餅圖:從基礎語法到實戰美化,全面掌握分類數據可視化技巧 在數據分析與可視化的世界里,**“圖勝千言”**早已成為共識。而在眾多圖表類型中,餅圖(Pie Chart)以其直觀的比例展示方式,成為展示分類數據分布的常見選擇。無論是業務報表、用戶畫像,還是市…

基礎算法之二分算法 --- 2

大家好,不同的時間,相同的地點,時隔多日我們又見面了。繼上次的二分算法后,我們這次要來學習的是二分答案了。這個部分相較于前面的二分算法難度有相當的提升,希望大家有所準備。雖然難度增加了,但是博主還…

發揮nano banana的最大能力

1. 概述Nano Banana 簡介:Nano Banana 是 Google DeepMind 開發的 AI 圖像生成與編輯模型,集成在 Google Gemini 平臺中(具體為 Gemini 2.5 Flash 版本)。它以高效的圖像編輯能力聞名,尤其在角色一致性、光影理解和快速…

leetcode 面試題01.02判定是否互為字符重排

一、問題描述二、解題思路解法一:對s1和s2進行sort排序,返回s1是否等于s2;解法二:用哈希表分別來記錄s1和s2中字符出現的次數,統計完后,判斷兩個哈希表是否相等;三、代碼實現解法一:時間復雜度&…

Python Yolo8 物體識別

支持單張圖片/圖片目錄批量預標注 默認使用cuda GPU .env HTTP_PROXYhttp://192.168.2.109:10808 HTTPS_PROXYhttp://192.168.2.109:10808pyproject.toml [project] name "yolo-test" version "0.1.0" description "Add your description here&quo…

LeetCode100-234回文鏈表

本文基于各個大佬的文章上點關注下點贊,明天一定更燦爛!前言Python基礎好像會了又好像沒會,所有我直接開始刷leetcode一邊抄樣例代碼一邊學習吧。本系列文章用來記錄學習中的思考,寫給自己看的,也歡迎大家在評論區指導…

BUG排查流程

引言簡述Bug排查的重要性分享個人或團隊在Bug排查中的常見挑戰引出日記形式記錄的價值日記格式設計時間戳:記錄問題發現和解決的時間節點問題描述:清晰定義Bug的現象和影響范圍環境信息:操作系統、版本號、依賴庫等關鍵配置復現步驟&#xff…

汽車功能安全 Functional Safety ISO 26262 測試之一

汽車電子電氣系統的日益復雜使得功能安全成為保障車輛可靠性和駕乘安全的關鍵。 本文將圍繞ISO 26262標準的核心內容展開,幫助大家理解如何通過系統化的方法控制風險,進行測試,確保產品安全。 01 什么是功能安全? 首先&#xff0c…