作者larkes (larkes)
看板LinuxDev
標題[問題] 有關slab allocator和kmalloc的問題
時間Sat Apr 21 12:28:12 2012
最近在使用配置記憶體的功能,
有遇到一些問題, 問題如下:
1.
我對於kmem_cache_create的認知是:
kernel在預設情況下會事先配置4k bytes(跟page size)的記憶體,
然後根據我們設定的object size,
決定要分割幾個object.
不知道我這樣的說法有無錯誤呢?
2.
struct kmem *my_cache;
my_cache = kmeme_cache_create("my_cache",800,0,
SLAB_HWCACHE_ALIGN,NULL);
printk(KERN_ALERT "my_cache->num:%d",my_cache->num);
我把object size設成800 bytes,
理論上my_cache->num顯示結果應該是5才對...
可是顯示結果卻是9,
之後我把object size調成500 bytes,
它顯示結果卻是7. 理論上應該要顯示8才對吧...
請問....為什麼會這樣子呢?
my_cache->num, 它的數值結果要怎麼計算呢?
不過我把object size調到1000或2000的話,它分別顯示4和2,
這個結果是正確的.
3.
承上, 把object size調到1 byte的話, 再去顯示my_cache->num的值,
電腦馬上就當機了,
為什麼會當機呢?
4.
如果kmalloc的flag是GFP_USER,
應該就是指幫user application配置記憶區塊吧?
不知我這樣的說法有沒有錯誤呢?
如果沒有錯的話,
那它跟user application在用的malloc, 是不是功能都一樣呢?
都一樣是幫user application配置記憶區塊呢?
還麻煩請指教一下,
謝謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.248.18.139
→ RouterHsieh:最後一個問題直接去看malloc的實作會比較準吧..@@ 04/21 13:00
推 shaopin:FLAG應該是指要以什麼態度來allocate吧 04/22 17:23
※ 編輯: larkes 來自: 59.120.179.172 (04/22 23:18)