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

操作系統物理內存的組織形式

系統 其他OS
為了提高性能和可擴展性,后來有了一種更高級的模式,NUMA(Non-uniform memory access),非一致內存訪問。在這種模式下,內存不是一整塊。每個 CPU 都有自己的本地內存,CPU 訪問本地內存不用過總線,因而速度要快很多,每個 CPU 和內存在一起,稱為一個 NUMA 節點。但是,在本地內存不足的情況下,每個 CPU 都可以去另外的 NUMA 節點申請內存,這個時候訪問延時就

由于物理地址是連續的,頁也是連續的,每個頁大小也是一樣的。因而對于任何一個地址,只要直接除一下每頁的大小,很容易直接算出在哪一頁。每個頁有一個結構 struct page 表示,這個結構也是放在一個數組里面,這樣根據頁號,很容易通過下標找到相應的 struct page 結構。

如果是這樣,整個物理內存的布局就非常簡單、易管理,這就是最經典的平坦內存模型(Flat Memory Model)。

在這種模式下,CPU 也會有多個,在總線的一側。所有的內存條組成一大片內存,在總線的另一側,所有的 CPU 訪問內存都要過總線,而且距離都是一樣的,這種模式稱為 SMP(Symmetric multiprocessing),即對稱多處理器。當然,它也有一個顯著的缺點,就是總線會成為瓶頸,因為數據都要走它。


為了提高性能和可擴展性,后來有了一種更高級的模式,NUMA(Non-uniform memory access),非一致內存訪問。在這種模式下,內存不是一整塊。每個 CPU 都有自己的本地內存,CPU 訪問本地內存不用過總線,因而速度要快很多,每個 CPU 和內存在一起,稱為一個 NUMA 節點。但是,在本地內存不足的情況下,每個 CPU 都可以去另外的 NUMA 節點申請內存,這個時候訪問延時就會比較長。

這樣,內存被分成了多個節點,每個節點再被分成一個一個的頁面。由于頁需要全局唯一定位,頁還是需要有全局唯一的頁號的。但是由于物理內存不是連起來的了,頁號也就不再連續了。于是內存模型就變成了非連續內存模型,管理起來就復雜一些。

這里需要指出的是,NUMA 往往是非連續內存模型。而非連續內存模型不一定就是 NUMA,有時候一大片內存的情況下,也會有物理內存地址不連續的情況。

當前的主流場景,NUMA 方式。我們首先要能夠表示 NUMA 節點的概念,于是有了下面這個結構 typedef struct pglist_data pg_data_t,它里面有以下的成員變量:

每一個節點都有自己的 ID:node_id;

node_mem_map 就是這個節點的 struct page 數組,用于描述這個節點里面的所有的頁;

node_start_pfn 是這個節點的起始頁號;

node_spanned_pages 是這個節點中包含不連續的物理內存地址的頁面數;

node_present_pages 是真正可用的物理頁面的數目。

ZONE_DMA 是指可用于作 DMA(Direct Memory Access,直接內存存取)的內存。DMA 是這樣一種機制:要把外設的數據讀入內存或把內存的數據傳送到外設,原來都要通過 CPU 控制完成,但是這會占用 CPU,影響 CPU 處理其他事情,所以有了 DMA 模式。CPU 只需向 DMA 控制器下達指令,讓 DMA 控制器來處理數據的傳送,數據傳送完畢再把信息反饋給 CPU,這樣就可以解放 CPU。

對于 64 位系統,有兩個 DMA 區域。除了上面說的 ZONE_DMA,還有 ZONE_DMA32。在這里你大概理解 DMA 的原理就可以,不必糾結,我們后面會講 DMA 的機制。

ZONE_NORMAL 是直接映射區,就是上一節講的,從物理內存到虛擬內存的內核區域,通過加上一個常量直接映射。

ZONE_HIGHMEM 是高端內存區,就是上一節講的,對于 32 位系統來說超過 896M 的地方,對于 64 位沒必要有的一段區域。

ZONE_MOVABLE 是可移動區域,通過將物理內存劃分為可移動分配區域和不可移動分配區域來避免內存碎片。

為了讓 CPU 快速訪問段描述符,在 CPU 里面有段描述符緩存。CPU 訪問這個緩存的速度比內存快得多。同樣對于頁面來講,也是這樣的。如果一個頁被加載到 CPU 高速緩存里面,這就是一個熱頁(Hot Page),CPU 讀起來速度會快很多,如果沒有就是冷頁(Cold Page)。由于每個 CPU 都有自己的高速緩存,因而 per_cpu_pageset 也是每個 CPU 一個。

物理內存的基本單位,頁的數據結構 struct page。這是一個特別復雜的結構,里面有很多的 union,union 結構是在 C 語言中被用于同一塊內存根據情況保存不同類型數據的一種方式。這里之所以用了 union,是因為一個物理頁面使用模式有多種。

