linux核心方面的書籍經常提及程序上下文,中斷上下文,一直沒有徹底搞明白。通俗地說,前者就是程序執行的環境引數,如cpu狀態引數(pc,sp,函式返回位址...),記憶體、檔案fd,網路fd,其他io操作資訊等等,核心裡有乙個資料結構tcb(task control bloc)專門來儲存這些資訊,有的作業系統稱之為為pcb(process control block),以便該程序被掛起時(如被中斷打斷)再次被排程時,能恢復到程式執行前的狀態,或者說現場。
而中斷處理函式的上下文,跟任何程序無關,好像沒有那本書籍提及icb(interrupt control block)或者類似的術語,執行於中斷上下文環境。因此在非巢狀式中斷系統裡,中斷是不允許被打斷的,除非有更高優先順序的中斷。其實,原因也很簡單,如果這個中斷被「中斷」了,作業系統如何再次來排程它呢,如何恢復其上下文,現場?但是中斷處理時間不宜過長,因為它遮蔽了同等優先順序的中斷,核心很巧妙,將中斷處理函式分為中斷上半部和中斷下半部(tasklet),中斷上半部處理緊急的事情,耗時較少,中斷下半部處理耗時較多的事情,workqueue則用來處理耗時較多工並不緊急的事情。因此中斷處理函式不能sleep,切記。
而arm cortex-m3系列cpu,則將二者的區別更是顯著的標識,異常的處理函式使用msp(main stack pointer),而程式的sp則使用psp(process stack pointer),這樣當cpu的sp是使用哪個sp,你就容易顯而易見的知道是異常還是程式在跑。
中斷上下文 程序上下文
在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...
程序上下文和中斷上下文
程序上下文和中斷上下文是作業系統中很重要的兩個概念,這兩個概念在作業系統課程中不斷被提及,是最經常接觸 看上去很懂但又說不清楚到底怎麼回事。造成這種局面的原因,可能是原來接觸到的作業系統課程的教學總停留在一種淺層次的理論層面上,沒有深入去研究。處理器總處於以下狀態中的一種 核心態,執行於程序上下文,...
程序上下文和中斷上下文
程序上下文是一種核心所處的操作模式,此時核心代表程序執行 例如執行系統呼叫或執行核心執行緒。上下文context 上下文簡單說來就是乙個環境,相對於程序而言,就是程序執行時的環境。具體來說就是各個變數和資料,包括所有的暫存器變數 程序開啟的檔案 記憶體資訊等。乙個程序的上下文可以分為三個部分 使用者...