內存管理(二)

頁面置換算法

當發生缺頁中斷的時候, 系統會在內存中選擇一個頁面將其換出內存, 而當換出內存的時候如果該頁面的內容在內存中發生修改,則必須將該新數據重新寫回到磁盤, 然后再將需要換進的數據覆蓋掉原來的數據, 而當該數據在內存中沒有被修改的時候, 此時就直接用需要換進的內存的內容替換掉要淘汰的數據的內容.注意在換出的時候必須選擇一些使用頻率較低的頁面將其換出.
在大多數計算機中會把最近經常使用的存儲塊保存到一個高速緩存區中, 當這個高速緩存區裝滿的時候就需要選擇一些存儲塊將其丟棄

1. 最優頁面置換算法

每一個頁面用調用該頁面前所需要執行的指令數進行標記, 在進行頁面置換的時候選擇該數字最大的進行換出. 這種算法雖然性能等各方面都比較好, 但是由于操作系統無法獲知某個頁面要在什么時候被調用, 因此不能實現, 但是可以用來評估一個頁面置換算法的性能優劣

2. 先進先出頁面置換算法

在先進先出頁面置換算法中, 由操作系統維護當前內存中的頁面,并且通過鏈表的形式將其組織起來, 鏈表的前后順序按照調入內存的時間排序, 即最先調入內存的頁面處于鏈表的頭部, 當有一個新的頁面需要訪問內存的時候, 此時操作系統將處于鏈表頭部的頁面調出, 即在內存中待的最久的頁面將其調出, 然后將新的頁面插入到鏈表的尾部

3. 最近未使用頁面置換算法

????這里寫圖片描述
為使得操作系統能夠獲得更多的有用信息, 系統為每一個頁面都設置了兩個狀態, 當頁面被訪問的時候設置 R 位, 當頁面被寫入的時候設置 M 位. 這些位都被放在了一個頁表項中(如上圖)每次訪問的時候更新這些位. 因此有硬件設置這些位是非常有必要的
在系統被啟動的時候, 所有的位都被清零. R 位被定期的清零, 為了區別頁面是否被訪問. 因此利用R位和M位可以將系統中的所有頁面劃分為以下三種
(0)沒有被訪問, 沒有被修改
(1)沒有被訪問, 已經被修改
(2)已經訪問, 沒有修改
(3)已經訪問, 已經修改
這樣的話, 每一個頁面都會有一個編號, 在進行頁面置換的時候, 系統往往從當前頁面中選擇一個編號最小的并且將其淘汰

4. 最近最少使用頁面置換算法

在內存中的頁面一般在很久的時間內沒有使用則該頁面在未來的很久時間內也可能被使用的幾率會特別小. 根據這個原理, 系統在進行頁面置換的時候每次從內存中選擇一個未使用時間最長的頁面將其換出.

頁面置換算法比較

這里寫圖片描述

局部分配策略和全局分配策略

局部分配策略就是每次在置換的時候選擇頁面在內存中生存時間最短的頁面將其換出, 而全局分配策略則是從內存中隨機的換出一個頁面. 全局分配策略比局部分配策略要好一點.

1. 頁面大小
選擇小頁面

選擇一個正文段, 數據段或者堆棧段很有可能不會恰好轉滿整個內存, 平均情況下都是最后一個頁面時空的. 多余的空間就被浪費, 這個被浪費的空間就叫做內部碎片. 總的來說,選擇小的頁面比選擇大的頁面浪費的內存會少一些, 但是選擇小的頁面也意味著內存中的頁表會變得更大, 頁面裝入頁面寄存器所花費的時間就會越長.

2. 未定義外部函數

在任何目標文件中被調用了但沒有被定義過的函數就叫做未定義函數. 如 printf 函數

3. 共享庫

如果一個程序被啟動了兩次, 大多數操作系統會自動地共享所有的代碼頁面. 依賴與不同的進程, 每一個進程都擁有一份私有的副本數據, 如果任何一個進程想要對這個副本數據進行修改, 操作系統變為這個進程將這個副本數據做一個拷貝, 這個拷貝的數據就是該進程私有的數據. 注意當一個共享庫被裝載或者使用的時候, 此時并不是將共享庫中所有的內容裝載進內存, 而是根據需要將需要的部分以也為單位將其裝入, 因此沒有被調用的函數是不會被裝載進內存的.
因此共享庫可以使得可執行文件更小, 并且節省內存.并且當我們在修改一個 bug 的時候, 如果共享庫中的一個函數被更新了, 此時不需要重新編譯這個函數程序. 就得二進制文件依然可以使用.

