more: Jollen 的 Embedded Linux 教育訓練

« Open Source in Mobile 2008 今年更盛大了 | Home | [教育訓練紀錄] 從 kernel-space 讀取 user-space 的字串 »

[教育訓練紀錄] 呼叫 kmalloc(GFP_KERNEL) 的函數要可以重覆進入

jollen 發表於 June 22, 2008 10:10 AM

使用 kmalloc() 時,要特別注重的是「可重覆進入」的觀念。kmalloc() 的第二個參數稱為 allocation flag,用來控制 kmalloc() 的行為,當此參數有指定 GFP_KERNEL 旗標時,kmalloc() 就是一個 blocking function。

使用 GFP_KERNEL 旗標來配置記憶體時,為什麼會有可重覆進入的議題呢?主要的關鍵在於,當 kmalloc(..., GFP_KERNEL) 無法配置記憶體時,便會做「等待」的動作,這個等待的動作是對「current process」做重排程,並等候記憶體空間。

以 open driver function 來看,通常我們會在 open driver function 裡做記憶體的配置,當記憶體目前無法取得時,open driver function 便會停止(等待),因此不會完成這一次的函數呼叫(沒有 return),此時,同一個 open driver function 會不會再被「重覆」呼叫執行呢?當然會。因為,可能會有另一個 process 去開啟 major number 相同的裝置檔,因此,同一個 open driver function 又被呼叫了,但是前一次的呼叫卻還在等待。

當函數第二次被呼叫時,第一次的呼叫還沒有結束執行,所以,函數「重覆」進來執行了。

延伸閱讀

2008.04.20: [教育訓練紀錄] 關於驅動程式的 private data 與可重覆進入函數

--jollen

引用通告

如果您想引用這篇文章到您的Blog,
請複製下面的鏈接,並放置到您發表文章的相應界面中。

http://blog.jollen.org/mt-tb.cgi/535

發表一個評論

(您發表的意見將被立即接受,但需要一點時間與後端伺服器做同步,您的留言才會顯示在網站上。為避免 spam 攻撃,按「發表」後請輸入帳號密碼。使用者帳號:「nospam」、密碼:「nospam」。)

Top | 授權條款 | Jollen's Forum: Blog 評論、討論與搜尋
Copyright(c) 2006 www.jollen.org