第一種模式,要用就用一整頁。這一整頁的內存,或者直接和虛擬地址空間建立映射關系,我們把這種稱為匿名頁(Anonymous Page)。或者用于關聯一個文件,然后再和虛擬地址空間建立映射關系,這樣的文件,我們稱為內存映射文件(Memory-mapped File)。

如果某一頁是這種使用模式,則會使用 union 中的以下變量:

struct address_space *mapping 就是用于內存映射,如果是匿名頁,最低位為 1;如果是映射文件,最低位為 0;

pgoff_t index 是在映射區的偏移量;

atomic_t _mapcount,每個進程都有自己的頁表,這里指有多少個頁表項指向了這個頁;

struct list_head lru 表示這一頁應該在一個鏈表上,例如這個頁面被換出,就在換出頁的鏈表中;

compound 相關的變量用于復合頁(Compound Page),就是將物理上連續的兩個或多個頁看成一個獨立的大頁。

第二種模式,僅需分配小塊內存。有時候,我們不需要一下子分配這么多的內存,例如分配一個 task_struct 結構,只需要分配小塊的內存,去存儲這個進程描述結構的對象。為了滿足對這種小內存塊的需要,Linux 系統采用了一種被稱為 slab allocator 的技術,用于分配稱為 slab 的一小塊內存。它的基本原理是從內存管理模塊申請一整塊頁,然后劃分成多個小塊的存儲池,用復雜的隊列來維護這些小塊的狀態(狀態包括:被分配了 / 被放回池子 / 應該被回收)。

對于要分配比較大的內存,例如到分配頁級別的,可以使用伙伴系統(Buddy System)。

Linux 中的內存管理的“頁”大小為 4KB。把所有的空閑頁分組為 11 個頁塊鏈表,每個塊鏈表分別包含很多個大小的頁塊,有 1、2、4、8、16、32、64、128、256、512 和 1024 個連續頁的頁塊。最大可以申請 1024 個連續頁,對應 4MB 大小的連續內存。每個頁塊的第一個頁的物理地址是該頁塊大小的整數倍。


如果有多個 CPU,那就有多個節點。每個節點用 struct pglist_data 表示,放在一個數組里面。

每個節點分為多個區域,每個區域用 struct zone 表示,也放在一個數組里面。每個區域分為多個頁。

為了方便分配,空閑頁放在 struct free_area 里面,使用伙伴系統進行管理和分配,每一頁用 struct page 表示。

責任編輯:武曉燕 來源: 51CTO博客
相關推薦

2022-08-03 14:21:00

Maven項目代碼

2021-10-11 08:59:35

項目代碼組織

2009-03-02 10:50:19

虛擬 項目 管理

2009-03-02 18:13:33

虛擬化虛擬管理計算機

2017-03-02 14:38:35

2022-11-28 07:21:53

操作系統內存管理

2009-08-17 08:32:56

Linux操作系統內存管理Linux

2010-04-20 14:17:21

Unix操作系統

2012-08-13 10:19:03

IBMdW

2022-11-02 07:23:06

2018-08-09 16:12:59

操作系統內存分配

2021-03-28 13:54:31

操作系統內存管理

2010-04-15 14:40:26

Unix操作系統

2009-12-09 17:25:19

Linux操作系統

2010-04-20 17:34:25

Unix操作系統

2009-07-23 18:43:25

操作系統LinuxWindows

2013-03-27 10:52:34

微軟操作系統西班牙開源軟件組織

2021-04-19 11:23:29

操作系統計算機DOS

2021-11-15 06:56:46

操作系統U盤

2012-03-30 14:43:23

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲综合成人网 | 久久国产电影 | 激情欧美一区二区三区中文字幕 | 99自拍视频 | 国产精品久久亚洲 | 国产精品jizz在线观看老狼 | 中文字幕免费视频 | 999国产视频 | 亚洲国产一区二区三区四区 | 国产一区不卡在线观看 | 欧美精品一区三区 | 亚洲 欧美 另类 综合 偷拍 | 久久久久久久久中文字幕 | 亚洲欧美视频 | 亚洲国产精久久久久久久 | 精品中文在线 | 亚洲综合天堂 | 人人草天天草 | 美女在线视频一区二区三区 | 精品久久中文 | 视频一区中文字幕 | 日韩欧美成人精品 | 午夜欧美| 久久久久久国产精品免费 | 中文字幕高清av | 久久精品久久久久久 | 日韩欧美网| 美女视频黄色片 | 欧美九九九| 亚洲伊人a | 电影在线 | 国产精品精品久久久久久 | 久久午夜精品 | 久久精品国产99国产精品 | 国产精品久久久久久238 | 视频一区二区在线观看 | 精品动漫一区 | 亚洲欧美一区二区三区国产精品 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 欧美亚洲国产精品 | a级毛片免费高清视频 |