實際程式絕對地址

實際程式絕對地址

絕對地址是指存儲控制部件能夠識別的主存單元編號(或位元組地址),也就是主存單元的實際地址。實際程式絕對地址是指程式被處理機調度運行時在記憶體中的實際地址。實際程式絕對地址與存儲管理方式和程式連結方式有關。

簡介

程式是指為了完成某種計算或控制過程,按指令系統的規定,為計算機寫出的一連串依次執行的步驟(即指令或語句)。它通常用機器(能夠接受的)語言或程式設計語言來表達。實際程式絕對地址是等待程式或進程被處理機調度運行時,系統分配給程式或進程記憶體空間(地址空間)。

存儲管理

存儲管理由作業系統提供的一種功能。它能分配和回收存儲單元。一道程式在啟動執行前必須裝入存儲器內;程式在執行中可能還要申請存儲單元;程式執行完畢後要將所占用的全部存儲單元歸還給系統。這些存儲單元的分配和回收工作,都由作業系統來完成。具有多道程式設計功能的作業系統,還必須採取有效的策略,分配各用戶程式所需的存儲資源,以提高系統效率。在採用頁式存儲或虛似存儲的系統中,作業系統還要配合硬體做頁面調度工作,即將所需的頁面調入存儲器,將暫時不用的頁面調出以騰出空間。頁面調動工作完成的好壞,對系統效率有很大的影響。存儲器管理的對象是主存,也稱記憶體。它的主要功能包括分配和回收主存空間、提高主存利用率、擴充主存、對主存信息實現有效保護。存儲管理方案的主要目的是解決多個用戶使用主存的問題,其存儲管理方案主要包括分區存儲管理、分頁存儲管理、分段存儲管理、段頁式存儲管理以及虛擬存儲管理。

靜態分區存儲管理是預先把可分配的主存儲器空間分割成若干個連續區域,每個區域的大小可以相同,也可以不同。為了說明各分區的分配和使用情況,存儲管理需設定一張“主存分配表”。主存分配表指出各分區的起始地址和長度,表中的占用標誌位用來指示該分區是否被占用了,當占用的標誌位為“0”時,表示該分區尚未被占用。進行主存分配時總是選擇那些標誌為“0”的分區,當某一分區分配給一個作業後,則在占用標誌欄填上占用該分區的作業名。採用靜態分區存儲管理,主存空間的利用不高。 可變分區方式是按作業的大小來劃分分區。當要裝入一個作業時,根據作業需要的主存量查看主存中是否有足夠的空間,若有,則按需要量分割一個分區分配給該作業;若無,則令該作業等待主存空間。由於分區的大小是按作業的實際需要量來定的,且分區的個數也是隨機的,所以可以克服固定分區方式中的主存空間的浪費。隨著作業的裝入、撤離,主存空間被分成許多個分區,有的分區被作業占用,而有的分區是空閒的。當一個新的作業要求裝入時,必須找一個足夠大的空閒區,把作業裝入該區,如果找到的空閒區大於作業需要量,則作業裝入後又把原來的空閒區分成兩部分,一部分給作業占用了;另一部分又分成為一個較小的空閒區。當一作主行結束撤離時,它歸還的區域如果與其它空閒區相鄰,則可合成一個較大的空閒區,以利大作業的裝入。分頁存儲管理是將一個進程的邏輯地址空間分成若干個大小相等的片,稱為頁面或頁,並為各頁加以編號,從0開始,如第0頁、第1頁等。相應地,也把記憶體空間分成與頁面相同大小的若干個存儲塊,稱為(物理)塊或頁框(frame),也同樣為它們加以編號,如0#塊、1#塊等等。在為進程分配記憶體時,以塊為單位將進程中的若干個頁分別裝入到多個可以不相鄰接的物理塊中。由於進程的最後一頁經常裝不滿一塊而形成了不可利用的碎片,稱之為“頁內碎片”。在分段存儲管理方式中,作業的地址空間被劃分為若干個段,每個段定義了一組邏輯信息。例如,有主程式段MAIN、子程式段X、數據段D及棧段S等。每個段都有自己的名字。為了實現簡單起見,通常可用一個段號來代替段名,每個段都從0開始編址,並採用一段連續的地址空間。段的長度由相應的邏輯信息組的長度決定,因而各段長度不等。整個作業的地址空間由於是分成多個段,因而是二維的,亦即,其邏輯地址由段號(段名)和段內地址所組成。段頁式系統的基本原理,是基本分段存儲管理方式和基本分頁存儲管理方式原理的結合,即先將用戶程式分成若干個段,再把每個段分成若干個頁,並為每一個段賦予一個段名。當程式的存儲空間要求大於實際的記憶體空間時,就使得程式難以運行了。虛擬存儲技術就是利用實際記憶體空間和相對大的多的外部儲存器存儲空間相結合構成一個遠遠大於實際記憶體空間的虛擬存儲空間,程式就運行在這個虛擬存儲空間中。能夠實現虛擬存儲的依據是程式的局部性原理,即程式在運行過程中經常體現出運行在某個局部範圍之內的特點。在時間上,經常運行相同的指令段和數據(稱為時間局部性),在空間上,經常運行與某一局部存儲空間的指令和數據(稱為空間局部性),有些程式段不能同時運行或根本得不到運行。虛擬存儲是把一個程式所需要的存儲空間分成若干頁或段,程式運行用到頁和段就放在記憶體里,暫時不用就放在外存中。當用到外存中的頁和段時,就把它們調到記憶體,反之就把它們送到外存中。裝入記憶體中的頁或段可以分散存放。

程式的連結

源程式經過編譯後,可得到一組目標模組,再利用連結程式將這組目標模組連結,形成裝入模組。根據連結時間的不同,可把連結分成如下三種:

(1) 靜態連結。在程式運行之前,先將各目標模組及它們所需的庫函式,連結成一個完整的裝配模組,以後不再拆開。我們把這種事先進行連結的方式稱為靜態連結方式。

程式連結圖 程式連結圖

(2) 裝入時動態連結。這是指將用戶源程式編譯後所得到的一組目標模組,在裝入記憶體時,採用邊裝入邊連結的連結方式。用戶源程式經編譯後所得的目標模組,是在裝入記憶體時邊裝入邊連結的,即在裝入一個目標模組時,若發生一個外部模組調用事件,將引起裝入程式去找出相應的外部目標模組,並將它裝入記憶體,還要按照圖 所示的方式來修改目標模組中的相對地址。裝入時動態連結方式有以下優點:

便於修改和更新。對於經靜態連結裝配在一起的裝入模組,如果要修改或更新其中的某個目標模組,則要求重新打開裝入模組。這不僅是低效的,而且有時是不可能的。若採用動態連結方式,由於各目標模組是分開存放的,所以要修改或更新各目標模組是件非常容易的事。

便於實現對目標模組的共享。在採用靜態連結方式時,每個套用模組都必須含有其目標模組的拷貝,無法實現對目標模組的共享。但採用裝入時動態連結方式,OS 則很容易將一個目標模組連結到幾個套用模組上,實現多個應用程式對該模組的共享。

(3) 運行時動態連結。這是指對某些目標模組的連結,是在程式執行中需要該(目標)模組時,才對它進行的連結。優點主要體現為以下幾個方面:共享性、實用性和通用性 。

相關詞條

熱門詞條

聯絡我們