1. 程式人生 > >作業系統筆記:(一)實體記憶體分配1:連續記憶體分配

作業系統筆記:(一)實體記憶體分配1:連續記憶體分配

remark: 這是我準備考研期間看學堂線上清華大學的OS MOOC的筆記,由於博主不是科班出身,所寫錯誤可能很大,望大家指正.

本文結構如下:

  • 計算機記憶體管理概述
  • 連續記憶體分配
  • 碎片整理
  • e.g: 夥伴系統(Buddy System)

計算機記憶體管理概述

首先我們知道計算機的記憶體是分很多層次的,不同層次之間訪存速度相差很大,(甚至達到幾個數量級)
這裡寫圖片描述

上面是關於MMU和L1,L2 Cache 的介紹,先留坑,有興趣可以看看

記憶體管理方式

  • 重定位 (relocation)
  • 分段(Segmentation)
  • 分頁(paging)
  • 段頁式

分段分頁和段頁是都會在非連續記憶體分配中介紹,重定位先留坑待補

地址空間

實體地址空間 就是真實的計算機記憶體(e.g.: 4G ,0-4G-1)
邏輯地址空間 CPU看執行程序看到的地址,也稱虛擬地址

地址生成

將指令與資料繫結到記憶體地址有如下幾種情況:
* 編譯時 編譯時寫死,生成絕對地址程式碼
* 載入時 編譯時生成可重定位程式碼,載入時進行地址繫結
* 執行時 執行時進行地址繫結,這種方式更加靈活,執行時可以從一個記憶體段移到另一個記憶體段

地址檢查

這裡寫圖片描述

連續記憶體分配

顧名思義,作業系統為每個程序分配一塊連續的記憶體區域,作業系統需要維護一個表,記錄哪些記憶體塊被佔用了,哪些沒有。這樣做很明顯會產生
兩個問題


1. 外碎片 (相鄰兩塊之間不能用的)
2. 內碎片 (分配的記憶體中用不完的)

特點
1. 載入時分配
2. 地址連續

分配策略

  • 最先(first-fit) : 找到第一塊足夠大的,
  • 最佳(best-fit): 找到足夠大的中最小的 M=minMiMneed{Mi}
  • 最差(worst-fit): 分配最大的

碎片整理

一種解決外部碎片的方法是 緊縮(compaction) ,就是移動記憶體,最暴力的就是將所有佔用記憶體移到一邊。but 緊縮並不是總是可以的必須是在地址繫結時是執行時生成才行。另外一種策略就是下一節要講的非連續記憶體分配


交換 這種策略是OS在程序空閒時將所佔用的資料段換出到硬碟中去,也可以搶佔。

Buddy System

它的直觀表現是這樣的
這裡寫圖片描述

每一塊記憶體都是2的冪次,需要注意的是由於分配是連續的,所以依然存在外部碎片

相關推薦

作業系統筆記:()實體記憶體分配1連續記憶體分配

remark: 這是我準備考研期間看學堂線上清華大學的OS MOOC的筆記,由於博主不是科班出身,所寫錯誤可能很大,望大家指正. 本文結構如下: 計算機記憶體管理概述 連續記憶體分配 碎片整理 e.g: 夥伴系統(Buddy System) 計算機

作業系統的學習(2)——實體記憶體管理連續記憶體分配

記憶體的最小訪問單位是位元組(8it),一般計算機系統是32位匯流排,一次讀寫可以讀或者寫32位也就是4位元組。 CPU裡會看到快取記憶體,快取記憶體就是在進行讀寫指令或者指令執行的過程中,訪問資料都需要從記憶體中讀資料,如果這時候有大量資料需要讀寫或者重複利

