Ch7_Memory_Management

本文深入探讨了内存管理中的关键概念,包括静态与动态绑定、连续内存分配、外部碎片问题以及分页机制。动态绑定允许程序在执行期间改变其起始地址,提高了系统的灵活性。连续内存分配可能导致外部碎片,而分页则解决了这一问题,但引入了内部碎片。文章还介绍了页表的制作、分页相关计算和分页式分段内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Memory Management

重點一

Binding

  • Binding : 決定程式在記憶體執行之起始位址
    image
  • Stactic Binding ( logical address = physical address )
    • Compiling Time (Compiler) → 如果編譯時,程式所在的記憶體位置已知,那麼可產生absolute code,將來程式執行的起始位址不得變更 ; 如果起始位置變化,必須重新編譯代碼。

      • 缺點:若所決定的位址內有其它的程式在執行,或之後要變更程式執行的起始位址,則須 recompile。
    • Loading Time (linking loader) → 如果編譯時不能確定程式所在的記憶體位置,則必須生成relocatable code

      • 優點 : 更程式執行的起始位址不須 recompile。
      • 缺點
        • execution time 沒有被呼叫到的模組仍需事先 linking, Allocation, Loading,浪費時間也浪費記憶體。 (e.g. if-else 的程序、OS 錯誤處理程序。)
        • 程式執行期間仍不可以改變起始位址。
          image
  • Dynamic Binding ( logical address ≠ physical address )
    • Execution Time (O.S) → 在程式執行期間才決定程式執行的起始位址。需要的額外硬體支援(Memory-Management Unit, MMU)。
      • 優點
        • [1]:Process在執行期間可以任意更動其起始位址,仍能正確執行
        • [2]:有利於O.S彈性地管理Memory Space之配置(彈性高)
      • 缺點
        • [1]:需要Hardware額外支持 → 不是O.S(∵要用O.S需interrupt,而此操作太頻繁不適合)
        • [2]:Process Exec.Time 變長 ,Performance 較差
      • Paging是用Dynamic binding,雖然Paging也可以用Compiling Time 或 linking Time,但沒什麼意義
  • Logical address : CPU → Logical address (Virtual addr.) → Logical address space
    Physical address : Memory → Physical address (Hareware site e.g RAM) → Physical address space
    image
  • Static link → Compile 時 library 就加入程式碼(好幾個程式都#include <stdio.h>,就會有好幾份程式碼分布在記憶體當中,很冗)
  • Dynamic linking → call module 後 ,load + link(好幾個程式都#include <stdio.h>,只load一份,大家共用(Share library)
    • Def : module 間的 External symbol reference (外部符號參考)之工作,延到 execution time 才做,即不事先
          linking,而是在 execution time 時等某個 module 被 call 時,才 loa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值