操作系統學習筆記---內存管理

目錄

概念

功能

內存空間的分配和回收

地址轉換

邏輯地址(相對地址)

物理地址(絕對地址)

內存空間的擴充

內存共享

存儲保護

方式

源程序變為可執行程序步驟

鏈接方式

裝入方式

覆蓋

交換

連續分配管理方式

單一連續分配

固定分區分配

動態分區分配

非連續分配管理方式

基本分頁存儲管理方式

基本概念

地址結構

基本地址變換機構

具有快表的地址變換機構

兩級頁表

基本分段存儲管理方式

分段

段表

地址變換機構

?分段和分頁的對比

不同點

相同點

段頁式管理

邏輯地址結構

地址變換機構?

虛擬內存管理

概念

特征

虛擬內存技術的實現

(1)請求分頁存儲管理方式

頁表機制

?編輯

缺頁中斷機構

地址變換機構

(2)請求分段存儲管理方式

(3)請求段頁式存儲管理方式

頁面置換算法

(1)最佳(OPT)置換算法

(2) 先進先出 (FIFO)頁面置換算法

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

(4)時鐘(CLOCK) 置換算法/最近未用(NRU)算法

簡單CLOCK 算法實現方法

改進型CLOCK算法

頁面分配

駐留集

內存分配策略

何時調頁

何處掉頁

抖動(顛簸)現象

工作集?

內存映射文件

特性

優點


概念

操作系統對內存的劃分和動態分配就是內存管理的概念。

功能

內存空間的分配和回收

由操作系統完成對主存的分配和回收

地址轉換

使邏輯地址轉換為真實的物理地址

邏輯地址(相對地址)

編譯后,每個目標模塊都從0號單元開始編址,這稱為該目標模塊的相對地址(或邏輯地址)。

物理地址(絕對地址)

物理地址空問是指內存中物理單元的集合,它是地址轉換的最終地址,進程在運行時執行指令和訪問數據,最后都要通過物理地址從主存中存取。

內存空間的擴充

利用虛擬存儲技術或自動覆蓋技術,從邏輯上擴充內存

內存共享

允許多個進程訪問內存的同一部分

存儲保護

保證各道作業在各自的存儲空間內運行,互不干擾

方式

  • 設置上下限寄存器
  • 利用重定位寄存器、界地址寄存器

源程序變為可執行程序步驟

  • 編譯:由編譯程序將用戶源代碼編譯成若千目標模塊。
  • 鏈接:由鏈接程序將編譯后形成的一組目標模塊及所需的庫函數鏈接在一起,形成一個完整的裝入模塊。
  • 裝入:由裝入程序將裝入模塊裝入內存運行。

鏈接方式

  • 靜態鏈接:裝入前鏈接成一個完整裝入模塊
  • 裝入時動態鏈接:運行前邊裝入邊鏈接
  • 運行時動態鏈接:運行時需要目標模塊才裝入并鏈接

裝入方式

  • 絕對裝入:編譯時產生絕對地址(單道程序階段,無OS)
  • 可重定位裝入:裝入時將邏輯地址轉換為物理地址(早期多道批處理階段)
  • 動態運行時裝入/動態重定位:運行時將邏輯地址轉換為物理地址,需設置重定位奇存器(現代OS)

覆蓋

基本思想:將程序分為多個段(多個模塊)。常用的段常駐內存,不常用的段在需要時調入內存。

具體操作:把內存劃分為一個固定區和若干個覆蓋區,固定區存放用戶程序經常活躍的部分,調入后就不再調出(除非運行結束);將即將訪問的段放在覆蓋區,在需要調用前,系統將其調入覆蓋區,替換原有的段。必須由程序員聲明覆蓋結構,操作系統完成自動覆蓋。

適用情況:同一個程序/進程內

缺點:對用戶不透明,增加了用戶編程負擔,覆蓋技術只用于早期的操作系統中

交換

基本思想:把處于等待狀態的進程或者被CPU剝奪運行權限的進程從內存移出到外存,這一過程稱為換出;把準備好競爭CPU的進程從外存移到內存,這一過程稱為換入。

適用情況:不同進程/作業間

ps:一般將阻塞、優先級低的進程先換出到磁盤的對換區

連續分配管理方式

單一連續分配

內存被分為:系統區和用戶區。

  • 系統區:通常位于內存的低地址部分,用于存放操作系統系統區
  • 用戶區:用于存放用戶進程相關數據。

