操作系統【六】虛擬內存

傳統存儲管理方式的不足

  • 一次性:作業必須一次性全部裝入內存后才能開始運行。這會造成:當作也很大時不能全部裝入內存;當大量作業要求運行時,由于內存無法容納所有作業,因此只有少量作業能夠運行,導致多道程序并發度下降
  • 駐留性:一旦作業被裝入內存,就會一直留駐在內存中,直至作業運行結束。導致內存中駐留大量的、暫時用不到的數據,浪費了寶貴的內存資源。

局部性原理

  • 時間局部性:如果執行了程序中的某條指令,那么不久后這條指令很可能再次執行;如果某個數據被訪問過,那么這個數據很可能再次被訪問
  • 空間局部性:一旦程序訪問了某個存儲單元,在不久之后,其附近的存儲單元也很有可能被訪問。

高速緩沖技術的思想:將近期會頻繁訪問到的數據放到更告訴的存儲器中,暫時用不到的數據放在更低速存儲器中。
在這里插入圖片描述
快表機構就是將近期長訪問的頁表項副本放到更高速的聯想寄存器中。

虛擬內存

由于局部性原理,在程序裝入時,可以將程序中很快用到的部分裝入內存,暫時用不到的部分留在外存,就可以讓程序開始執行。在程序執行過程中,當訪問的信息不在內存時,由操作系統負責將所需信息從外存調入內存,然后繼續執行程序。若內存空間不夠,由操作系統負責將內存中暫時用不到的信息換出外存。

在操作系統的管理下,在用戶看來似乎有一個比實際內存大得多的內存,這就是虛擬內存。(操作系統虛擬性的體現)

虛擬內存的最大容量是由計算機的地址結構(CPU尋址范圍)確定的
虛擬內存的實際容量=min(內存和外存容量之和,CPU尋址范圍)

主要特征:

  • 多次性:允許多次裝入
  • 對換性:允許作業運行過程中將作業換入換出
  • 虛擬性:使得用戶看到的內存容量大于實際容量

在這里插入圖片描述

