面试题----中断的一些知识
中斷的一些知識
什么是中斷
中斷指處理機(jī)處理程序運(yùn)行中出現(xiàn)的緊急事件的整個過程.程序運(yùn)行過程中,系統(tǒng)外部、系統(tǒng)內(nèi)部或者現(xiàn)行程序本身若出現(xiàn)緊急事件,處理機(jī)立即中止現(xiàn)行程序的運(yùn)行,自動轉(zhuǎn)入相應(yīng)的處理程序(中斷服務(wù)程序),待處理完后,再返回原來的程序運(yùn)行,這整個過程稱為程序中斷。
?
CPU要做的事情:
改變工作模式至中斷模式
保存現(xiàn)場
分析中斷原因,跳到中斷起始地址處理中斷
返回到原來模式
恢復(fù)現(xiàn)場繼續(xù)執(zhí)行原來的程序。
?
可重入程序
可重入程序
一個可重入的函數(shù)簡單來說就是可以被中斷的函數(shù),也就是說,可以在這個函數(shù)執(zhí)行的任何時刻中斷它,轉(zhuǎn)入OS調(diào)度下去執(zhí)行另外一段代碼,而返回控制時不會出現(xiàn)什么錯誤;而不可重入的函數(shù)由于使用了一些系統(tǒng)資源,比如全局變量區(qū),中斷向量表等,所以它如果被中斷的話,可能會出現(xiàn)問題,這類函數(shù)是不能運(yùn)行在多任務(wù)環(huán)境下的。
也可以這樣理解,重入即表示重復(fù)進(jìn)入,首先它意味著這個函數(shù)可以被中斷,其次意味著它除了使用自己棧上的變量以外不依賴于任何環(huán)境(包括 static),這樣的函數(shù)就是purecode(純代碼)可重入,可以允許有該函數(shù)的多個副本在運(yùn)行,由于它們使用的是分離的棧,所以不會互相干擾
?
常見的不可重入程序
常見的不可重入函數(shù)有:
printf --------引用全局變量stdout
malloc --------使用全局內(nèi)存分配表
free? --------使用全局內(nèi)存分配表
?
可重入函數(shù)與線程安全函數(shù)
可重入函數(shù)一定是線程安全的。不可重入函數(shù),在加入同步機(jī)制后也可以是線程安全的。
?
ISR中斷服務(wù)子程序的特點(diǎn)
- ISR不能有返回值;
- ISR不能傳遞參數(shù);
- ISR應(yīng)該是短而高效的,在ISR中做浮點(diǎn)運(yùn)算是不明智的;
- ISR中不應(yīng)該有重入和性能上的問題,因此不應(yīng)該使用pintf()函數(shù)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/qingergege/p/7833008.html
總結(jié)
以上是生活随笔為你收集整理的面试题----中断的一些知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python之接口开发
- 下一篇: 相关博客