计算机操作系统:存储器的管理
? ? ? ? ?程序的幾種裝入方式:
? ? ? ? ? ? 1.絕對裝入方式:用戶程序編譯后將產生絕對地址的目標代碼,絕對裝入程序按照裝入模塊的地址將程序和數據裝入內存。程序中所使用的絕對地址既可以在編譯或匯編時給出,也可由程序員直接賦予,適用于單道程序環境。
? ? ? ? ? ? 2.可重定位裝入方式:多道程序環境下,編譯程序不可能預知經編譯后所得到的目標模塊應放在內存的何處。因此,對于用戶程序編譯所形成的若干個目標模塊,它們的起始地址通常都是從0開始,程序中的其他地址都是相對于其實地址計算的,它可以根據內存的具體情況將模塊裝入到內存的適當位置。
? ? ? ? ? ? 3.動態運行時的裝入:可重定位的裝入方式不運行程序運行時在內存中移動位置,因為移動位置需要修改程序和數據的地址。動態運行時的裝入方式在把裝入模塊裝入內存之后,并不立即把裝入模塊中的邏輯地址轉換為物理地址,而是把這種地址轉換推遲到程序真正要執行時才運行。因此,裝入內存后的所有地址都仍是邏輯地址。
? ? ? ? ?程序鏈接的幾種方式:
? ? ? ? ? ? 1.靜態鏈接:在程序運行之前,先將各個目標模塊及它們所需的庫函數鏈接成一個完整的裝配模塊,以后不再拆開
? ? ? ? ? ? 2.裝入時的動態鏈接:源程序編譯成的目標模塊,在裝入內存時,采用邊裝入邊鏈接的鏈接方式。即在裝入一個目標模塊時,若發生一個外部模塊調用事件,將引起裝入程序去找出相應的外部目標模塊,并將它裝入內存
? ? ? ? ? ? 3.運行時的動態鏈接:將對某些模塊的鏈接推遲到程序執行時才運行。亦即,在執行的過程中,當發現一個被調用模塊尚未裝入內存時,立即由OS去找到改模塊,并將之裝入內存,將其鏈接到調用者模塊上
? ? ? ? ?連續分配內存的幾種方式:
? ? ? ? ? ? ?1. 單一連續分配:單道程序環境時,整個內存的用戶空間由該程序獨占
? ? ? ? ? ? ?2.固定分區分配:將整個用戶空間劃分微若干個固定大小區域,在每個分區只裝入一道作業。當有一個空閑分區時,便可以再從外存的后備作業隊列中選擇一個適當大小的作業裝入該分區。
? ? ? ? ? ? ?3.動態分區分配:根據進程的需要,動態地為之分配內存空間。在實現動態分區分配時,將涉及到分區分配中所用的數據結構,分區分配算法和分區分配與回收操作這樣三方面的問題。
? ? ? ? ? ? ?4.基于順序搜索的動態分區分配:
? ? ? ? ? ? ? ? ? ? 1>首次適應算法:這個算法要求空閑分區鏈以地址遞增的次序鏈接。在分配內存時,從鏈首開始順序查找,直至找到一個大小能滿足要求的空閑分區為止。然后在按作業的大小,從該分區中劃出一塊內存空間,分配給請求者,余下的空閑分區仍留在空閑鏈中。若從鏈首至鏈尾都找不到一個能滿足要求的分區,則表明系統中已沒有足夠大的內存分配給該進程,內存分配失敗,返回。
? ? ? ? ? ? ? ? ? ? ?2>循環首次適應算法:與首次適應算法相比,不再是每次從鏈首開始查找,而是從上次找到的空閑分區的下一個空閑分區開始查找,直至找到一個能滿足要求的空閑分區。
? ? ? ? ? ? ? ? ? ? ?3>最佳適應算法:每次為作業分配內存時,總是把能滿足要求,又是最小的空閑分區分配給作業。為了加速查找,該算法要求將所有的空閑分區按其容量以從小到大的順序形成一空閑分區鏈。
? ? ? ? ? ? ? ? ? ? ?4>最壞適應算法:它在掃描整個空閑分區或鏈表時,總是挑選一個最大的空閑區,從中分割一部分存儲空間給作業使用,以至于存儲器中缺乏大的空閑分區。
? ? ? ? ? ? ?5.基于索引搜索的動態分區分配
? ? ? ? ? ? ? ? ? ? ?1>快速適應算法:又稱分類搜索法,是將空閑分區根據其容量大小進行分類,對于每一類具有相同容量的所有空閑分區,單獨設立一個空閑分區鏈表。同時在內存中設立一張管理索引表,其中每一個索引表項對應了一種空閑分區類型,并記錄該類型空閑分區鏈表表頭指針,空閑分區的分類是根據進程常用的空間大小進行劃分的。
? ? ? ? ? ? ? ? ? ? ?2>伙伴系統(后面講)
? ? ? ? ? ? ? ? ? ? ?3>哈希算法:利用哈希快速查找的優點,以及空閑分區在可利用空閑分區表中的分布規律,建立哈希函數,構造一張以空閑分區大小為關鍵字的哈希表,該表的每一個表項記錄了一個對應的空閑分區鏈表表頭指針。
? ? ? ? ? ? ?6.動態可重定位的分區分配:
? ? ? ? ? ? ? ? ? ? ? 1>緊湊:將內存中所有的作業進程移動,使它們全都鄰接。這樣,即可把原來分散的多個空閑小分區拼接成一個大分區,可將一個作業裝入該區。這種通過移動內存中作業的位置,把原來多個分散的小分區拼接成一個大分區的方法稱為緊湊。緊湊會造成內存地址發生變化。
? ? ? ? ? ? ? ? ? ? ? ?2>動態重定位:作業裝入內存后的所有地址是邏輯地址,而將相對地址轉換為絕對地址的工作被推遲到程序指令要真正執行時進行。
? ? ? ? ? ? ? ? ? ? ? ?3>動態重定位分區分配算法:與動態分區分配算法基本相同,差別僅在于:在這種分配算法中,增加了緊湊的功能。
? ? ? ? ?對換:把內存中暫時不能運行的進程或者暫時不用的程序或數據換出到外存上,以便騰出足夠的空間,再把已具備運行條件的進程或進程所需要的程序和數據換入內存。
? ? ? ? ?對換的類型:
? ? ? ? ? ? ? ?1.整體對換:以整個進程為單位進程對換
? ? ? ? ? ? ? ?2.頁面對換:以進程的一個"頁面"或"分段"為單位進行的
? ? ? ? ? 進程的換出和喚入:
? ? ? ? ? ? ? ?1.進程的喚出:首先選擇處于阻塞和睡眠狀態的進程,然后從中選出優先級較低最低的,有時還需要考慮進程在內存中駐留的時間。如果系統中已無阻塞進程,便選擇優先級最低的。在對進程喚出時,只能喚出非共享的程序和數據段,然后申請內存,啟動磁盤,將該進程的程序和數據傳送到磁盤的對換區上。若傳送過程未出現錯誤,便可回收該進程所占用的空間。
? ? ? ? ? ? ? ?2.進程的喚入:首先查看PCB集合中所有進程的狀態,從中找出就緒狀態和喚出的進程。當有多個這樣的進程時,它將選擇已喚出時間最久的,并未它申請內存
? ? ? ? ?分頁儲存管理方式:將用戶程序的地址空間分為若干個固定大小的區域,稱為"頁"或"頁面"。相應地,也將內存空間分為若干個物理或頁框,頁和塊的大小相同。這樣可將用戶程序的任一頁放入任一物理快中,實現離散分配。
? ? ? ? ?分段存儲管理方式:它把用戶空間分為若干個大小不同的段,每段定義一組相對完整的信息。在存儲器分配時,以段為單位,這些段在內存中可以不想鄰接。
? ? ? ? ?段頁時儲存管理方式:分頁和分段兩種存儲管理方式結合的產物,它同時具有兩者的優點。
? ? ? ? ?頁面和物理塊:分頁存儲管理將進程的邏輯地址空間分為若干個頁,并未各頁加以編號。相應地,也把內存的物理地址空間分成若干個塊,同樣為它們加以編號。在為進程分配內存時,以塊為單位,將進程中的若干個頁分別裝入到多個可以不相鄰接的物理快中。
? ? ? ? ?頁面大小:頁面過小,會導致進程的頁表過長,占用大量內存。頁面過大,會使頁內碎片增大。頁面大小通常為1KB~8KB
? ? ? ? ?頁面地址結構:頁號和位偏移量
? ? ? ? ?頁表:記錄著進程中各個頁面在內存中的位置,頁表是頁號到物理塊號的地址映射
? ? ? ? ?地址變換機構:為了將用戶地址空間的邏輯地址轉換為內存空間中的物理地址,就是將邏輯地址中的頁號轉換為內存中的物理塊號
? ? ? ? ? ? ? ? ? 1.基本的地址變換機構:當進程要訪問某個邏輯地址時,分頁地址變換機構會以頁號為索引去檢索頁表(頁表大多存在內存中,在系統中只設置了一個頁表寄存器)。在執行檢索之前,先將頁號與頁面長度進行比較,若未發生越界錯誤,則將頁表地址與頁號和頁表項長度的乘積相加,便得到該表項在頁表中的位置,再將該頁的物理塊號裝入物理地址寄存器中,與此同時,也把有效的地址寄存器中的頁內地址送入物理地址寄存器的塊內地址段中,這樣便完成了轉換
? ? ? ? ? ? ? ? ? 2.具有塊表的地址變換機構:基本的地址變換機構需要二次訪問內存,為了提高地址變換速度,可在地址變換機構中增設一個具有并行查詢能力的特殊高速緩沖寄存器,稱為“塊表”。每次地址變換機構將頁號送入高速緩沖寄存器,并將次頁號與高速緩存中的所有頁號進行比較,若其中沒有與次相匹配的在去訪問內存中的頁表。
? ? ? ? 兩級頁表:由于頁表占用進程的空間過大(1MB),而且需要連續的內存,兩級頁表則可以解決這個問題。可利用將頁表進行分頁的方法,使每個頁面的大小與內存物理塊相同,然后離散地將各個頁面分別存放在不同的物理塊中,但要為離散的分配的頁表再建立一張頁表,稱為外層頁表。外層頁表中的每個頁表項中所存放的是某頁表分頁的首址。為了方便地址轉換,同樣需要增設一個外層頁表寄存器,用于存放外層頁表的始址,并利用邏輯地址中的外層頁號作為外層頁表的索引,從中找到指定頁表的分頁地址,再通過該地址找到對應的頁表項。在進程運行時,每次僅把當前需要的一批頁表項調入內存,以后再根據需要陸續調入,這樣能節省空間。
? ? ? ?反置頁表:為每一個物理塊設置一個頁表項,并將它們按物理塊的編號進行排序,其中的內容則是頁號和其所屬進程的標識符。在利用反置頁表進行進行地址變換時,是根據進程標識符和頁號,去檢索反置頁表。若檢索了整個反置頁表仍未找到匹配的頁表項,則表明此頁尚未裝入內存。反置頁表中只包含已經調入內存的頁面,并未包含尚未調入內存的頁面。因此,還必須為每個進程建立一個外部頁表,該頁表包含了各個頁在外存的物理位置,通過它可將所需之頁面調入內存。
? ? ?分段儲存方式的引入:
? ? ? ? ? ? ? ?1.方便編程:用戶把自己的作業按邏輯關系劃分為若干個段,每個段都是從0開始編址,并由自己的名字和長度。因此。程序們都迫切地需要訪問的邏輯地址是由段名和段內偏移量決定的。
? ? ? ? ? ? ? ?2.信息共享:在實現對程序和數據的共享時,是以信息的邏輯單位為基礎的。分頁系統中的"頁",只是存放信息的物理單位,并無完整的邏輯意義,這樣,一個可被共享的過程可能需要占用數十個頁面。
? ? ? ? ? ? ? ?3.信息保護: 信息保護同樣是以邏輯單位為基礎的,而且經常是以一個過程,函數或文件為基本單位進行保護的。
? ? ? ? ? ? ? ?4.動態增長:實際應用中,往往存在著一些段,尤其是數據段需要動態增長
? ? ? ? ? ? ? ?5.動態鏈接:在程序的運行過程中,當需要某個目標程序時,是將該段(目標程序)調入內存并進行鏈接。
? ? ? 段表:一張段映射表,每個段在表中占有一個表項,其中記錄了該段在內存中的起始地址和段長度。
? ? ? 分段地址變換機構:系統中設置了段表寄存器,用于存放段表始址和段表長度TL。在進行地址變換時,系統將邏輯地址中的段號與段表長度TL進行比較。若未發生越界,則根據段表的始址和該段的段號,計算出該段對應段表項的位置,從中讀出該段在內存的起始地址,然后再檢查段內地址是否超過該段的段長。
? ? ? 分段和分頁的主要區別:
? ? ? ? ? ? ? 1>頁是信息的物理單位。分頁是系統為了消減內存的外零頭,提高內存的利用率,是系統的行為。分段中的段則是信息邏輯單位,它通常包含一組意義相對完整的信息,是為了滿足用戶的需要。
? ? ? ? ? ? ? 2>頁的大小由系統決定,每個系統中只能有一種大小的頁面。而段的長度不固定,通常由編譯程序在對源程序進行編譯時,根據信息的性質來劃分。
? ? ? ? ? ? ? 3>分頁的用戶程序地址空間是一維的,是單一的線性地址空間,程序員只需利用一個記憶符即可表示一個地址。分段是用戶的行為,在分段系統中,用戶程序的地址空間是二維的,程序員在標識一個地址時,即需給出段名,又需給出段內地址。
? ? ? 段頁式存儲原理:先將用戶程序分為若干個段,再把每個段分成若干個頁,并未每一個段賦予一個段名。在段頁式系統中,其地址結構由段號,段內頁號和頁內地址三部分組成。
? ? ? 段頁式存儲地址變換:系統配置一個段表寄存器,其中存放段表始址和段長TL。進行地址變換時,利用段表始址和段號來求出該段所對應的段表項在段表中的位置,從中得到該段的頁表始址,并利用邏輯地址中的段內頁號來獲的對應頁的頁表項位置,從中讀出該頁所在的物理塊號,在利用塊號和頁內地址來構成物理地址。
?
?
?
?
?
總結
以上是生活随笔為你收集整理的计算机操作系统:存储器的管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机操作系统:处理机的调度
- 下一篇: 计算机操作系统:虚拟存储器