1. 程式人生 > >[OS] 記憶體分配和記憶體排程

[OS] 記憶體分配和記憶體排程

From https://blog.csdn.net/msdnwolaile/article/details/52763882

記憶體分配策略和分配演算法

在為程序分配記憶體時,將涉及到三個問題 
1,最小物理塊數的確定 
2,物理塊的分配策略 
3,物理塊的分配演算法

1,這裡的最小物理塊數,是指能保證程序正常執行所需的最小物理塊數。當系統為程序分配的物理塊數少於此值的時候,程序將無法進行。如果過多的話,那麼將可能造成記憶體的浪費。 
對於某些功能較強的機器,其指令長度可能要兩個或多於兩個位元組,因而其指令本身有可能跨兩個頁面,且源地址和目的地址所涉及的區域也有可能跨2個頁面。所以要至少分配6個頁面 
2,物理塊分配策略 
  1,固定分配區域性置換:(基於程序的型別)或根據程式設計師,管理員的建議,為每個程序分配一定數目的物理塊,在整個執行期間都不再改變。採用該策略,如果程序在執行中發現缺頁,則只能從程序在記憶體n個頁面中選出一個頁換出,然後再調入一個頁,以保證分配給該程序的記憶體空間不變。但是:為某個程序分配的物理塊難以確定

  2,可變分配全域性變數:這可能是最易於實現的一種物理塊分配和置換策略,已用於若干OS。在採用這種策略時,先為系統中的每個程序分配一定數目的物理塊,而os中也保持一個空閒物理塊佇列。當某程序發現缺頁時,由系統從空閒物理塊佇列中取出一個物理塊分配給該程序,並將欲調入的頁裝入其中。這樣,凡是產生缺頁中斷,都將獲得新的物理塊。僅當空閒物理塊佇列中的物理塊用完時,OS才能從記憶體中選擇一頁調出。(隨機調出)

  3,可變分配區域性置換:為每個程序分配一定數目的物理塊,但當某程序發現缺頁時,只允許從該程序在記憶體的頁面中選出一頁換出。這樣,就不會影響其它程序的執行。如果程序在執行中頻繁的發生缺頁中斷,則系統必須為該程序分配若干附加的物理塊,直至該程序的缺頁率減少到合適的程度為止。同樣,若一個程序的執行過程中的缺頁率特別低,則此時可適當減少分配給該程序的物理塊數

3,物理塊分配演算法

 1,平均分配演算法(可供分配的物理塊平均分配給各個程序) 
 2,按比例分配演算法(根據程序的大小按比例分配物理塊演算法) 
 3,考慮優先權的分配演算法(為了重要的,緊迫的作業能儘快完成,應為他分配較多的記憶體空間。通常採取的方法把記憶體中供分配的所有物理塊分為兩部分:一部分按比例分配給各程序;另一部分根據各程序的優先權,適當的增加其相應份額,分配給各程序)

記憶體排程

在程序執行過程中,若所要訪問的頁面不在記憶體而需要把它們調入記憶體,但記憶體已沒有空間,系統必須從記憶體中調出一頁。 
置換演算法的好壞,直接影響系統的效能。

1,最佳置換演算法(理想化的演算法,難於實現) 
(淘汰的頁面將是以後永不使用的,或許是最長(未來時間不再被訪問的)),可以獲得最低的缺頁率

2,先進先出頁面置換演算法(總是淘汰最先進入記憶體的頁面)

3,最近最久未使用 
  比較好的演算法,但要求系統中有較多的支援硬體 
  為了瞭解一個程序在記憶體中的各個頁面各有多少時間未被程序訪問,以及如何快速的直到那一頁是最近最久未使用的頁面。必須有兩類硬體的支援:棧和暫存器。


相關推薦

[OS] 記憶體分配記憶體排程

From https://blog.csdn.net/msdnwolaile/article/details/52763882記憶體分配策略和分配演算法在為程序分配記憶體時,將涉及到三個問題 1,最小物理塊數的確定 2,物理塊的分配策略 3,物理塊的分配演算法1,這裡的最小物

記憶體分配與任務排程

轉自:https://www.cnblogs.com/zhangshenghui/p/5688687.html 一、記憶體分配: 1.1 申請一塊記憶體大小定義: #define MEM_0_SIZE (8) //8位元組 #define MEM_1_SIZE (16) //16位元組 #d

Java記憶體分配管理

Java記憶體分配與管理是Java的核心技術之一,之前我們曾介紹過Java的記憶體管理與記憶體洩露以及Java垃圾回收方面的知識,今天我們再次深入Java核心,詳細介紹一下Java在記憶體分配方面的知識。一般Java在記憶體分配時會涉及到以下區域:   ◆暫存器:我們在程式中無法控制   ◆

Linux夥伴系統原理-記憶體分配釋放

主要分析Linux夥伴系統演算法,記憶體的分配和釋放 1.夥伴系統簡介      Linux核心記憶體管理的一項重要工作就是如何在頻繁申請釋放記憶體的情況下,避免碎片的產生, Linux採用夥伴系統解決外部碎片的問題,採用slab解決內 部碎片的問

自動記憶體管理機制(4)- 記憶體分配回收策略

自動記憶體管理機制(4)- 記憶體分配和回收策略 Java所承諾的自動記憶體管理主要是針對物件記憶體的回收和物件記憶體的分配。 在Java虛擬機器的五塊記憶體空間中,程式計數器、Java虛擬機器棧、本地方法棧記憶體的分配和回收都具有確定性,一般在編譯階段就能確定需要分配的記憶體大小,

oracle 記憶體分配調優 總結

