本篇博客依據王道、與我的筆記而寫,講解了內存的基礎知識、內存管理的概念、進程的映像、連續分配管理方式、動態分區分配算法、基本分頁存儲管理、基本地址變換機構、TLB快表、兩級頁表、基本分段存儲管理方式、段頁式存儲管理方式、虛擬內存、請求分頁管理方式、頁面置換算法、頁面分配策略、內存映射文件
在博客末尾,附有學習日記
知識大綱(內存的基礎知識)
簡單的介紹了內存相關的基本知識(作用、指令、邏輯/物理地址、程序咋運行-鏈接+裝入...
什么是內存,有啥用?
外存與cpu的中介,加快交換數據的速度
從而引出。邏輯地址,如何轉化為內存里的物理地址
補充知識:常用數量單位
換算單位:1GB=10^10MB=10^20KB=10^30B
指令的工作原理
可以把指令看成任務說明書!這樣也挺棒
因為指令存在外存中
從而引出。外存視為邏輯地址,如何在裝入時,轉換為內存中的物理地址
抽象版:
解釋版
裝入的三種方式
絕對裝入
最簡單暴力的裝入方式,在裝入前強改邏輯地址,方便裝入。
可重定位裝入
在裝入的過程中,動態的更改。
動態重定位
物理地址=邏輯地址,額外設計重定位寄存器。
只用在用到時,才會用邏輯地址+寄存器內的值
從寫程序到程序運行
編譯、鏈接、裝入
鏈接的三種方式
1、靜態鏈接(直接封裝好)
2、動態鏈接(裝入時,在封裝)
3、運行時動態鏈接(運行到那塊,裝入那塊)
知識回顧與重要考點
知識大綱(內存管理的概念)
都是基礎
內存空間的分配與回收
內存空間的拓展
地址轉換
內存保護
通過 重地位寄存器 與 界地址寄存器 進行保護。
知識回顧與重要考點
知識大綱(進程的內存映像)
可能考法
知識大綱(連續分配管理方式)
單一連續分配
固定分區分配
動態分區分配
1、第一個問題:空閑分區表與空閑分區鏈
2、四種分配算法
3、分配與回收,就需要改動表了
數據結構
四種情況
知識回顧
知識大綱(動態分區分配算法)
首次適應算法
算法思想: 每次都從低地址開始查找,找到第一個能滿足大小的空閑分區。
如何實現: 空閑分區以地址遞增的次序排列。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
最佳適應算法
算法思想: 由于動態分區分配是一種連續分配方式,為各進程分配的空間必須是連續的一整片區域。因此為了保證當“大進程”到來時能有連續的大片空間,可以盡可能多地留下大片的空閑區即,優先使用更小的空閑區。
如何實現: 空閑分區按容量遞增次序鏈接。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
缺點: 每次都選最小的分區進行分配,會留下越來越多的、很小的、難以利用的內存塊。因此這種方法會產生很多的外部碎片。
最壞適應算法
又稱 最大適應算法(Largest Fit)算法思想:為了解決最佳適應算法的問題--即留下太多難以利用的小碎片,可以在每次分配時優先使用最大的連續空閑區,這樣分配后剩余的空閑區就不會太小,更方便使用。
如何實現:空閑分區按容量遞減次序鏈接。每次分配內存時順序查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
缺點:每次都選最大的分區進行分配,雖然可以讓分配后留下的空閑區更大,更可用,但是這種方式會導致較大的連續空閑區被迅速用完。如果之后有“大進程”到達,就沒有內存分區可用了。
鄰近適應算法
算法思想: 首次適應算法每次都從鏈頭開始查找的。這可能會導致低地址部分出現很多小的空閑分區,而每次分配查找時,都要經過這些分區,因此也增加了查找的開銷。如果每次都從上次查找結束的位置開始檢索,就能解決上述問題。
如何實現: 空閑分區以地址遞增的順序排列(可排成一個循環鏈表)。每次分配內存時從上次查找結束的位置開始查找空閑分區鏈(或空閑分區表),找到大小能滿足要求的第一個空閑分區。
知識回顧
綜合來看首次適應算法挺不錯
知識大綱(基本分頁存儲管理的概念)
什么是分頁儲存
(邏輯地址)頁、頁面 vs (物理地址)頁框、頁幀、物理頁頁號、頁面號vs 頁框號、頁幀號、物理頁號
重要的數據結構
頁表(頁號、塊號)
每個頁表項占多少字節?
頁表項(塊號)占多少字節?
頁號呢?
如何實現地址的轉換
要知道頁號+偏移量
邏輯圖:
實現圖:
如何確定一個邏輯地址對應的頁號與頁內偏移量
頁號:邏輯地址/頁面長度
頁內偏移量:邏輯地址%頁面長度
物理地址 = 頁號在物理地址中的起始位置+頁內偏移量
衍生問題:
可以看下方的那個 邏輯地址結構
邏輯地址結構
就是底層分析:
通過位數,可以確定頁號與頁內偏移量
知識回顧與重要考點
知識大綱(基本地址變換機構)
基本地址變換機構:
其實也就差不多,就這4步。
詳細步驟,示意圖:
邏輯地址到物理地址的轉換。
具體計算
對頁表項的考慮
知識回顧
知識大綱(具有快表的地址變換機構)
什么是快表(TLB)
快表就是高速緩存TLB,不是內存。里面儲存的是最近訪問內存的副本。
應用快表查找方式
1、是否越界
2、查快表 / 失敗后在查內存
3、得到并訪問物理地址
引入快表后的耗時
查詢快表有兩種方式
1、先查快表,再查慢表(111us
2、同時查詢(1+100)*0.9+(100+100)*0.1 = 110.9us
詳細圖解
局部性原理
主要是講解:為啥需要TLB
知識回顧與重要考點
知識大綱(兩級頁表)
單級頁表存在的問題
1、占用連續內存過大
2、不是所有頁面都需要常駐內存
如何解決單級頁表的問題(連續存放問題)?
開啟多級頁表
兩級頁表的原理、地址結構
(邏輯:頁目錄表+2級頁表+偏移量)
具體:
如何實現地址變換
如何解決單級頁表問題(虛擬存儲)
通過添加缺頁中斷(添加了一個標志位)
計算:
知識回顧:
1、單級頁表的問題
2、兩級頁表
3、如何實現地址變換
4、訪問次數+各個多級頁表大小
知識大綱(基本分段存儲管理方式)
分段
1、
2、
段表
地址轉換
分段、分頁管理的對比
分頁(物理)、分段(邏輯)
其中,分頁是,直接將內存切成小方格。你只要各個頁面就能直接查(一維)
分段是,根據需求,得出段號與段內地址(二維)
優點
解釋:
對比總結:
知識總結:
知識大綱(段頁式管理方式)
本章就學倆東西:
1、分頁、分段的優缺點:是否會產生外部碎片,邏輯分塊與內存保護做的怎么樣
2、段頁式計算物理地址的方法
分頁、分段的優缺點分析
分段+分頁 = 段頁式管理
段頁式管理的邏輯地址結構
段表、頁表
邏輯:
知識回顧與重要考點
通過添加缺頁中斷(添加了一個標志位)
計算:
知識回顧:
1、單級頁表的問題
2、兩級頁表
3、如何實現地址變換
4、訪問次數+各個多級頁表大小
知識大綱(基本分段存儲管理方式)
分段
1、
2、
段表
地址轉換
分段、分頁管理的對比
分頁(物理)、分段(邏輯)
其中,分頁是,直接將內存切成小方格。你只要各個頁面就能直接查(一維)
分段是,根據需求,得出段號與段內地址(二維)
優點
解釋:
對比總結:
知識總結:
知識大綱(段頁式管理方式)
本章就學倆東西:
1、分頁、分段的優缺點:是否會產生外部碎片,邏輯分塊與內存保護做的怎么樣
2、段頁式計算物理地址的方法
分頁、分段的優缺點分析
分段+分頁 = 段頁式管理
段頁式管理的邏輯地址結構
段表、頁表
邏輯:
知識回顧與重要考點
借鑒:
1、王道
2、【有道云筆記】第三章內存管理 -- 我的筆記
學習日記:?
6.17(周二) | 上午 | 雜事,已經處理完畢 死鎖的檢測 和 解除, 運用了資源分配圖與死鎖檢測算法 解除共有三種方式:強行剝奪、回退、撤銷 |
下午 | 學習內存基礎、了解了指令。學習裝入(靜態裝入、動態裝入、重定位裝入) 與鏈接(與裝入類似)的三種方法。 并在內存管理中學習了內存分配(下方三種)、地址轉換、內存保護 并且還了解,地址分配是由第一地址分配、固定地址分配、動態分配)三種分配 其中動態分配可由四個算法實現: 首次適應算法(綜合性最好)、最佳適應算法(從小到大、需排序)、最壞適應算法(從大到小、需排序)、鄰近適用算法(鏈表) 其中在學習,分頁式儲存管理時,學習到了: 頁、頁框、頁框號.... | |
晚上 | .... | |
6.18(周三) | 上午 | 學習了基本分頁式儲存管理,從而引出基本地址變換機構(簡而言之,將邏輯地址轉換成頁號與頁面偏移量,從而在內存中查找頁表,最終計算出物理地址)。 為了加快速度,又引出了高速緩存(TLB)。 基本分頁儲存太浪費大塊內存。所以又發明了兩級頁表。即可增加內存利用率,也增加了靈活性。 多級頁表頁也就此被發明。 |
下午 | 學習了段式存儲(是按照邏輯設計分段、提供內存保護)結合頁式儲存又演進成了段頁式存儲(=段表+頁表)。而虛擬內存技術拓充了內存。通過請求分頁管理與頁面置換算法實現。 期中,請求分頁管理包含:頁表機制(段號、狀態號、訪問字段、修改位、外存地址),缺頁中斷、地址轉換-計算題 而頁面置換算法又分為(OPT-最佳、FIFO-最次但簡單、LRU-最接近最優但實現代價大、CLOCK+改良版-這倆挺不錯) 之后又講了,頁面分配策略(像什么工作集、駐留集、抖動現象....)其中最精彩的,還是局部分配與全局分配。一個是用自己進程的內存塊,一個是全局進程調用。 | |
晚上 | ... ... | |
6.19(周四) | 上午 | 操作系統共主打四大管理(處理機、存儲、文件、設備..管理)而,今天初識文件管理(認識了FCB、操作系統向上提供的功能、磁盤塊、文件的各個屬性...)粗廣學習后,(細入)又引入了文件結構(無結構-流式、有結構-又稱記錄型文件)。其中結構文件分為,順序文件、索引文件、索引順序文件(拓展)--多級索引順序文件。跳出框架后,又學得將各個文件組織起來的方式-TCB。也就是,單級目錄、兩級目錄、多級目錄。無環圖目錄--方便共享文件、并方便查詢、不同目錄可重命名。 |
下午 | 學習了連續分配,鏈接分配,索引分配。其中索引分配又細化為鏈接索引,多層索引,混合索引。而這些是為了解決文件存儲在硬件問題 | |
晚上 | ...... | |
6.20(周五) | 上午 | 這個回顧一下,這幾天學習了邏輯結構與物理結構。其中邏輯機構(由用戶決定--與內存息息相關,且操作系統并不關心)-專門用來管理內存中的文件。其次就是物理結構(由操作系統決定,將文件采用什么樣的方式存儲在外存上。并負責邏輯塊與物理塊的轉化) 其中,他們都包含順序、鏈式、索引分配。 |
下午 | 學習了文件存儲管理(空閑表法、空閑鏈表法、位視圖法、 成組鏈表法) 學習完儲存,然后學習了文件的基礎操作(從創建刪除,到打開關閉,又組合出讀寫功能)有了存儲、操作,之后又學習了軟硬鏈接的操作--為共享文件而生,軟連接為Link法。口令/加密/訪問保護,其中我認為訪問保護的發放權限功能最絕。 | |
晚上 | ..... |