進程上下文和中斷上下文是操作系統(tǒng)中很重要的兩個概念,這兩個概念在操作系統(tǒng)課程中不斷被提及,是最經(jīng)常接觸、看上去很懂但又說不清楚到底怎么回事。造成這種局面的原因,可能是原來接觸到的操作系統(tǒng)課程的教學總停留在一種淺層次的理論層面上,沒有深入去研究。
處理器總處于以下狀態(tài)中的一種:
1、內(nèi)核態(tài),運行于進程上下文,內(nèi)核代表進程運行于內(nèi)核空間;
2、內(nèi)核態(tài),運行于中斷上下文,內(nèi)核代表硬件運行于內(nèi)核空間;
3、用戶態(tài),運行于用戶空間。
用戶空間的應用程序,通過系統(tǒng)調(diào)用,進入內(nèi)核空間。這個時候用戶空間的進程要傳遞很多變量、參數(shù)的值給內(nèi)核,內(nèi)核態(tài)運行的時候也要保存用戶進程的一些寄存器值、變量等。所謂的“進程上下文”,可以看作是用戶進程傳遞給內(nèi)核的這些參數(shù)以及內(nèi)核要保存的那一整套的變量和寄存器值和當時的環(huán)境等。
硬件通過觸發(fā)信號,導致內(nèi)核調(diào)用中斷處理程序,進入內(nèi)核空間。這個過程中,硬件的一些變量和參數(shù)也要傳遞給內(nèi)核,內(nèi)核通過這些參數(shù)進行中斷處理。所謂的“中斷上下文”,其實也可以看作就是硬件傳遞過來的這些參數(shù)和內(nèi)核需要保存的一些其他環(huán)境(主要是當前被打斷執(zhí)行的進程環(huán)境)。
關于進程上下文LINUX完全注釋中的一段話:
當一個進程在執(zhí)行時,CPU的所有寄存器中的值、進程的狀態(tài)以及堆棧中的內(nèi)容被稱為該進程的上下文。當內(nèi)核需要切換到另一個進程時,它需要保存當前進程的所有狀態(tài),即保存當前進程的上下文,以便在再次執(zhí)行該進程時,能夠必得到切換時的狀態(tài)執(zhí)行下去。在LINUX中,當前進程上下文均保存在進程的任務數(shù)據(jù)結(jié)構(gòu)中。在發(fā)生中斷時,內(nèi)核就在被中斷進程的上下文中,在內(nèi)核態(tài)下執(zhí)行中斷服務例程。但同時會保留所有需要用到的資源,以便中繼服務結(jié)束時能恢復被中斷進程的執(zhí)行。
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/eroswang/archive/2007/11/28/1905830.aspx
posted on 2010-11-07 23:59
何克勤 閱讀(482)
評論(0) 編輯 收藏 所屬分類:
GNU Linux/Unix