Linux 2 6 記憶體管理原始碼分析 1

2021-05-24 09:34:43 字數 824 閱讀 1634

0. **路徑

0.1 arch/x86/boot/header.s

|-->calll main

0.2 arch/x86/boot/main.c中void main()

|-->detect_memory().

0.3 arch/x86/boot/memory.c中int detect_memory()

|-->detect_memory_e820()

|-->detect_memory_e801()

|-->detect_memory_88()

1. 記憶體探測

1.1 e820探測

方法得名於其使用的功能號即ax的值是0xe820h.

ax=0x820h

int 0x15.

通過設定ebx進行迭代獲取所有的e820entry。

struct e820entry __attribute__((packed));

其中type的取值如下

#define e820_ram 1

#define e820_reserved 2

#define e820_acpi 3

#define e820_nvs 4

#define e820_unusable 5

1.2 e801探測

ax=0xe801h

int 0x15

方法將返回1k塊的方式返回1m到16m之間的記憶體,以64k塊的方式返回16m之上的記憶體大小。

1.3 88探測

ax=0x88h

int 0x15

方法返回起始於絕對位址0x100000h的記憶體大小。

Linux 2 6核心筆記 記憶體管理

4月14日 很多硬體的功能,物盡其用卻未必好過軟實現,linux出於可移植性及其它原因,常常選擇不去過分使用硬體特性。比如 linux只使用四個segment,分別是 user cs user ds kernel cs kernel ds,因為paging可以完成segmentation的工作,而且...

linux 2 6 互斥鎖的實現 原始碼分析

看了看linux 2.6 kernel的原始碼,下面結合 來分析一下在x86體系結構下,互斥鎖的實現原理。分析 1.首先介紹一下互斥鎖所使用的資料結構 struct mutex 2.互斥鎖加鎖函式 void inline sched mutex lock struct mutex lock 呼叫了巨...

Linux2 6為資料結構分配記憶體 slab

1.快取記憶體描述符 slab描述符 資料結構物件之間的關係 slab描述符也可以在外面 不管slab描述符在 空閒鏈結陣列緊跟在slab描述符後面 第一張圖跟2.6的不太一樣,2.6中,所有箭頭都是雙向的,且沒有不同各種類slab描述符的鏈結 建立乙個緩衝的專用佇列 1.從cache cache中...