LINUX操作系統(tǒng)分析.ppt_第1頁(yè)
LINUX操作系統(tǒng)分析.ppt_第2頁(yè)
LINUX操作系統(tǒng)分析.ppt_第3頁(yè)
LINUX操作系統(tǒng)分析.ppt_第4頁(yè)
LINUX操作系統(tǒng)分析.ppt_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Linux操作系統(tǒng)分析,中國(guó)科學(xué)技術(shù)大學(xué)計(jì)算機(jī)系 陳香蘭(051287161312) xlanchen Autumn 2009,本資料由-大學(xué)生創(chuàng)業(yè)|創(chuàng)業(yè)|創(chuàng)業(yè)網(wǎng) 在線代理|網(wǎng)頁(yè)代理|代理網(wǎng)頁(yè)| 減肥藥排行榜|淘寶最好的減肥藥|什么減肥藥效果最好|減肥瘦身藥|,2020/6/2011/23/09,Linux操作系統(tǒng)分析,2/92,主要內(nèi)容,進(jìn)程描述符 進(jìn)程切換 進(jìn)程的創(chuàng)建和刪除 進(jìn)程調(diào)度,本資料由-大學(xué)生創(chuàng)業(yè)|創(chuàng)業(yè)|創(chuàng)業(yè)網(wǎng) 在線代理|網(wǎng)頁(yè)代理|代理網(wǎng)頁(yè)| 減肥藥排行榜|淘寶最好的減肥藥|什么減肥藥效果最好|減肥瘦身藥|,2020/6/2011/23/09,Linux操作系統(tǒng)分析,3/92,進(jìn)程

2、的分類,不同類型的進(jìn)程有不同的調(diào)度需求 第一種分類: I/O-bound 頻繁的進(jìn)行I/O 通常會(huì)花費(fèi)很多時(shí)間等待I/O操作的完成 CPU-bound 計(jì)算密集型 需要大量的CPU時(shí)間進(jìn)行運(yùn)算,本資料由-大學(xué)生創(chuàng)業(yè)|創(chuàng)業(yè)|創(chuàng)業(yè)網(wǎng) 在線代理|網(wǎng)頁(yè)代理|代理網(wǎng)頁(yè)| 減肥藥排行榜|淘寶最好的減肥藥|什么減肥藥效果最好|減肥瘦身藥|,2020/6/2011/23/09,Linux操作系統(tǒng)分析,4/92,第二種分類 交互式進(jìn)程(interactive process) 需要經(jīng)常與用戶交互,因此要花很多時(shí)間等待用戶輸入操作 響應(yīng)時(shí)間要快,平均延遲要低于50150ms 典型的交互式程序:shell、文本編輯

3、程序、圖形應(yīng)用程序等,2020/6/2011/23/09,Linux操作系統(tǒng)分析,5/92,批處理進(jìn)程(batch process) 不必與用戶交互,通常在后臺(tái)運(yùn)行 不必很快響應(yīng) 典型的批處理程序:編譯程序、科學(xué)計(jì)算 實(shí)時(shí)進(jìn)程(real-time process) 有實(shí)時(shí)需求,不應(yīng)被低優(yōu)先級(jí)的進(jìn)程阻塞 響應(yīng)時(shí)間要短、要穩(wěn)定 典型的實(shí)時(shí)進(jìn)程:視頻/音頻、機(jī)械控制等,2020/6/2011/23/09,Linux操作系統(tǒng)分析,6/92,Linux中的進(jìn)程調(diào)度,Linux既支持普通的分時(shí)進(jìn)程,也支持實(shí)時(shí)進(jìn)程 Linux中的調(diào)度是多種調(diào)度策略和調(diào)度算法的混合。 什么是調(diào)度策略? 是一組規(guī)則,它們決定什

