記憶體管理與虛擬化技術

更新於 2024/12/09閱讀時間約 6 分鐘

終於來到作業系統與 CPU 的最後一個筆記 ᕦ(ò_óˇ)ᕤ,本篇的學習目標是

目標:了解記憶體分配與虛擬化應用

在作業系統中,記憶體管理是非常重要的一環。由於物理記憶體有限,系統需要有效地分配與管理資源,確保應用程式能正常運作,同時避免資源浪費與衝突。

邏輯記憶體與實體地址 (Logical Memory & Physical Address)


1. 邏輯地址 (Logical Address)

  • 由 CPU 產生的虛擬地址,應用程式使用的地址。

2. 實體地址 (Physical Address)

  • 記憶體單元的實際地址,對應於實體記憶體(如 RAM)。

3. 地址轉換:Page Table & MMU

  • Page Table (頁表):
    就像 電影座位分配系統的資料庫,記錄了每位乘客的座位號碼與實際的座位位置。當有人選位時,系統檢查資料庫,確認是否有空位可分配。
  • Memory Management Unit (MMU):
    就像引導人員,當你進到電影院時時,它會根據系統的分配結果,即時將你引導到正確的座位。
    • 如果有臨時變動,它會即時重新調整,並將你導引到新的位置。

為什麼需要邏輯記憶體 (Logical Memory)?

  1. 提供應用程式的簡單視角
    • 引入 邏輯記憶體,應用程式只需與簡單的虛擬地址打交道,不需知道資料實際儲存的位置。
    • 比喻: 就像訂機票時選擇座位,你只需選擇「邏輯上的座位號碼」,不用操心飛機上的實際空位如何安排。

2. 支援多工處理 (Multitasking)

    • 每個應用程式都擁有獨立的邏輯記憶體區域,作業系統負責將這些區域對應到實體記憶體,避免相互干擾。

4. 支援記憶體擴充 (虛擬記憶體管理)

  • 問題: 當應用程式需要的記憶體超過實體記憶體時,系統必須想辦法解決。
    • 邏輯記憶體可以超過實體記憶體的容量,作業系統會啟用虛擬記憶體技術,將不常用的資料暫存到硬碟,並動態調整記憶體配置。

2. 分段與頁面管理 (Segmentation and Paging)

比喻:圖書館與書架管理

當作業系統管理記憶體空間時,必須決定如何分配應用程式所需的空間。以下用圖書館書架的比喻來解釋兩種常見的管理方式:

(1) 分段管理 (Segmentation)

  • 場景:
    • 想像圖書館的書架分成固定的「段」,每個段用來放完整的書集。
    • 如果某個書集需要 5 個空間,但目前書架上只有兩個空格和三個空格分開的位置,即使加起來是 5 個空間,也無法放進書集,因為分段管理不允許分割
  • 應用:
    • 例如:一個簡報程式需要 5 個單位,但系統只剩下兩個和三個分開的空間,因此無法啟動。
raw-image

Segmented, Paged and Virtual Memory

優點: 更容易管理大型應用程式,資料邏輯結構清晰。

缺點: 空間分散容易產生「記憶體碎片 (Fragmentation)」。


(2) 頁面管理 (Paging)

比喻:拆散的圖書館書籍

  • 場景:
    • 如果圖書館允許將一本書拆成多個部分,儲存在不同的書架空格中,只要書目索引 能記錄每個部分的位置,就能正確找到整本書。
    • 例如:簡報程式需要 5 個單位,即使記憶體只剩下分散的空格,如兩個和三個單位的空間,也可以分開存放,並由 頁表 (Page Table) 記錄資料的位置。
  • 應用:
    • 程式碼、資料段等都可以分頁處理,避免記憶體碎片。
raw-image


優點: 更有效利用記憶體,幾乎不會浪費空間。

缺點: 頁表管理複雜,可能產生額外的處理時間。


3. 虛擬記憶體管理 (Virtual Memory Management)

當實體記憶體 (RAM) 不夠用時,作業系統會啟用虛擬記憶體,將不常用的資料暫時存到硬碟中,騰出空間給更急需的應用程式。