主要區別:如果訪問的信息不再內存時,有操作系統將所需信息從外存調入內存(請求調頁/段
如果內存空間不夠,由操作系統負責將內存中暫時用不到的信息換到外存(頁面/段置換

請求分頁管理方式

請求調頁:操作系統需要知道每個頁面是否已經調入內存;如果沒有調入,需要知道該頁面在外存存放的位置
頁面置換:根據某些指標來決定換出哪些頁面,有的頁面沒有被修改過,就不用再浪費時間寫回外存。有的頁面修改過,就需要將外存中就數據覆蓋,因此操作系統需要記錄各個頁面是否被修改的信息。
在這里插入圖片描述

缺頁中斷機構

在請求分頁系統中,每當要訪問的頁面不再內存時,便產生一個缺頁中斷,然后由操作系統的缺頁中斷處理程序處理中斷。此時缺頁的進程阻塞,放入阻塞隊列,調頁完成后再將其喚醒,放回就緒隊列。

如果內存中有空閑塊,則為進程分配一個空閑塊,將所缺頁面裝入該塊,并修改頁表中相應的頁表項。
如果內存中沒有空閑塊,則由頁面置換算法選擇一個頁面淘汰,若該頁面在內存期間被修改過,則要將其寫回外存。未修改過的頁面不用寫回外存。

缺頁中斷是因為當前執行的指令想要訪問的目標頁面未調入內存而產生的,因此屬于內中斷。
一條指令在執行期間可能產生多次缺頁中斷
在這里插入圖片描述

地址變換

請求分頁存儲管理與基本分頁存儲管理的區別:
新增步驟1:請求調頁(查到頁表項時進行判斷)
新增步驟2:頁面置換(需要調入頁面,但沒有空閑內存塊時)
新增步驟3:需要修改請求頁表中新增的表項

在這里插入圖片描述在這里插入圖片描述

  • 只有寫指令才需要修改修改位。并且,一般來說只需要修改快表中的數據,只有要將快表想刪除時才需要寫回內存中的慢表,這樣就可以減少訪存次數。
  • 和普通的中斷處理一樣,卻也中斷處理依然需要保留CPU現場
  • 頁面換入/換出都要啟動慢速的I/O操作
  • 頁面調入內存后,需要修改慢表,同時也需要將表項復制到快表中

頁面置換算法

最佳置換算法(OPT)

每次選擇淘汰的頁面將時以后永不使用或者在最長時間內不再被訪問的頁面,這樣可以保證最低的缺頁率。
注意:缺頁時未必發生頁面置換,若還有可用的空閑內存塊,就不用進行頁面置換
缺頁率=缺頁中斷次數/頁面訪問次數
只有沒有空閑內存塊的缺頁中斷才需要頁面置換
理想化算法,實際無法實現

先進先出置換算法(FIFO)

每次選擇淘汰的頁面是最早進入內存的頁面
把調入內存的頁面根據調入的先后順序排成一個隊列,需要換出頁面時選擇隊頭,將新頁面放入隊尾
Belady異常:當為進程分配的物理塊數增大時,缺頁次數不減反增的異常現象。
只有FIFO算法會產生Belady異常

最近最久未使用置換算法(LRU)

每次淘汰的頁面是最近最久未使用的頁面
實現方法:在每個頁面對應的頁表項中,用訪問字段記錄該頁面自從上次被訪問以來經歷的時間t,當需要 淘汰一個頁面時,選擇現有頁面中t中最大的,即最近最久未使用的頁面

算法性能好,實現困難,開銷大
性能最接近OPT

時鐘置換算法(CLOCK)

是一種性能和開銷較均衡的算法,又稱作CLOCK算法,或最近未使用算法(NRU not recently used)

簡單CLOCK算法實現:為每個頁面設置一個訪問位(1,表示最近訪問,0,表示最近沒有訪問),再講內存中的頁面都通過鏈接指針鏈接成一個循環隊列。當某頁被訪問時,其訪問位置為1。當需要淘汰一個頁面時,只需要檢查頁的訪問位,如果時0,就將該頁換出;如果是1,則將它置為0,暫不換出,繼續檢查下一個頁面。若第一輪掃面中所有頁面都是1,則將這些頁面的訪問位依次置為0后再進行第二次掃描。

簡單CLOCK算法選擇一個淘汰頁面最多會經過兩次掃描。

改進型的時鐘置換算法:簡單時鐘置換算法僅僅考慮一個頁面最近是否被訪問,事實上,如果被淘汰的頁面沒有被修改過,就不需要執行I/O操作寫回外存。只有被淘汰的頁面被修改過時才需要寫回外存。
因此考慮一個頁面最近有沒有被訪問過之外,操作系統還應該考慮頁面有沒有被修改過。在其他條件都相同時,應優先淘汰沒有修改過的頁面,避免I/O操作。
實現:設置修改位,0表示沒有被修改,1表示被修改。
(訪問位,修改位)
算法規則:
將所有可能被置換的頁面排成一個循環隊列

  1. 從當前位置開始掃描第一個(0,0)的幀用于替換,不修改任何標志位
  2. 如果第一輪掃描失敗,則重新掃描。查找第一個(0,1)的幀用于替換,本輪將所有掃描過的幀訪問位設為0
  3. 如果第二輪掃描失敗,則重新掃描,查找第一個(0,0)的幀用于替換,本輪掃描不修改任何標志位
  4. 若第三輪掃描失敗,則重新掃描,找到第一個(0,1)的幀用于替換。

由于第二輪已經將所有幀的訪問位設置為0,因此經過第三輪第四輪掃描一定會有一個幀被選中,因此改進型CLOCK置換算法選擇一個淘汰頁面最多會進行四次掃描

在這里插入圖片描述
在這里插入圖片描述

頁面分配置換策略

駐留集:請求分頁管理中給進程分配的物理塊的集合
在采用了虛擬存儲的系統中,駐留集大小一般小于進程的總大小
如果駐留集太小,則會頻繁缺頁,系統要花大量的時間處理缺頁,實際用于進程推進的時間很少
駐留集太大,會導致多道程序并發度下降,資源利用率降低。

  • 固定分配:操作系統為每個進程分配一組固定數目的物理塊,在進程運行期間不再改變。

  • 可變分配:纖維每個進程分配一定數目的物理塊,在進程運行期間可根據情況做適當的增加或者減少,即,駐留集大小可變

  • 局部置換:發生缺頁時只能選進程自己的物理塊進行置換

  • 全局置換:可以將操作系統保留的空閑物理塊分配給卻也進程,也可以將別的進程持有的物理塊置換到外存,再分缺頁進程。
    在這里插入圖片描述

  • 固定分配局部置換:缺點:很難在剛開始就確定為每個進程分配多少個物理塊才算合適。采用這種策略的系統一般會根據一定的參數確定內存塊

  • 可變分配全局置換:只要某進程發生缺頁,都能獲得新的物理塊,僅當空閑物理塊用完時,系統才選擇一個未鎖定的頁面調出。被選擇調出的頁面可能是系統中任何一個進程中的頁,因此這個被選中的進程擁有的物理塊會減少,缺頁率會增加。
    系統會鎖定一些頁面,這些頁面中的內容不能置換出去。

  • 可變分配局部置換:如果進程在運行中頻繁地換頁,系統回味該進程多分配幾個物理塊,直至該進程缺頁率趨勢適當程度。反之,如果進程在運行時缺頁率特別低,可適當減少分配給該進程的內存塊。

可變分配全局置換:只要就分配新物理塊
可變分配局部置換:根據缺頁率動態增加或者減少物理塊

調入頁面

時間

  • 預調頁策略:根據局部性原理,一次調入若干個相鄰的頁面可能比一次調入一個頁面更加高效。預測不久之后可能要訪問的頁面,將他們預先調入內存。預測成功率只有50%。這種策略主要用于進程的首次進入
  • 請求調頁策略:進程在運行期間發現缺頁才將所缺頁面調入內存。這種策略調入的頁面一定會被訪問到。但是每次都只能調入一頁,而每次調頁都要磁盤I/O操作,因此I/O開銷較大

地點

在這里插入圖片描述

  • 如果系統擁有足夠的調換去空間,頁面的調入調出都是內存與對換區之間進行的,這樣可以保證頁面的調入調出速度很快。在進程運行前,需要講進程相關的數據從內存區復制到對換區。
  • 如果系統缺少足夠的對換區空間:凡是不會被修改的數據都直接從文件區調入,由于這些頁面不會被修改,因此換出時不需要寫回磁盤,下次需要時再從文件區調入即可。對于可能被修改的部分,換出時需要寫回磁盤對換區,下次需要時再從對換區調入。
  • UNIX:運行之前進程有關的數據全部放在文件區,故未使用過的頁面都可以從文件區調入。若被使用過的頁面需要換出,則寫回對換區,下次需要時再從對換區調入。

抖動(顛簸)現象

抖動現象是指在更換頁面時,如果被更換的頁面是一個很快再次訪問的頁面,則會頻繁地發生頁面調度,以至于調度頁面所需時間過長,系統效率急劇下降的現象。

解決策略:

  • 有針對性地選擇更優秀的頁面置換算法以減少頁面替換策略失誤
  • 掛起低優先級的進程,減少多道程序數量使得能夠增大駐留集,讓進程擁有更多的內存塊
  • 給進程分配合適大小的內存塊。為了解決給進程分配多少個內存塊比較合適,可以使用Denning提出的 “工作集”的概念進行解決。首先操作系統根據窗口尺寸統計工作集的大小,然后讓駐留集的大小大于等于工作集的大小即可。與之相關的我們可以每次選擇一個不再工作集中的頁面進行淘汰。
  • 使用L=S準則調節缺頁率,讓程序最大可能地并發處理,提高磁盤和處理機的利用率。

工作集

工作集:在某段時間間隔內,進程實際訪問頁面的集合
駐留集:請求分頁存儲管理中給進程分配的內存塊的集合

在這里插入圖片描述
一般來說駐留集的大小不能小于工作集的大小,否則進程運行過程中將會頻繁缺頁

拓展:基于局部性原理可知,進程在一段時間內訪問的頁面與不久之后訪問的頁面是有相關性的。因此可以根據近期訪問的頁面集合來設計頁面置換算法:選擇一個不再工作集中的頁面進行淘汰

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

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

相關文章

python裝飾器詳解

https://blog.csdn.net/xiangxianghehe/article/details/77170585 你會Python嘛? 我會! 那你給我講下Python裝飾器吧! Python裝飾器啊?我沒用過哎 以上是我一個哥們面試時候發生的真實對白。 ———————————————-分…

SQL Server【一】簡介和基本概念和命令

數據結構和數據庫的區別 數據庫是應用軟件級別研究數據的存儲和操作(主要針對磁盤上的數據) 數據結構是在系統軟件級別研究數據的存儲和操作(主要是針對內存中的數據) 對硬盤數操作是數據庫的強項,是數據庫研究的核心…

SQL Server【二】單表查詢

查詢 計算列 select * from emp; -- *通配符,表示所有的字段 -- from emp 從emp表查詢select empno, ename from emp; select ename as "員工姓名", sal*12 as "年薪" from emp;-- as可以省略,用于設置字段名 -- 注意用雙引號將字…

SQL Server【三】連接查詢

將兩個表或者兩個以上的表以一定的連接條件連接起來,從中檢索出滿足條件的數據。 內連接 使用inner join,inner可以省略 -- 查詢員工的姓名和部門名稱 select "E".ename as "員工姓名", "D".dname as "部門名稱&q…

Linux下網絡socket編程——實現服務器(select)與多個客戶端通信

一、關于socket通信 服務器端工作流程: 調用 socket() 函數創建套接字 用 bind() 函數將創建的套接字與服務端IP地址綁定調用listen()函數監聽socket() 函數創建的套接字,等待客戶端連接 當客戶端請求到來之后調用 accept()函數接受連接請求&#xff0c…

SQL Server【四】

identity 主鍵自動增長,用戶不需要為identity修飾的主鍵賦值 create table student (std_id int primary key identity(10,5),--(10,5)可以省略,默認為(1,1)std_name nvarchar(200) not null ) select * from student insert into student values (張三…

TCP服務器/客戶端實例(C/C )

1.1、Linux下的TCP服務器&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h>void error_handling(char *mess…

pip代理解決pip下載失敗問題

在用pip下載各種庫的時候發現速度實在是太慢了&#xff0c;還會有各種奇奇怪怪的問題&#xff0c;動不動就玄學失敗。 在網上找來找去找到知乎上一位大佬的回答&#xff1a;傳送門&#xff0c;用了豆瓣的代理。哇咔咔&#xff0c;媽媽再也不用擔心我下載失敗了。 代理&#x…

實現Linux select IO復用C/S服務器代碼

服務器端#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<sys/stat.h> #include<arpa/inet.h> #include <sys/select.h>#define MAXBUF 256 #define MAXLISTEN…

Bellman-Ford算法和SPFA算法

Belloman-Ford算法 算法介紹 Dijkstra可以解決單源無負邊最短路徑問題。但是當遇到含有負邊的單源最短路徑問題就需要使用Bellman-Ford算法來解決。Bellman-Ford算法還可以檢測出負環。 算法步驟 源點s,數組d[u]d[u]d[u]表示s到u的最短距離初始化&#xff1a;d[s]0d[s]0d[s…

C語言實現單鏈表操作

SLIST_H #ifndef __SLIST_H__ #define __SLIST_H__ #include<cstdio> #include<malloc.h> #include<assert.h> typedef int ElemType; typedef struct Node { //定義單鏈表中的結點信息 ElemType data; //結點的數據域 struct Node *next; //結點的指針…

計算機網絡【4】傳輸層

概述 傳輸層是只有主機才有的層次 傳輸層的功能&#xff1a; 傳輸層提供進程和進程之間的邏輯通信&#xff08;網絡層提供主機與主機之間的邏輯通信&#xff09;復用和分用傳輸層對收到的報文進行差錯檢測 傳輸層有兩個協議&#xff1a; 面向連接的傳輸層控制協議TCP&…

Plotly繪圖

在做Python數據分析實驗的時候發現使用Plotly庫繪圖比較漂亮&#xff0c;在網上找到了一個比較好的教程&#xff0c;這里記錄一下&#xff0c;方便以后查找。 傳送門

計算機網絡【0】概述

計算機網絡概念和功能 概念 是一個將分散的、具有獨立功能的計算機系統&#xff0c;通過通信設備與線路連接起來&#xff0c;由功能完善的軟件實現資源共享和信息傳遞的系統。 計算機網絡是互連的、自治&#xff08;無主從關系&#xff09;的計算機集合。 功能 數據通信&am…

計算機網絡【1】物理層

物理層解決如何在連接各種計算機的傳輸媒體上傳輸數據比特流&#xff0c;而不是指具體的傳輸媒體。 確定與傳輸媒體接口有關的特性 機械特性&#xff1a;定義物理連接的特性&#xff0c;如規格、接口形狀、引線數目、引腳數目、排列電氣特性&#xff1a;規定傳輸二進制位時的電…

計算機網路【2】數據鏈路層

結點&#xff1a;主機、路由器 鏈路&#xff1a;兩個節點的物理通道 數據鏈路&#xff1a;邏輯通道&#xff0c;把實現 控制數據傳輸協議的硬件和軟件加到鏈路上就構成數據鏈路 幀&#xff1a;鏈路層的協議數據單元&#xff0c;封裝網絡層數據報 數據鏈路層在物理層提供服務的…

計算機網絡【5】應用層

應用層對應用程序的通信提供服務 應用層協議定義&#xff1a; 應用層的功能&#xff1a; 文件傳輸、訪問和管理電子郵件虛擬終端查詢服務和遠程作業登錄 重要協議&#xff1a;FTP、SMTP、POP3、HTTP、DNS 網絡應用模型 客戶/服務器模型&#xff08;Client/Server&#x…

操作系統【八】文件管理

文件&#xff1a;一組有意義的信息/數據集合 文件的屬性&#xff1a; 文件名&#xff1a;由創建文件的用戶決定文件名&#xff0c;主要是為了方便用戶找到文件。同一個目錄下不允許有重名文件標識符&#xff1a;一個系統內的個文件標識符唯一&#xff0c;對用戶來說毫無可讀性…

數據庫原理及應用【六】數據庫設計

數據依賴 函數依賴FD&#xff1a;一個屬性或者一組屬性的值可以決定另一個屬性的值 多值依賴MVD&#xff1a;一個屬性或者一組屬性的值可以決定另一個屬性的值的集合。FD是MVD的特例 符號表示&#xff1a;Name->->Course&#xff0c;課程多值依賴于姓名 連接依賴&#x…

數據可視化【一】JavaScript學習

本博客是我學習Curran Kelleher老師數據可視化課程的筆記&#xff0c;感興趣的小伙伴可以點擊這里學習。 three cores of data visualization: analysisdesignconstruction 推薦書籍《visualization analysis & design》 使用https://vizhub.com/進行編程學習&#xff…