存儲部件的層次
主存:在保存進程運行時的程序和數據;
寄存器:速度最快,價格昂貴容量不大,一般以字為單位,只要存放指令一次操作的數據就夠了;
高速緩存:一種速度比內存快的存儲設備,一般同寄存器一樣集成在CPU中(速度快,存放部分內存數據,硬件自動處理);
磁盤緩存:內存的一部分,將頻繁使用的一部分磁盤數據信息預讀入在磁盤緩存,減少磁盤讀寫時間
1.程序的裝入和鏈接
創建進程的第一件事:將程序和數據裝入內存
1.地址的概念
邏輯地址(相對地址,虛地址):用戶的程序經過匯編或編譯后形成目標代碼,目標代碼中的指令地址是相對地址。一般手地址為0.
物理地址(絕對地址,實地址)
內存中存儲單元的地址;物理地址可直接尋址被執行。
地址映射:將用戶程序中的邏輯地址轉換為運行時由機器直接尋址的物理地址的過程。
2)程序裝入中的地址處理
邏輯地址============物理地址:①絕對裝入方式 ? ?優點:裝入過程簡單,不需任何地址變換,程序中的邏輯地址與實際內存物理地址完全相同。缺點:過于依賴硬件結構,只適用早期單道環境下
重定位:把 ?目標程序中的 指令和數據 的 邏輯地址 變成內存中的物 理地址的地址變換過程。
邏輯地址→重定位→物理地址:②靜態可重定位裝入方式
地址映射在程序執行之前進行,重定位后物理地址不再改變
優點:不需硬件支持,可以裝入有限的多道程序 ? 缺點:軟件裝入一次完成,一個程序通常需要占用連續的內存空間, ?不易實現共享
③動態運行時(重定位)裝入方式 ? ? ? ? ? ?程序裝入內存是,可多次重定位到不同位置,且可以不立即把裝入模塊中的相對地址轉換為絕對地址,而是把這種地址轉換推遲到程序真正要執行時才進行。。。更適用于部分裝入。
3)不同的程序鏈接方式:①靜態鏈接 ? 裝入運行前 ②裝入時動態鏈接 ?邊裝入邊鏈接 ? ? 1.便于修改和更新2.便于實現共享③運行時動態鏈接 ? ? ? ?不全部裝入,對某些目標模塊的鏈接,在執行中需要該目標模塊時,才對它進行鏈接。 ? 優點:程序運行裝入的內容少了,加快了裝入過程,而且節省大量的內存空間。
2.連續分配方式
(1)單一連續分配:分為系統區(低址部分)和用戶區兩部分;優點:易于管理:缺點:內存浪費
(2)固定分區分配:把內存分為一些大小相等或不等的分區,操作系統占用其中一個分區。 ? ? ?支持多個程序并發執行 ? ? ? ? ? ? ? ? ? ? ? 劃分為幾個分區,便允許幾道作業并發
劃分分區大小:相等,只適合于多個相同程序的并發執行。缺乏靈活性;;;;;;;;;;;;分區大小不等,多個小的,適量中等,少量大的
固定分配的不足: ? 1 ?內碎片(一個分區內的剩余空間)造成浪費2分區總數固定,限制并發執行的程序數量
(3)動態分區分配
分區的大小不固定:需要多少劃分多少
優點:并發進程數沒有固定數的限制,不會產生內碎片。缺點:有外碎片(分區間無法利用的空間)
2)分區分配算法
①首次適應算法FF(保留了高址部分的空閑區;會產生較多小碎片;增加查找開銷)
? ②循環首次適應算法 (從上次空閑分區的下一個開始查找 ? ? ? ?。空閑分區分布均勻,減少查找開銷;缺乏大的空閑分區) ? ? ?
③最佳適應算法 (所有空閑分區按容量從小到大排序成空閑分區表或鏈 ? ?、產生許多難以利用的小空閑區,外碎片) ? ? ? ? ? ? ? ?
?④最差適應算法(缺乏較大的空閑分區)
? ⑤快速適應算法(空間換時間,相同大小的進程串成一個鏈)
回收分區:1.回收區與某區末尾臨接 ? ?2.回收區與某區首址臨接 ? ? 3. ? 前后臨接 4.無臨接
動態重定位分區分配:動態連續分配無法解決外碎片問題(動態重定位分區分配算法與動態分區分配算法基本相同,差別在于增加了緊湊的功能。)
(5)內存空間管理之對換
3.基本分頁存儲管理方式.
分頁方式下,內存的使用率高,浪費少。但不是絕對沒有碎片(進程的最后一頁不總是能占滿一個物理塊)
1)頁面的概念
①物理劃分塊的大小=邏輯劃分頁的大小②頁面大小要適中(太大,內碎片增大,類似連續分配的問題;太小,頁面碎片總空間雖然小,提高了利用率,但每個進程的頁面數量較多,頁表過長,反而又增加了空間使用)
2)頁表的概念:為了找到被離散分配到內存中的作業,記錄每個作業各頁映射到哪個物理塊,形成的頁面映射表,簡稱頁表。(每個作業有自己的頁表;作用:頁號到物理塊號的地址映射;找作業先找頁表PCB,根據PCB找物理塊)
作業相對地址:頁號+頁內地址(頁內偏移)
? ? 4)地址變換機構:指令頁號(→物理塊)+內部偏移量
5)快表(具有“并行查詢”能力的高速緩沖寄存器):快表放正在執行進程的頁表的數據項EAT=2t + ?t' - t * a
6)兩級、多級頁表,反置頁表
4.基本分段存儲管理方式
每段占據一塊連續的內存(即有離散的分段,又有連續的內存使用)、各段大小不等
分段和分頁的主要區別
1.需求:分頁是出于系統管理的需要,是一種信息的物理劃分單位,分段是出于用戶應用的需要,是一種邏輯單位,通常包含一組意義相對完整的信息;
2.大小:頁大小是系統固定的,而段大小則通常不固定。分段沒有內碎片,但連續存放段產生外碎片(內存碎片),可以通過內存緊縮來消除。相對而言分頁空間利用率高。
3.邏輯地址:分頁是一維的,各個模塊在鏈接時必須組織成同一個地址空間;分段是二維的,各個模塊在鏈接時可以每個段組織成一個地址空間。
4.其他:通常段比頁大,因而段表比頁表短,可以縮短查找時間,提高訪問速度。分段模式下,還可針對不同類型采取不同的保護;按段為單位來進行共享。
5)段頁式存儲管理方式
①基本原理:將用戶程序分成若干段,每個段分成若干頁,地址結構包括段號、段內頁號和業內地址三部分。
Linux僅把運行進程當前使用的少量頁面裝入內存(內存分配)