精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何解決內(nèi)存碎片與內(nèi)存交換效率慢的問題

麥辣雞腿堡 ? 來源:程序猿阿星 ? 作者:程序猿阿星 ? 2023-10-09 16:57 ? 次閱讀

內(nèi)存分頁

分段的好處是能產(chǎn)生連續(xù)的內(nèi)存空間,但是會出現(xiàn)大量內(nèi)存碎片與內(nèi)存交換效率低的問題

先思考一下怎么解決這兩個問題,內(nèi)存碎片是由多個不連續(xù)的小物理內(nèi)存空間造成,如果把這些不連續(xù)的小物理內(nèi)存空間組合起來,是不是解決了這個問題?同樣的,內(nèi)存交換的時候我們保證交換的數(shù)據(jù)小,是不是能提高內(nèi)存交換的效率?

這個辦法就是內(nèi)存分頁,分頁是把整個虛擬與物理空間切成一段段固定尺寸的大小,這樣一個連續(xù)并且尺寸固定的空間,我們叫頁,在 Linux 下,每一頁的大小為4KB。(虛擬空間是指存儲一套虛擬地址的空間)

虛擬地址與物理地址是通過頁表來映射,虛擬空間內(nèi)的虛擬地址一定是連續(xù)的,物理地址不一定,但可以通過連續(xù)的虛擬地址把多個不連續(xù)的物理內(nèi)存組合使用。

圖片

而當(dāng)進(jìn)程訪問的虛擬地址在頁表中查不到時,系統(tǒng)會產(chǎn)生一個缺頁異常,進(jìn)入系統(tǒng)內(nèi)核空間分配物理內(nèi)存、更新進(jìn)程頁表,最后再返回用戶空間,恢復(fù)進(jìn)程的運行。

分頁方式是如何解決內(nèi)存碎片與內(nèi)存交換效率慢的問題呢?內(nèi)存碎片的解決:

因為使用內(nèi)存的單位變成固定大小的頁,所以每個程序的虛擬空間維護(hù)的也是連續(xù)的頁(虛擬地址),通過頁表再映射到物理內(nèi)存頁,雖然映射的物理內(nèi)存頁不連續(xù),但是虛擬空間是連續(xù)的,可以讓它們組合起來使用,但這也只能解決外部內(nèi)存碎片問題,沒有解決內(nèi)部內(nèi)碎片問題,因為每頁都有固定大小,可能某一頁只使用了部分,依然會造成一些浪費。

內(nèi)存交換效率慢的解決:

之前說過,減少交換數(shù)據(jù)的大小,可以提高內(nèi)存交換效率,分頁方式是這樣解決的,如果內(nèi)存空間不夠時,操作系統(tǒng)會把其他正在運行的進(jìn)程中的「最近沒被使用」的內(nèi)存頁釋放掉,也就是加載到硬盤,稱為換出,一旦需要的時候再加載進(jìn)來,稱為換入。所以一次性寫入硬盤的也只有一個頁或幾個頁,內(nèi)存的交換效率自然就提升了。

分頁方式使加載程序的時候,不再需要一次性都把程序加載到物理內(nèi)存中。完全可以在進(jìn)行虛擬內(nèi)存和物理內(nèi)存的頁之間的映射之后,并不真的把頁加載到物理內(nèi)存里,而是只有在程序運行中,需要用到對應(yīng)虛擬內(nèi)存頁里面的指令和數(shù)據(jù)時,再加載到物理內(nèi)存里面去(用大白話說,當(dāng)你需要用到的時候才會去使用對應(yīng)的物理內(nèi)存)。

在內(nèi)存分頁方式下,虛擬地址和物理地址是如何映射的?

在分頁機制下,每個進(jìn)程都會分配一個頁表,虛擬地址會分為兩部分,頁號和頁內(nèi)偏移量,頁號作為頁表的索引,頁表包含物理頁每頁所在物理內(nèi)存的基地址,頁內(nèi)偏移量+物理內(nèi)存基地址就組成了物理內(nèi)存地址,如下圖所示

圖片

就是下面這幾步

頁號找到頁表中的頁項

獲取頁項的物理頁號基地址

偏移量+物理頁號基地址計算出物理內(nèi)存地址

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6890

    瀏覽量

    88826
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2999

    瀏覽量

    73882
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6738

    瀏覽量

    123190
  • 地址
    +關(guān)注

    關(guān)注

    1

    文章

    31

    瀏覽量

    10748
