⑴ 操作系統(三)內存管理 3.2 虛擬內存管理
傳統存儲管理很多暫時用不到的數據也會長期佔用內存,導致內存利用率不高,他們具有以下兩個特徵
高速緩沖技術的思想:將近期會頻繁訪問到的數據放到更高速的存儲器中,暫時用不到的數據放在更低速存儲器中。快表機構就是將近期常訪問的頁表項副本放到更高速的聯想寄存器中,其依賴的就是局部性原理
時間局部性:如果執行了程序中的某條指令,那麼不久後這條指令很有可能再次執行;如果某個數據被訪問過,不久之後該數據很可能再次被訪問。(因為程序中存在大量的循環)
空間局部性:一旦程序訪問了某個存儲單元,在不久之後,其附近的存儲單元也很有可能被訪問。(因為很多數據在內存中都是連續存放的,並且程序的指令也是順序地在內存中存放的)
基於局部性原理,在程序裝入時,可以將程序中很快會用到的部分裝入內存,暫時用不到的部分留在外存,就可以讓程序開始執行。在程序執行過程中,當所訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然後繼續執行程序。若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出到外存。在操作系統的管理下,在用戶看來似乎有一個比實際內存大得多的內存,這就是 虛擬內存 。虛擬內存是操作系統虛擬性的一個體現,實際的物理內存大小沒有變,只是在邏輯上進行了擴充。
虛擬內存有以下三個主要特徵:
虛擬內存技術,允許一個作業分多次調入內存。如果採用連續分配方式,會不方便實現。因此,虛擬內存的實現需要建立在離散分配的內存管理方式基礎上。
虛擬內存的實現有以下三種方式
在程序執行過程中,當所訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然後繼續執行程序。 [1] 若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出到外存。 [2]
請求分頁系統建立在基本分頁系統之上,為了支持虛擬存儲器功能而增加了請求調頁和頁面置換功能
與基本分頁管理相比,請求分頁管理中,為了實現「請求調頁」,操作系統需要知道每個頁面是否已經調入內存;如果還沒調入,那麼也需要知道該頁面在外存中存放的位置。當內存空間不夠時,要實現「頁面置換」,操作系統需要通過某些指標來決定到底換出哪個頁面;有的頁面沒有被修改過,就不用再浪費時間寫回外存。有的頁面修改過,就需要將外存中的舊數據覆蓋,因此,操作系統也需要記錄各個頁面是否被修改的信息。因此,請求頁表項增加了四個欄位
在請求分頁系統中,每當要訪問的頁面不在內存時,便產生一個缺頁中斷,然後由操作系統的缺頁中斷處理程序處理中斷。此時缺頁的進程阻塞,放入阻塞隊列,調頁完成後再將其喚醒,放回就緒隊列。如果內存中有空閑塊,則為進程分配一個空閑塊,將所缺頁面裝入該塊,並修改頁表中相應的頁表項。
找到對應頁表項後,若對應頁面未調入內存,則產生缺頁中斷,之後由操作系統的缺頁中斷處理程序進行處理
快表中有的頁面一定是在內存中的。若某個頁面被換出外存,則快表中的相應表項也要刪除,否則可能訪問錯誤的頁面
頁面的換入、換出需要磁碟I/O,會有較大的開銷,因此好的頁面置換演算法應該追求更少的缺頁率
最佳置換演算法(OPT,Optimal):每次選擇淘汰的頁面將是以後永不使用,或者在最長時間內不再被訪問的頁面,這樣可以保證最低的缺頁率。
最佳置換演算法可以保證最低的缺頁率,但實際上,只有在進程執行的過程中才能知道接下來會訪問到的是哪個頁面。操作系統無法提前預判頁面訪問序列。因此,最佳置換演算法是無法實現的。
先進先出置換演算法(FIFO):每次選擇淘汰的頁面是最早進入內存的頁面。把調入內存的頁面根據調入的先後順序排成一個隊列,需要換出頁面時選擇隊頭頁面即可。隊列的最大長度取決於系統為進程分配了多少個內存塊。
只有FIFO演算法會產生Belady異常 [3] 。另外,FIFO演算法雖然實現簡單,但是該演算法與進程實際運行時的規律不適應,因為先進入的頁面也有可能最經常被訪問。因此,演算法性能差
最近最久未使用置換演算法(LRU,least recently used):每次淘汰的頁面是最近最久未使用的頁面。賦予每個頁面對應的頁表項中,用訪問欄位記錄該頁面自上次被訪問以來所經歷的時間t。當需要淘汰一個頁面時,選擇現有頁面中t值最大的,即最近最久未使用的頁面。
該演算法的實現需要專門的硬體支持,雖然演算法性能好,但是實現困難,開銷大
時鍾置換演算法是一種性能和開銷較均衡的演算法,又稱CLOCK演算法,或最近未用演算法(NRU,NotRecently Used)簡單的CLOCK演算法實現方法:為每個頁面設置一個訪問位,再將內存中的頁面都通過鏈接指針鏈接成一個循環隊列。當某頁被訪問時,其訪問位置為1。當需要淘汰一個頁面時,只需檢查頁的訪問位。如果是0,就選擇該頁換出;如果是1,則將它置為0,暫不換出,繼續檢查下一個頁面,若第一輪掃描中所有頁面都是1,則將這些頁面的訪問位依次置為0後,再進行第二輪掃描(第二輪掃描中一定會有訪問位為0的頁面,因此簡單的CLOCK演算法選擇一個淘汰頁面最多會經過兩輪掃描)
改進型的時鍾置換演算法:
簡單的時鍾置換演算法僅考慮到一個頁面最近是否被訪問過。事實上,如果被淘汰的頁面沒有被修改過,就不需要執行I/O操作寫回外存。只有被淘汰的頁面被修改過時,才需要寫回外存。因此,除了考慮一個頁面最近有沒有被訪問過之外,操作系統還應考慮頁面有沒有被修改過。在其他條件都相同時,應優先淘汰沒有修改過的頁面,避免I/O操作。這就是改進型的時鍾置換演算法的思想。修改位=0,表示頁面沒有被修改過;修改位=1,表示頁面被修改過。為方便討論,用(訪問位,修改位)的形式表示各頁面狀態。如(1,1)表示一個頁面近期被訪問過,且被修改過。
演算法規則:將所有可能被置換的頁面排成一個循環隊列
由於第二輪已將所有幀的訪問位設為0,因此經過第三輪、第四輪掃描一定會有一個幀被選中,因此改進型CLOCK置換演算法選擇一個淘汰頁面最多會進行四輪掃描
對於分頁式的虛擬內存,在進程准備執行時,不需要也不可能把-一個進程的所有頁都讀入主存。因此,操作系統必須決定讀取多少頁,即決定給特定的進程分配幾個頁框。
分配方式有
置換方式有
根據以上,現代操作系統通常採用三種策略:
預調頁策略:根據局部性原理,一次調入若干個相鄰的頁面可能比一次調入一個頁面更高效。但如果提前調入的頁面中大多數都沒被訪問過,則又是低效的。因此可以預測不久之後可能訪問到的頁面,將它們預先調入內存,但目前預測成功率只有50%左右。故這種策略 主要用於進程的首次調入 ,由程序員指出應該先調入哪些部分。
請求調頁策略:進程 在運行期間發現缺頁時才將所缺頁面調入內存 。由這種策略調入的頁面一定會被訪問到,但由於每次只能調入一頁,而每次調頁都要磁碟l/O操作,因此I/O開銷較大。
請求分頁系統中的外存分為兩部分:用於存放文件的文件區和用於存放對換頁面的對換區。對換區通常採用連續分配方式,而文件區採用離散分配方式,因此對換區的磁碟I/O速度比文件去的更快
剛剛換出的頁面馬上又要換入內存,剛剛換入的頁面馬上又要換出外存,這種頻繁的頁面調度行為稱為抖動,或顛簸。產生抖動的主要原因是進程頻繁訪問的頁面數目高於可用的物理塊數(分配給進程的物理塊不夠)
工作集:指在某段時間間隔里,進程實際訪問頁面的集合。
操作系統會根據「窗口尺寸」來算出工作集。
工作集大小可能小於窗口尺寸,實際應用中,操作系統可以統計進程的工作集大小,根據工作集大小給進程分配若干內存塊。 [4]
一般來說,駐留集大小不能小於工作集大小,否則進程運行過程中將頻繁缺頁。
⑵ 計算機將文件寫入內存的過程是怎麼樣的
要看你指的文件是什麼樣的文件。如果只是普通的文本,比如你用一個小程序把一些數據裝入內存,那就很簡單:c語言裡面一般是:
向系統申請內存(內存分配,根據需要申請合適的大小);
打開文件;
讀取一行,此時讀取的這行就進入內存了。
判斷是否到文件末尾,未到,繼續讀下一行。如此循環。
如果你指的是程序,這個過程將復雜很多。程序要進入內存執行,從你滑鼠點擊程序開始,操作系統讀取程序文件,判斷其中的指令及數據,在內存中分配指令段、數據段。將正在執行的程序狀態修改為其它狀態,然後你啟動這個程序設置為運行,它就開始了。有可能還需要將內存中已有的程序換出到硬碟上(頁面交換)以空出內存空間給新程序。
⑶ 操作系統如何把程序從磁碟載入到內存並創建進程的
雙擊執行的時候,就像是去飯店吃飯,首先要進入飯店(打開文件夾),然後服務員會奉上菜單(看到里邊有什麼文件),然後你點了一道菜(雙擊可執行文件),服務員去後廚下單(操作系統通過文件系統驅動找到文件的存儲位置並開始載入),後廚會切菜、配菜(分解文件,並按數據、代碼等不同部分載入到內存),接著炒菜(執行代碼)。炒菜過程中會分別加入主料、配料和不同的佐料(調用數據),烹制完成後出鍋(執行完畢),端菜上桌(把返回的結果呈現給用戶)。大致的流程基本就是這樣的,至於快捷方式嘛,你就理解成是外賣單好了。菜單只有飯店裡才看的到,外賣單在哪裡都能看的到~
至於交換空間,那不是央視的一個家居裝修類欄目么…………=。=|||…………我估計你說的應該是頁面交換文件吧?那個是虛擬內存技術,按照剛才的比喻來說,相當於要做的菜略多,後廚空間不夠了,於是廚師長下令把還沒做完但是不著急做的菜先挪到邊上放著(將內存中暫時不著急運行的程序做成鏡像存儲到文件系統中交換文件的位置),等到著急的菜都做完了再說。
再詳細的原理細節,我就無法做說明了,題主可以去查閱一些關於操作系統原理的書籍,會更加詳細。
⑷ 計算機操作系統知識點
計算機操作系統知識點
網路的神奇作用吸引著越來越多的用戶加入其中,正因如此,網路的承受能力也面臨著越來越嚴峻的考驗―從硬體上、軟體上、所用標准上......,各項技術都需要適時應勢,對應發展,這正是網路迅速走向進步的催化劑。下面是關於計算機操作系統知識點,希望大家認真閱讀!
4.1.1操作系統的概念
操作系統:是管理計算機軟硬體資源的程序,同時它又是用戶與計算機硬體的介面。
4.1.2操作系統的構成
進程管理、內存管理、文件管理、輸入/輸出系統管理、二級存儲管理、聯網、保護系統、命令解釋程序
4.2.1操作系統的類別
經過多年的發展,操作系統多種多樣。為提高大型計算機系統的資源利用率,操作系統從批處理,多道程序發展為分時操作系統。為了滿足計算機處理實時事件的需要,就有實時操作系統。為適應個人計算機系統的需要又出現了桌面操作系統。為適應並行系統的需要,就有了多處理器操作系統。為滿足網路和分布計算的需要,就有了網路操作系統和分布式操作系統。此外,還有為支持嵌入式計算機的嵌入式操作系統。
4.2.2計算環境
從計算機誕生至今,操作系統總是與具體的計算環境相聯系,它總是在某種計算環境中設置和使用,就目前來看計算環境可分為以下幾類:
1.傳統計算環境
指普通意義下的獨立或聯網工作的通用計算機所形成的計算環境。
2.基於Web的計算環境
互聯網的普及使得計算被延伸到Web環境。
3.嵌入式計算環境
嵌入式計算機就是安裝在某些設備上的計算部件,其計算相對比較簡單。
4.3.1進程的概念
什麼是進程?它與程序有什麼區別?
程序:用戶為完成某一個特定問題而編寫的操作步驟。
進程:可以簡單地被看作是正在執行的程序。但是進程需要一定的資源來完成它的任務(例如CPU時間、內存、文件和I/O設備)。
進程與程序的區別在於進程是動態的、有生命力的,而程序是靜態的。一個程序載入到內存,系統就創建一個進程,程序執行結束後,該進程也就消亡了。
在計算機中,由於多個程序共享系統資源,就必然引發對CPU的爭奪。如何有效地利用CPU資源,如何在多個請求CPU的進程中選擇取捨,這就是進程管理要解決的問題。
4.3.3進程式控制制塊PCB(略)
為了控制進程,操作系統就必須知道進程存儲在哪裡,以及進程的一些屬性。
進程式控制制塊是進程實體的一部分,是操作系統中記錄進程的專用數據結構。一個新的進程創建時,操作系統就會為該進程建立一個進程式控制制塊。操作系統根據進程式控制制塊對並發進程進行控制。
4.3.4進程調度及隊列圖
計算機採用多道程序的目的是使得計算機系統無論何時都有進程運行,單處理器的計算機在某一時刻CPU只能運行一個進程,如果存在多個進程,其它進程就需要等待CPU空閑時才能被調度執行。
當一個進程處於等待或CPU時間片用完時,操作系統就會從該進程中拿走CPU控制權,然後再交給其它進程使用,這就是進程的調度。
4.3.5CPU調度及其准則
在設計CPU調度程序時主要應該考慮的准則包括:
(1)CPU使用率。讓CPU盡可能地忙。
(2)吞吐量。讓CPU在一定時間內完成的進程數盡可能多。
(3)周轉時間。讓進程從提交到運行完成的時間盡可能短。
(4)等待時間。讓進程在就緒隊列中等待所花時間之和盡可能短。
(5)響應時間。讓進程從提交請求到產生第一響應之間的時間盡可能短。
主要的CPU調度演算法
1、先到先服務
2、最短作業優先
3、優先權
4、輪轉
5、多級隊列
6、多級反饋隊列
4.3.7進程的同步與互斥
進程的同步就是指相互協作的進程不斷調整它們之間的相對速度,以實現共同有序地推進。
換句話說,在操作系統中,允許多個進程並發運行。然而,有些進程之間本身存在某種聯系,它們在系統中需要一種協作,以保證進程能正確有序地執行並維護數據的一致性。
在操作系統中,可能存在著多個進程。而系統中一些資源一次只允許一個進程使用,這類資源被稱為臨界資源。在進程中訪問臨界資源的那段程序稱為臨界區。當一個進程進入臨界區執行時,其它進程就不允許進入臨界區執行,否則就會導致錯誤結果。由此得出:
多個進程並發執行時,只允許一個進程進入臨界區運行,這就是進程的互斥。
例如:多個進程在競爭使用列印機時表現為互斥。
一個文件可供多個進程共享,其中有一個進程在寫操作時,其它進程則不允許同時寫或讀,表現為互斥。
4.3.8進程的死鎖及處理方法
在多道程序設計中,多個進程可能競爭一定數量的資源。一個進程在申請資源時,如果所申請資源不足,該進程就必須處於等待狀態。如果所申請的資源被其它進程佔有,那麼進程的等待狀態就可能無法改變,從而形成進程之間相互一直等待的局面,這就是死鎖。
競爭資源引起死鎖
引起死鎖的四個必要條件:
互斥:任一時刻只能有一個進程獨占某一資源,若另一進程申請該資源則需延遲到該資源釋放為止。
佔有並等待:即該進程佔有部分資源後還在等待其它資源,而該資源被其它進程佔有。
非搶占:某進程已佔用資源且不主動放棄它所佔有的資源時,其它進程不能強占該資源,只有等其完成任務並釋放資源。
循環等待:在出現死鎖的系統中,一定存在這樣一個進程鏈,其中每個進程至少佔有其它進程所必需的資源,從而形成一個等待鏈。
處理死鎖問題的三種方式:
可使用協議預防和避免死鎖,確保系統從不會進入死鎖狀態。
可允許系統進入死鎖狀態,然後檢測出死鎖狀態,並加以恢復。
可忽略進程死鎖問題,並假裝系統中死鎖從來不會發生。即沒有必要把精力花在小概率事件上。
處理死鎖優先考慮的順序:先預防和避免再檢測和恢復
4.4內存管理
內存是現代操作系統的核心。內存用於容納操作系統和各種用戶進程,是可以被CPU和I/O設備所共同訪問的數據倉庫。計算機的所有程序運行時都要調入內存。
內存管理的主要工作是:為每個用戶進程合理地分配內存,以保證各個進程之間在存儲區不發生沖突;當內存不足時,如何把內存和外存結合起來,給用戶提供一個比實際內存大得多的虛擬內存,使得程序能順利執行。內存管理包括內存分配、地址映射、內存保護和擴充。
4.4.1用戶程序執行與地址映射
用戶編寫程序在執行前,需要多個處理步驟,這些步驟可將源程序轉變為二進制機器代碼,然後在內存中等待執行。當然有時並非每個步驟都是必需的。
通常,將指令和數據的.地址映射成內存地址可以發生在以下三個執行階段。(了解)
1.編譯階段:如果在編譯時就知道進程將在內存中的什麼位置駐留,那麼編譯器就可以直接以生成絕對地址代碼。
2.載入階段:不知道進程將駐留在什麼位置,那麼編譯器就必須生成程序的邏輯地址,在載入階段再轉變成內存的絕對地址。
3.執行階段:如果進程在執行時可以從一個內存段移動到另一個內存段,那麼進程的絕對地址映射工作只能延遲到執行時進行。
4.4.2物理地址空間與邏輯地址空間
物理地址:是計算機內存單元的真實地址。
物理地址空間:由物理地址所構成的地址范圍。
邏輯地址:用戶程序地址,從0開始編址。
邏輯地址空間:由邏輯地址所構成的地址范圍。
地址映射:用戶程序在運行時要裝入內存,這就需要將邏輯地址變換成物理地址,這個過程稱為地址映射,也稱重定位。
用戶編寫的源程序是不考慮地址的,源程序經CPU編譯後產生邏輯地址。從CPU產生的邏輯地址轉換為內存中的物理地址的映射是由計算機中被稱為內存管理單元的硬體設備來實現的,將邏輯地址與內存管理單元中存放的內存基址相加就得到了物理地址。
4.4.3進程使用內存的交換技術
為了更加有效地使用內存,進程在不運行時,可以暫時從內存移至外存上,直到需要再運行時再重新調回到內存中。也就是說內存管理程序可將剛剛運行過的進程從內存中換出以釋放出佔用的內存空間,然後將另一個要運行的進程占據前者釋放的內存空間。
計算機工作時,為了將多個進程放入到內存就必須考慮在內存中如何放置這些進程。
4.4.4內存分配方案-連續
對於連續內存分配方案,開始時所有內存是一個大的孔,隨著內存分配的進行就會形成位置上不連續的大小不一的孔。在連續內存分配方案中,當新進程需要內存時,為其尋找合適的孔,實現內存分配。該方案為每個進程所分配的內存物理地址空間在位置上是連續的。
4.4.5內存分配方案-分頁式
分頁管理基本思想:
o內存物理地址空間劃分為若干個大小相等的塊(頁框)
o進程的邏輯地址空間也劃分為同樣大小的塊(頁面)
o內存分配時每個頁面對應地分配一個頁框,而一個進程所分得頁框在位置上不必是連續的。
頁表:操作系統為每個用戶程序建立一張頁表,該表記錄用戶程序的每個邏輯頁面存放在哪一個內存物理頁框。
4.5虛擬內存方案
虛擬內存是一個容量很大的存儲器的邏輯模型,它不是任何實際的物理存儲器,它一般是藉助硬碟來擴大主存的容量。
虛擬內存:對於一個進程來講,如果僅將當前要運行的幾個頁面裝入內存便可以開始運行,而其餘頁面可暫時留在磁碟上,待需要時再調入內存,並且調入時也不佔用新的內存空間,而是對原來運行過的頁面進行置換。這樣,就可以在計算機有限的內存中同時駐留多個進程並運行。而對用戶來講感覺到系統提供了足夠大的物理內存,而實際上並非真實的,這就是虛擬內存。
4.5.2頁面請求與頁面置換演算法
頁面請求:在虛擬內存技術中,進程運行時並沒有將所有頁面裝入到內存,在運行過程中進程會不斷地請求頁面,如果訪問的頁面已在內存,就繼續執行下去;但如果要訪問的頁面尚未調入到內存,便請求操作系統將所缺頁面調入內存,以便進程能繼續運行下去。
頁面置換:如果請求頁面調入內存時,分配給該進程的頁框已用完,就無法立即裝入所請求頁面。此時,必須將進程中的某個頁面從內存的頁框調出到磁碟上,再從磁碟上將所請求的頁面調入到內存的該頁框中。這個過程叫做頁面置換。
4.6文件管理
文件管理是操作系統最常見的組成部分。文件管理主要提供目錄及其文件的管理。
4.6.1文件的概念
文件:保存在外部存儲設備上的相關信息的集合。
文件命名:文件主名+擴展名
文件存取屬性:
只讀:只允許授權用戶進行讀操作。
讀寫:只允許授權用戶進行讀和寫的操作。
文檔:允許任何用戶進行讀寫操作。
隱藏:不允許用戶直接看到文件名。
文件系統:是對文件進行操作和管理的軟體,是用戶與外存之間的介面。這個系統將所有文件組織成目錄結構保存在外存,一個文件對應其中的一個目錄條。目錄條記錄有文件名、文件位置等信息。
操作系統對文件的基本操作包括:
創建文件、文件寫、文件讀、文件重定位、文件刪除、文件截短。
對文件的其它操作包括:文件復制、重命名、更改屬性等。
;⑸ 內存管理
在一段時間內,程序的執行僅限於某個部分,相應地,它所訪問的存儲空間也局限於某個區域。
局部性原理的 分類 :
將編譯後的目標模塊裝配成一個可執行程序。
可執行程序以 二進制可執行文件 的形式存儲在磁碟上。
鏈接程序的 任務 :
程序的鏈接,可劃分為:
重定位 :將邏輯地址(相對地址)轉換為物理地址(絕對地址)的過程。
物理地址 = 邏輯地址 + 程序在內存中的起始地址
程序的裝入,可劃分為:
任何時刻主存儲器 最多隻有一個作業 。
每個分區 大小固定不變 :分區大小相等、分區大小不等。
每個分區可以且 僅可以裝入一個作業 。
使用 下限寄存器 和 上限寄存器 來保存當前作業的起始位置和結束位置。
使用 固定分區說明表 區分各分區的狀態。
分區 大小不是預先固定的 ,而是按作業(進程)的實際需求來劃分的。
分區 個數也不是預先固定的 ,而是由裝入的作業數決定的。
使用 空閑分區表 說明空閑分區的位置。
使用 空閑分區鏈 說明空閑分區的位置。
首次適應演算法的 過程 :
外部碎片:空閑內存 沒有在 分配的 進程 中。
內部碎片:空閑內存 在 分配的 進程 中。
從 上次找到的 空閑分區的 下一個 空閑分區開始查找。
優點:空閑區分布均勻、查找開銷較小。
缺點:缺乏大空閑區。
最佳適應演算法的 過程 :
優點:提高內存利用率。
注意點:每次在進行空閑區的修改前,需要先進行 分區大小遞增 的排序。
頁 :將一個 進程 的 邏輯地址空間 分成若干個 大小相等 的 片 。
頁框 :將 物理內存空間 分成與頁大小相同的若干個 存儲塊 。
分頁存儲 :將進程的若干 頁 分別裝入多個 可以不相鄰 的 頁框 中。
頁內碎片 :進程 最後一頁 一般裝不滿一個頁框,形成 頁內碎片 。
頁表 :記錄描述頁的各種數據,實現從 頁號 到 頁框號 的映射。
注意: 頁內偏移量 的單位是 位元組 。
分頁地址變換指是: 邏輯地址 通過 地址變換機構 變換為 物理地址 。
分頁地址變換的 過程 :
操作系統在修改或裝入頁表寄存器的值時,使用的是 特權級 指令。
頁大小:512B ~ 4KB,目前的計算機系統中,大多選擇 4KB 大小的頁。
頁大小的 選擇因素 :
快表也稱為「轉換後援緩沖」,是為了提高CPU訪問速度而採用的專用緩存,用來存放 最近被訪問過的頁表項 。
英文縮寫:TLB。
組成: 鍵和值 。
在TLB中找到某一個頁號對應的頁表項的百分比稱為 TLB命中率 。
當 能 在TLB中找到所需要的頁表項時:
有效訪問時間 = 一次訪問TLB 的時間 + 一次訪問內存 的時間(訪問內存讀寫數據或指令)
當 不能 在TLB中找到所需要的頁表項時:
有效訪問時間 = 一次訪問TLB 的時間 + 兩次訪問內存 的時間(一次訪問內存頁表,一次訪問內存讀寫數據或指令)
將頁表再分頁,形成兩級或多級頁表,將頁表離散地存放在物理內存中。
在進程切換時,要運行的進程的頁目錄表歧視地址被寫入 頁表寄存器 。
在二級分頁系統中,為頁表再建立一個頁目錄表的目的是為了能在地址映射時得到頁表在物理內存中的地址,在頁目錄表的表項中存放了每一個 頁表 在物理內存中所在的 頁框號 。
虛擬存儲器 :是指具有 請求調入功能 和 置換功能 ,能 從邏輯上對內存容量進行擴充 的一種存儲系統。
請求調入 :就是說,先將進程一部分裝入內存,其餘的部分什麼時候需要,什麼時候請求系統裝入。
置換 :如果請求調入時,沒有足夠的內存,則由操作系統選擇一部分內存中的進程內容移到外存,以騰出空間把當前需要裝入的內存調入。
為了實現請求分頁,需要:
保證進程正常運行的所需要的最小頁框數。
最小頁框數與進程的大小沒有關系,它與計算機的 硬體結構 有關,取決於 指令的格式、功能和定址方式 。
內存不夠時,從進程本身選擇淘汰頁,還是從系統中所有進程中選擇?:
採用什麼樣的演算法為不同進程分配頁框?:
常用的兩種 置換策略 : 局部置換 和 全局置換 。
從分配給進程的頁框數量上看,常使用的兩種 分配策略 : 固定分配 和 可變分配 。
用新調入的頁替換 最長時間沒有訪問 的頁面。
找到 未來最晚被訪問 的那個頁換出。
,P為缺頁率。
有效訪問時間與缺頁率成 正比 ,缺頁率越高,有效訪問時間越長,訪問效率越低。
工作集 :某段時間間隔里,進程實際要訪問的頁的集合。
引入工作集的 目的 :降低缺頁率,提高訪問內存效率。
抖動 :運行進程的大部分時間都用於頁的換入換出,幾乎不能完成任何有效果工作的狀態。
抖動的 產生原因 :
抖動的 預防方法 :
在分段存儲管理的系統中,程序使用 二維 的邏輯地址,一個數用來表示 段 ,另一個數用來表示 段內偏移量 。
引入分段的 目的 :
引入分段的 優點 :
進程的地址空間被劃分成 若干個段 。
每個段定義了一組邏輯信息,每個段的大小由相應的邏輯信息組的長度確定, 段的大小不一樣 ,每個段的邏輯地址從0開始,採用一段 連續的地址空間 。
系統為每個段分配一個 連續的物理內存區域 ,各個 不同的段可以離散 地放入物理內存不同的區域。
系統為 每個進程建立一張段表 ,段表的每一個表項記錄的信息包括: 段號、段長和該段的基址 ,段表存放在內存中。
分段的 邏輯地址結構 :
段表是由操作系統維護的用於支持分段存儲管理 地址映射 的數據結構。
每個進程有一個段表,段表由段表項構成。每個段表項包括: 段號、段長(段的大小)和該段的基址(段的起始地址) 。
若已知邏輯單元的地址為 S:D (段號:段內偏移量),求相應物理地址的步驟如下:
相同點 :分頁和分段都屬於 離散 分配方式,都要通過數據結構與硬體的配合來實現 邏輯地址到物理地址 的映射。
不同點 :
將用戶進程的邏輯空間 先劃分為若干個段 , 每個段再劃分成若干個頁 。
進程以頁為單位在物理內存中 離散 存放,每個段中被離散存放的頁具有 邏輯相關性 。
為了實現地址映射,操作系統為 每個進程建立一個段表 ,再為 每個段建立一個頁表 。
進程段表的段表項組成:
滿足以下條件的兩個塊稱為 夥伴 :
⑹ 如何 將軟體裝在內存條里
使用RAM DISK,將一塊內存虛擬成硬碟分區。
1、內存足夠大。你分出作為硬碟分區的內存空間就不能再作為內存使用了。
2、計算機重新啟動之後,RAM DISK上的所有信息均丟失。
⑺ 怎樣將系統裝入內存
太詳細的方法我還沒學會,沒實際用過。
簡單描述一下:
1,硬碟安裝好系統,各種驅動,各種程序(你要用的程序),設置好各種文件夾位置(下面詳細說明)
2,將系統
盤符
製作成
鏡像文件
。
3,用winpe等軟體虛擬個硬碟盤符(例如
安裝系統
時的
B盤
,需要自學一下)。
4,在
載入鏡像
文件到虛擬盤符,就可以執行了。
好處:
1、超快,也是最重要的好處,如果你內存夠大的話,沒有程序開啟
進度條
哦,用內存的速度運行系統和程序(你安裝在
系統盤
符中
的),
運行速度
超乎想像
。
2、安全,
系統文件
隨便改,不用怕損壞,就像
影子系統
一樣用。反正都保存不上的。
缺點:
1、安裝新程序或更新新軟體(殺毒軟體更新很頻繁)需要重新製作鏡像文件,比較繁瑣。
2、虛擬出來的盤符不能保存任何東西,所以需要你設置好平時用的
程序文件夾
,當你發現不能保存時就晚了。
3、需要你的內存夠大,絕對是
物理內存
,因為把系統載入進內存後win7至少需要6-8G空間(前提是你減肥工作做的好,並且沒有大型程序),還要把系統運行的內存預留出來,也是越大越好。而且不能設置
虛擬內存
(虛擬在硬碟上的內存空間,讀寫速度是硬碟速度)
擴展想法:
1、用u盤做成
啟動盤
符,使其自動載入鏡像文件,這樣只要在開機時插入u盤,就能啟動超快系統,比較方便。
⑻ 計算機正在運行的程序存放在
計算機正在運行的程序一般都會存放在RAM(內存中)里,但是如果運用虛擬存儲器技術可能會有一部分程序駐留在磁碟中。
RAM是與CPU進行數據交換等一些列操作的重要部件。計算機中程序的運行都離不開內存,因此內存的的好壞在一定程度上決定了計算機的好壞。
它用於暫時存放CPU中的運算數據,與硬碟等外部存儲器交換的數據。
(8)操作系統如何將程序裝入內存擴展閱讀:
內存的技術指標一般包括奇偶校驗、引腳數、容量、速度等。引腳數可以歸為內存的介面類型。
程序在計算機中運行經過的步驟:
1、編譯:
編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析、語法分析、語義檢查和中間代碼生成、代碼優化、目標代碼生成。
2、鏈接:
把所有編譯後得到的目標模塊連接裝配起來,再與函數庫相連接成一個整體。
3、裝載:
把程序裝入內存的操作系統程序
4、運行:
將可執行目標文件中的代碼和數據從磁碟復制到內存中,然後通過跳轉到程序的第一條指令或入口點來運行程序。
參考資料來源:網路-計算機
⑼ 操作系統-04-操作系統的存儲管理和設備管理
早期的計算機由於結構較為簡單,存儲容量小,並不需要過多的的存儲管理。
隨著計算機和程序越來越復雜,使得存儲管理成為必要。
單一連續分配是最簡單的內存分配方式
只能在單用戶、單進程的操作系統中使用
固定分區分配是支持多道程序的最簡單存儲分配方式
內存空間被劃分為若干固定大小的區域
每個分區只提供給一個程序使用,互不幹擾
根據進程實際需要,動態分配內存空間
不需要新建空閑鏈表節點
只需要把空閑區的容量增大為包括回收區的容量即可
將回收區和空閑區合並
新的空閑區使用原來回收區的地址
將兩個空閑區和中間的回收區合並
新的空閑區使用空閑區1的地址
為回收區創建新的空閑節點
將該節點插入到相應的空閑區鏈表中
上面的部分主要是從物理的角度講解內存管理,這部分主要是講解操作系統是怎麼管理進程的內存空間。
字塊 是相對於物理設備的定義, 頁面 是相對邏輯空間的定義。
頁式存儲管理主要是將進程邏輯空間等分成若干大小的頁面,相應的把物理內存空間分成與頁面大小的物理塊,以頁面為單位把進程空間裝進物理內存中分散的物理塊。
頁面大小應該適中,過大難以分配,過小內存碎片過多,通常是512B~8K。
頁表 記錄進程邏輯空間於物理空間的映射
在頁式存儲管理, 頁地址 = 頁號 + 頁內偏移
現代計算機系統中,可以支持非常大的邏輯 地址空間(2 32~2 64),這樣,頁表就 變得非常大,要佔用非常大的內存空間,如, 具有32位邏輯地址空間的分頁系統,規定頁 面大小為4KB,則在每個進程頁表中的頁表 項可達1M(2^20)個,如果每個頁表項佔用 1Byte,故每個進程僅僅頁表就要佔用1MB 的內存空間。
為了解決這個問題,引入了多級頁表。
多級頁表有一個根頁表,每一個字塊指向了內存中的一片空間,這塊空間存儲的是二級頁表。以此類推,最後一級頁表指向的字塊才是進程實際使用的內存。通過這種分級機制,大大減少了進程中頁表數佔用的空間。
段式存儲管理將進程邏輯空間劃分成若干段(非等分),段的長度由連續邏輯的長度決定。
例如一個程序有主函數MAIN、子程序段X、子函數Y等,這個時候會根據每一個函數的邏輯長度來分配邏輯空間。
頁表由 頁號 和 基址 組成,但在段式存儲管理中由於每一段的長度是不固定的,段表由 段號 、 基址 以及 段長 組成。
在段式存儲管理, 段地址 = 段號 + 段內偏移
分頁可以有效提高內存利用率(雖然說存在頁內碎片)
分段可以更好滿足用戶需求
兩者結合,形成段頁式存儲管理
先將邏輯空間按段式管理分成若干段,再把段內空間按頁式管理等分成若干頁。
在段頁式存儲管理中, 段頁地址 = 段號 + 段內頁號 + 頁內地址
有些進程實際需要的內存很大,超過物理內存的容量。
由於操作系統的多道程序設計,使得每個進程可用物理內存更加稀缺。
不可能無限增加物理內存,物理內存總有不夠的時候,於是便有了虛擬內存的概念。
虛擬內存是操作系統內存管理的關鍵技術,使得多道程序運行和大程序運行成為現實,她通過將進程所使用的內存進行劃分,將部分暫時不使用的內存放置在輔存。
根據局部性原理,程序運行時,無需全部裝入內存,裝載部分即可。如果訪問頁不在內存,則發出缺頁中斷,發起頁面置換。
從用戶層面看,程序擁有很大的空間,即是虛擬內存。
虛擬內存實際是對物理內存的補充,速度接近於內存,成本接近於輔存。
置換演算法一般有先進先出演算法(FIFO)、最不經常使用演算法(LFU)、最近最少使用演算法(LRU)。
從計算機組成原理篇章中,我們可以知道,CPU的高速緩存沒有數據時,需要從主存中載入數據。此時若主存中也沒有數據,則需要從輔存中載入頁面數據。
內存替換策略發生在Cache-主存層次、主存-輔存層次。Cache-主存層次的替換策略主要是為了解決 速度問題 ,
主存-輔存層次則。主要是為了解決 容量問題 。
順序文件是指按順序存放在存儲介質中的文件,例如磁帶的存儲特性使得磁帶文件只能存儲順序文件。
順序文件是所有邏輯文件當中存儲效率最高的。
可變長文件不適合使用順序文件格式存儲,索引文件是為了解決可變長文件存儲而發明的一種文件格式,索引文件需要配合索引表完成存儲的操作。
目錄的層級結構是樹狀的,成為目錄樹。
目錄樹中任何文件或目錄都只有唯一路徑。
對CPU而言,凡是對CPU進行數據輸入的都是輸入設備,凡是CPU進行數據輸出的都是輸出設備。
緩沖區主要是解決CPU與IO設備的速率不匹配的問題,減少CPU處理IO請求的頻率,提高CPU與IO設備之間的並行性。
專用緩沖區只適用於特定的IO進程,當這樣的IO進程比較多時,對內存的消耗也很大,所以操作系統劃出可供多個進程使用的公共緩沖區,稱之為緩沖池。
SPOOLing技術是關於慢速字元設備如何與計算機主機交換信息的一種技術,利用高速共享設備將低速的獨享設備模擬為高速的共享設備,邏輯上,系統為每一個用戶都分配了一台獨立的高速獨享設備,是一種虛擬設備技術。
SPOOLing技術把同步調用低速設備改為非同步調用。在輸入、輸出之間增加了排隊轉儲環節(輸入井、輸出井),SPOOLing負責輸入(出)井與低速設備之間的調度,邏輯上,進程直接與高速設備交互,減少了進程的等待時間。