內(nèi)核棧的使用
發(fā)布時間:2008/8/20 0:00:00 訪問次數(shù):724
今天和一個朋友聊天,朋友說在編寫驅(qū)動時遇到一個怪異的問題。他在內(nèi)核中使用了一個深度函數(shù)調(diào)用(多層嵌套的函數(shù)),但沒有實現(xiàn)預定的效果,但如果把嵌套去掉,函數(shù)就沒問題了。當時我也沒有多想,就回答可能是編譯器的問題;貋砗箢^腦中又浮現(xiàn)出這個問題,突然想到內(nèi)核棧,覺得這個問題的原因應(yīng)該出在內(nèi)核棧上。下面簡要介紹下內(nèi)核的知識。
用戶空間運行的程序可以從用戶空間的棧上分配大量的空間來存放變量或數(shù)組、大的結(jié)構(gòu)體。之所以可以這么做,是因為用戶空間棧本身比較大,而且還能動態(tài)增長。進程的內(nèi)核棧即不大也不能動態(tài)增長;它在32位機上的內(nèi)核棧為8kb,而64位機是16kb。
每個進程都有自己的內(nèi)核棧。進程在內(nèi)核執(zhí)行期間的每個調(diào)用鏈必須放在自己的內(nèi)核棧上。中斷處理程序也使用配它們打斷的進程堆棧。這就意味著,在最惡劣的情況下,8kb的內(nèi)核?赡軙欢鄠函數(shù)的嵌套調(diào)用鏈和幾個中斷程序來共享。呵呵,顯然深度的嵌套會導致溢出了。
節(jié)省內(nèi)核棧的方法有:減少局部變量、大型數(shù)組和結(jié)構(gòu)體、嵌套調(diào)用鏈。
欲知詳情,請登錄維庫電子市場網(wǎng)(www.dzsc.com)
今天和一個朋友聊天,朋友說在編寫驅(qū)動時遇到一個怪異的問題。他在內(nèi)核中使用了一個深度函數(shù)調(diào)用(多層嵌套的函數(shù)),但沒有實現(xiàn)預定的效果,但如果把嵌套去掉,函數(shù)就沒問題了。當時我也沒有多想,就回答可能是編譯器的問題;貋砗箢^腦中又浮現(xiàn)出這個問題,突然想到內(nèi)核棧,覺得這個問題的原因應(yīng)該出在內(nèi)核棧上。下面簡要介紹下內(nèi)核的知識。
用戶空間運行的程序可以從用戶空間的棧上分配大量的空間來存放變量或數(shù)組、大的結(jié)構(gòu)體。之所以可以這么做,是因為用戶空間棧本身比較大,而且還能動態(tài)增長。進程的內(nèi)核棧即不大也不能動態(tài)增長;它在32位機上的內(nèi)核棧為8kb,而64位機是16kb。
每個進程都有自己的內(nèi)核棧。進程在內(nèi)核執(zhí)行期間的每個調(diào)用鏈必須放在自己的內(nèi)核棧上。中斷處理程序也使用配它們打斷的進程堆棧。這就意味著,在最惡劣的情況下,8kb的內(nèi)核?赡軙欢鄠函數(shù)的嵌套調(diào)用鏈和幾個中斷程序來共享。呵呵,顯然深度的嵌套會導致溢出了。
節(jié)省內(nèi)核棧的方法有:減少局部變量、大型數(shù)組和結(jié)構(gòu)體、嵌套調(diào)用鏈。
欲知詳情,請登錄維庫電子市場網(wǎng)(www.dzsc.com)
熱門點擊
- 存儲器的地址線(Address Line)數(shù)
- 一套數(shù)字音頻采集、播放和傳輸系統(tǒng)的實現(xiàn)
- 1-Wire總線與DS18B20應(yīng)用仿真
- 在嵌入式系統(tǒng)中應(yīng)用NAND Flash閃存作
- 韋爾推出用于超高速接口的靜電保護芯片ESDA
- 基于μPD780822型單片機的客車CAN總
- 基于USB的ARINC429總線接口模塊設(shè)計
- 賽普拉斯2Mb/8Mb nvSRAM無需電池
- ST7267單片機與SIM卡的接口設(shè)計
- 基于鐵電存儲器FM25640在電表數(shù)據(jù)存儲中
推薦技術(shù)資料
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車用精準定位
- 高效先進封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究