基本介紹
記憶體位置是指程式裝入記憶體時的位置,一般與裝入方式有關。裝入方式設計到記憶體位置的存儲分配方式。在將一個裝入模組裝入記憶體時,可以有絕對裝入方式、可重定位裝入方式和動態運行時裝入方式。不同裝入方式決定記憶體位置是絕對的還是相對的,或者說是靜態的還是動態的。
裝入方式
絕對裝入方式
絕對裝入方式(Absolute Loading Mode)在編譯時,如果知道程式將駐留在記憶體的什麼位置,那么,編譯程式將產生絕對地址的目標代碼。例如,事先已知用戶程式(進程)駐留在從 R 處開始的位置,則編譯程式所產生的目標模組(即裝入模組)便從 R 處開始向上擴展。 絕對裝入程式按照裝入模組中的地址, 將程式和數據裝入記憶體。裝入模組被裝入記憶體後,由於程式中的邏輯地址與實際記憶體地址完全相同,故不須對程式和數據的地址進行修改。
程式中所使用的絕對地址,既可在編譯或彙編時給出,也可由程式設計師直接賦予。但在由程式設計師直接給出絕對地址時,不僅要求程式設計師熟悉記憶體的使用情況,而且一旦程式或數據被修改後,可能要改變程式中的所有地址。因此,通常是寧可在程式中採用符號地址,然後在編譯或彙編時,再將這些符號地址轉換為絕對地址。
可重定位裝入方式
可重定位裝入方式(RelocationLoadingMode),在多道程式中,不可能預知目標模組放在記憶體的何處,因此絕對裝入方式只適於單道程式環境。採用可重定位裝入方式可以根據記憶體當前的情況,將模組裝入到記憶體適當的位置。當採用可重定位裝入方式將模組裝入到記憶體後,會使裝入記憶體的所有邏輯地址與裝入記憶體的物理地址不同。
動態運行時裝入方式
動態運行時裝入方式(DenamleRun-timeLoading),動態運行時的裝入程式,在把裝入模組裝入記憶體後,並不立即把裝入模組中的相對地址轉換為絕對地址,而是把這種地址轉換推遲到程式真正要執行時才進行。因此,裝入記憶體後的所有地址都仍是相對地址。
分配方式
存儲分配所要解決的問題是多道程式之間如何共享主存的存儲空間。解決存儲分配問題有三種方式:直接存儲分配方式、靜態存儲分配方式、動態存儲分配方式。
直接存儲分配方式
直接存儲分配方式要求存儲器的可用空間已經確定,且確保各程式所用的地址之間互不重疊。缺點是用戶感到不方便,存儲器的利用率也不高。
靜態存儲分配方式
靜態存儲分配方式中。在程式被裝入、連線時,才確定它們在主存中的相應位置(物理地址)。系統必須分配其要求的全部存儲空間.否則不能裝入該用戶程式。程式將占據著分配給它的存儲空間直到程式結束。該存儲空間的位置固定不變,也不能動態地申請存儲空間。這種方式無法實現用戶對存儲空間的動態擴展,而且也不能有效地實現存儲器資源的共享。
動態存儲分配方式
動態存儲分配方式是不一次性將整個程式裝入到主存中。可根據執行的需要,部分地動態裝入。同時,在裝入主存的程式不執行時,系統可以收回該程式所占據的主存空間。再者,用戶程式裝入主存後的位置,在運行期間可根據系統需要而發生改變。此外,用戶程式在運行期間也可動態地申請存儲空間以滿足程式需求。由此可見,動態存儲分配方式在存儲空間的分配和釋放上,表現得十分靈活,現代的作業系統常採用這種存儲方式。