精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

操作系統就用一張大表管理內存?

系統 存儲軟件
今天我們不聊具體內存管理的算法,我們就來看看,操作系統用什么樣的一張表,達到了管理內存的效果。

今天我們不聊具體內存管理的算法,我們就來看看,操作系統用什么樣的一張表,達到了管理內存的效果。

我們以 Linux 0.11 源碼為例,發現進入內核的 main 函數后不久,有這樣一坨代碼。

  1. void main(void) { 
  2.     ... 
  3.     memory_end = (1<<20) + (EXT_MEM_K<<10); 
  4.     memory_end &= 0xfffff000; 
  5.     if (memory_end > 16*1024*1024) 
  6.         memory_end = 16*1024*1024; 
  7.     if (memory_end > 12*1024*1024)  
  8.         buffer_memory_end = 4*1024*1024; 
  9.     else if (memory_end > 6*1024*1024) 
  10.         buffer_memory_end = 2*1024*1024; 
  11.     else 
  12.         buffer_memory_end = 1*1024*1024; 
  13.     main_memory_start = buffer_memory_end; 
  14.  
  15.     mem_init(main_memory_start,memory_end); 
  16.     ... 

除了最后一行外,前面的那一大坨的作用很簡單。

其實就只是針對不同的內存大小,設置不同的邊界值罷了,為了理解它,我們完全沒必要考慮這么周全,就假設總內存一共就 8M 大小吧。

那么如果內存為 8M 大小,memory_end 就是

8 * 1024 * 1024

也就只會走倒數第二個分支,那么 buffer_memory_end 就為

2 * 1024 * 1024

那么 main_memory_start 也為

2 * 1024 * 1024

你仔細看看代碼邏輯,看是不是這樣?

當然,你不愿意細想也沒關系,上述代碼執行后,就是如下效果而已。

你看,其實就是定了三個箭頭所指向的地址的三個邊界變量。具體主內存區是如何管理和分配的,要看 mem_init 里做了什么。

  1. void main(void) { 
  2.     ... 
  3.     mem_init(main_memory_start, memory_end); 
  4.     ... 

而緩沖區是如何管理和分配的,就要看再后面的 buffer_init 里干了什么。

  1. void main(void) { 
  2.     ... 
  3.     buffer_init(buffer_memory_end); 
  4.     ... 

不過我們今天只看,主內存是如何管理的,很簡單,放輕松。

進入 mem_init 函數。

  1. #define LOW_MEM 0x100000 
  2. #define PAGING_MEMORY (15*1024*1024) 
  3. #define PAGING_PAGES (PAGING_MEMORY>>12) 
  4. #define MAP_NR(addr) (((addr)-LOW_MEM)>>12) 
  5. #define USED 100 
  6.  
  7. static long HIGH_MEMORY = 0; 
  8. static unsigned char mem_map[PAGING_PAGES] = { 0, }; 
  9.  
  10. // start_mem = 2 * 1024 * 1024 
  11. // end_mem = 8 * 1024 * 1024 
  12. void mem_init(long start_mem, long end_mem) 
  13.     int i; 
  14.     HIGH_MEMORY = end_mem; 
  15.     for (i=0 ; i<PAGING_PAGES ; i++) 
  16.         mem_map[i] = USED; 
  17.     i = MAP_NR(start_mem); 
  18.     end_mem -= start_mem; 
  19.     end_mem >>= 12; 
  20.     while (end_mem-->0) 
  21.         mem_map[i++]=0; 

發現也沒幾行,而且并沒有更深的方法調用,看來是個好欺負的方法。

仔細一看這個方法,其實折騰來折騰去,就是給一個 mem_map 數組的各個位置上賦了值,而且顯示全部賦值為 USED 也就是 100,然后對其中一部分又賦值為了 0。

賦值為 100 的部分就是 USED,也就表示內存被占用,如果再具體說是占用了 100 次,這個之后再說。剩下賦值為 0 的部分就表示未被使用,也即使用次數為零。

是不是很簡單?就是準備了一個表,記錄了哪些內存被占用了,哪些內存沒被占用。這就是所謂的“管理”,并沒有那么神乎其神。

那接下來自然有兩個問題,每個元素表示占用和未占用,這個表示的范圍是多大?初始化時哪些地方是占用的,哪些地方又是未占用的?

還是一張圖就看明白了,我們仍然假設內存總共只有 8M。

可以看出,初始化完成后,其實就是 mem_map 這個數組的每個元素都代表一個 4K 內存是否空閑(準確說是使用次數)。

4K 內存通常叫做 1 頁內存,而這種管理方式叫分頁管理,就是把內存分成一頁一頁(4K)的單位去管理。

1M 以下的內存這個數組干脆沒有記錄,這里的內存是無需管理的,或者換個說法是無權管理的,也就是沒有權利申請和釋放,因為這個區域是內核代碼所在的地方,不能被“污染”。

1M 到 2M 這個區間是緩沖區,2M 是緩沖區的末端,緩沖區的開始在哪里之后再說,這些地方不是主內存區域,因此直接標記為 USED,產生的效果就是無法再被分配了。

2M 以上的空間是主內存區域,而主內存目前沒有任何程序申請,所以初始化時統統都是零,未來等著應用程序去申請和釋放這里的內存資源。

那應用程序如何申請內存呢?我們本講不展開,不過我們簡單展望一下,看看申請內存的過程中,是如何使用 mem_map 這個結構的。

在 memory.c 文件中有個函數 get_free_page(),用于在主內存區中申請一頁空閑內存頁,并返回物理內存頁的起始地址。

比如我們在 fork 子進程的時候,會調用 copy_process 函數來復制進程的結構信息,其中有一個步驟就是要申請一頁內存,用于存放進程結構信息 task_struct。

  1. int copy_process(...) { 
  2.     struct task_struct *p; 
  3.     ... 
  4.     p = (struct task_struct *) get_free_page(); 
  5.     ... 

我們看 get_free_page 的具體實現,是內聯匯編代碼,看不懂不要緊,注意它里面就有 mem_map 結構的使用。

  1. unsigned long get_free_page(void) { 
  2.     register unsigned long __res asm("ax"); 
  3.     __asm__( 
  4.         "std ; repne ; scasb\n\t" 
  5.         "jne 1f\n\t" 
  6.         "movb $1,1(%%edi)\n\t" 
  7.         "sall $12,%%ecx\n\t" 
  8.         "addl %2,%%ecx\n\t" 
  9.         "movl %%ecx,%%edx\n\t" 
  10.         "movl $1024,%%ecx\n\t" 
  11.         "leal 4092(%%edx),%%edi\n\t" 
  12.         "rep ; stosl\n\t" 
  13.         "movl %%edx,%%eax\n" 
  14.         "1:" 
  15.         :"=a" (__res) 
  16.         :"0" (0),"i" (LOW_MEM),"c" (PAGING_PAGES), 
  17.         "D" (mem_map + PAGING_PAGES-1) 
  18.         :"di","cx","dx"); 
  19.     return __res; 

就是選擇 mem_map 中首個空閑頁面,并標記為已使用。

好了,本講就這么多,只是填寫了一張大表而已,簡單吧?之后的內存申請與釋放等騷操作,統統是跟著張大表 mem_map 打交道而已,你一定要記住它哦。

 

責任編輯:武曉燕 來源: 低并發編程
相關推薦

2013-08-14 09:21:16

Ubuntu

2019-09-22 18:31:46

Oracleundo空間

2022-11-28 07:21:53

操作系統內存管理

2009-08-17 08:32:56

Linux操作系統內存管理Linux

2021-03-28 13:54:31

操作系統內存管理

2010-02-04 17:16:30

2009-12-02 11:02:54

操作系統

2021-06-11 07:26:16

操作系統內存管理Cpu

2025-01-13 00:30:17

2010-04-20 14:17:21

Unix操作系統

2010-04-14 13:59:45

Unix操作系統

2010-04-13 16:11:15

Unix操作系統

2010-04-07 15:37:16

Unix操作系統

2010-04-08 17:05:21

Unix操作系統

2022-11-17 12:09:51

2024-08-05 00:05:00

操作系統內存管理

2021-02-07 09:01:10

Java并發編程

2019-09-11 10:12:12

華為

2024-08-28 17:45:00

內存Linux

2024-08-05 11:20:41

點贊
收藏

51CTO技術棧公眾號

幼a在线观看| 日本免费观看视| 四虎视频在线精品免费网址| 亚洲欧洲国产日韩| 97超碰人人看人人 | 日韩久久午夜影院| 亚洲精品怡红院| 久草免费在线观看| 成人精品鲁一区一区二区| 欧亚精品中文字幕| 永久免费看片直接| 精品无人区一区二区| 色综合久久精品| 久久免费视频2| 少妇高潮一区二区三区99小说| 日韩国产欧美三级| 欧美国产亚洲精品久久久8v| 欧美日韩高清丝袜| 伊人精品综合| 欧美性色黄大片| 亚洲精品蜜桃久久久久久| 触手亚洲一区二区三区| 高清在线不卡av| 国产高清在线不卡| 国产精品变态另类虐交| 久久国产精品亚洲人一区二区三区 | 久久aimee| 欧美日韩在线综合| 国产极品尤物在线| 黄色片免费在线观看| 久久婷婷成人综合色| 91亚色免费| 涩涩视频在线观看| 亚洲欧美bt| 久久久久久久久久国产| 91香蕉视频网| 国产欧美一区二区精品久久久| 日韩精品中文字幕一区二区三区| 成人性做爰aaa片免费看不忠| www.色在线| 一区二区三区自拍| 中文字幕一区二区三区四区五区人 | 99热免费精品在线观看| 欧美成人精品一区| www深夜成人a√在线| 欧美一区三区| 亚洲色图日韩av| 亚洲成人日韩在线| 红杏成人性视频免费看| 亚洲精品一区二区三区影院 | 国产成人在线色| 国产日韩在线播放| 国产在线一级片| 天堂av在线一区| 国产97人人超碰caoprom| 亚洲精品77777| 亚洲国产99| 国语自产精品视频在线看抢先版图片| 欧美成人一区二区三区高清| 91一区在线| www.xxxx欧美| 久久国产波多野结衣| 99久久www免费| 久久夜色精品国产亚洲aⅴ| 欧美福利在线视频| 欧美激情另类| 插插插亚洲综合网| 久久久精品99| 在线欧美亚洲| 欧美在线xxx| www.久久久久久久| 免费av网站大全久久| 国产欧美精品xxxx另类| 国产精品乱码久久久| 国产精品一区免费视频| 97se亚洲综合在线| 亚洲人妻一区二区| 国产亚洲人成网站| 在线播放 亚洲| 日本高清在线观看| 精品成人av一区| 99视频精品免费| 91麻豆精品一二三区在线| 日韩免费电影一区| 天堂久久久久久| 欧美精品一区二区三区中文字幕| 日韩在线视频一区| 青草草在线视频| 国产精品一区亚洲| 国产精品欧美一区二区| h片在线免费看| 国产成人99久久亚洲综合精品| 狠狠色狠狠色综合人人| 国产永久av在线| 亚洲少妇最新在线视频| 九色自拍视频在线观看| 成人免费一区| 精品国产制服丝袜高跟| 国产精品高清无码在线观看| 小说区亚洲自拍另类图片专区| 欧美激情欧美激情在线五月| 一区二区三区在线观看av| 精品一区二区三区视频在线观看 | 日本精品免费在线观看| 欧美videos粗暴| 亚洲国产精品久久91精品| 日韩黄色中文字幕| 一区在线视频| 国产日韩欧美在线看| 手机福利在线| 亚洲男人都懂的| 免费观看成人网| 亚洲成av人片在线观看www| 日韩精品在线观看视频| 欧美做爰爽爽爽爽爽爽| 老司机午夜精品视频| 成人在线视频网| 免费黄色在线视频网站| 亚洲主播在线观看| wwwwwxxxx日本| 亚洲第一福利专区| 欧美精品aaa| 一级做a爱片久久毛片| 久久久久久久久久看片| 欧美国产视频一区| 少妇精品视频在线观看| 亚洲人成电影网站色| www.av视频在线观看| 黄页视频在线91| 日韩欧美亚洲日产国| www成人免费观看| 日韩美女主播在线视频一区二区三区 | 亚洲色图日韩精品| 国产欧美日韩亚洲一区二区三区| 91嫩草在线视频| 成在在线免费视频| 色老汉av一区二区三区| 亚洲欧美视频在线播放| 好吊日精品视频| 亚洲尤物视频网| 日本高清视频在线观看| 欧洲一区在线电影| 国产美女精品久久| 国产精品久久国产愉拍| 国产精品区二区三区日本| 欧洲在线视频| 精品少妇一区二区三区日产乱码 | 九九精品视频在线| 国产绿帽刺激高潮对白| 国产精品国产自产拍高清av王其| 黄色片在线免费| 国产中文精品久高清在线不| 日韩美女视频免费看| 性猛交xxxx| 岛国av一区二区在线在线观看| 成人做爰www看视频软件| 欧美日韩1区2区3区| 高清不卡一区二区三区| a级片在线免费| 精品99999| 国产午夜性春猛交ⅹxxx| 91麻豆swag| 99热成人精品热久久66| 国产精品午夜一区二区三区| 欧美中在线观看| 韩国三级在线观看久| 欧美伊人久久久久久久久影院| 日本人亚洲人jjzzjjz| 免费人成网站在线观看欧美高清| 日本欧洲国产一区二区| 成人精品一区二区三区电影| 久久精品国亚洲| 国产夫绿帽单男3p精品视频| 午夜欧美在线一二页| 久久无码人妻精品一区二区三区| 久久久噜噜噜| 一本久久a久久精品vr综合| 国产亚洲久久| 97视频国产在线| 国产视频第一区| 欧美日韩久久一区二区| 欧美三级日本三级| 91免费观看国产| 在线观看国产一级片| 午夜国产精品视频| 久久综合狠狠综合久久综青草| 日韩不卡视频在线观看| 欧美成aaa人片在线观看蜜臀| 狠狠人妻久久久久久综合麻豆| 日韩欧美国产激情| 992在线观看| 福利电影一区二区| 北条麻妃av高潮尖叫在线观看| 91精品啪在线观看国产81旧版| 国产经品一区二区| 日韩网站中文字幕| 久久久久久久网站| av在线之家电影网站| 欧美va亚洲va国产综合| 欧美视频xxxx| 亚洲国产精品天堂| 蜜桃av免费观看| 成人激情小说乱人伦| 我要看一级黄色大片| 韩国欧美一区| 亚洲电影一二三区| 欧美综合自拍| 亚洲xxxxx| 澳门av一区二区三区| 久久久久女教师免费一区| 成人免费在线视频网| 精品久久久久99| 国产又粗又猛又黄又爽无遮挡| 精品欧美国产一区二区三区| 国产性生活大片| 久久精品夜夜夜夜久久| 野战少妇38p| 精品亚洲成av人在线观看| av网站在线观看不卡| 欧美精品18| 亚洲午夜在线观看| 久久91麻豆精品一区| 国产免费一区二区三区| 国产一区二区三区黄网站| 国产精品电影观看| 狠狠操一区二区三区| 欧美片一区二区三区| 麻豆传媒在线免费| 在线播放日韩av| 九一在线视频| 日韩精品极品视频| 黄色aaa大片| 日韩欧美中文字幕制服| 一级黄色免费片| 欧美一a一片一级一片| 久久精品国产成人av| 亚洲国产精品久久久久婷婷884| 蜜臀av午夜精品久久| 欧美国产97人人爽人人喊| 免费在线观看你懂的| jiyouzz国产精品久久| 师生出轨h灌满了1v1| 国产成人丝袜美腿| 中文字幕人妻无码系列第三区| 久久国产视频网| gai在线观看免费高清| 另类的小说在线视频另类成人小视频在线| 日本熟妇人妻xxxxx| 亚洲欧美久久久| 北条麻妃在线观看| 久久精品女人| 免费一级特黄录像| 男女男精品网站| 57pao国产成永久免费视频| 久久99精品久久久久久国产越南 | 性欧美1819sex性高清| 情事1991在线| 澳门av一区二区三区| 国产精品人成电影| 激情久久一区二区| 国产色视频一区| 国产精品久一| 97夜夜澡人人双人人人喊| 亚洲国产中文在线| 国产成人女人毛片视频在线| 成人看片爽爽爽| 国产手机精品在线| 牛牛精品成人免费视频| 欧美午夜精品久久久久免费视| 蜜臀91精品国产高清在线观看| 欧美韩国日本精品一区二区三区| 九九热线有精品视频99| 亚洲一区二区在线免费观看| 久久精品亚洲人成影院 | 91免费版黄色| 精品av导航| 日产精品久久久一区二区| 色喇叭免费久久综合| 日韩视频一二三| 一区二区三区国产在线| 久久久国产欧美| 国产高清不卡二三区| 日本xxxx裸体xxxx| 中文字幕成人在线观看| 欧美精品成人久久| 欧美视频中文字幕在线| 亚洲综合五月天婷婷丁香| 日韩精品一区国产麻豆| 免费在线观看一级毛片| 日韩在线资源网| 国产精品69xx| 国产精品久久久久久婷婷天堂| 日本在线视频一区二区三区| 蜜桃传媒视频麻豆第一区免费观看 | 色婷婷av一区二区三| 亚洲精选中文字幕| 成人免费一区二区三区视频网站| 美女久久久久久久久久久| 中文字幕人成乱码在线观看| 成人性生交大片免费看小说| 日本国产精品| 亚洲欧洲日本国产| 亚洲视频综合| 激情综合网俺也去| 成人夜色视频网站在线观看| 69xxx免费| 精品高清一区二区三区| 国产精品欧美久久久久天天影视| 日韩电影大全免费观看2023年上| 免费a在线看| 日本精品性网站在线观看| 日韩免费高清视频网站| 四虎永久国产精品| 国产欧美69| 超级砰砰砰97免费观看最新一期| 国产日韩欧美精品在线| 日韩成人免费在线观看| 91精品综合久久久久久| 黄色毛片在线看| 韩国日本不卡在线| 狂野欧美xxxx韩国少妇| 亚欧精品在线| 久久xxxx| 白嫩情侣偷拍呻吟刺激| 一区二区在线免费| 亚洲一级黄色大片| 国产亚洲精品一区二555| 美女在线视频免费| 成人在线免费观看一区| 91精品秘密在线观看| 嫩草影院国产精品| 久久久精品日韩欧美| 久久久久久久黄色片| 亚洲成人av片在线观看| 亚洲91av| 91综合免费在线| 天天射天天综合网| av中文字幕网址| 国产精品五月天| 中文字幕久久网| 亚洲一级黄色片| 东京一区二区| 蜜桃视频在线观看成人| 国产精品日韩| 99久久人妻精品免费二区| 亚洲国产日韩在线一区模特| 亚洲AV无码成人片在线观看| 美女精品久久久| 日韩成人在线看| 91免费国产精品| 高清在线观看日韩| 日韩成年人视频| 日韩电影免费观看中文字幕 | 国产日韩欧美一区二区三区| 成年人视频观看| 久久九九影视网| 黄色污污网站在线观看| 亚洲香蕉成人av网站在线观看| 欧美特大特白屁股xxxx| 日韩av不卡播放| 免费av网站大全久久| 国产探花在线视频| 欧美一区三区四区| 毛片大全在线观看| 久久爱av电影| 日韩国产精品久久| 99成人在线观看| 日韩一卡二卡三卡国产欧美| 男人天堂亚洲天堂| 精品一区二区国产| 日韩精品乱码免费| 久草福利资源在线| 精品日韩99亚洲| 97se综合| 亚洲国产综合自拍| 国产精品99久久不卡二区| 国产第一页在线播放| 亚洲美女视频网| 婷婷成人av| 欧美午夜性视频| 国产亚洲欧洲997久久综合 | 69堂精品视频| 欧美人与性动交α欧美精品图片| 精品一区二区日本| 美女精品自拍一二三四| 免费一级肉体全黄毛片| 精品小视频在线| 四虎国产精品免费久久5151| 婷婷无套内射影院| 国产精品欧美久久久久无广告| 精品毛片一区二区三区| 热久久视久久精品18亚洲精品| 国产精品99一区二区三| 天天躁日日躁狠狠躁av麻豆男男| 91福利视频久久久久| www免费在线观看| 欧美高清性xxxxhd| 国产一区二区不卡| 黄色在线免费观看| 欧美老女人性视频|