缺頁中斷處理

(1)硬件陷入內核, 在對應的堆棧中板寸程序計數器. 大多數機器將當前的指令各種信息保存在特殊的 CPU 寄存器中.
(2)啟動一個匯編代碼例程來保存寄存器和其他易失的信息. 這個例程往往將操作系統作為一個函數來調用.
(3)發生中斷的時候, 操作系統會嘗試發現需要哪個虛擬頁面.
(4)當知道了虛擬地址的時候, 此時操作系統便對這個地址進行檢查, 并且檢查存取和保護是否一致. 如果不一致, 則操作系統向對應的進程發送一個信號, 將該進程殺死. 如果沒有發生任何錯誤機制, 則操作系統拿著這個虛擬地址去檢查時候存在一個空閑的頁框, 如果沒有一個空閑的頁框, 那么操作系統便執行頁面置換算法尋找一個頁面將其換出.
(5)如果選擇換出的頁面被修改過, 那么系統將安排該數據寫回到磁盤, 掛起缺頁中斷的進程.
(6)如果該頁面shiganjingde,那么操作系統在磁盤中查找需要調入的頁面在磁盤中的位置, 然后將該頁面裝入到內存中. 并將發生缺頁中斷的進程掛起
(7)當磁盤訪問中斷的時候, 此時說明該頁面已經被調入到內存, 頁表已經對該頁進行相應的更新, 對應該頁表的頁框也發生了更新, 即標記為正常狀態.
(8)對缺頁中斷的指令以及程序計數器的內容做以修改.
(9)調度引起缺頁中斷的進程, 操作系統返回調用它的匯編例程
(10)恢復寄存器, 返回用戶態

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383997.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383997.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383997.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

兩個棧實現一個隊列/兩個隊列實現一個棧

http://blog.csdn.net/sinat_30472685/article/details/70157227 1兩個棧實現一個隊列 1.原理分析: 隊列的主要操作有兩個:入隊操作和出隊操作,出隊時從隊頭出,入隊是從隊尾插入,入隊的操作和入棧的操作類似&#xff0…

UVa1588

