※ 引述《popd (QQ)》之銘言:
: 小弟對於linux kernel算初心者,關於vmalloc的解釋有些地方不懂,還請高手解釋
: void * vmalloc(unsigned long size)
: The function returns a pointer to at least size bytes of virtually contiguous
: memory. On error, the function returns NULL. The function might sleep, and
: thus cannot be called from interrupt context or other situations where
: blocking is not permissible.
: 我的問題是
: 為什麼這個function會sleep? 什麼樣的情況會導致vmalloc進行sleep?
: 謝謝!
替你翻了一下google ...
請看此網頁的最後面有關KMALLOC PK VMALLOC 的敘述
關鍵字在於GFP_KERNEL旗標,所以在kernel 中任何記憶體配置函數有用到
GFP_KERNEL 旗標的,全都有可能休眠
這可能是因為,目前記憶體的配置無法滿足呼叫者的空間需求,但kernel會使用一些手法
來盡量滿足呼叫者(例如把某些記憶體頁搬到硬碟去之類的),這些手法可能跑在另一個
執行緒,或可能是一些控制硬體的指令什麼的,所以得要將目前呼叫者的行程送去休眠