精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品一区二区三区在线视频| 久久99国产精品视频| 亚洲人亚洲人成电影网站色| yy111111少妇影院日韩夜片| 国产69精品久久久久久久久久| 国产精品欧美在线观看| 91精品福利在线一区二区三区| 一卡二卡三卡视频| 国产精品免费播放| 国产一区二区三区高清播放| 国产91ⅴ在线精品免费观看| 男人晚上看的视频| 久久99精品久久久久久园产越南| 91精品久久久久久久91蜜桃| 1024av视频| 黄色小网站在线观看| 97se亚洲国产综合自在线不卡 | 高清电影在线免费观看| 久久精品综合网| 成人免费看片网址| 91成人国产综合久久精品| 亚洲欧美视频一区二区三区| 欧美日韩电影在线观看| 91社区视频在线观看| 日本在线中文字幕一区| 91精品国产色综合久久不卡电影| 十八禁视频网站在线观看| 成人超碰在线| 亚洲男同1069视频| 一区二区三区四区五区精品| 蜜桃视频在线免费| 99在线热播精品免费| 99九九视频| 99精品久久久久久中文字幕| 老鸭窝一区二区久久精品| 日韩av片免费在线观看| 日韩久久久久久久久| 欧美日韩专区| 欧美高清视频一区二区| 久久国产美女视频| 99精品网站| 中文字幕亚洲综合久久| 波多野结衣一二三四区| 国产尤物久久久| 亚洲欧美制服另类日韩| 精品无码在线视频| 精品欠久久久中文字幕加勒比| 日韩免费视频一区二区| 成人三级做爰av| 日韩区一区二| 欧美成人性福生活免费看| 欧美性受xxxx黒人xyx性爽| 九九热这里有精品| 欧美日韩高清不卡| 不卡的在线视频| 国产美女亚洲精品7777| 91精品国产综合久久精品| 欧美日韩久久婷婷| 视频一区视频二区欧美| 欧美精品一区二区三区在线播放| 欧美图片自拍偷拍| 少妇高潮一区二区三区| 亚洲九九九在线观看| 性高潮久久久久久久| 精品国产精品久久一区免费式| 一区二区欧美久久| 欧美日韩国产黄色| 中文字幕午夜精品一区二区三区| 久久不射热爱视频精品| 欧美成人精品欧美一级| 亚洲黄页一区| 日韩av黄色在线观看| 欧美国产一级片| 久久99精品一区二区三区三区| 成人黄色av网站| 国产综合无码一区二区色蜜蜜| a级精品国产片在线观看| 免费h精品视频在线播放| 国产黄色在线| 亚洲精品免费在线| 久久久999视频| 国产亚洲精彩久久| 日韩午夜小视频| 青青草成人免费视频| 不卡中文字幕| 欧美xxxx做受欧美| www.国产毛片| 国产一区二区不卡| 九色综合婷婷综合| 99亚洲国产精品| 国产精品福利一区二区三区| 国产免费一区二区三区四在线播放| 免费在线看污片| 欧美性色xo影院| 欧美一级小视频| 亚洲专区视频| 精品视频9999| 波多野结衣电车痴汉| 国产高清不卡二三区| 免费久久99精品国产自| 黄色网址在线免费观看| 日韩欧美在线中文字幕| 国产黑丝在线视频| 精品国产一区二区三区| 久久久久久久久网站| 夜夜躁日日躁狠狠久久av| 国产白丝网站精品污在线入口| 欧洲成人一区二区| 免费av不卡在线观看| 欧美日韩激情一区| 国产呦小j女精品视频| 自拍偷拍欧美专区| 国产欧美一区二区三区在线看| 全部免费毛片在线播放一个| 亚洲欧洲精品成人久久奇米网| 色综合久久久久无码专区| 久久三级中文| 中文精品99久久国产香蕉| 中文字字幕在线中文| 国产99久久久国产精品| 国产成年人在线观看| 欧美片第一页| 亚洲精品一区av在线播放| 久久免费精彩视频| 国产酒店精品激情| 亚洲视频电影| 日韩美女在线看免费观看| 亚洲加勒比久久88色综合| 久久高清无码视频| 国产一区二区三区在线看麻豆| 视频一区三区| 88xx成人免费观看视频库 | 亚洲视频在线不卡| 日韩精品欧美| 国产精品亚洲欧美导航| 国产毛片在线| 欧美色爱综合网| www.黄色在线| 日韩国产欧美在线播放| 久久大香伊蕉在人线观看热2| 日韩av官网| 日韩精品一区二区三区在线观看 | 欧美精品电影在线播放| 亚洲精品国产精品国自产网站| 久久婷婷麻豆| 日本一区二区三区视频在线观看| 欧美性xxx| 亚洲色图在线观看| 亚洲成人av网址| 日本一区二区视频在线| 乌克兰美女av| 天天射—综合中文网| 92国产精品久久久久首页 | 欧美日韩一区二区免费在线观看| 欧美双性人妖o0| 亚洲经典视频在线观看| 久久国产精品久久精品国产| 韩漫成人漫画| 中文字幕av一区二区三区谷原希美| 老熟妇一区二区三区啪啪| 国产精品久久久久7777按摩| 国产探花在线观看视频| 亚洲一级特黄| 欧美日韩亚洲一区二区三区在线观看| 丁香六月综合| 色综合伊人色综合网| 国产免费av电影| 亚洲国产aⅴ天堂久久| 国产亚洲无码精品| 麻豆精品一区二区三区| 免费日韩在线观看| 欧美日韩一本| 国产精品一区=区| 欧美韩日亚洲| 亚洲摸下面视频| 91av久久久| 亚洲一区在线看| 91久久免费视频| 国内久久精品视频| 内射国产内射夫妻免费频道| 精品国产乱码久久久| 97视频热人人精品| 成人香蕉视频| 欧美日韩高清区| 免费在线稳定资源站| 91精品国产综合久久精品| 免费在线观看黄网站| 亚洲国产高清在线观看视频| 中文字幕乱妇无码av在线| 久久不射网站| 国产a级黄色大片| 成人中文视频| 国产精品一区二区三区精品| 亚洲不卡系列| 97视频在线看| 久操视频在线播放| 亚洲精品丝袜日韩| 午夜精品久久久久久久99| 91福利在线播放| 日本学生初尝黑人巨免费视频| 国产精品欧美精品| 国产精品无码专区| 国产精品77777| 九九九在线观看视频| 亚洲黄色av| 欧美日韩dvd| 日韩中文在线电影| 欧美精品亚洲精品| 亚洲精品在线a| 国产日韩欧美在线看| gay欧美网站| 久久全国免费视频| 伊人免费在线| 亚洲日本中文字幕| 香蕉视频黄色片| 欧美成人精品1314www| 97精品久久人人爽人人爽| 一本色道**综合亚洲精品蜜桃冫| 久久综合久久鬼| 亚洲欧美另类图片小说| 男人天堂av电影| 91蜜桃在线免费视频| 漂亮人妻被黑人久久精品| 国产馆精品极品| 日韩高清在线一区二区| 久久99国内精品| 日韩一级免费片| 日本不卡免费在线视频| 少妇激情一区二区三区| 日日夜夜免费精品| 亚洲精品高清无码视频| 久久精品男女| 中文字幕无码不卡免费视频| 一本色道久久综合亚洲精品不卡| 美女扒开大腿让男人桶| 激情婷婷欧美| 秋霞无码一区二区| 极品中文字幕一区| 国产精品又粗又长| 亚洲少妇在线| 久久精品一区二| 丝袜亚洲另类欧美综合| 毛片av免费在线观看| 日韩综合在线视频| 网站一区二区三区| 九色综合狠狠综合久久| 手机av在线网站| 国产成人免费视频网站高清观看视频 | 日韩免费视频一区| 亚洲精品18在线观看| 精品少妇一区二区三区日产乱码| 亚洲精选一区二区三区| 精品国产不卡一区二区三区| 欧美熟妇交换久久久久久分类| 欧美精品一区二区三| 亚洲欧美综合一区二区| 亚洲欧美国产一区二区三区| 可以在线观看的黄色| 国产一区二区黑人欧美xxxx| 麻豆av在线导航| 欧美激情亚洲综合一区| 国产夫妻在线播放| 国产v综合ⅴ日韩v欧美大片| 国产精品亚洲成在人线| 91视频免费网站| 极品束缚调教一区二区网站 | 国产精品久久久久久| 久久久成人精品一区二区三区| 欧美日韩视频| 欧美 激情 在线| 久久成人综合网| 国产吃瓜黑料一区二区| 久久亚洲精品小早川怜子| 一级二级黄色片| 一区二区国产视频| 久久夜色精品国产噜噜亚洲av| 欧美午夜精品久久久久久孕妇| av男人天堂av| 亚洲欧美制服另类日韩| jizz性欧美10| 欧美在线一级视频| 在线免费成人| 老牛影视免费一区二区| 国产精品久久久久久久久久10秀 | 青青操视频在线播放| 激情av一区二区| 一二三四区在线| 亚洲激情在线视频| 免费的黄网站在线观看| 2019中文字幕全在线观看| 亚洲成人精品综合在线| 美女被啪啪一区二区| 欧美 日韩 国产 一区| 成人一级片网站| 国产一区三区三区| 美女被到爽高潮视频| 亚洲制服欧美中文字幕中文字幕| 成人免费一级片| 亚洲成人国产精品| 精精国产xxxx视频在线| 日韩免费观看高清| 国产精品99久久免费观看| 亚洲一区二区在线观| 久久人人97超碰国产公开结果| 能看毛片的网站| 国产精品美女久久久久久 | 在线电影欧美成精品| 亚洲av激情无码专区在线播放| 久久国产精品久久国产精品| 亚洲爱爱视频| 久久精品丝袜高跟鞋| 欧美在线影院| 久国产精品视频| 中文乱码免费一区二区 | 日韩一区二区在线观看| av大片在线观看| 91成人在线播放| 国产精品自在| 999久久欧美人妻一区二区| 久久99久国产精品黄毛片色诱| 欧美黄色一级生活片| 欧美日韩亚洲视频一区| 欧美一级特黄aaaaaa| 欧美xxxx做受欧美.88| 日本午夜免费一区二区| 日韩影院一区| 奇米影视一区二区三区小说| wwwwxxxx国产| 色综合天天综合| 青青草在线免费观看| 欧美在线视频网| 伊人久久大香线蕉综合网站| 精品人妻一区二区三区四区在线 | 国产精品影视在线观看| 中文字幕观看av| 欧美一区欧美二区| 影音先锋男人资源在线| 91在线|亚洲| 欧美激情性爽国产精品17p| 中文 日韩 欧美| 亚洲天天做日日做天天谢日日欢 | 国产精品自拍合集| 国产福利91精品| 国产一级二级三级| 亚洲国产97在线精品一区| 成人在线黄色电影| 欧美三级电影在线播放| 日韩成人精品视频| 羞羞在线观看视频| 欧美一区二区三区日韩视频| 深夜国产在线播放| 国产精品免费视频一区二区| 国产欧美高清| 精品人妻无码一区二区三区换脸| 欧美亚一区二区| 黄色在线免费| 国产亚洲二区| 狂野欧美一区| 自拍偷拍第9页| 日韩免费视频一区| 亚洲精品国产精品国产| 亚洲高清资源综合久久精品| 韩日欧美一区二区三区| 久久一二三四区| 亚洲女人初尝黑人巨大| 巨大黑人极品videos精品| 欧美三级午夜理伦三级老人| 豆国产96在线|亚洲| 成人在线免费看视频| 最近日韩中文字幕中文| 在这里有精品| 波多野结衣天堂| 亚洲免费在线电影| 香蕉国产在线视频| 国产日韩视频在线观看| 激情另类综合| 永久免费av无码网站性色av| 91精品久久久久久蜜臀| 筱崎爱全乳无删减在线观看| 亚洲欧美日韩国产yyy| 国产精品一区二区久激情瑜伽| 欧美精品韩国精品| 久久国产一区二区三区| 婷婷综合一区| 视频免费1区二区三区| 五月天欧美精品| 精品国产丝袜高跟鞋| 精品一区久久久| 韩国一区二区在线观看| √资源天堂中文在线| 欧美成人精品影院| 热久久天天拍国产| 理论片大全免费理伦片| 欧美日韩第一区日日骚| 91桃色在线| 性欧美18一19内谢| 久久久久久久综合| 成人无码一区二区三区| 国产精品综合久久久| 亚洲综合精品四区|