特點:內存中用戶區空間只能有一道用戶程序

優點:實現簡單;無外部碎片(分區外部不存在空間浪費);可以采用覆蓋技術擴充內存;不一定需要采取內存保護(例:早期的PC 操作系統MS- DOS)。

缺點:只能用于單用戶、單任務的操作系統中有內部碎片(分區內部不存在空間浪費)存儲器利用率極低

固定分區分配

固定分區分配是最簡單的一種多道程序存儲管理方式,它將用戶內存空問劃分為若干個固定大小的區域,每個分區只裝入一道作業

兩種方法:

  • 分區大小相等:缺乏靈活性,只適合用一臺計算機控制多個相同對象的場合。
  • 分區大小不等:增加了靈活性,可以滿足不同大小的進程需求。

為便于內存分配,通常將分區按大小排隊,建立一張分區說明表。

優點:實現簡單,無外部碎片

缺點:當用戶程序太大時,可能所有的分區都不能滿足需求,此時不得不采用覆蓋技術來解決,降低性能;會產生內部碎片,內部利用率低

動態分區分配

在進程裝入內存時,根據進程的大小動態地建立分區,并使分區的大小正好適合進程的需要。

動態分區分配算法

  1. 首次適應 (First Fit) 算法。空閑分區以地址遞增的次序鏈接。分配內存時順序查找,找到大小能滿足要求的第一個空閑分區。
  2. 最佳適應(Best Fit) 算法。空閑分區按容量遞增的方式形成分區鏈,找到第一個能滿足要求的空閑分區。
  3. 最壞適應(Worst Fir) 算法。又稱最大適應 (Largest Fit) 算法,空閑分區以容量遞減的次序鏈接,找到第一個能滿足要求的空閑分區,即挑選出最大的分區。
  4. 鄰近適應 (Next Fit) 算法。又稱循環首次適應算法,由首次適應算法演變而成。不同之處是,分配內存時從上次查找結束的位置開始繼續查找。

特點:無內部碎片,有外部碎片

非連續分配管理方式

基本分頁存儲管理方式

基本概念

  • /頁面進程中的塊
  • 頁框/頁幀/內存塊/物理頁面/物理塊:內存中的塊
  • 頁框號/頁幀號/內存塊號/物理塊號/物理頁號:每個頁框有一個編號,從0開始
  • 頁表:為了便于在內存中找到進程的每個頁面所對應的物理塊,系統為每個進程建立一張頁表。由頁表項組成的,頁表項由頁號和物理內存中的塊號組成。

ps:頁號不占空間。

地址結構

每頁大小為4KB;地址空間最多允許2的20次方頁

頁號=邏輯地址/頁面長度(取除法的整數部分)

頁內偏移量=邏輯地址 % 頁面長度(取除法的余數部分)

基本地址變換機構

地址變換機構的任務是將邏輯地址轉換為內存中的物理地址。地址變換是借助于頁表實現的。

設頁面長度為L

  1. 計算頁號P(P=A/L)、頁內偏移量比(W=A%L)
  2. 比較頁號P和頁表長度M,若P>M,則產生越界中斷,否則繼續執行。
  3. 頁表中頁號P對應的頁表項地址=頁表始址F+頁號P*頁表項長度,取出該頁表項肉容b,即為物理塊號。頁表長度的值是指一共有多少頁,頁表項長度是指頁地址占多大的存儲空間。
  4. 計算E=b*L+W,用得到的物理地址區去訪問內存。

具有快表的地址變換機構

快表,又稱聯想奇存器(TLB),是一種訪問速度比內存快很多的高速緩沖存儲器,用來存放當前訪問的若干頁表項,以加速地址變換的過程。快表命中,只需一次訪存快表末命中,需要兩次訪存。

兩級頁表

二級頁表實際上是在原有頁表結構上再加上一層頁表

基本分段存儲管理方式

分段

其邏輯地址由段號S與段內偏移量W兩部分組成。

  • 段號的位數決定了每個進程最多可以分幾個段
  • 段內地址拉數決定了每個段的最大長度是多少

段表

每個段表項對應進程的一段,段表項記錄該段在內存中的始址和長度。

地址變換機構

在系統中設置了段表寄存器,用于存放段表始址下和段表長度川。

從邏輯地址A到物理地址E之間的地址變換過程如下