收藏 人收藏

    評論

    相關(guān)推薦

    C語言malloc申請內(nèi)存時的碎片問題

    解決問題:malloc在申請內(nèi)存的時候,內(nèi)存碎片問題會導(dǎo)致原本內(nèi)存大小足夠,卻申請大內(nèi)存失敗。
    發(fā)表于 08-06 16:58 ?1589次閱讀
    C語言malloc申請<b class='flag-5'>內(nèi)存</b>時的<b class='flag-5'>碎片</b>問題

    Linux內(nèi)核內(nèi)存規(guī)整總結(jié)

    1.前言 伙伴系統(tǒng)作為內(nèi)核最基礎(chǔ)的物理頁內(nèi)存分配器,具有高效、實現(xiàn)邏輯簡介等優(yōu)點,其原理頁也盡可能降低內(nèi)存外部碎片產(chǎn)生,但依然無法杜絕碎片問題。外部
    的頭像 發(fā)表于 11-11 11:17 ?1269次閱讀
    Linux內(nèi)核<b class='flag-5'>內(nèi)存</b>規(guī)整總結(jié)

    請問mymalloc會產(chǎn)生內(nèi)存碎片嗎?

    malloc申請內(nèi)存在釋放后,會產(chǎn)生內(nèi)存碎片,所以UCOSIII內(nèi)有專門的內(nèi)存申請。原子哥視頻(UCOSIII視頻19講)最后的時候說可以用原子哥自己的mamalloc函數(shù)來申請
    發(fā)表于 10-16 04:35

    如何避免內(nèi)存碎片的產(chǎn)生

    考試題型:單選 8 道,不定項 2 道,編程 2 道,問答 1 道考點:進(jìn)程間通訊的方式,linux的基本指令(考了grep,chmod),根據(jù)代碼給出運行的結(jié)果問答題:簡述內(nèi)存碎片的定義,如何避免
    發(fā)表于 12-21 07:50

    交換機內(nèi)存

    交換機內(nèi)存         
    發(fā)表于 01-08 11:16 ?2722次閱讀

    虛擬內(nèi)存是什么_虛擬內(nèi)存有什么用

    虛擬內(nèi)存是計算機系統(tǒng)內(nèi)存管理的一種技術(shù)。它使得應(yīng)用程序認(rèn)為它擁有連續(xù)的可用的內(nèi)存(一個連續(xù)完整的地址空間),而實際上,它通常是被分隔成多個物理內(nèi)存
    發(fā)表于 11-01 10:03 ?9721次閱讀
    虛擬<b class='flag-5'>內(nèi)存</b>是什么_虛擬<b class='flag-5'>內(nèi)存</b>有什么用

    基于線段樹的內(nèi)存管理方法

    現(xiàn)有的內(nèi)存管理的工作多集中在內(nèi)存分配的效率上,實時性較好,但易產(chǎn)生內(nèi)存碎片。為此,提出基于線段樹的高效內(nèi)
    發(fā)表于 12-27 14:06 ?2次下載
    基于線段樹的<b class='flag-5'>內(nèi)存</b>管理方法

    如何避免Linux的物理內(nèi)存碎片

    Linux buddyy系統(tǒng)是linux kernel比較穩(wěn)定的一個模塊,但是并不是說它沒有缺陷,Linux內(nèi)存管理系統(tǒng)自誕生之日,就一直存在物理內(nèi)存碎片化的問題:在系統(tǒng)啟動并且運行很長一段時間后
    的頭像 發(fā)表于 05-01 16:43 ?5437次閱讀
    如何避免Linux的物理<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>化

    你知道linux kernel內(nèi)存碎片防治技術(shù)?

    Linux kernel組織管理物理內(nèi)存的方式是buddy system(伙伴系統(tǒng)),而物理內(nèi)存碎片正式buddy system的弱點之一,為了預(yù)防以及解決碎片問題,kernel采取了
    發(fā)表于 05-10 10:59 ?942次閱讀

    OPPO內(nèi)存碎片化引擎的作業(yè)

    OPPO宣傳的內(nèi)存碎片化引擎是個什么東西?它有何作用?針對上述問題,ColorOS官方微博特地發(fā)文科普,我們一起來看看。
    的頭像 發(fā)表于 03-15 16:20 ?3568次閱讀

    探索內(nèi)存交換的新出路

    內(nèi)存交換技術(shù)是當(dāng)內(nèi)存緊缺的時候,將內(nèi)存中的頁面交換交換設(shè)備中(如zRAM,SSD等)。隨著SS
    的頭像 發(fā)表于 07-26 09:11 ?746次閱讀
    探索<b class='flag-5'>內(nèi)存</b><b class='flag-5'>交換</b>的新出路

    FreeRTOS內(nèi)存碎片是怎么來的

    內(nèi)存碎片 在看 FreeRTOS的內(nèi)存分配方法之前我們先來看一下什么叫做內(nèi)存碎片,看名字就知道是小塊的、
    的頭像 發(fā)表于 07-30 10:29 ?864次閱讀
    FreeRTOS<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>是怎么來的

    什么是內(nèi)存碎片Linux

    什么是內(nèi)存碎片內(nèi)存碎片在Linux很早的時候就已經(jīng)出現(xiàn)了,了解早期內(nèi)存碎片產(chǎn)生的歷史,有利于
    的頭像 發(fā)表于 10-08 10:12 ?699次閱讀
    什么是<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>Linux

    內(nèi)存分段是如何產(chǎn)生內(nèi)存碎片

    內(nèi)存分段 程序包含若干個邏輯分段,如可由代碼段、數(shù)據(jù)段、棧段、堆段組成,每個分段都有不同的屬性,所以內(nèi)存以分段的形式把這些段分離出來進(jìn)行管理 在內(nèi)存分段方式下,虛擬地址和物理地址是如何映射的? 分段
    的頭像 發(fā)表于 10-09 16:28 ?1249次閱讀
    <b class='flag-5'>內(nèi)存</b>分段是如何產(chǎn)生<b class='flag-5'>內(nèi)存</b><b class='flag-5'>碎片</b>的

    如何使用反射內(nèi)存交換

    反射內(nèi)存交換機是一種用于實現(xiàn)高速數(shù)據(jù)共享和通信的關(guān)鍵設(shè)備,以下是關(guān)于如何使用反射內(nèi)存交換機的詳細(xì)介紹:一、前期準(zhǔn)備?在開始使用反射內(nèi)存
    發(fā)表于 09-14 09:23 ?0次下載