4、么時(shí)候以怎樣的方式選擇一個(gè)新進(jìn)程運(yùn)行 Linux的調(diào)度基于分時(shí)和優(yōu)先級(jí) 隨著版本的變化,分時(shí)技術(shù)在不斷變化,2020/6/2011/23/09,Linux操作系統(tǒng)分析,7/92,Linux的進(jìn)程根據(jù)優(yōu)先級(jí)排隊(duì) 根據(jù)特定的算法計(jì)算出進(jìn)程的優(yōu)先級(jí),用一個(gè)值表示 這個(gè)值表示把進(jìn)程如何適當(dāng)?shù)姆峙浣oCPU Linux中進(jìn)程的優(yōu)先級(jí)是動(dòng)態(tài)的 調(diào)度程序會(huì)根據(jù)進(jìn)程的行為周期性的調(diào)整進(jìn)程的優(yōu)先級(jí) 較長(zhǎng)時(shí)間未分配到CPU的進(jìn)程,通常 已經(jīng)在CPU上運(yùn)行了較長(zhǎng)時(shí)間的進(jìn)程,通常,2020/6/2011/23/09,Linux操作系統(tǒng)分析,8/92,與調(diào)度相關(guān)的系統(tǒng)調(diào)用,nice getpriority/setprio

5、rity sched_getscheduler/sched_setscheduler sched_getparam/sched_setparam sched_yield sched_get_priority_min/sched_get_priority_max sched_rr_get_interval,2020/6/2011/23/09,Linux操作系統(tǒng)分析,9/92,例如,2020/6/2011/23/09,Linux操作系統(tǒng)分析,10/92,又如,2020/6/2011/23/09,Linux操作系統(tǒng)分析,11/92,2020/6/2011/23/09,Linux操作系統(tǒng)分析,12/9

6、2,2020/6/2011/23/09,Linux操作系統(tǒng)分析,13/92,調(diào)度算法,Linux 2.4的調(diào)度算法 需要遍歷可運(yùn)行隊(duì)列,算法O(n) Epoch,基本時(shí)間片,動(dòng)態(tài)優(yōu)先級(jí) Linux 2.6.17的調(diào)度算法(2.6.23之前) 采用雙隊(duì)列(Active;expire ),按照優(yōu)先級(jí)組隊(duì),O(1) Linux 2.6.26的調(diào)度算法 非實(shí)時(shí):CFS,vruntime,紅黑樹 實(shí)時(shí):優(yōu)先級(jí)隊(duì)列 Linux進(jìn)程可以指定該進(jìn)程所采用的調(diào)度策略 調(diào)度算法根據(jù)進(jìn)程的調(diào)度策略,采用不同的調(diào)度算法,2020/6/2011/23/09,Linux操作系統(tǒng)分析,14/92,關(guān)于CFS的vruntim

7、e,理想的調(diào)度,所有的任務(wù)都是公平的。等速度的運(yùn)行每個(gè)任務(wù)。 cfs就是通過追蹤這個(gè)vruntime來進(jìn)行任務(wù)調(diào)度的。它總是選 vruntime最小的進(jìn)程來運(yùn)行。,2020/6/2011/23/09,Linux操作系統(tǒng)分析,15/92,Linux 2.6.26中的 調(diào)度策略:Policy,調(diào)度類型,include/linux/sched.h 在task_struct中,使用數(shù)據(jù)項(xiàng)policy來表達(dá)該進(jìn)程采用的調(diào)度策略,2020/6/2011/23/09,Linux操作系統(tǒng)分析,16/92,查看linux-2.6.26中各個(gè)policy的使用情況,2020/6/2011/23/09,Linux操

8、作系統(tǒng)分析,17/92,kernel/sched.c,2020/6/2011/23/09,Linux操作系統(tǒng)分析,18/92,調(diào)度類型,閱讀const struct sched_class,調(diào)度類 rt_sched_class fair_sched_class idle_sched_class,rt_sched_class,fair_sched_class,idle_sched_class,kernel/sched_idletask.c,kernel/sched_fair.c,kernel/sched_rt.c,2020/6/2011/23/09,Linux操作系統(tǒng)分析,19/92,閱讀2.6

