在進(jìn)入時(shí)間子系統(tǒng)需要了解的--理論 - D0
- 中斷
- <u>中斷上半部</u>:設(shè)備產(chǎn)生中斷 - 中斷處理程序處理
其特點(diǎn)為
- 中斷處理程序執(zhí)行期間辨赐,所有其他中斷被禁止芙沥。
- 由于0.的存在本處理程序具有嚴(yán)格的時(shí)間限制诲祸。
- 執(zhí)行期間處理器處于<u>中斷上下文</u>。
- 中斷處理程序的實(shí)現(xiàn)機(jī)制有平臺(tái)相關(guān)性而昨。
- <u>中斷下半部</u>:執(zhí)行“與中斷處理密切相關(guān)但中斷處理程序本身不執(zhí)行的工作”
中斷下半部的實(shí)現(xiàn)機(jī)制有:軟中斷救氯、tasklet、工作隊(duì)列歌憨。
- 上下文着憨?
中斷上下文和進(jìn)程上下文:
- 處理器總處于以下三種狀態(tài)之一 1. 內(nèi)核態(tài),運(yùn)行于進(jìn)程上下文务嫡,內(nèi)核代表進(jìn)程運(yùn)行于內(nèi)核空間甲抖; 2. 內(nèi)核態(tài)漆改,運(yùn)行于中斷上下文,內(nèi)核代表硬件運(yùn)行于內(nèi)核空間准谚;3. 用戶態(tài)挫剑,運(yùn)行于用戶空間。
- 用戶空間的應(yīng)用程序柱衔,通過(guò)系統(tǒng)調(diào)用樊破,進(jìn)入內(nèi)核空間。這個(gè)時(shí)候用戶空間的進(jìn)程要傳遞 很多變量唆铐、參數(shù)的值給內(nèi)核哲戚,內(nèi)核態(tài)運(yùn)行的時(shí)候也要保存用戶進(jìn)程的一些寄存 器值、變量等艾岂。所謂的<u>“進(jìn)程上下文”</u>顺少,可以看作是用戶進(jìn)程傳遞給內(nèi)核的這些參數(shù)以及內(nèi)核要保存的那一整套的變量和寄存器值和當(dāng)時(shí)的環(huán)境等。
- 硬件通過(guò)觸發(fā)信號(hào)澳盐,導(dǎo)致內(nèi)核調(diào)用中斷處理程序祈纯,進(jìn)入內(nèi)核空間。這個(gè)過(guò)程中叼耙,硬件的 一些變量和參數(shù)也要傳遞給內(nèi)核腕窥,內(nèi)核通過(guò)這些參數(shù)進(jìn)行中斷處理。所謂的<u>“ 中斷上下文”</u>筛婉,其實(shí)也可以看作就是硬件傳遞過(guò)來(lái)的這些參數(shù)和內(nèi)核需要保存的一些其他環(huán)境(主要是當(dāng)前被打斷執(zhí)行的進(jìn)程環(huán)境)簇爆。
- 運(yùn)行在進(jìn)程上下文的內(nèi)核代碼是可以被搶占的(Linux2.6支持搶占)。但是一個(gè)中斷上下文爽撒,通常都會(huì)始終占有CPU(當(dāng)然中斷可以嵌套入蛆,但我們一般不這樣做),不可以被打斷硕勿。正因?yàn)槿绱松诨伲\(yùn)行在中斷上下文的代碼就要受一些限制,不能做下面的事情:1源武、睡眠或者放棄CPU扼褪。這樣做的后果是災(zāi)難性的,因?yàn)閮?nèi)核在進(jìn)入中斷之前會(huì)關(guān)閉進(jìn)程調(diào)度粱栖,一旦睡眠或者放棄CPU话浇,這時(shí)內(nèi)核無(wú)法調(diào)度別的進(jìn)程來(lái)執(zhí)行,系統(tǒng)就會(huì)死掉. 2闹究、嘗試獲得信號(hào)量 如果獲得不到信號(hào)量幔崖,代碼就會(huì)睡眠,會(huì)產(chǎn)生和上面相同的情況. 3、執(zhí)行耗時(shí)的任務(wù) 中斷處理應(yīng)該盡可能快赏寇,因?yàn)閮?nèi)核要響應(yīng)大量服務(wù)和請(qǐng)求吉嫩,中斷上下文占用CPU時(shí)間太長(zhǎng)會(huì)嚴(yán)重影響系統(tǒng)功能。4嗅定、訪問(wèn)用戶空間的虛擬地址 因?yàn)橹袛嗌舷挛氖呛吞囟ㄟM(jìn)程無(wú)關(guān)的率挣,它是內(nèi)核代表硬件運(yùn)行在內(nèi)核空間,所以在中端上下文無(wú)法訪問(wèn)用戶空間的虛擬地址
- 關(guān)于current:進(jìn)程上下文中引用有意義露戒,中斷上下文引用無(wú)意義。
- 關(guān)于上下文的切換:只能發(fā)生在內(nèi)核態(tài)捶箱。
- 鎖智什?
- spin_lock:
- 堆棧是什么?
- what is "cache line" ?
- 通知鏈技術(shù)
參考文獻(xiàn):
<a href=http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint>ibmlinux內(nèi)核中斷內(nèi)幕</a>
<a href=http://blog.chinaunix.net/uid-24919665-id-3018666.html>linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)筆記---下半部和推后執(zhí)行的工作</a>
<a href=http://www.cnblogs.com/hustcat/articles/1505618.html>進(jìn)程上下文和中斷上下文</a>