儲存器歷來都是計算機系統的重要部分。儲存器的多層結構
對於計算機而言,儲存層次至少分為三層:cpu暫存器、主存、輔存。還可以根據具體功能細分為:暫存器、快取記憶體、主儲存器、磁碟快取、固定硬碟、可移動儲存介質。
暫存器、快取記憶體、主儲存器、磁碟快取均屬於作業系統儲存管理的管轄範圍,斷電後資訊不再存在。低階的固定磁碟和可移動儲存介質則屬於裝置管理的管轄範圍,將被長期儲存。
可執行儲存器
在計算機系統的儲存層次中,暫存器和主存器又被稱為可執行儲存器。程序可以在很少的時鐘週期內使用一條load或store指令對可執行儲存器程序訪問。但是對輔存的訪問則要通過i/o裝置實現。對於不同層次的儲存介質,由作業系統進行統一管理、**以及提供在儲存層次間資料移動的管理機制。
主儲存器
主儲存器簡稱主存或記憶體,是計算機系統的主要部件,用於保護程序執行時的程式和資料,也稱為可執行儲存器。
暫存器
暫存器具有與處理機相同的速度,故對暫存器的訪問速度最快。
快取記憶體
快取記憶體是現代計算機結構的乙個重要部件,它是介於暫存器和儲存器之間的儲存器。為了緩和記憶體和處理機速度之間的矛盾。
磁碟快取
為了緩和磁碟的i/o與主存的速度不匹配。磁碟快取並不是實際存在的儲存器,而是利用主存中的部分儲存空間存放在磁碟讀寫的資訊。主存也可以看做是輔存的快取記憶體。
使用者程式要在系統中執行,必須現將它裝入記憶體,然後將其轉變為乙個可以執行的程式。編譯
鏈結裝入
絕對裝入方式
當計算機系統很小,且僅能執行單道程式時,完全有可能知道程式將駐留在記憶體的什麼位置。此時可以採用絕對裝入方 式。程式中所使用的絕對位址既可在編譯或彙編時給出,也可由程式設計師直接賦予。
可重定位裝入方式
可適合多道程式環境,但並不允許程式執行時在記憶體中移動位置。重定位裝入程式將裝入模組裝入記憶體後,會使得裝入模組中所有邏輯位址與實際裝入記憶體的實體地址不同。
在裝入時對目標程式中指令和資料位址的修改過程成為重定位(靜態重定位)。
動態執行時的裝入方式
乙個程序被多次換出又被多次換入,應採用動態執行方式。
源程式經過編譯後,可得到一組目標模組。鏈結程式的功能是將這組目標模組以及它們所需要的庫函式裝配成乙個完整的裝入模組。在對目標模組進行鏈結時,根據進行鏈結的時間不同,可以把鏈結分為以下三類:靜態鏈結
裝入時動態鏈結
執行時動態鏈結
為了將使用者程式裝入記憶體,必須為它提供一定大小的記憶體空間。連續分配方式可分為四類:單一連續分配、固定連續分配、動態分割槽分配、動態可重定位分割槽分配
在單道程式中,當時的儲存器管理的方式是把記憶體分為使用者區和系統區兩個部分,系統區僅對os使用,它通常放在記憶體的低址部分。劃分分割槽方法
分割槽大小相等:缺乏靈活性
分割槽大小不等:增加儲存器分配的靈活性
記憶體分配
將分割槽按其大小程序排隊,為之建立一張分割槽使用表,各表項包括了每個分割槽的起始位址,大小及狀態,由記憶體分配表依據使用者程式的大小檢索該錶。若未找到大小足夠的分割槽,則拒絕為該使用者程式分配記憶體。
動態分割槽分配又稱為可變分割槽分配,依據程序的實際需要,動態地位置分配記憶體空間。涉及到分割槽分配中所用的資料結構、分割槽分配演算法和分割槽的分配與**操作三個方面的問題。動態分割槽分配中的資料結構
為了實現動態分割槽分配,必須配置相應的資料結構用於描述空閒分割槽和已分配分割槽的情況,為分配提供依據。常用的資料結構有兩種形式:①空閒分割槽表,②空閒分割槽鏈
動態分割槽分配演算法
為把乙個新作業裝入記憶體,須按照一定的分配演算法,從空閒分割槽表或空閒分割槽鏈中選出一分割槽分配給該作業。
分割槽分配操作
主要操作為:分配記憶體和**記憶體分配記憶體
**記憶體
首次適應演算法(ff)
迴圈首次適應演算法(nf)
最佳適應演算法(bf)
總是把能滿足要求、又最小的空閒分割槽分配給作業,避免「大材小用」。
最壞適應演算法(wf)
總是挑選乙個最大的空閒區,以至於儲存器中缺乏大的空閒區。
基於順序搜尋的動態分割槽分配演算法比較適用於不太大的系統。快速適應演算法
該演算法又稱為分類搜尋法,將空閒分割槽根據容量大小進行分類,相同容量的所有空閒分割槽單獨設立乙個空閒分割槽鍊錶。第一步確定程序的長度,從索引表中尋找能容納它的最小空閒區鍊錶;第二步是從鍊錶中取下第一塊進行分配即可。優點是查詢效率高。
夥伴系統
該演算法規定,武林已分配區間或空閒分割槽,大小均為2的k次冪的形式。時間效能比快速適應演算法叉,但是採用了索引搜尋演算法,比孫旭搜尋演算法好。
雜湊演算法
雜湊演算法就是利用雜湊快速查詢的優點,建立雜湊函式,構造一張以空閒分割槽大小為關鍵字的雜湊表。
作業系統 2 作業系統介面
介面是什麼?使用者用很熟悉的東西進入系統 連線兩個東西 訊號轉換 遮蔽細節.第一部分 作業系統介面 首先從命令列和圖形介面來引入我們作業系統介面的介紹 命令列是一段程式,系統初始化完之後便進入這段程式,這個程式是乙個死迴圈,不斷等待著使用者敲入命令。圖形介面是包括畫圖的c程式 c語言邏輯 重要函式 ...
作業系統實驗2
1 訊息的建立,傳送和接受。使用系統呼叫 msgget msgsnd msgrev 及msgctl 編制一長度為1k的訊息傳送和接受的程式。為了便於操作和觀察結果,用乙個程式做為 引子 先後fork 兩個子程序,server 和 client 程序通訊。server 端建立乙個key 為 75 的訊...
自製作業系統 (2)
接上篇,檔案跳轉到了entry.s裡面,這是kernel的入口。首先面臨這麼乙個問題,kernel被載入到了什麼地方?回想上篇elf檔案的載入機制,以及objdump裡列印出的kernel資訊,可以看到,kernel的 段 text段 被載入到了0x100000的位置,也就是1m的位置,所以記憶體布...