9、.26的schedule函數(shù),調(diào)度函數(shù)的關(guān)鍵: 調(diào)度算法的關(guān)鍵 入列 CFS根據(jù)vruntime的值入列,其關(guān)鍵在于vruntime值的計(jì)算 RT根據(jù)優(yōu)先級(jí)入列,kernel/sched.c,參見函數(shù)schedule(),kernel/sched_fair.c,update_curr,2020/6/2011/23/09,Linux操作系統(tǒng)分析,20/92,Linux-2.6.26中每個(gè)CPU的就緒隊(duì)列,2020/6/2011/23/09,Linux操作系統(tǒng)分析,21/92,Linux-2.6.26中進(jìn)程的調(diào)度實(shí)體,include/linux/sched.h:task_struct,2020/6

10、/2011/23/09,Linux操作系統(tǒng)分析,22/92,include/linux/sched.h,2020/6/2011/23/09,Linux操作系統(tǒng)分析,23/92,2020/6/2011/23/09,Linux操作系統(tǒng)分析,24/92,關(guān)于CFS的vruntime,理想的調(diào)度,所有的任務(wù)都是公平的。等速度的運(yùn)行每個(gè)任務(wù)。 cfs就是通過追蹤這個(gè)vruntime來進(jìn)行任務(wù)調(diào)度的。它總是選 vruntime最小的進(jìn)程來運(yùn)行。 幾個(gè)關(guān)鍵的vruntime更新之處 set_task_cpu:進(jìn)程從原CPU上轉(zhuǎn)移到新CPU上,需根據(jù)兩個(gè)cpu上就緒隊(duì)列min_vruntime的值的差距進(jìn)行調(diào)

11、整,使得進(jìn)程的vruntime值能與新的調(diào)度隊(duì)列中的進(jìn)程具有一定的可比性,kernel/sched.c,2020/6/2011/23/09,Linux操作系統(tǒng)分析,25/92,在_update_curr中, 在yield_task_fair中, 等等,kernel/sched_fair.c,2020/6/2011/23/09,Linux操作系統(tǒng)分析,26/92,了解linux-2.6.26中進(jìn)程的滴答更新,調(diào)度類中的方法task_tick用來在任務(wù)運(yùn)行時(shí)進(jìn)行滴答更新。 每個(gè)調(diào)度類都有自己的滴答更新方法:task_tick_rt、task_tick_fair和task_tick_idle(為空)

12、。,2020/6/2011/23/09,Linux操作系統(tǒng)分析,27/92,考慮task_tick_fair,2020/6/2011/23/09,Linux操作系統(tǒng)分析,28/92,關(guān)鍵內(nèi)部函數(shù)update_curr,參見源代碼,2020/6/2011/23/09,Linux操作系統(tǒng)分析,29/92,include/linux/sched.h,2020/6/2011/23/09,Linux操作系統(tǒng)分析,30/92,考慮task_tick_rt,2020/6/2011/23/09,Linux操作系統(tǒng)分析,31/92,Linux2.6.26中的優(yōu)先級(jí),優(yōu)先數(shù)范圍為0139,其中099為實(shí)時(shí)優(yōu)先數(shù)

13、普通任務(wù)和批處理任務(wù)的優(yōu)先數(shù)在100139之間 優(yōu)先數(shù)越大,優(yōu)先級(jí)越低。,2020/6/2011/23/09,Linux操作系統(tǒng)分析,32/92,Linux2.6.26中的nice值,Nice值用來調(diào)整進(jìn)程的優(yōu)先級(jí) Nice值的范圍在-2019之間。,2020/6/2011/23/09,Linux操作系統(tǒng)分析,33/92,Linux-2.4.18中的調(diào)度算法,2020/6/2011/23/09,Linux操作系統(tǒng)分析,34/92,Linux-2.4.18的調(diào)度策略,Linux進(jìn)程可以指定該進(jìn)程所采用的調(diào)度策略 調(diào)度算法根據(jù)進(jìn)程的調(diào)度策略,采用不同的調(diào)度算法,先入先出的實(shí)時(shí)進(jìn)程,循環(huán)輪轉(zhuǎn)的實(shí)時(shí)進(jìn)