比喻:後台應用管理

場景:手機的應用程式管理

  • 如果你同時打開了多個應用程式,手機的記憶體可能不夠。
  • 作業系統會將不常用的應用程式「暫存到後台」,即存到硬碟中,讓 RAM 空出來。
  • 當你切回這些應用程式時,系統會將它們 重新載入 (Page In)

警告:磁碟風暴 (Disk Thrashing)

  • 如果系統記憶體不足,頻繁地將資料從 RAM 存到硬碟,或從硬碟載回 RAM,系統效能會大幅下降,這種狀況稱為 磁碟風暴

4. 虛擬記憶體與容器技術 (Virtual Memory & Containers)

比喻:雲端遊戲伺服器資源分配

當遊戲伺服器需要支援多個玩家或應用程式時,虛擬化技術會將伺服器資源分成多個「虛擬機 (VM)」或「容器 (Containers)」。

raw-image

虛擬機 (VM) (這部分我還需要查資料,還是不太熟)

  • 搬整個作業系統
  • 伺服器將一整個虛擬作業系統分配給某個應用程式。
  • 就像擁有自己的 遊戲機主機,能完整控制,但需要更高的資源與效能支援。

容器 (Containers)

  • 比喻:遊戲伺服器內的專屬房間
  • 容器只分配應用程式運行所需的基本資源,類似「遊戲伺服器的專屬房間」,節省資源,且啟動快速。
左邊是整個作業系統,右邊 container 只有應用程式

左邊是整個作業系統,右邊 container 只有應用程式

參考影片及圖片來源:

Virtual Machines vs Containers