??

  1. 從邏輯地址A 中取出前幾位為段號 S,后幾位為段內偏移量W
  2. 比較段號S和段表長度M,若S>M,則產生越界中斷,否則繼續執行。
  3. 段表中段號S對應的段表項地址=段表始址下+?段號S*段表項長度,取出該段表項的前兒位得到段長C。若段內偏移量 ≥C,則產生越界中斷,否則繼續執行。
  4. 取出段表項中該段的始址b,計算E=b+W,用得到的物理地址五 去訪問內存。

?分段和分頁的對比

不同點

  1. 分頁對用戶不可見,分段對用戶可見
  2. 分頁的地址空間是一維的,分段的地址空間是二維的

相同點

訪問一個邏輯地址都需要兩次訪存

ps:若分頁引入快表則僅需一次訪存

段頁式管理

將分頁存儲管理方式和分段存儲管理方式

邏輯地址結構

地址變換機構?

?

ps:每個進程一張段表,每個段一張頁表???????

虛擬內存管理

概念

虛擬內存:在操作系統的管理下,在用戶看來似乎由一個比實際內存大得多得內存

特征

  1. 多次性。多次性是指無須在作業運行時一次性地全部裝入內存,而允許被分成多次調入內存運行。
  2. 對換性。對換性是指無須在作業運行時一直常駐內存,而允許在作業的運行過程中,進行換進和換出。
  3. 虛擬性。虛擬性是指從邏輯上擴充內存的容量,使用戶所看到的內存容量遠大于實際的內存容量。

虛擬內存技術的實現

(1)請求分頁存儲管理方式

請求分頁存儲管理建立在基本分頁存儲管理基礎之上,為了支持虛擬存儲器功能而增加了請求調頁功能和頁面置換功能。請求分頁是目前最常用的一種實現虛擬存儲器的方法。

頁表機制

請求分頁中的頁表項

狀態位P。用于指示該頁是否已調入內存,供程序訪問時參考。

訪問字段A。用于記錄本頁在一段時問內被訪問的次數,或記錄本頁最近已有多長時間末被訪間,供置換算法換出頁面時參考。

修改位M。標識該頁在調入內存后是否被修改過。

外存地址。用于指出該頁在外存上的地址,通常是物理塊號,供調入該頁時參考。

缺頁中斷機構

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

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

(2)請求分段存儲管理方式

(3)請求段頁式存儲管理方式

頁面置換算法

(1)最佳(OPT)置換算法

算法思想:選擇以后永不使用的頁面淘汰或者在最長時間內不再被訪問的頁面,以保證獲得最低的缺頁率

(2) 先進先出 (FIFO)頁面置換算法

算法思想:優先淘汰最早進入內存的頁面,即在內存中駐留時間最久的頁面。

Belady 異常:當為進程分配的物理塊數增大時,缺頁次數不減反增的異常現象。

只有FIFO 算法會產生Belady 異常。

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

算法思想:選擇最近最久時間末訪問過的頁面予以淘汰。

(4)時鐘(CLOCK) 置換算法/最近未用(NRU)算法

算法要循環掃描緩沖區,像時鐘的指針一樣轉動

簡單CLOCK 算法實現方法
  1. 第一輪將訪問過的標志位置為0;
  2. 第二輪將標志位為0的頁面置換出
改進型CLOCK算法

利用(訪問位,修改位)的形式表示各頁面狀態。

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

詳細過程講解請觀看“王道考研-操作系統”:3.2_3_頁面置換算法_嗶哩嗶哩_bilibili

頁面分配

駐留集

指請求分頁存儲管理中給進程分配的物理塊的集合。

內存分配策略
  • 固定分配:操作系統為每個進程分配一組固定數目的物理塊,在進程運行期問不再改變。即駐留集大小不變
  • 可變分配:先為每個進程分配一定數目的物理塊,在進程運行期問,可根據情況做適當的增加或減少。即駐留集大小可變
  • 局部置換:發生缺頁時只能選進程自己的物理塊進行置換。
  • 全局置換:可以將操作系統保留的空閑物理塊分配給缺頁進程,也可以將別的進程持有的物理塊置換到外存,再分配給缺頁進程。
  • 固定分配局部置換:進程運行前就分配一定數量物理塊,缺頁時只能換出進程自己的某一頁
  • 可變分配局部置換:頻繁缺頁的進程,多分配一些物理塊;缺頁率很低的進程,回收一些物理塊。直到缺頁率合適
  • 可變分配全局置換:只要缺頁就分配新物理塊,可能來自空閑物理塊,也可能需換出別的進程頁面