14、程,普通的分時(shí)進(jìn)程,當(dāng)一個(gè)進(jìn)程自動(dòng)放棄運(yùn)行時(shí)設(shè)置,2020/6/2011/23/09,Linux操作系統(tǒng)分析,35/92,Linux-2.4.18的調(diào)度主要基于分時(shí)技術(shù),允許多個(gè)進(jìn)程“并發(fā)”運(yùn)行 CPU的時(shí)間被劃分成“片”,給每個(gè)可運(yùn)行進(jìn)程分配一片 在單處理器上,任何時(shí)刻只能運(yùn)行一個(gè)進(jìn)程,當(dāng)一個(gè)并發(fā)執(zhí)行的進(jìn)程時(shí)間片用完時(shí)(到期)還沒有終止,就可以進(jìn)行進(jìn)程調(diào)度 分時(shí)依賴于時(shí)鐘中斷,對(duì)進(jìn)程透明,2020/6/2011/23/09,Linux操作系統(tǒng)分析,36/92,采用常規(guī)分時(shí)時(shí),時(shí)間片的選擇,時(shí)間片的長(zhǎng)短對(duì)系統(tǒng)性能非常關(guān)鍵,它既不能太長(zhǎng)也不能太短 太短: 頻繁的切換會(huì)造成系統(tǒng)開銷過大 假如切換時(shí)

15、間為1ms,時(shí)間片設(shè)置為1ms,那就沒空?qǐng)?zhí)行進(jìn)程了,2020/6/2011/23/09,Linux操作系統(tǒng)分析,37/92,太長(zhǎng) 幾乎每個(gè)進(jìn)程都一次運(yùn)行完 并發(fā)的概念基本消失 普通進(jìn)程需要等待很長(zhǎng)時(shí)間才能運(yùn)行 時(shí)間片大小的選擇總是一種折衷。Linux采取單憑經(jīng)驗(yàn)的方法,即選擇盡可能長(zhǎng)的時(shí)間片,同時(shí)能保持良好的響應(yīng)時(shí)間,2020/6/2011/23/09,Linux操作系統(tǒng)分析,38/92,Linux-2.4.18進(jìn)程的調(diào)度優(yōu)先級(jí),Linux在其調(diào)度程序中,根據(jù)特定的算法計(jì)算出進(jìn)程的調(diào)度優(yōu)先級(jí),用一個(gè)值goodness表示,進(jìn)程根據(jù)這個(gè)值競(jìng)爭(zhēng)CPU,2020/6/2011/23/09,Linux

16、操作系統(tǒng)分析,39/92,Linux-2.4.18的調(diào)度算法(1),epoch linux調(diào)度算法把CPU時(shí)間劃分為時(shí)期(epoch) 在一個(gè)單獨(dú)的時(shí)期內(nèi),每個(gè)進(jìn)程有一個(gè)指定的時(shí)間片 一個(gè)進(jìn)程用完它的時(shí)間片時(shí),就會(huì)被強(qiáng)占 只要進(jìn)程的時(shí)間片沒有用完,就可以被多次調(diào)度運(yùn)行 當(dāng)所有的進(jìn)程用完它的時(shí)間片的時(shí)候,一個(gè)時(shí)期才結(jié)束,此時(shí)要重新計(jì)算所有進(jìn)程的時(shí)間片,并重新開始一個(gè)新的時(shí)期,2020/6/2011/23/09,Linux操作系統(tǒng)分析,40/92,Linux-2.4.18的調(diào)度算法(2),基本時(shí)間片(base time quantum) 每個(gè)進(jìn)程有一個(gè)基本時(shí)間片,通過nice計(jì)算 時(shí)間片/epoc

