天天看點

記憶體管理基本知識-大緻

記憶體管理

作業系統對記憶體的劃分和動态配置設定,就是記憶體管理的概念。有效的記憶體管理在多道程式設計中非常重要,不僅友善使用者使用存儲器、提高記憶體使用率,還可以通過虛拟技術從邏輯上擴充存儲器。記憶體管理的功能有:

  • 記憶體空間的配置設定與回收
  • 位址轉換:在多道程式環境下,程式中的邏輯位址與記憶體中的實體位址不可能一緻,是以存儲管理必須提供位址變換功能,把邏輯位址轉換成相應的實體位址。
  • 記憶體空間的擴充:利用虛拟存儲技術或自動覆寫技術,從邏輯上擴充記憶體。
  • 存儲保護:保證各道作業在各自的存儲空間内運作,互不幹擾。
程式裝入和連結

建程序首先要将程式和資料裝入記憶體。将使用者源程式變為可在記憶體中執行的程式,通常需要以下幾個步驟:

  • 編譯:由編譯程式将使用者源代碼編譯成若幹個目标子產品。
  • 連結:由連結程式将編譯後形成的一組目标子產品,以及所需庫函數連結在一起,形成一個完整的裝入子產品。
  • 裝入:由裝入程式将裝入子產品裝入記憶體運作。
    記憶體管理基本知識-大緻

程式的連結有以下三種方式:

  • 靜态連結:在程式運作之前,先将各目标子產品及它們所需的庫函數連結成一個完整的可執行程式,以後不再拆開。
  • 裝入時動态連結:将使用者源程式編譯後所得到的一組目标子產品,在裝入記憶體時,釆用邊裝入邊連結的連結方式。
  • 運作時動态連結:對某些目标子產品的連結,是在程式執行中需要該目标子產品時,才對它進行的連結。其優點是便于修改和更新,便于實作對目标子產品的共享。

子產品在裝入記憶體時,同樣有以下三種方式:

  • 絕對裝入。在編譯時,如果知道程式将駐留在記憶體的某個位置,編譯程式将産生絕對位址的目标代碼。絕對裝入程式按照裝入子產品中的位址,将程式和資料裝入記憶體。由于程式中的邏輯位址與實際記憶體位址完全相同,故不需對程式和資料的位址進行修改。
  • 可重定位裝入。在多道程式環境下,多個目标子產品的起始位址通常都是從0開始,程式中的其他位址都是相對于起始位址的,此時應釆用可重定位裝入方式。根據記憶體的目前情況,将裝入子產品裝入到記憶體的适當位置。裝入時對目标程式中指令和資料的修改過程稱為重定位,位址變換通常是在裝入時一次完成的,是以又稱為靜态重定位。靜态重定位的特點是在一個作業裝入記憶體時,必須配置設定其要求的全部記憶體空間,如果沒有足夠的記憶體,就不能裝入該作業。此外,作業一旦進入記憶體後,在整個運作期間不能在記憶體中移動,也不能再申請記憶體空間。
  • 動态運作時裝入,也稱為動态重定位,程式在記憶體中如果發生移動,就需要釆用動态的裝入方式。裝入程式在把裝入子產品裝入記憶體後,并不立即把裝入子產品中的相對位址轉換為絕對位址,而是把這種位址轉換推遲到程式真正要執行時才進行。是以,裝入記憶體後的所有位址均為相對位址,這種方式需要一個重定位寄存器的支援。動态重定位的特點是可以将程式配置設定到不連續的存儲區中;在程式運作之前可以隻裝入它的部分代碼即可投入運作,然後在程式運作期間,根據需要動态申請配置設定記憶體;便于程式段的共享,可以向使用者提供一個比存儲空間大得多的位址空間。
    記憶體管理基本知識-大緻
記憶體保護

繼續閱讀