知識點整理1JVM記憶體結構

  JVM把記憶體分為如下幾個區域: 1.方法區(Method Area) 2.堆區(Heap) 3.虛擬機器棧(VM Stack) 4.本地方法棧(Native Method Stack) 5.程式計數器(Program Counter R

DNS服務1快取記憶體DNS

DNS的快取記憶體 1.什麼是DNS DNS(Domain Name System,域名系統),全球資訊網上作為域名和IP地址相互對映的一個分散式資料庫,能夠使使用者更方便的訪問網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過域名,最終得到該域名對應的IP地址的過程叫做域名解析(

讀書筆記之從0到1開啟商業與未來的祕密

從0到1:開啟商業與未來的祕密——彼得.蒂爾 中信出版社推出中文版——徐小平,真格基金創始合夥人 paypal黑幫-教父 企業經營境界: 第一層:只是製造滿足市場需求的產品,從1到n; 第二層:創造了良好組織基因,

深入理解JVM虛擬機器1JVM記憶體的結構與永久代的消失

所有的Java開發人員可能會遇到這樣的困惑?我該為堆記憶體設定多大空間呢?OutOfMemoryError的異常到底涉及到執行時資料的哪塊區域?該怎麼解決呢?其實如果你經常解決伺服器效能問題,那麼這些問題就會變的非常常見,瞭解JVM記憶體也是為了伺服器出現效能問題的時候可

caioj1063·動態規劃入門(維一邊推1美元和馬克)

1063:動態規劃入門(一維一邊推1:美元和馬克) 時間限制: 1 Sec 記憶體限制: 128 MB 題目描述 【問題描述】 今天6:00起床,我轉身發現枕頭邊有100美元。 出門的時候發現門口有家冰淇淋店,拉了很長的橫幅:“今天100美元和4

步步學ListView(1)建立一個最簡單的ListView

什麼是ListView? ListView是在android開發中使用得相當頻繁的一個控制元件,它的作用是用來展示一組可滾動的列表條目。列表中的條目一般使用Adapter自動插入到列表中。Adapte

linux高階記憶體管理之非連續記憶體區(分配和釋放)

前面總結了非連續記憶體區域的核心描述,接著看看他的分配和釋放。 一、非連續記憶體區的分配 不管是vmalloc()還是vmalloc_32()等系列的分配函式最後都會呼叫__vmalloc_node()函式實現,直接看這個函式的實現。 * __vmalloc_node

課後筆記Python基礎語法介紹(1

Python3.6.5我們總是找借口說還有時間去做某事,或者完成某事,結果總是不了了之。比如拖到現在才寫第一課聽課筆記。 第一節課,老師對以下內容做了分享,大致分為 環境配置 開發平臺:Mac OS Version 10.13.2 老師講課的是在Windows 10 我選擇在Mac OS進行Pyth

【轉載】JVM系列JVM記憶體組成及分配

java記憶體組成介紹:堆(Heap)和非堆(Non-heap)記憶體        按照官方的說法:“Java 虛擬機器具有一個堆,堆是執行時資料區域,所有類例項和陣列的記憶體均從此處分配。堆是在 Java 虛擬機器啟動時建立的。”“在JVM中堆

《組合語言(第3版)(王爽 著)》學習筆記基礎知識(1

組合語言是直接在硬體之上工作的程式語言,我們首先要了解硬體系統的結構,才能有效地應用匯編語言對其程式設計。 彙編課程的研究重點放在如何利用硬體系統的程式設計結構和指令集有效靈活地控制系統進行工作。

jvm原始碼閱讀筆記[3]記憶體分配到觸發GC的細節

         除了第一篇說到的,對於使用cms回收的應用,會有執行緒輪詢判斷老年代是否滿足GC的條件,若滿足,則會觸發一次cms老年代的回收。     針對年輕代,更常見的是,執行緒優先在eden區分配物件的時候,若eden區空間不足,則會觸發一次y

uCOS-II學習筆記實時作業系統

1.前後臺系統:前後臺系統的架構用一句話來形容的話,就是一個大的迴圈,加上中斷,就形成了一個整的體系。 假設來了中斷需要處理模組3,如果模組3的處理是最緊迫的,但是當前cpu 只執行到模組1, 這樣的話,必須還要承受模組2的執行時間延遲,才能輪到模組3的處理,當模組越多的

作業系統原理動態記憶體分配

動態記憶體分配背後的機制深刻的體現了電腦科學中的這句名言: All problem in CS can be solved by another level of indirection. — Butler Lampson

深入理解Java虛擬機器讀書筆記(1)記憶體管理重要概念

深入理解Java虛擬機器讀書筆記(1):記憶體管理重要概念 說到Java記憶體管理,不得不先貼一張非常經典的圖,如下所示: 這些模組有些是執行緒私有的,有的則是執行緒共享的。下面一一對這些模組進行介紹: 一、程式計數器 程式計數器一塊比較小的記憶體空間,可以看做當前

設計模式(單例模式 JVM類載入機制 JDK原始碼學習筆記——Enum列舉使用及原理 Java併發(七)雙重檢驗鎖定DCL Java併發(二)Java記憶體模型 Java併發(二)Java記憶體模型 Java併發(七)雙重檢驗鎖定DCL JDK原始碼學習筆記——Enum列舉使用及原理

單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許一個例項存在。 單例模式一般體現在類宣告中,單例的類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件。 適用場合: 需要頻繁的進行建立和銷燬的物件; 建立物

Python學習筆記PyIntObject記憶體池機制

PyIntObject記憶體池機制                   ----------------- &nbs

Java File類學習筆記1運用FileNameFilter類,獲得某目錄下所有指定副檔名的檔案

運用FileNameFilter類,獲得某一目錄下所有指定副檔名的檔案,後續學習筆記再對File類的操作做梳理 根據帖子上的示例做了綜合和一些修改,並加了註釋,示例如下: package com.daxiang.filenamefilter; import java.i

[作業系統] 作業系統真相還原讀書筆記部署工作環境

該作業系統使用bochs開發,部署工作環境主要就是編譯安裝bochs。 收集配置資訊: peter@ubuntu:~/Study/Myos/chapter1/bochs-2.6$ ./con