17、h到期時(shí),新時(shí)間片的計(jì)算公式: 可以通過nice、setpriority系統(tǒng)調(diào)用調(diào)整進(jìn)程的基本時(shí)間片,nice缺省為0(在-20到19之間選擇),通常,基本時(shí)間片的值 為6,由于時(shí)鐘中斷大約10ms左右, 因此基本時(shí)間片的長(zhǎng)度大約60ms,2020/6/2011/23/09,Linux操作系統(tǒng)分析,41/92,Linux-2.4.18的調(diào)度算法(3),當(dāng)前剩余時(shí)間片 每個(gè)進(jìn)程使用counter表示當(dāng)前時(shí)期內(nèi)的剩余時(shí)間片 每當(dāng)一個(gè)tick過去,就會(huì)從當(dāng)前進(jìn)程的counter上-1 在某個(gè)時(shí)期內(nèi)創(chuàng)建的一個(gè)新進(jìn)程,在該時(shí)期內(nèi)的剩余時(shí)間片將從父進(jìn)程那里繼承一半,2020/6/2011/23/09,Li

18、nux操作系統(tǒng)分析,42/92,舉例:進(jìn)程0(INIT_TASK)的時(shí)間片:,HZ代表了1秒內(nèi)的tick數(shù) 因此一個(gè)tick就是1/100秒 即10ms 可以計(jì)算出 DEF_COUNTER=10個(gè)tick 即100ms (實(shí)際上約105ms) MAX_COUNTER=20個(gè)tick 即200ms,2020/6/2011/23/09,Linux操作系統(tǒng)分析,43/92,Linux-2.4.18中調(diào)度程序使用的數(shù)據(jù)結(jié)構(gòu),進(jìn)程描述符中: need_resched:是否需要調(diào)度 policy:調(diào)度策略 rt_priority:實(shí)時(shí)進(jìn)程的靜態(tài)優(yōu)先級(jí)(199),普通進(jìn)程不用(設(shè)為0) counter:當(dāng)前

19、剩余時(shí)間片 新時(shí)期開始時(shí)根據(jù)上述計(jì)算公式計(jì)算 每次時(shí)鐘中斷,時(shí)間片都會(huì)-1,直到為0(則請(qǐng)求調(diào)度) 創(chuàng)建一個(gè)新進(jìn)程時(shí),子進(jìn)程會(huì)繼承父進(jìn)程的一半剩余時(shí)間片 nice:基本時(shí)間片參數(shù),可以調(diào)節(jié),2020/6/2011/23/09,Linux操作系統(tǒng)分析,44/92,schedule函數(shù),schedule函數(shù)實(shí)現(xiàn)調(diào)度 目的:在運(yùn)行隊(duì)列中找到一個(gè)進(jìn)程,把CPU分配給它 調(diào)用方法: 直接調(diào)用,如sleep_on 松散調(diào)用,根據(jù)need_resched標(biāo)記 閱讀schedule,2020/6/2011/23/09,Linux操作系統(tǒng)分析,45/92,調(diào)度的時(shí)機(jī),調(diào)度時(shí)機(jī)來臨時(shí),內(nèi)核或驅(qū)動(dòng)將調(diào)用schedule() 在Linux中調(diào)度的時(shí)機(jī)主要有: current的狀態(tài)從running轉(zhuǎn)換為其他狀態(tài)時(shí),如: 1)進(jìn)程終止。exit()在最后調(diào)用schedule()。 2)進(jìn)程因某種原因進(jìn)入等待狀態(tài)。 比較常見的就是進(jìn)程調(diào)用nanosleep()或者wait系列的系統(tǒng)調(diào)用。 此外,在設(shè)備驅(qū)動(dòng)程序中,最常見的原因就是驅(qū)動(dòng)引發(fā)一次I/O操作后,為等待I/O操作的結(jié)束而進(jìn)入等待狀態(tài)。多數(shù)情況下,驅(qū)動(dòng)會(huì)直接調(diào)用schedule()。,2020/6/2011/23/09,Li

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論