何時調頁
  • 預調頁策略:一般用于進程運行前
  • 請求調頁策略:進程運行時,發現缺頁再調頁
何處掉頁
  • 對換區——采用連續存儲方式,速度更快;文件區——采用離散存儲方式,速度更慢。
  • 對換區足夠大:運行將數據從文件區復制到對換區,之后所有的頁面調入、調出都是在內存與對換區之間進行
  • 對換區不夠大:不會修改的數據每次都從文件區調入;會修改的數據調出到對換區,需要時再從對換區調入
  • UNIX方式:第一次使用的頁面都從文件區調入;調出的頁面都寫回對換區,再次使用時從對換區調入
抖動(顛簸)現象

頁面頻繁換入換出的現象。主要原因是分配給進程的物理塊不夠

工作集?

在某段時間間隔里,進程實際訪問頁面的集合。駐留集大小一般不能小于工作集大小

內存映射文件
特性
  • 進程可使用系統調用,請求操作系統將文件映射到進程的虛擬地址空間
  • 以訪問內存的方式讀寫文件
  • 進程關閉文件時,操作系統負責將文件數據寫回磁盤,并解除內存映射
  • 多個進程可以映射同一個文件,方便共享
優點
  • 程序員編程更簡單,已建立映射的文件,只需按訪問內存的方式讀寫即可
  • 文件數據的讀入/寫出完全由操作系統負責,I/O效率可以由操作系統負責優化

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

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

相關文章

python安裝與工具PyCharm

摘要: 周末閑來無事學習一下python!不是你菜雞,只不過是對手太強了!所以你要不斷努力,去追求更高的未來!下面先了解python與環境的安裝與工具的配置! python安裝: 官網 進入官網下載…

lua腳本串口收發與CRC16校驗及使用方法

lua腳本CRC16校驗 --calculate CRC16校驗 --data : t, data to be verified --n : number of verified --return : check result function add_crc16(start, n, data)local carry_flag, a 0local result 0xfffflocal i startwhile(true)doresult result ~ data[i]for j…

git 關于分支、merge、commit提交

最近開始用git終端提交代碼,梳理了一些知識點 一 關于分支 關于分支,git的分支分為本地分支遠程分支兩種分支,在上傳代碼時,我們要確保當前本地分支連接了一個遠程分支。 我們可以通過下面代碼查看當前的本地分支: g…

迅為3588開發板 sudo: 無法解析主機:/DNS配置

環境申明 RK3588 ubuntu 22.04 jammy 迅為開發板 hostname 看是否有Host .,如果沒有, sudo vim /etc/hostname在里面加一行,我這就這一個 iTOP-RK3588hosts 修改本地hosts sudo vim /etc/hosts127.0.0.1 localhost localhost iTOP-RK3…

2.postman環境變量及接口關聯

一、環境變量以及全局變量 操作流程 1.點擊environment 2.點擊environment右側號,新增環境變量 3.在變量中輸入變量名以及變量值 4.回到collection頁面,修改變量環境 5.在collection中通過{{變量名}}調用變量 變量定義 環境變量:環境變量…

vue 限制在指定容器內可拖拽的div

<template><div class"container" id"container"><div class"drag-box center" v-drag v-if"isShowDrag"><div>無法拖拽出容器的div浮窗</div></div></div> </template><script&g…

P11 Linux進程編程exec族函數

前言 &#x1f3ac; 個人主頁&#xff1a;ChenPi &#x1f43b;推薦專欄1: 《Linux C應用編程&#xff08;概念類&#xff09;_ChenPi的博客-CSDN博客》??? &#x1f525; 推薦專欄2: 《C_ChenPi的博客-CSDN博客》??? &#x1f6f8;推薦專欄3: ??????《鏈表_C…

Java 簡易版 UDP 多人聊天室

服務端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

算法通關村第五關—LRU的設計與實現(黃金)

LRU的設計與實現 一、理解LRU的原理 LeetCode146:運用你所掌握的數據結構&#xff0c;設計和實現一個LRU(最近最少使用)緩存機制 實現LRUCache類&#xff1a; LRUCache(int capacity) 以正整數作為容量capacity初始化 LRU 緩存 int get(int key) 如果關鍵字key存在于緩存中&a…

數據可視化|jupyter notebook運行pyecharts,無法正常顯示“可視化圖形”,怎么解決?

