<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          操作系統(tǒng)的內(nèi)存究竟是怎么一回事?

          共 3450字,需瀏覽 7分鐘

           ·

          2024-04-11 03:09


          4b505924522da59adb59f2bf0a732b48.webp

          1 內(nèi)存管理的概念

          內(nèi)存管理指操作系統(tǒng)對(duì)內(nèi)存的劃分和動(dòng)態(tài)分配

          地址空間:
          邏輯地址空間:相對(duì)地址, 從0開始編址
          物理地址空間:地址轉(zhuǎn)換的最終地址

          程序運(yùn)行時(shí):
          編譯:把源代碼編譯成目標(biāo)模塊
          鏈接:把目標(biāo)模塊、庫(kù)函數(shù)鏈接成1個(gè)裝入模塊
          鏈接屬于形成進(jìn)程邏輯地址的過程

          裝入:
          絕對(duì)裝入:編譯時(shí)就確定了裝入地址
          可重定位裝入:根據(jù)內(nèi)存情況, 把程序裝到適當(dāng)位置
          運(yùn)行時(shí)動(dòng)態(tài)裝入:運(yùn)行前才真正把程序裝起來(前面2個(gè)都是先分配,再裝,再運(yùn)行)

          2 內(nèi)存防溢出機(jī)制

          即怎么防止內(nèi)存越界

          設(shè)置上下限寄存器:
          存放內(nèi)存中該進(jìn)程的上下限地址
          每次訪問時(shí),判斷是否越界

          重定位+界地址:
          重定位寄存器——存放物理地址的最小地址
          界地址寄存器——存放邏輯地址的最大值

          先把訪問地址(相對(duì)地址) 與界地址比較是否越界
          再加到重定位寄存器上,作為物理地址

          min + x, 且x <max, 這樣保證地址在min到min+max之內(nèi)

          3 內(nèi)存分配機(jī)制

          3.1 連續(xù)分配內(nèi)存

          連續(xù)分配指 為用戶程序分配的內(nèi)存空間一定是連續(xù)的

          3.1.1 單一連續(xù):

          內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū)2個(gè)區(qū)
          每次用戶區(qū)只能放1個(gè)程序, 這樣可確保不會(huì)越界

          3.1.2 固定分區(qū)分配

          用戶區(qū)分成若干個(gè)大小的分區(qū), 每個(gè)分區(qū)只能裝一個(gè)作業(yè)。
          程序如果大了會(huì)裝不下
          程序小了則有內(nèi)存碎片

          3.1.3 動(dòng)態(tài)分區(qū)分配

          程序裝入內(nèi)存時(shí),按照所需大小動(dòng)態(tài)生成1個(gè)分區(qū)。有多少碎片空間就給多少

          可能會(huì)存在碎片, 比如中間的進(jìn)程結(jié)束了, 于是中間就空出來一個(gè)內(nèi)存碎片,而可能因?yàn)樘。渌M(jìn)程帆布進(jìn)來。

          動(dòng)態(tài)分配策略:

          • 首次適應(yīng):從上往下找第一個(gè)滿足的分區(qū)——最簡(jiǎn)單也最好

          • 最佳適應(yīng):找一個(gè)大小差距最小的分區(qū)——最爛,碎片最多

          • 最壞適應(yīng):直接找最大的分區(qū)轉(zhuǎn)入

          • 鄰近適應(yīng):從上次查找位置開始找,而不是從第一個(gè)碎片位置開始找。——末尾碎片會(huì)很多

          3.2 非連續(xù)內(nèi)存分配

          非連續(xù)指進(jìn)程內(nèi)存可以 分成不同地址存放,不一定全部集中在一起。

          3.2.1 分頁

          把內(nèi)存劃分成固定大小的塊, 進(jìn)程以塊為單位申請(qǐng)多個(gè)不同位置的塊作為空間。

          • 頁表:
            每個(gè)進(jìn)程PCB中會(huì)有一個(gè)頁面寄存器PRT, 告知頁表的起始位置和起始長(zhǎng)度
            找到頁表后, 頁面中會(huì)告知你所持有的頁號(hào)和偏移。
            通過 頁號(hào) * 塊大小 + 偏移, 可知道這段內(nèi)存的起始位置。

          進(jìn)程每次想通過虛擬地址去定位物理地址時(shí),都需要先去頁表中找到虛擬地址對(duì)應(yīng)的頁,然后再得到物理地址。

          • 快表TBL(Translation Lookaside Buffer )):
            為了避免每次都取頁表換算地址, 快表會(huì)緩存 虛擬地址->物理地址的直接映射,加快速度

          424d8e7d765462865452ad3c5acd1a87.webp

          • 多級(jí)頁表
            地址空間超級(jí)大, 1頁裝不下怎么辦?
            用多級(jí)
            一級(jí)頁表指明二級(jí)頁表的地址
            二級(jí)頁表再去實(shí)際地址
            這樣就可以有多頁了。

          44d3dc8a9f10ce6fde6b3f273e9d86f9.webpf7c9fe4a558c4578673f3d11fbb1b7f7.webp

          3.2.2 分段

          分頁的話, 頁的長(zhǎng)度是固定的, 所以偏移量的最大值是固定的

          分段的話不限制偏移量最大值,即可以很長(zhǎng)一段。

          分段屬于二維地址空間, 因?yàn)樗私o出邏輯地址,還得給出段長(zhǎng)

          有利于做動(dòng)態(tài)鏈接:程序動(dòng)態(tài)修改

          9ce551145e761cd3f04cdb6c8045dbaf.webp

          3.2.3 段頁結(jié)合

          作業(yè)先分成若干段, 再把段分頁, 每個(gè)段可以找到一個(gè)也變

          段號(hào)S 頁號(hào)P 頁內(nèi)偏移

          e8d87b96504326afef7dad8936906065.webp

          Q: 遍歷二維數(shù)組的時(shí)候, 行遍歷優(yōu)先和列遍歷優(yōu)先的效率差別, 為什么會(huì)這樣

          A: 按行遍歷比按列遍歷的效率高體現(xiàn)在這些方面:

          1. CPU高速緩存

          2. CPU緩存從內(nèi)存中抓取一般都是整個(gè)數(shù)據(jù)塊,所以它的物理內(nèi)存是連續(xù)的,幾乎都是同行不同列的,而如果內(nèi)循環(huán)以列的方式進(jìn)行遍歷的話,將會(huì)使整個(gè)緩存塊無法被利用,而不得不從內(nèi)存中讀取數(shù)據(jù),而從內(nèi)存讀取速度是遠(yuǎn)遠(yuǎn)小于從緩存中讀取數(shù)據(jù)的。隨著數(shù)組元素越來越多,按列讀取速度也會(huì)越來越慢。

          4 虛擬內(nèi)存

          4.1 概念

          虛擬地址可以讓進(jìn)程獲得比實(shí)際內(nèi)存要大的內(nèi)存

          特征:

          • 多次性——作業(yè)可分多次裝入內(nèi)存

          • 對(duì)換性——可在運(yùn)行時(shí)對(duì)內(nèi)存做兌換處理

          • 虛擬性——邏輯上可充分?jǐn)U充容量

          要求:

          必須使用非連續(xù)分配方式——分頁、分段、段頁
          硬件需要支持 頁表、中斷、地址變換機(jī)構(gòu)

          理論依據(jù):

          時(shí)間局部性—— 指令和數(shù)據(jù)總是會(huì)在一段時(shí)間內(nèi)被連續(xù)訪問
          空間局部性——某單元被訪問,那么他附件的單元也很大概率會(huì)被訪問

          e7fb1a53b40b0f3fc1abcdde9fc8a42d.webp

          4.2 請(qǐng)求分頁機(jī)制

          再分頁的基礎(chǔ)上, 增加了2個(gè)功能:

          請(qǐng)求調(diào)頁——當(dāng)頁面不在內(nèi)存中時(shí),從外村申請(qǐng)調(diào)入
          頁面置換——把暫時(shí)不用的內(nèi)存換出去,給其他需要進(jìn)來的頁騰出空間

          頁表項(xiàng):
          頁號(hào)、物理塊號(hào)
          狀態(tài)位P:是否已經(jīng)調(diào)入內(nèi)存
          訪問字段A:記錄訪問次數(shù)或者訪問標(biāo)記,用于置換策略判斷
          修改維 M:記錄是否被修改過
          外村地址——當(dāng)頁被換出去時(shí),指明這個(gè)頁在外存的何處

          缺頁中斷機(jī)構(gòu):當(dāng)頁面不存在時(shí), 負(fù)責(zé)產(chǎn)生缺頁中斷,進(jìn)行頁面置換操作。

          缺頁只能高端和系統(tǒng)中斷不同, 屬于指令中的操作,在執(zhí)行期產(chǎn)生多次

          地址變換機(jī)構(gòu):
          1.先檢索塊表,如果能找到,則直接修改頁表項(xiàng)的訪問位。
          2.塊表中沒有,則去 再檢索內(nèi)存中的頁表,通過狀態(tài)為P確認(rèn)是否在內(nèi)存中
          如果不在,則產(chǎn)生缺頁中斷。

          4.3 工作集概念

          駐留集:指系統(tǒng)給每個(gè)進(jìn)程分配的內(nèi)存中實(shí)際頁面集合
          但是可能分配了10個(gè), 卻只有5個(gè)經(jīng)常在用

          工作集:某時(shí)間段內(nèi),這個(gè)進(jìn)程訪問和使用的頁面集合

          通過工作集, 系統(tǒng)可以評(píng)估這個(gè)駐留集是否需要做刪減,以及哪些頁應(yīng)該持續(xù)保留。
          這樣可以減少抖動(dòng),即減少內(nèi)外村之間頻繁的交換頁

          4.4 頁面置換算法

          • 最佳置換算法:
            選未來最長(zhǎng)時(shí)間不會(huì)被用到的頁
            這個(gè)要基于預(yù)測(cè),比較難

          • 先進(jìn)先出FIFO
            可能引發(fā)bleady異常:

          較早調(diào)入的頁往往是經(jīng)常被訪問的頁,這些頁在FIFO算法下被反復(fù)調(diào)入和調(diào)出,并且有Belady現(xiàn)象。所謂Belady現(xiàn)象是指:采用FIFO算法時(shí),如果對(duì)一個(gè)進(jìn)程未分配它所要求的全部頁面,有時(shí)就會(huì)出現(xiàn)分配的頁面數(shù)增多但缺頁率反而提高的異常現(xiàn)象。

          • 最近最久未使用(LRU)
            選之前最長(zhǎng)時(shí)間沒訪問的, 引入優(yōu)先隊(duì)列(最大堆)
            需要設(shè)置訪問時(shí)間字段

          • 簡(jiǎn)單時(shí)鐘clock(最近未使用NRU)
            每個(gè)頁有個(gè)標(biāo)記。
            剛換入內(nèi)存或者被訪問時(shí),都會(huì)置1

          如果需要換頁時(shí),步驟如下:

          1. 掃描圍成換的頁鏈表

          2. 如果標(biāo)記為1,則改成0,繼續(xù)往下掃

          3. 如果位0, 則替換,并讓指針指向下一頁。

          改進(jìn)的clock
          把標(biāo)記為改成 訪問位u和修改維m

          • 1類(A =0, M = 0):表示該頁面最近既未被訪問,又未被修改,是最佳淘汰頁。

          • 2類(A =0, M = 1):表示該頁面最近未被訪問,但已被修改,并不是很好的淘汰頁。

          • 3類(A =1, M = 0):表示該頁面最近已被訪問,但未被修改,該頁有可能再被訪問。

          • 4類(A =1, M = 1):表示該頁最近已被訪問且被修改,該頁可能再被訪問。

          1. 先優(yōu)先找u=0和m=0的頁,有就直接替換

          2. 沒有,則找 u = 0 且m=1的頁( 沒訪問的最優(yōu)先替換), 做替換

          3. 如果中間遇到U=1的, 則都會(huì)置0, 如果m=1的也會(huì)置0

          4. 如果一圈都沒有,則下一圈肯定有01或者00的。

          4.5 頁面分配量策略

          • 固定分配,局部替換
            每個(gè)進(jìn)程分配固定的物理塊, 且只能自己的塊之間做替換

          • 可變分配,全局替換
            缺頁時(shí),可以從全局隊(duì)列的頁替換

          • 可變分配,局部置換
            自己替換自己,但是不夠的時(shí)候可以加塊

          分配來源:
          對(duì)換區(qū):頻繁切換的區(qū)
          文件區(qū):補(bǔ)怎么會(huì)變動(dòng)和修改的

          鏈接:https://www.cnblogs.com/huaweiyun/p/16898931.html

          (版權(quán)歸原作者所有,侵刪)


          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美性爱综合 | 国产精品在线三级 | 国产精品性爱视频 | 影音先锋亚洲成人 | 男人天堂亚洲天堂 |