一直都想總結一下oracle記憶體調整方面的知識,最近正好優化一個數據庫記憶體引數,查詢一些資料並且google很多下。現在記錄下來,做下備份。                 &

C語言 記憶體分配static關鍵字

C語言記憶體分配機制 (1)程式碼區(text segment)。.text程式碼區指令根據程式設計流程依次執行,對於順序指令,則只會執行一次(每個程序),如果反覆,則需要使用跳轉指令,如果進行遞迴,則需要藉助棧來實現。程式碼區的指令中包括操作碼和要操作的物件(

jvm記憶體分配垃圾回收機制

問題: 1、垃圾回收目標物件? 2、什麼時間進行垃圾回收?(面試最常見的問題之一) 3、jvm怎樣進行垃圾回收? jvm記憶體分配 執行緒共享區域 1、 堆 2、方法區 執行緒私有區域 1、jvm棧 2、本地方法棧 3、程式計數器 由於虛擬機器棧,

jvm學習筆記(3)——java物件的記憶體分配物件的回收(GC)

引言:         之前的文章已經提過,java物件例項是存放在堆上的,至於是在伊甸區、存活區還是老年區,這些都是從物件回收(GC)角度來進行的邏輯劃分。所以我們先說物件的回收(GC),然後再依據GC的策略來說明新的物件具體在哪個區生成。 GC(Garbage C

最簡單例子圖解JVM記憶體分配回收

一、簡介 JVM採用分代垃圾回收。在JVM的記憶體空間中把堆空間分為年老代和年輕代。將大量(據說是90%以上)建立了沒多久就會消亡的物件儲存在年輕代,而年老代中存放生命週期長久的例項物件。年輕代中又被分為Eden區(聖經中的伊甸園)、和兩個Survivor區。新的物件分配是首先放在Eden區

GC發生時記憶體分配回收策略

在《深入理解java虛擬機器》一書中讀到3.6章節,記憶體分配和回收策略: 預備知識 java堆=年輕代(Eden+Survivor+Survivor)+老年代 Eden:Survivor:Survivor預設比例8:1:1,每次年輕代使用率90%(Ede

Java 記憶體分配回收機制

Java的GC機制是自動進行的,和c語言有些區別需要程式設計師自己保證記憶體的使用和回收。 Java的記憶體分配和回收也主要在Java的堆上進行的,Java的堆中儲存了大量的物件例項,所以Java的堆也叫GC堆。 Java在垃圾收集的過程中,主要用到了分代收集演算法,

[jvm解析系列][一]Java記憶體區域分配記憶體溢位異常OOM

學過作業系統的同學應該比較清楚,一個作業系統必須要有完善的記憶體管理系統(頁/段式的管理),相應的jvm全稱java虛擬機器應該也有類似的一種管理記憶體的方式,這種方式是建立在真實的作業系統記憶體管理方式之上的,他把記憶體分配成了不同的區域,形成了java記憶體模型。 那麼

cuda二維陣列記憶體分配資料拷貝

因為cuda具有高效利用GPU進行科學計算的優勢,而人工智慧的重點之一就是複雜的計算任務,因此學好GPU計算是學習AI的重點任務。這裡,我們即將進行利用共享記憶體的矩陣運算。 我們看一個例子,如何對矩陣進行分配顯示卡記憶體以及元素賦值操作。通常來講,在GPU中分配記憶體使用的是cudaMalloc函式,

Java直接記憶體分配釋放方式

一. 正常分配,回收由GC負責 新增jvm啟動引數:-verbose:gc -XX:+PrintGCDetails -XX:MaxDirectMemorySize=40M 迴圈執行以下程式碼,可以看到頻繁fullGC. ByteBuffer buffer =

Linux中的記憶體分配釋放之slab分配器分析(完)

        我們在上篇文章分析cache_grow()函式的時候涉及兩個函式,我們沒有細說。一個就是kmem_getpages()和kmem_freepages()函式,這兩個函式有3個引數。kmem_cahce_t:主要是把申請到的物件加到這個快取記憶體內   flag

java記憶體模型記憶體分配

1.什麼是jvm?(1)jvm是一種用於計算裝置的規範,它是一個虛構出來的機器,是通過在實際的計算機上模擬模擬各種功能實現的。(2)jvm包含一套位元組碼指令集,一組暫存器,一個棧,一個垃圾回收堆和一個儲存方法域。(3)JVM遮蔽了與具體作業系統平臺相關的資訊,使Java程式只需生成在Java虛擬機器上執行的

記憶體分配GC觸發

物件分配優先在Eden區分配。當Eden區沒有足夠空間分配時, VM發起一次Minor GC, 將 Eden區和其中一塊Survivor區內尚存活的物件放入另一塊Survivor區域。如Minor GC時survivor空間不夠,物件提前進入老年代,老年代空間不夠時進行Ful

記憶體分配回收策略簡述

物件優先在Eden分配 大多數情況下,物件在新生代Eden區中分配。當Eden區沒有足夠空間進行分配時,虛擬機器將發起一次Minor GC。 新生代GC(Minor GC):指發生在新生代的垃圾收集動作,因為Java物件大多都具備朝生夕滅的特性,所以Minor GC非常頻繁

淺談CLR的記憶體分配回收機制

相對於C++程式設計師來說,C#程式設計師是非常幸運的,至少我們不需要為記憶體洩漏(Memory Leak)而頭疼,不需要負責記憶體的分配和回收。但這不意味著我們只需要知道new的語法就可以了,作為一個嚴肅的C#程式設計師,我們應該對此有所瞭解,有助於我們編寫效能更好的程式碼。 主要內容: CLR的記憶體分