【題目描述】 傳送門 【題目分析】 剛開始想了一會沒有想到什么很好的算法,看到了長度最多為100,就知道自己想的沒有什么意義了,直接暴力,把每一種填法都試一下就知道了。適當剪枝一下(一個簡單的樂觀函數&#xff…

轉:C++中const、volatile、mutable的用法

const修飾普通變量和指針 const修飾變量,一般有兩種寫法: const TYPE value; TYPE const value; 這兩種寫法在本質上是一樣的。它的含義是:const修飾的類型為TYPE的變量value是不可變的。對于一個非指針的類型TYPE,無論怎么寫&…

數據鏈路

廣播信道的數據鏈路層 局域網的優點 網絡為一個單位所擁有, 地理范圍和站點數有限 局域網具有廣播特性, 可以從一個站點方便地訪問到整個網絡. 各個主機之間可以共享資源, 無論是局域網上的硬件資源還是局域網上的軟件資源 便于系統的擴展換和演化, 各個設備之間的位置可靈…

UVa11809

【題目描述】 傳送門 【題目分析】 終于把這道題做完了,之前一直連題意都看不懂。實在不行上網找了一下大佬的博客,看懂題意后自己寫,發現讀入很難處理,就又學習了一下大佬的讀入方法,用的是C里面的sstream&#xf…

數據鏈路層:基本概念

數據鏈路層的定義 對數據鏈路層有對上的網絡層接口. 對下提供物理層的接口. 定義合適的傳輸差錯率 對傳輸流進行管理, 以免快速的傳輸的數據被淹沒. 比如發送端發送信號太快, 接受方接受速度較慢, 此時數據鏈路層就需要提供一定的功能解決這個問題 物理層上傳輸的基本單元是…

C++的沉迷與愛戀

每年的 09/28 於我都是一個特殊的日子 -- 不只是因為教師節。今年很特殊地沒有普天同慶,那麼我就寫篇文章自己慶祝一下好了。我於今年七月發表了一本著作《多型與虛擬》和一本譯作《深度探索C物件模型》,獲得很大的回響。這些作品都不是針對 C 的完全初學…

Insertion Sort——打表找規律

【題目描述】 Insertion sort is a simple sorting algorithm that builds the final sorted array one item at an iteration.More precisely, insertion sort iterates, consuming one input element each repetition, and growing a sorted output list. At each iteration…

數據鏈路層: 可靠性傳輸 六個協議

可靠性傳輸 1. 差錯控制 發送方將數據幀發送, 但是當發送方發送的是一個 1的時候此時接受方卻接受的是一個 0. (1)校驗 接收方如果幀校驗接受到的幀沒有問題, 則對發送方發送一個肯定性的確認, 當對這個數據幀進行校驗發現這個幀有問題的時候, 此時接受方一種是將這個數據幀…

c語言實現配置文件的讀寫

配置文件的格式如下&#xff1a; key1 value1 key2 value2 . . . 名值對以一個鏈接&#xff0c;一條記錄以換行符分割 頭文件&#xff1a; #include<stdio.h> #include<stdlib.h> #include <string.h> 函數原型&#xff1a; void trim(char *strIn, char *…

Educational Codeforces Round 73 (Rated for Div. 2)

A 很簡單的一個模擬&#xff0c;只要前面的數字有兩個以上就能合成后面的&#xff0c;我們進行一遍合成看能不能出現2048就可以了。 #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include&…

數據鏈路層: HDLC

一. 協議機 發送方和接收方. 同時有限狀態機把協議形式化為一個四元組 (S,M,I,T), 其中你S表示進程和信道可能進入的集合, M 表示數據幀的狀態, I 表示進程的初始狀態, T 表示兩兩狀態之間的轉化. 每個系統狀態可以分為發送狀態, 接受狀態和信道狀態. 把狀態用一個點進行表示,…

Miller_Rabin算法

為了測試一個大整數是不是素數&#xff0c;我們不能夠使用傳統的測試是否有因子的方法&#xff0c;因為那樣的時間復雜度至少也是O(n)O(n)O(n)&#xff0c;空間復雜度是O(n)O(n)O(n)&#xff08;使用線性篩數法&#xff09;&#xff0c;時間復雜度還好說&#xff0c;空間復雜度…

bob-tong 字符串函數之Strtok()函數

https://www.cnblogs.com/Bob-tong/p/6610806.html Strtok()函數詳解&#xff1a; 該函數包含在"string.h"頭文件中 函數原型&#xff1a; char* strtok (char* str,constchar* delimiters ); 函數功能&#xff1a; ??切割字符串&#xff0c;將str切分成一個個子…

數據鏈路層:SLIP(串型線路IP) PPP(點對點協議)

SLIP 沒有差錯控制, 傳輸時必須知道對方IP, 傳輸使用于低速業務 19.2k.應用非常受限 PPP協議 1. PPP協議功能 處理錯誤檢測 支持多協議(IP, IPX, DECnet 等) 連接時允許協商 IP 地址 允許身份驗證 2. PPP 的組成 串型鏈路上封裝數據報, 即支持異步鏈路也支持面向 比特…

Honeycomb——BFS

【題目描述】 傳送門 【題目分析】 看起來很復雜好像還要建圖什么的&#xff0c;其實直接在原圖上BFS就可以了&#xff0c;設置一下方向數組&#xff0c;然后直接跑就可以了。 【AC代碼】 #include<cstdio> #include<cstring> #include<algorithm> #inc…

C語言中strspn()函數和strcspn()函數的對比使用

C語言strspn()函數&#xff1a;計算字符串str中連續有幾個字符都屬于字符串accept 頭文件&#xff1a;#include <string.h> strspn() 函數用來計算字符串 str 中連續有幾個字符都屬于字符串 accept&#xff0c;其原型為&#xff1a; size_t strspn(const char *str, con…

Codeforces Round #587 (Div. 3)

A 只要每兩個都不一樣就可以&#xff0c;一旦出現兩個一樣的就改一個。 #include<cstdio> #include<cstring> #include<algorithm> #include<climits> #include<cctype> #include<queue> #include<set>using namespace std;typede…

信道分配 以太網

1.頻分復用 將信道分為多個頻帶, 用戶得到某個頻帶后,在通信的過程中, 自始至終都都占用這個信道.即頻分復用中, 所有用戶同時占用不同頻帶的信道 2. 時分信道 將時間劃分為一段一段的等長時分復用幀, 每個用戶在不同時間占用相同的數據幀 3. CSMA/CD 載波監聽多點接入/碰撞…

strpbrk函數

http://blog.csdn.net/tommy_wxie/article/details/7554332 函數原型&#xff1a;extern char *strpbrk(char *str1, char *str2) 參數說明&#xff1a;str1待比較的字符串&#xff0c;str2為指定被搜索的字符串。 所在庫名&#xff1a;#include <string.h> …