留言0
查看全部
avatar-img
發表第一個留言支持創作者!
第五部分:多程式協調與通訊機制,目標:處理多個應用程式的競爭與協作 Interprocess Communication(IPC, 行程間通訊) Race Condition & Critical Section & Dekker's Algorithm Deadlock 與形成的四個條件
目標:理解程式的排程策略,如何讓多個應用程式同時執行 CPU Scheduling Criteria(CPU 調度準則) CPU Scheduling(Preemptive & Non-Preemptive)
本篇文章探討作業系統如何管理程式,介紹了 Process、Thread 及 Process Control Block(PCB)的基本概念。本文以實際例子解釋這些概念,並詳細說明 Context Switch 的運作方式以及程式的五大狀態。
本文探討記憶體(Memory)和儲存裝置(Storage)之間的主要差異,並解釋它們各自的功能與特性。此外,文章還深入介紹 Process、Thread 及其對 CPU 運作的影響,並結合可視化圖表幫助讀者理解這些複雜概念,特別適合對計算機科學有興趣的讀者。
本文用書櫃、書、書桌的比喻,深入探討電腦中資料儲存結構及作業系統如何協調資料處理。外部儲存裝置如同書櫃,主記憶體則比作書桌,處理器被比喻為讀書的人,並詳細介紹資料存取過程、Common Bus的角色以及作業系統的核心任務。透過此篇,讀者能更好地瞭解電腦在資料處理上的運作邏輯及作業系統的重要性。
本文深入探討 NoSQL 資料庫的特性及優勢,並將其與傳統 SQL 資料庫進行比較。NoSQL 資料庫因其結構靈活、擴展性強而適合儲存變化多端的數據,特別是在社交媒體和電商平臺等高需求場景。CAP 理論也被提出,解釋了分散式系統的能力取捨問題,幫助讀者瞭解在不同需求下如何選擇合適的資料庫技術。
第五部分:多程式協調與通訊機制,目標:處理多個應用程式的競爭與協作 Interprocess Communication(IPC, 行程間通訊) Race Condition & Critical Section & Dekker's Algorithm Deadlock 與形成的四個條件
目標:理解程式的排程策略,如何讓多個應用程式同時執行 CPU Scheduling Criteria(CPU 調度準則) CPU Scheduling(Preemptive & Non-Preemptive)
本篇文章探討作業系統如何管理程式,介紹了 Process、Thread 及 Process Control Block(PCB)的基本概念。本文以實際例子解釋這些概念,並詳細說明 Context Switch 的運作方式以及程式的五大狀態。
本文探討記憶體(Memory)和儲存裝置(Storage)之間的主要差異,並解釋它們各自的功能與特性。此外,文章還深入介紹 Process、Thread 及其對 CPU 運作的影響,並結合可視化圖表幫助讀者理解這些複雜概念,特別適合對計算機科學有興趣的讀者。
本文用書櫃、書、書桌的比喻,深入探討電腦中資料儲存結構及作業系統如何協調資料處理。外部儲存裝置如同書櫃,主記憶體則比作書桌,處理器被比喻為讀書的人,並詳細介紹資料存取過程、Common Bus的角色以及作業系統的核心任務。透過此篇,讀者能更好地瞭解電腦在資料處理上的運作邏輯及作業系統的重要性。
本文深入探討 NoSQL 資料庫的特性及優勢,並將其與傳統 SQL 資料庫進行比較。NoSQL 資料庫因其結構靈活、擴展性強而適合儲存變化多端的數據,特別是在社交媒體和電商平臺等高需求場景。CAP 理論也被提出,解釋了分散式系統的能力取捨問題,幫助讀者瞭解在不同需求下如何選擇合適的資料庫技術。
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
此篇文章連結 RAM 與 C語言陣列的關係並提供陣列與for-loop 使用的相關教學 前半段為基本電腦觀念、後半段為實作能力的教學
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
歡迎來到我們的Windows教學!在這裡,你將學習如何有效使用Windows操作系統。我們將探索各種基本操作,如文件管理、桌面設置、程式安裝和系統設置。無論你是新手還是希望深入了解Windows的使用者,我們的教學內容都能夠幫助你提升操作技能,使你在日常使用和工作中更加流暢和高效。立即加入我們,開啟
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
本文探討了電腦架構的運行方式,使用比喻解釋CPU、記憶體與硬碟的關係,並指出在提升電腦速度時,加記憶體並非總是有效的方法。讀者將瞭解到,解決電腦速度問題需要分析具體的瓶頸,而不是單純依賴擴充記憶體。讓讀者對電腦性能的提升有更深入的理解。
Thumbnail
電腦有很多零件,有CPU、主機板(MB)、記憶體(Memory)... 今天我想分享,我這次組電腦的過程,還有一些好用的技巧,希望能幫助到大家,組出心中的完美電腦!
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
到存放虛擬機的磁碟處\點選想要註冊的機器\註冊機器(登錄虛擬機器)
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
此篇文章連結 RAM 與 C語言陣列的關係並提供陣列與for-loop 使用的相關教學 前半段為基本電腦觀念、後半段為實作能力的教學
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
歡迎來到我們的Windows教學!在這裡,你將學習如何有效使用Windows操作系統。我們將探索各種基本操作,如文件管理、桌面設置、程式安裝和系統設置。無論你是新手還是希望深入了解Windows的使用者,我們的教學內容都能夠幫助你提升操作技能,使你在日常使用和工作中更加流暢和高效。立即加入我們,開啟
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
本文探討了電腦架構的運行方式,使用比喻解釋CPU、記憶體與硬碟的關係,並指出在提升電腦速度時,加記憶體並非總是有效的方法。讀者將瞭解到,解決電腦速度問題需要分析具體的瓶頸,而不是單純依賴擴充記憶體。讓讀者對電腦性能的提升有更深入的理解。
Thumbnail
電腦有很多零件,有CPU、主機板(MB)、記憶體(Memory)... 今天我想分享,我這次組電腦的過程,還有一些好用的技巧,希望能幫助到大家,組出心中的完美電腦!
Thumbnail
工具功能 (1) 彈性任意查詢檔案,如對來源目錄設定,檔案修改日期 設定,檔名特定字串或副檔名設定後,自動查出明細,並可展開至各階子目錄處理     (2) 依查詢後結果,可產出 LIST ,提供查詢結果之確認,再依此對檔案作複 (3) 可對檔案作移動,複製至別處,刪除處理,使電腦可騰出硬碟空間
Thumbnail
到存放虛擬機的磁碟處\點選想要註冊的機器\註冊機器(登錄虛擬機器)
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val