[問題] 有關slab allocator和kmalloc的問題
最近在使用配置記憶體的功能,
有遇到一些問題, 問題如下:
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
→
04/21 13:00, , 1F
04/21 13:00, 1F
推
04/22 17:23, , 2F
04/22 17:23, 2F
※ 編輯: larkes 來自: 59.120.179.172 (04/22 23:18)