1交互式應用。這種應用,著重于系統(tǒng)的響應速度,當系統(tǒng)中有大量的進程共存時(多用戶),要保證每個用戶都有可以接受的響應速度,而不感到明顯的延遲。當延遲超過150毫秒時,使用者會明顯地感覺到。
2.批處理應用。批處理的應用往往都是“后臺作業(yè)”,對響應速度沒有要求,但要考慮到“平均速度”
3.實時應用。這是時間要求最強的,不但要考慮進程執(zhí)行的平均速度,還要考慮到“即時速度”;不但要考慮響應速度(即從一個事件發(fā)生到系統(tǒng)對此作出反應,并開始執(zhí)行有關(guān)程度之間所需的時間),還要考慮有關(guān)程序(用記程序)能否在規(guī)定時間內(nèi)執(zhí)行完。在實時應用中,注重的是對程序執(zhí)行的“可預測性”。
1.調(diào)度的時機:在什么情況下,什么時候調(diào)度?【在什么情況下,什么時候,把現(xiàn)在占用CPU的進程換下來。主要在什么位置調(diào)用schedule函數(shù)】
2. 調(diào)度的“政策”policy:根據(jù)什么準則挑選下一個進入運行的進程?!緩?/span>running的進程隊列中找出一個進程,來占用CPU,讓它運行】。
3.調(diào)度的方式:是”可剝奪“(preemptive)還是“不可剝奪”(nonpreemptive)。【一進程主動讓出CPU,進程在用戶態(tài)或是在內(nèi)核態(tài)調(diào)用schedule,二是強制剝奪其使用權(quán),在發(fā)生中斷或是異?;蚴窍到y(tǒng)調(diào)用之后,從內(nèi)核態(tài)返回到用戶態(tài)的前夕,由內(nèi)核調(diào)用schedule?!?/span>
自愿方式
1.在內(nèi)核里面,進程可以通過schedule()或是schedule_timeout啟動一次調(diào)度。在用戶空間可以使用調(diào)用pause()或是sleep(s)也可以?!具@是可見的主動讓出的方式。這里指程序員可以看見,程序員編程時主動地讓出。】
2.當用戶使用open(),read(),write()等N多個涉及到外設的系統(tǒng)調(diào)用時,都可能受阻。這時在內(nèi)核中自愿放棄運行是不可見的?!境绦騿T認為是阻塞了,其實就是讓出CPU,進入等待隊列,等一個信號或是軟中斷,或是硬件中斷】
不自愿方式,即強制地發(fā)生在每次從系統(tǒng)調(diào)用返回的前夕,以及每次從中斷或是異常處理返回到用戶空間的前夕。注意:返回到用戶空間是關(guān)鍵性的。這意味著只有在用戶空間(當CPU在用戶空間運行時)發(fā)生的中斷 或是異常才會引起調(diào)度。(在內(nèi)核空間發(fā)生的中斷或是異常,不引起調(diào)度。linux2.4)
【以上這種方式不自愿地方式我們習慣地稱為“非搶占式內(nèi)核”也有叫“用戶搶占”。其實也就只能叫作“半搶占式內(nèi)核”或是“有條件搶占”。這種方式是linux2.4的實現(xiàn)方式。在linux2.6中對此進行了修改。大家習慣地稱linux2.6內(nèi)核是“搶占式內(nèi)核”。】
以下是“搶占式內(nèi)核”的英文解釋。
Kernel preemption is a method used mainly in monolithic and hybrid kernels where all or most device drivers are run in kernel space, whereby the scheduler is permitted to
forcibly perform a context switch (ie, preemptively schedule; on behalf of a runnable and higher priority process) on a driver or other part of the kernel during its execution,
rather than co-operatively wait for the driver or kernel function (such as a system call) to complete its execution and return control of the processor to the scheduler.
There are two main benefits to this method in monolithic and hybrid kernels, and answer one of the main criticisms of monolithic kernels from
execution.
源于:http://en.wikipedia.org/wiki/Kernel_preemption
當一看到這兩個名詞時,第一感覺就是這是一個不同調(diào)度方式的內(nèi)核。在有一些了解之后,發(fā)現(xiàn)這種理解有一些問題。“非搶占式內(nèi)核”說的含義是:不可搶占內(nèi)核態(tài)的調(diào)度方式。當然這種方式與內(nèi)核實現(xiàn)有關(guān),但它的重點是講一種什么樣的調(diào)度方式。針對Kernel preemption我們可以翻譯為“內(nèi)核搶占調(diào)度模式”,或是“搶占內(nèi)核調(diào)度模式”。
Linux2.4只實現(xiàn)了“有條件搶占式”的調(diào)度。它的缺點在于:當進程在內(nèi)核態(tài)時,調(diào)度的時機有局限。就是只能在xxx的前夕。例如:當外部來一中斷,中斷程序過程完后,需要一個用戶進程B對此進行進一步的處理(響應IP包數(shù)據(jù))。此時進程A正在使用系統(tǒng)調(diào)用進入了內(nèi)核態(tài)。那么等到A從系統(tǒng)調(diào)用返回之際,內(nèi)核進行調(diào)度,B才有可能運行。假設A的系統(tǒng)調(diào)用占用了CPU的時間為T。這個T大于用戶要求的響應時間。那這個系統(tǒng)就不夠?qū)崟r。
為了提高linux的實時性。在linux2.6中引入了“Kernel preemption”(內(nèi)核搶占調(diào)度模式)。并很好的解決了這個問題。一句話就是搶占式內(nèi)核可以在進程處于內(nèi)核態(tài)時,進行搶占。
當然搶占式內(nèi)核在以下幾種情況下不可搶占:
1.當內(nèi)核運行中斷處理程序和異常處理程序時,在linux內(nèi)核中進程不能搶占中斷,在中斷例程中不允許進行調(diào)度。進程調(diào)度函數(shù)schedule會對此作出判斷,如果是在中斷中調(diào)用,會打印出出錯信息。
2.當進程在內(nèi)核態(tài)運行臨界區(qū)的代碼時,不可搶占。這些臨界區(qū)被自旋鎖spin_lock保護了起來?!镜钱斶M程使用spin_lock時,自己被鎖住并自旋時,這時可以調(diào)度?!?/p>
3. 內(nèi)核正在進行bottom half(中斷的底半部)處理時,不可搶占?!静惶?/span>
4.內(nèi)核正在執(zhí)行調(diào)度程序Scheduler時,不可搶占。
5.內(nèi)核正在對每一個CPU“私有”數(shù)據(jù)結(jié)構(gòu)操作(per CPU date structures)時,不可搶占。在SMP中,對于Per-cpu數(shù)據(jù)結(jié)構(gòu)未用spinlocks保護,因為這些數(shù)據(jù)結(jié)構(gòu)隱含地被保護了。
搶占式內(nèi)核什么時候,什么位置調(diào)用schedule函數(shù)?
當中斷發(fā)生,并完成中斷處理時,在返回之前被中斷的進程時,可以根據(jù)需要進行調(diào)度。
搶占式內(nèi)核為每一個進程的task_struct結(jié)構(gòu)引入了preempt_count變量,稱為內(nèi)核搶占鎖。每當進程進入以上五種狀態(tài)時,preempt_count加1.表示不可搶占。當退出以上五種狀態(tài)時,preempt_count減1. 每次進行搶占式調(diào)度時,先判斷preempt_count與0大小,preempt_count<0,表示可搶占。preempt_count>0表示不可搶占。
一系統(tǒng)搶占式的調(diào)度器函數(shù):preempt_schedule;preempt_schedule_irq。它們都是調(diào)用schedule來完成調(diào)度的。
實時操作系統(tǒng)要求就是對來自外部的請求,要求有及時的處理。及時到什么程度就是實時操作系統(tǒng)呢?這個沒有一個明確的定義,因為用戶對響應時間的要求各不相同。
我們可以說當在同樣的硬件條件下,Linux2.4的實時性不高,或是不如linux2.6的實時性高。那么提高系統(tǒng)的實時性的方法有很多,提高CPU速度,增加CPU核。優(yōu)化操作系統(tǒng)等。那么 linux在提高系統(tǒng)實時性的重要貢獻就是引入了“內(nèi)核搶占調(diào)度模式”。那么我們也可以說linux很好的支持了實時性。
1《Linux可搶占內(nèi)核的分析》
http://wenku.baidu.com/view/835905768e9951e79b89272f.html
2《Linux之搶占式內(nèi)核》
http://www.yuanma.org/data/2008/0508/article_3037.htm
3.linux搶占式內(nèi)核的研究與實現(xiàn)
http://www.docin.com/p-74007197.html
4.搶占式內(nèi)核與非搶占式內(nèi)核的區(qū)別
http://hi.baidu.com/zhangkai008/blog/item/eee55d208f420e49ad34de87.html
5.《linux內(nèi)核情景分析》
聯(lián)系客服