亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux內(nèi)核交互式和非交互式進(jìn)程判別算法的質(zhì)疑

        2010-06-29 06:12:10科,
        關(guān)鍵詞:進(jìn)程程序

        張 科, 楊 斌

        (西南交通大學(xué)信息科學(xué)與技術(shù)學(xué)院,四川成都610031)

        在Linux2.6.18的內(nèi)核中,調(diào)度程序采用了動(dòng)態(tài)優(yōu)先級(jí)、O(1)調(diào)度算法、時(shí)間片粒度、內(nèi)核搶占點(diǎn)和進(jìn)程分類一系列提高內(nèi)核運(yùn)行效率的算法和策略,使得系統(tǒng)的運(yùn)行更加流暢和高效。內(nèi)核將進(jìn)程分為實(shí)時(shí)進(jìn)程和非實(shí)時(shí)進(jìn)程,在Linux操作系統(tǒng)下運(yùn)行的進(jìn)程默認(rèn)情況下都是非實(shí)時(shí)進(jìn)程,非實(shí)時(shí)進(jìn)程又分為交互式進(jìn)程和批處理進(jìn)程。

        交互式進(jìn)程的定義:進(jìn)程需要和用戶進(jìn)行交互,花大量的時(shí)間等待鍵盤(pán)輸入和鼠標(biāo)操作,一旦進(jìn)程接受到輸入,必須被盡快喚醒。通常來(lái)說(shuō),平均延遲時(shí)間是在50-150ms之間[1]。

        批處理進(jìn)程的定義:進(jìn)程在系統(tǒng)后臺(tái)運(yùn)行,不需要用戶的干預(yù),不需要被系統(tǒng)盡快響應(yīng),經(jīng)常被調(diào)度程序降低優(yōu)先級(jí)。如程序編譯器,數(shù)據(jù)庫(kù)引擎和科學(xué)計(jì)算[1]。

        被內(nèi)核認(rèn)定為交互式進(jìn)程的好處:(1)可以提升進(jìn)程的動(dòng)態(tài)優(yōu)先級(jí);(2)當(dāng)進(jìn)程的時(shí)間片使用完畢后,調(diào)度程序仍然將該進(jìn)程放到active運(yùn)行隊(duì)列末尾,而不是放到expired隊(duì)列中。這樣就可以保證交互式進(jìn)程如果處在就緒隊(duì)列中,能夠有很高的優(yōu)先級(jí)先被執(zhí)行,反映在用戶層面即有很快的響應(yīng)速度。

        1 與交互式進(jìn)程識(shí)別相關(guān)的變量和函數(shù)

        1.1 與交互式進(jìn)程判別相關(guān)的變量

        與交互式進(jìn)程判別相關(guān)的變量有:prio:動(dòng)態(tài)優(yōu)先級(jí);static-prio:靜態(tài)優(yōu)先級(jí);sleep-avg:平均睡眠時(shí)間;bonus:紅利;state:進(jìn)程狀態(tài);time-slice:時(shí)間片;sleep-type:睡眠類型;sleep-time:進(jìn)程阻塞時(shí)的睡眠時(shí)間;runtime:進(jìn)程占用CPU的時(shí)間。

        1.2 與交互式進(jìn)程判別相關(guān)的函數(shù)

        與交互式進(jìn)程判別相關(guān)的函數(shù)有:

        (1)do-fork:創(chuàng)建一個(gè)新進(jìn)程,其 prio、static-prio、sleep-avg都延續(xù)父進(jìn)程的值,其 time-slice為父進(jìn)程time-slice的一半。進(jìn)程創(chuàng)建完畢后被放入active運(yùn)行隊(duì)列末尾。

        (2)每當(dāng)系統(tǒng)時(shí)鐘的一個(gè)tick產(chǎn)生時(shí),調(diào)用scheduler-tick()函數(shù),將time-slice減1,如果time-slice等于0時(shí),調(diào)用effective-prio函數(shù)重新計(jì)算動(dòng)態(tài)優(yōu)先級(jí)(見(jiàn)動(dòng)態(tài)優(yōu)先級(jí)的計(jì)算公式),調(diào)用task-timeslice重新計(jì)算時(shí)間片,然后調(diào)用TASK-INTERACTIVE來(lái)判斷進(jìn)程是否是交互式進(jìn)程(見(jiàn)交互式進(jìn)程的判別公式),如果是則重新添加到active隊(duì)列末尾,否則將進(jìn)程添加到expired隊(duì)列末尾。

        (3)schedule函數(shù)計(jì)算當(dāng)前進(jìn)程的run-time,即當(dāng)前進(jìn)程這次占用CPU的時(shí)間,然后計(jì)算sleep-avg(見(jiàn)平均睡眠時(shí)間的計(jì)算方法),接著將當(dāng)前進(jìn)程切換出CPU,在進(jìn)程優(yōu)先級(jí)位圖中查找優(yōu)先級(jí)最高的進(jìn)程,判斷該進(jìn)程上次睡眠是否是交互式睡眠,如果是則重新計(jì)算優(yōu)先級(jí)recalc-task-prio,然后調(diào)入CPU運(yùn)行。

        (4)當(dāng)進(jìn)程由于等待資源而進(jìn)入阻塞隊(duì)列,當(dāng)資源滿足的時(shí)候,系統(tǒng)通過(guò)中斷或者信號(hào)處理程序調(diào)用trywake-up函數(shù)將該阻塞的進(jìn)程放入運(yùn)行隊(duì)列,在放入運(yùn)行隊(duì)列之前,要對(duì)該進(jìn)程計(jì)算本次睡眠時(shí)間,根據(jù)本次睡眠時(shí)間重新計(jì)算該進(jìn)程的sleep-avg(見(jiàn)平均睡眠時(shí)間的計(jì)算方法)和動(dòng)態(tài)優(yōu)先級(jí)。然后根據(jù)計(jì)算出的動(dòng)態(tài)優(yōu)先級(jí)決定進(jìn)入active中對(duì)應(yīng)的優(yōu)先級(jí)隊(duì)列。

        計(jì)算進(jìn)程是否是交互式進(jìn)程,以及進(jìn)程能夠進(jìn)入active中的哪個(gè)級(jí)別的優(yōu)先級(jí)隊(duì)列和這4種情況密切相關(guān)。下面具體分析各個(gè)參數(shù)的計(jì)算方法。

        2 交互式進(jìn)程同批處理進(jìn)程的區(qū)分算法

        2.1 動(dòng)態(tài)優(yōu)先級(jí)的計(jì)算公式

        式(2)中sleep-avg和bouus的關(guān)系如圖1所示。其中MAX-BONUS=10;MAX-SLEEP-AVG=1000ms該公式的含義為:將平均睡眠時(shí)間分為10個(gè)等級(jí),平均睡眠時(shí)間越長(zhǎng),紅利就越高,計(jì)算出的動(dòng)態(tài)優(yōu)先級(jí)也就越高。

        圖1 sleep-avg和bonus的關(guān)系

        2.2 交互式進(jìn)程的判別公式

        當(dāng)進(jìn)程的時(shí)間片使用完畢后,判斷如果進(jìn)程是交互式進(jìn)程,則將進(jìn)程添加到active隊(duì)列末尾。

        其中INTERACT IVE-DELTA為固定值2。

        由式(1)、(3)可得:

        由式(2)、(4)、(5)得出:

        即當(dāng)滿足式(6)的情況下時(shí),那么進(jìn)程就是交互式進(jìn)程。其中static-prio和sleep-avg的關(guān)系如圖2所示。

        由式(5)可見(jiàn)static-prio[100,139]被分為 10個(gè)等級(jí),sleep-avg也被劃分為10個(gè)等級(jí)進(jìn)行對(duì)應(yīng)處理。

        可見(jiàn)當(dāng)static-prio在[136,139]之間時(shí),sleep-avg的最大值為1000ms,式(5)不能成立,故當(dāng)靜態(tài)優(yōu)先級(jí)在[136,139]之間時(shí),進(jìn)程永遠(yuǎn)不可能被識(shí)別為交互式進(jìn)程。

        2.3 平均睡眠時(shí)間的計(jì)算方法

        (1)進(jìn)程從阻塞到運(yùn)行隊(duì)列時(shí)計(jì)算的sleep-avg

        由于進(jìn)程等待資源而產(chǎn)生阻塞,進(jìn)入相應(yīng)的阻塞隊(duì)列。隨著被等待的資源釋放,進(jìn)程被喚醒,重新計(jì)算平均睡眠時(shí)間和動(dòng)態(tài)優(yōu)先級(jí),重新設(shè)置進(jìn)程狀態(tài)和sleep-type,然后將該進(jìn)程放入相應(yīng)的運(yùn)行隊(duì)列,等待調(diào)度程序調(diào)度。

        在內(nèi)核計(jì)算平均優(yōu)先級(jí)的方法如下:

        Linux內(nèi)核中存在一個(gè)交互式睡眠的時(shí)間表INTERACTIVE-SLEEP(p),公式為:

        圖2 static-prio和sleep-avg的關(guān)系

        化簡(jiǎn)后:INTERACTIVE-SLEEP(p)=25*static-prio-2201。其中INTERACTIVE-SLEEP和static-prio的關(guān)系如圖3所示。

        如果此次的睡眠時(shí)間(即調(diào)度程序?qū)⒃撨M(jìn)程切換出CPU到該進(jìn)程重新進(jìn)入就緒隊(duì)列中的時(shí)間)大于INTERACTIVESLEEP(p),并且 sleep-avg < INTERACTIVE-SLEEP(p),將sleep-avg=INTERACTIVE-SLEEP(p)

        當(dāng)進(jìn)程因?yàn)樽x取硬盤(pán)資源而阻塞的時(shí)候,其阻塞狀態(tài)為T(mén)ASK-UNINTERRUPTIBLE,當(dāng)進(jìn)程被喚醒的時(shí)候,sleeptype設(shè)置為SLEEP-NONINTERACTIVE。

        當(dāng)sleep-type為SLEEP-NONINTERACTIVE狀態(tài)的時(shí)候,如果平均睡眠時(shí)間超過(guò)閾值,或此次睡眠時(shí)間和平均睡眠時(shí)間之和超過(guò)閾值的時(shí)候,平均睡眠時(shí)間就被置為閾值。但不超過(guò)平均睡眠時(shí)間的最大值ls。

        (2)從CPU中切換下來(lái)時(shí),平均睡眠時(shí)間的計(jì)算在進(jìn)程被調(diào)度程序切換出CPU時(shí):

        其中CURRENT-BONUS=sleep-avg*MAX-BONUS/MAX-SLEEP-AVG

        可見(jiàn)如果平均睡眠時(shí)間越高(即該進(jìn)程越有可能是交互式進(jìn)程),其運(yùn)行時(shí)間減少得越快,sleep-avg減少得也就越慢,這樣處理的目的是保證進(jìn)程不會(huì)從交互式進(jìn)程和批處理進(jìn)程之間頻繁切換。

        這樣 :sleep-avg=sleep-avg+sleep-time-run-time。

        圖3 INTERACTIVE-SLEEP和static-prio的關(guān)系

        3 測(cè)試?yán)淘O(shè)計(jì)

        3.1 測(cè)試程序功能

        (1)在內(nèi)核中調(diào)度階段、進(jìn)程喚醒階段和時(shí)間片使用完畢階段加入打印信息

        (2)使用驅(qū)動(dòng)程序打開(kāi)內(nèi)核中對(duì)應(yīng)pid的打印信息

        (3)用戶測(cè)試進(jìn)程完成的功能

        打開(kāi)驅(qū)動(dòng),修改內(nèi)核變量,使內(nèi)核只打印該進(jìn)程的內(nèi)核信息。

        遍歷硬盤(pán)上某個(gè)目錄下的所有文件,并讀取每個(gè)文件內(nèi)容,然后將每個(gè)文件再寫(xiě)入磁盤(pán),遍歷完所有文件后退出程序。目的:模擬編譯程序的執(zhí)行過(guò)程,判別該進(jìn)程最終是否被內(nèi)核識(shí)別出為非交互式進(jìn)程和識(shí)別的過(guò)程。

        當(dāng)進(jìn)程在shell中執(zhí)行時(shí),shell為其父進(jìn)程,該進(jìn)程被fork時(shí),sleep-avg,static-prio,prio這些都從父進(jìn)程中繼承下來(lái),即與shell的參數(shù)相同,其他參數(shù)測(cè)試結(jié)果如表1所示。

        表1 未修改靜態(tài)優(yōu)先級(jí)時(shí)進(jìn)程的測(cè)試結(jié)果

        測(cè)試2:

        當(dāng)進(jìn)程在shell中執(zhí)行時(shí),shell為其父進(jìn)程,該進(jìn)程被fork時(shí),采用setpriority函數(shù)修改進(jìn)程的靜態(tài)優(yōu)先級(jí)為136,結(jié)果如表2所示。

        表2 設(shè)定靜態(tài)優(yōu)先級(jí)是136的測(cè)試結(jié)果

        4 總結(jié)

        根據(jù)測(cè)試結(jié)果分析,由于進(jìn)程頻繁訪問(wèn)硬盤(pán),從硬盤(pán)獲取數(shù)據(jù),不斷造成進(jìn)程阻塞,處于TASK-UNINTERRUPTIBLE阻塞狀態(tài),當(dāng)磁盤(pán)控制器將讀取的數(shù)據(jù)放入內(nèi)存中時(shí),產(chǎn)生中斷,調(diào)用try-wake-up函數(shù)喚醒進(jìn)程。由于訪問(wèn)硬盤(pán)的時(shí)間比運(yùn)行時(shí)間長(zhǎng),造成sleep-avg的值不斷增大,最終被判定為交互式進(jìn)程。根據(jù)以上的分析:

        (1)當(dāng)進(jìn)程的靜態(tài)優(yōu)先級(jí)在[100,135]時(shí),2.6.18內(nèi)核并不能真正區(qū)分交互式進(jìn)程和批處理進(jìn)程。

        (2)當(dāng)進(jìn)程的靜態(tài)優(yōu)先級(jí)在[136,139]時(shí),不論進(jìn)程是否真的是交互式進(jìn)程,內(nèi)核一律將之識(shí)別為非交互式進(jìn)程處理。

        由于2.6.18內(nèi)核的對(duì)交互式進(jìn)程判別的不正確。當(dāng)在編寫(xiě)頻繁訪問(wèn)硬盤(pán)數(shù)據(jù)的程序時(shí),可以采用setpriority函數(shù)適當(dāng)?shù)亟档驮撨M(jìn)程的優(yōu)先級(jí)來(lái)保證系統(tǒng)對(duì)真正需要交互的進(jìn)程的及時(shí)響應(yīng)。

        如果不降低該進(jìn)程的優(yōu)先級(jí),將會(huì)造成比該進(jìn)程優(yōu)先級(jí)低的真正的交互式進(jìn)程無(wú)法得到運(yùn)行而呈現(xiàn)死機(jī)的狀態(tài)。

        [1]Daniel P.Bovet,Marco Cesati.Understanding the Linux Kernel[M].O'Reilly,2005.

        [2]毛德操,胡希明.Linux內(nèi)核源代碼情景分析[M].浙江:浙江大學(xué)出版社,2001.

        [3]趙炯.Linux內(nèi)核完全剖析[M].北京:機(jī)械工業(yè)出版社,2006.

        猜你喜歡
        進(jìn)程程序
        債券市場(chǎng)對(duì)外開(kāi)放的進(jìn)程與展望
        試論我國(guó)未決羈押程序的立法完善
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        恐怖犯罪刑事訴訟程序的完善
        我國(guó)高等教育改革進(jìn)程與反思
        Linux僵死進(jìn)程的產(chǎn)生與避免
        男女平等進(jìn)程中出現(xiàn)的新矛盾和新問(wèn)題
        久久97久久97精品免视看 | 久久国产自偷自免费一区100| 国产综合久久久久影院| 国产99久久久国产精品免费 | 久久深夜中文字幕高清中文| 精品女同一区二区三区免费战| 18禁黄污吃奶免费看网站| 国产95在线 | 欧美| 国产亚洲精品福利在线| 亚洲女同性恋激情网站| 免费a级毛片又大又粗又黑| 国产色无码精品视频国产| 欧洲亚洲综合| 国产成人亚洲合色婷婷| 我要看免费久久99片黄色| 99久久免费国产精品| 色综合久久综合欧美综合图片 | 国产精品久久久久9999吃药| 又大又粗弄得我出好多水| 精品国产日韩无 影视| 国产精品熟女少妇不卡| 日本一二三区视频在线| 激情亚洲一区国产精品| 杨幂国产精品一区二区| 国产自拍视频在线观看免费 | 激,情四虎欧美视频图片| 国产三级精品三级男人的天堂| 亚洲中文字幕无码av| 亚洲人免费| 成人性生交c片免费看| 日产乱码一二三区别免费l| 中国丰满熟妇av| 99免费视频精品| 人妻一区二区三区在线看| 日韩欧美成人免费观看| 精品国产群3p在线观看| 日本一区二区三区在线观看视频| 99久久久无码国产精品性| 野外性史欧美k8播放| 美女精品国产一区二区三区| 一本色道久久亚洲加勒比|