成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux中的slab分配器講解

運維 系統運維
Linux最近幾年的發展迅速,很多中小企業網站都安裝了Linux操作系統。本文將著重介紹Linux內核的內存管理,尤其是slab分配提供的機制。將探索slab分配器背后所采用的思想,并介紹這種方法提供的接口和用法。

Linux最近幾年的發展迅速,很多中小企業網站都安裝了Linux操作系統。本文將著重介紹Linux內核的內存管理,尤其是slab分配提供的機制。將探索slab分配器背后所采用的思想,并介紹這種方法提供的接口和用法。

slab 緩存

Linux所使用的slab分配器的基礎是Jeff Bonwick為SunOS操作系統首次引入的一種算法。Jeff 的分配器是圍繞對象緩存進行的。在內核中,會為有限的對象集(例如文件描述符和其他常見結構)分配大量內存。Jeff發現對內核中普通對象進行初始化所需的時間超過了對其進行分配和釋放所需的時間。

因此他的結論是不應該將內存釋放回一個全局的內存池,而是將內存保持為針對特定目而初始化的狀態。例如,如果內存被分配給了一個互斥鎖,那么只需在為互斥鎖首次分配內存時執行一次互斥鎖初始化函數(mutex_init)即可。后續的內存分配不需要執行這個初始化函數,因為從上次釋放和調用析構之后,它已經處于所需的狀態中了。

Linux slab分配器使用了這種思想和其他一些思想來構建一個在空間和時間上都具有高效性的內存分配器。

圖 1 給出了slab結構的高層組織結構。在最高層是cache_chain,這是一個slab緩存的鏈接列表。這對于best-fit算法非常有用,可以用來查找最適合所需要的分配大小的緩存(遍歷列表)。cache_chain的每個元素都是一個 kmem_cache 結構的引用(稱為一個 cache)。它定義了一個要管理的給定大小的對象池。

圖 1. slab 分配器的主要結構

     圖  1. slab 分配器的主要結構 

每個緩存都包含了一個 slabs 列表,這是一段連續的內存塊(通常都是頁面)。存在 3 種 slab:

slabs_full
完全分配的 slab
slabs_partial
部分分配的 slab
slabs_empty
空slab,或者沒有對象被分配
注意 slabs_empty 列表中的 slab是進行回收(reaping)的主要備選對象。正是通過此過程,slab 所使用的內存被返回給操作系統供其他用戶使用。

slab列表中的每個slab都是一個連續的內存塊(一個或多個連續頁),它們被劃分成一個個對象。這些對象是從特定緩存中進行分配和釋放的基本元素。注意 slab 是 slab分配器進行操作的最小分配單位,因此如果需要對slab進行擴展,這也就是所擴展的最小值。通常來說,每個slab被分配為多個對象。

由于對象是從slab中進行分配和釋放的,因此單個slab可以在 slab 列表之間進行移動。例如,當一個slab中的所有對象都被使用完時,就從slabs_partial 列表中移動到 slabs_full 列表中。當一個 slab 完全被分配并且有對象被釋放后,就從 slabs_full 列表中移動到 slabs_partial 列表中。當所有對象都被釋放之后,就從 slabs_partial 列表移動到 slabs_empty 列表中。

slab背后的動機

與傳統的內存管理模式相比, slab緩存分配器提供了很多優點。首先,內核通常依賴于對小對象的分配,它們會在系統生命周期內進行無數次分配。slab 緩存分配器通過對類似大小的對象進行緩存而提供這種功能,從而避免了常見的碎片問題。slab分配器還支持通用對象的初始化,從而避免了為同一目而對一個對象重復進行初始化。最后,slab分配器還可以支持硬件緩存對齊和著色,這允許不同緩存中的對象占用相同的緩存行,從而提高緩存的利用率并獲得更好的性能。

【編輯推薦】

  1. 輕松應用Linux連接校園網
  2. 全面了解Linux進程技術
  3. Linux中的password命令介紹
  4. 學好Linux 了解Linux監管命令
  5. Linux查看所有進程ps -aux命令介紹
責任編輯:小霞 來源: 百度
相關推薦

2021-08-03 09:02:58

LinuxSlab算法

2024-12-11 08:18:11

2023-04-03 08:25:02

Linux內存slub

2013-10-12 11:15:09

Linux運維內存管理

2024-10-11 10:00:20

2020-12-15 08:54:06

Linux內存碎片化

2025-05-27 02:45:45

2025-04-11 00:44:00

2013-10-14 10:41:41

分配器buddy syste

2017-02-08 08:40:21

C++固定內存塊

2017-01-17 16:17:48

C++固定分配器

2017-01-20 14:21:35

內存分配器存儲

2020-03-11 13:44:20

編程語言PythonJava

2014-09-01 10:09:44

Linux

2023-04-13 14:42:26

PoE供電器PoE交換機

2025-02-10 07:30:00

malloc內存分配器內存

2024-10-28 11:25:21

豐巢快遞jemalloc

2023-12-22 07:55:38

Go語言分配策略

2022-02-23 16:49:19

Linux內存數據結構

2020-07-07 07:57:39

Linux內存碎片化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 激情婷婷| 欧美日韩视频 | 国产在线二区 | 欧美成人一区二区三区 | 久久中文字幕视频 | 久久婷婷av | 国产日韩一区二区三区 | 午夜伊人| 密色视频 | 日韩一区中文字幕 | 国产成人综合网 | 91精品国产综合久久国产大片 | 欧美日韩成人网 | 精品视频一区二区三区四区 | 国产在线精品一区二区三区 | 一区二区中文字幕 | 二区中文字幕 | 成人片在线看 | 国产精品jizz在线观看老狼 | 97人人超碰| 日韩在线大片 | 国产不卡在线观看 | 午夜小视频在线播放 | 午夜免费电影 | 色眯眯视频在线观看 | 国产中文字幕网 | 超碰97干| 国产乱精品一区二区三区 | 免费播放一级片 | 亚洲欧美一区二区三区视频 | 免费看啪啪网站 | 欧美日韩三级在线观看 | 国产精品精品视频一区二区三区 | 久久精品小视频 | 欧美日韩国产一区二区三区 | 亚洲成年影院 | 狠狠操网站 | 久久久久精 | 日韩视频在线免费观看 | 日韩中出 | 午夜影院视频 |