核心空間與使用者空間

2022-09-11 04:30:09 字數 1056 閱讀 4361

關於虛擬記憶體有三點需要注意:

上圖展示了整個程序位址空間的分布,其中4g的位址空間分為兩部分,在使用者空間內,對應了記憶體分布的五個段:資料段、**段、bss段、堆、棧。在上篇文章中有詳細的介紹。

這個圖示核心使用者空間的劃分,圖中最重要的就是高階記憶體的對映

其中kmalloc和vmalloc函式申請的空間對應著不同的區域,同時又不同的含義。

這張圖中頁解釋了三者的不同關係,和上篇文章中的內容有相似之處。

夥伴演算法:

一種物理記憶體分配和**的方法,物理記憶體所有空閒頁都記錄在buddy鍊錶中。首選,系統建立乙個鍊錶,鍊錶中的每個元素代表一類大小的物理記憶體,分別為2的0次方、1次方、2次方,個頁大小,對應4k、8k、16k的記憶體,沒一類大小的記憶體又有乙個鍊錶,表示目前可以分配的物理記憶體。例如現在僅存需要分配8k的物理記憶體,系統首先從8k那個鍊錶中查詢有無可分配的記憶體,若有直接分配;否則查詢16k大小的鍊錶,若有,首先將16k一分為二,將其中乙個分配給程序,另乙個插入8k的鍊錶中,若無,繼續查詢32k,若有,首先把32k一分為二,其中乙個16k大小的記憶體插入16k鍊錶中,然後另乙個16k繼續一分為二,將其中乙個插入8k的鍊錶中,另乙個分配給程序........以此類推。當記憶體釋放時,檢視相鄰記憶體有無空閒,若存在兩個聯絡的8k的空閒記憶體,直接合併成乙個16k的記憶體,插入16k鍊錶中。(夥伴演算法用於物理記憶體分配方案)

slab演算法:

是一種對夥伴算的一種補充,對於使用者程序的記憶體分配,夥伴演算法已經夠好了,但對於核心程序,還需要存在一類很小的資料(位元組大小,比如程序描述符、虛擬記憶體描述符等),若每次給幾個位元組的資料分配乙個4kb的頁,實在太浪費,於是就有了slba演算法,slab演算法其實就是把乙個頁用力劈成一小塊一小塊,然後再分配。

核心空間與使用者空間

1.核心態與使用者態的區別 1 核心態 的 不受任何限制,可以訪問 所有處理器指令集 記憶體位址以及i o空間 2 使用者態的 只能訪問其位址空間的頁表項中規定的虛擬位址。2.使用者態到核心態的切換方式 1 系統呼叫 軟中斷的一種 由使用者程序主動發起 2 異常 當cpu在執行執行在使用者態下的程式...

核心空間與使用者空間

首先,這個概念的由來,我認為跟cpu的發展有很大關係,在目前cpu的保護模式下,系統需要對其賴以執行的資料進行保護,為了保證作業系統核心資料,我們把記憶體空間進行劃分,一部分為作業系統核心執行的空間,另一部分是應用程式執行的空間,所謂空間就是記憶體的位址。因此核心空間和使用者空間的概念就出現了。在3...

linux核心空間與使用者空間

核心空間和使用者空間是作業系統理論的基礎之一,即核心功能模組執行在核心空間,而應用程式執行在使用者空間。現代的cpu都具有不同的操作模式,代表不同的級別,不同的級別具有不同的功能,在較低的級別中將禁止某些操作。linux系統設計時利用了這種硬體特性,使用了兩個級別,最高端別和最低級別,核心執行在最高...