前言 本文是該專欄的第39篇,后面會持續分享python數據分析的干貨知識,記得關注。 相信有些同學在本地使用jupyter notebook運行pyecharts的時候,在代碼沒有任何異常的情況下,無論是html還是notebook區域,都無法顯示“可視化圖形”,界面區域只有空白一片。遇到這種情況,…

SQL(COALESCE)

zstarling 非空值查找及替換COALESCE 非空值查找及替換COALESCE 新語法SQL COALESCE(staff_no,staff_no1,)詳解 在SQL中&#xff0c;COALESCE函數用于返回一組表達式中的第一個非NULL值。它接受兩個或多個參數&#xff0c;并按參數順序依次判斷每個參數是否為NULL&#xff0c…

如何才能保證績效考核的有效性呢?

績效管理是現代人力資源管理的核心&#xff0c;做好績效考核是做好績效管理的重要手段。但企業績效考核的設計往往缺乏針對性和科學性&#xff0c;績效考核工作也常常停留在形式上&#xff0c;最終沒能為提高組織效率提供幫助&#xff0c;還消耗員工與管理者的時間、精力。于是…

Nginx服務優化以及防盜鏈

1. 隱藏版本號 以在 CentOS 中使用命令 curl -I http://192.168.66.10 顯示響應報文首部信息。 查看版本號 curl -I http://192.168.66.10 1. 修改配置文件 vim /usr/local/nginx/conf/nginx.conf http {include mime.types;default_type application/octet-stream;…

京東數據運營(京東API接口):10月投影儀店鋪數據分析

鯨參謀監測的京東平臺10月份投影儀市場銷售數據已出爐&#xff01; 10月份&#xff0c;環同比來看&#xff0c;投影儀市場銷售均上漲。鯨參謀數據顯示&#xff0c;今年10月&#xff0c;京東平臺投影儀的銷量為16萬&#xff0c;環比增長約22%&#xff0c;同比增長約8%&#xff1…

鴻蒙應用開發ArkTS基礎組件的使用

語雀知識庫地址&#xff1a;語雀HarmonyOS知識庫 飛書知識庫地址&#xff1a;飛書HarmonyOS知識庫 本文示例代碼地址&#xff1a;Gitee 倉庫地址 嗨&#xff0c;各位好呀&#xff0c;我是小白 上一篇文章我為大家介紹了如何使用 ArkTS 開發鴻蒙應用&#xff0c;對 HarmonyOS 項…

大文件分割,合并------C++ ------fstream

將一個大文件(這里測試文件為5.2G)切分為指定大小的文件,然后在把分割后的文件拼接合并為分割前的源文件 #include <boost/timer.hpp> // 計時函數#include <filesystem> #include <fstream> #include <vector> // 分隔后文件夾的格式, 原文件名_chun…

探索開源游戲的樂趣與無限可能 | 開源專題 No.47

CleverRaven/Cataclysm-DDA Stars: 9.0k License: NOASSERTION Cataclysm&#xff1a;Dark Days Ahead 是一個回合制的生存游戲&#xff0c;設定在一個后啟示錄世界中。盡管有些人將其描述為 “僵尸游戲”&#xff0c;但 Cataclysm 遠不止于此。在這個殘酷、持久、程序生成的世…

【原創】【一類問題的通法】【真題+李6卷6+李4卷4(+李6卷5)分析】合同矩陣A B有PTAP=B,求可逆陣P的策略

【鋪墊】二次型做的變換與相應二次型矩陣的對應&#xff1a;二次型f&#xff08;x1&#xff0c;x2&#xff0c;x3&#xff09;xTAx&#xff0c;g&#xff08;y1&#xff0c;y2&#xff0c;y3&#xff09;yTBy ①若f在可逆變換xPy下化為g&#xff0c;即P為可逆陣&#xff0c;有P…

Unity 通過鍵盤鼠標控制物體移動、旋轉、縮放的方法

在Unity中&#xff0c;使用鍵盤ADWS鍵控制物體移動&#xff0c;通過鼠標左鍵控制物體旋轉&#xff0c;鼠標中鍵控制物體縮放是再常見不過的方法。 方法如下&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class MoveCo…

數字系統設計(EDA)實驗報告【出租車計價器】

一、問題描述 題目九&#xff1a;出租車計價器設計&#xff08;平臺實現&#xff09;★★ 完成簡易出租車計價器設計&#xff0c;選做停車等待計價功能。 1、基本功能&#xff1a; &#xff08;1&#xff09;起步8元/3km&#xff0c;此后2元/km&#xff1b; &#xff08;2…