当前位置: 首页 > 資訊 >

作業系統 第九章(1)

Background

  • 程式會在記憶體與硬體中間搬移,但最後會在記憶體內執行,且在執行時會使用到register,才能到控制unit中做硬體的process。
  • 記憶體只知道兩種指令,且都是一連串的指令:
    • address+read requests
    • address+data and write requests ⇒ 但速度較慢
  • Register存取一個指令,通常在一個CPU clock內或更少時間內完成。
  • 記憶體管理比register存取高一個order;I/O device又比記憶體管理高一個order,所以在這之中存在著速度差的關係。
  • 所有process在一個大的記憶體中執行,所以需要控制整個空間,但因為空間是共用的,所以需要保護自己的process,以免資源被別人拿去使用。

Base and Limit Registers(Hardware Support)

一個logic address space是由baselimit register所定義的。

  • Base:process的起始位置。
  • Limit register:process的大小。

CPU會負責以每個process ID來檢查每個process是否有在自己的位置上。(between base and limit)

Address Binding

  • 程式雖被儲存在硬碟上,但須被載入記憶體中才能形成process去執行,而在硬體上等待的所有process會形成一個input queue。
  • 一般來說記憶體的起始位置是0000,但使用者的位置卻不一定,因為有可能已經被別人先使用了。
  • 此外,address在程序生命週期的不同階段以不同方式表示:
    • Source code addresses usually symbolic
    • Compiled code addresses bind to relocatable address
      • 從這個module開始的第 14 個byte
    • Linker 或 Loader 將 relocatable address 綁定到 absolute addresses
      • 74014

Linker:將程式需要的像是一些library、code、proess等連接在一起。

Loader:將link好的程式,再load到確定的記憶體位置。

Binding of Instructions and Data to Memory

  • Address在將指令與數據綁定到記憶體時,會發生三種不同的階段:
    • Compile time:如果已經知道記憶體的位置,便產生 absolute code,但有更改位置的話,code也需要重新產生(recompile)。
    • Load time:如果程式在 Compile time 並不知道記憶體位置的話,就產生relocatable code。
    • Executin time:如果process在執行時,記憶體segment被搬移到另一個segment的話,連接就會延遲到這時才開始。
      • 大部分作業系統都使用這個方法
      • Need hardware support for address maps (e.g., base and limit registers)

Logical vs. Physical Address Space

  • Logical address:由 CPU 產生。可說是當一個程式的最終位置未確定前的位置,也可稱為「virtual address(虛擬地址)」。
  • Physical address:真正記憶體的位置,由memory unit所看到。

compile-time和load-time address binding schemes,logical = physical address。

在execution-time address-binding scheme就不同了。

  • Logical address space:Program 所產生的所有 logical address 的集合。
  • Physical address space:這些邏輯地址對應的所有物理地址的集合。

Memory-Management Unit(MMU)

  • 管理記憶體的硬體部分。
  • Base register在實作中可以檢查從logical address轉移到physical address的動作,所以又稱為relocation register。
  • 使用者程式可以處理 logical address,它永遠不會看到真正的 physical address。
    • 當引用記憶體中的位置時,就會發生execution-time binding。
    • logical address和physical addresses綁定在一起。

Dynamic relocation using a relocation register

  • 當模組被呼叫時,才能將其載入主要記憶體中。(Routine is not loaded until it is called)
  • 為了有更好的memory-space使用率,所以沒有使用的routine將永不載入。
  • 所有的routine以可重定位(relocatable)的加載格式,保存在硬碟上。
  • 當大量的code被需要去處理不常發生的事件時,就會非常有用(e.g 錯誤常式)。

不需要操作系統的特殊支持 (和 MMU 沒啥關係)

  1. 通過 program design 實現
  2. 操作系統可以通過提供 library 來幫助實現 dynamic loading

Dynamic Linking

  • Static linking(靜態連接):將 system libraries 載入 program code(由loader連結在一起),再由進入 binary program image。
  • Dynamic Linking(動態連接):將 linking 延遲,直到執行時間。(並非"載入時發生")
  • Stub 是 code 的一小片段,用於查找 memory-resident library routine。
  • OS會檢查是否routine在processes' space中。
  • 動態連接對於libraries特別有用
  • 此系統也可被稱為shared libraries
  • 考慮是否適用於patching system libraries。
    • Versioning may be needed