Linux 調(diào)度器實現(xiàn)原理

調(diào)度器是非常復(fù)雜的話題,尤其是 CFS 調(diào)度器,想要描述清楚,需要一支非凡的筆,我還沒有找到。但 BFS 非常簡單,所以我才有勇氣在這里寫點兒 BFS 的實現(xiàn)原理什么的。首先介紹幾個關(guān)鍵概念。

虛擬 Deadline ( Virtual Deadline )

當一個進程被創(chuàng)建時,它被賦予一個固定的時間片,和一個虛擬 Deadline。該虛擬 deadline 的計算公式非常簡單:

Virtual Deadline = jiffies + (user_priority * rr_interval) 公式一

其中 jiffies 是當前時間 , user_priority 是進程的優(yōu)先級,rr_interval 代表 round-robin interval,近似于一個進程必須被調(diào)度的最后期限,所謂 Deadline 么。不過在這個 Deadline 之前還有一個形容詞為 Virtual,因此這個 Deadline 只是表達一種愿望而已,并非很多領(lǐng)導(dǎo)們常說的那種 deadline。

虛擬 Deadline 將用于調(diào)度器的 picknext 決策,這將在后續(xù)章節(jié)詳細描述。

進程隊列的表示方法和調(diào)度策略

在操作系統(tǒng)內(nèi)部,所有的 Ready 進程都被存放在進程隊列中,調(diào)度器從進程隊列中選取下一個被調(diào)度的進程。因此如何設(shè)計進程隊列是我們研究調(diào)度器的一個重要話題。BFS 采用了非常傳統(tǒng)的進程隊列表示方法,即 bitmap 加 queue。

BFS 將所有進程分成 4 類,分別表示不同的調(diào)度策略 :

Realtime,實時進程 SCHED_ISO,isochronous 進程,用于交互式任務(wù) SCHED_NORMAL,普通進程 SCHED_IDELPRO,低優(yōu)先級任務(wù) 實時進程總能獲得 CPU,采用 Round Robin 或者 FIFO 的方法來選擇同樣優(yōu)先級的實時進程。他們需要 superuser 的權(quán)限,通常限于那些占用 CPU 時間不多卻非常在乎 Latency 的進程。

SCHED_ISO 在主流內(nèi)核中至今仍未實現(xiàn),Con 早在 2003 年就提出了這個 patch,但一直無法進入主流內(nèi)核,這種調(diào)度策略是為了那些 near-realtime 的進程設(shè)計的。如前所述,實時進程需要用戶有 superuser 的權(quán)限,這類進程能夠獨占 CPU,因此只有很少的進程可以被配置為實時進程。對于那些對交互性要求比較高的,又無法成為實時進程的進程,BFS 將采用 SCHED_ISO,這些進程能夠搶占 SCHED_NORMAL 進程。他們的優(yōu)先級比 SCHED_NORMAL 高,但又低于實時進程。此外當 SCHED_ISO 進程占用 CPU 時間達到一定限度后,會被降級為 SCHED_NORMAL,防止其獨占整個系統(tǒng)資源。

SCHED_NORMAL 類似于主流調(diào)度器 CFS 中的 SCHED_OTHER,是基本的分時調(diào)度策略。

SCHED_IDELPRO 類似于 CFS 中的 SCHED_IDLE,即只有當 CPU 即將處于 IDLE 狀態(tài)時才被調(diào)度的進程。

在這些不同的調(diào)度策略中,實時進程分成 100 個不同的優(yōu)先級,加上其他三個調(diào)度策略,一共有 103 個不 同的進程類型。對于每個進程類型,系統(tǒng)中都有可能有多個進程同時 Ready,比如很可能有兩個優(yōu)先級為 10 的 RT 進程同時 Ready,所以對于每個類型,還需要一個隊列來存儲屬于該類型的 ready 進程。

BFS 用 103 個 bitmap 來表示是否有相應(yīng)類型的進程準備進行調(diào)度。如圖所示:

當任何一種類型的進程隊列非空時,即存在 Ready 進程時,相應(yīng)的 bitmap 位被設(shè)置為 1。

調(diào)度器如何在這樣一個 bitmap 加 queue 的復(fù)雜結(jié)構(gòu)中選擇下一個被調(diào)度的進程的問題被稱為 Task Selection 或者 pick next。

Task Selection i.e. Pick Next

當調(diào)度器決定進行進程調(diào)度的時候,BFS 將按照下面的原則來進行任務(wù)的選擇:

首先查看 bitmap 是否有置位的比特。比如上圖,對應(yīng)于 SCHED_NORMAL 的 bit 被置位,表明有類型為 SCHED_NORMAL 的進程 ready。如果有 SCHED_ISO 或者 RT task 的比特被置位,則優(yōu)先處理他們。

選定了相應(yīng)的 bit 位之后,便需要遍歷其相應(yīng)的子隊列。假如是一個 RT 進程的子隊列,則選取其中的第一個進程。如果是其他的隊列,那么就采用 EEVDF 算法來選取合適的進程。

EEVDF,即 earliest eligible virtual deadline first。BFS 將遍歷該子隊列,一個雙向列表,比較隊列中的每一個進程的 Virtual Deadline 值,找到最小的那個。最壞情況下,這是一個 O(n) 的算法,即需要遍歷整個雙向列表,假如其中有 n 個進程,就需要進行 n 此讀取和比較。

但實際上,往往不需要遍歷整個 n 個進程,這是因為 BFS 還有這樣一個搜索條件:

當某個進程的 Virtual Deadline 小于當前的 jiffies 值時,直接返回該進程。并將其從就緒隊列中刪除,下次再 insert 時會放到隊列的尾部,從而保證每個進程都有可能被選中,而不會出現(xiàn)饑餓現(xiàn)象。

這條規(guī)則對應(yīng)于這樣一種情況,即進程已經(jīng)睡眠了比較長的時間,以至于已經(jīng)睡過了它的 Virtual Deadline,

T1 本來的 virtual deadline 為 t1,它 sleep 之后,其他的進程比如 T2 開始運行,等到 T1 再次 wakeup 的時候,當時的 jiffies 已經(jīng)大于 t1,在這種情況下,T1 無需和其他進程的 virtual deadline 相比較,而直接被 BFS 調(diào)度器選取。

基本調(diào)度場景

三個基本的 scenario 可以概括多數(shù)的調(diào)度情景。系統(tǒng)中發(fā)生的每一次調(diào)度都屬于以下三種情景之一。

進程wakeup:TaskInsertion

睡眠進程 wakeup 時,調(diào)度器需要執(zhí)行 task insertion 的操作,將該進程插入到 run queue 中。BFS 將進程插入相應(yīng)隊列的操作就是執(zhí)行一個雙向隊列的插入操作,計算機常用算法結(jié)構(gòu)告訴我們,這個操作是 O(1) 的。不過,BFS 在執(zhí)行插入操作之前需要首先查看當前進程是否可以搶占當前正在系統(tǒng)中運行的進程。因此它會用新進程的 virtual deadline 值和當前在每個 CPU 上正在運行的進程的 virtual deadline 值進行比較,如果新進程的值小,則直接搶占該 CPU 上正在運行的進程。這個算法是 O(m) 的,其中 m 是 CPU 的個數(shù),假如系統(tǒng)中有 16 個 CPU,那么每次都需要進行 16 次比較。但這個設(shè)計卻保證了非常好的 low-latency 特性。

進程Sleep

當前正在運行的進程有可能主動睡眠,此時,調(diào)度器需要將該進程從 run queue 中移除,并選擇另外一個進程運行。但該進程的 virtual deadline 的值保持不變。

這樣該進程 wakeup 時,其 virtual deadline 將相對較小,因為 jiffies 隨著時間流逝而不斷增加。較小的 Virtual Deadline 可以保證該進程能更快得到調(diào)度。

仍然以圖 8 為例,系統(tǒng)中有兩個進程,T1 和 T2,T1 進入 sleep 狀態(tài)后其 virtual deadline 仍然為 t1。T2 此時被調(diào)度,根據(jù)公式一,計算得出其 virtual deadline 為 t2。此后,T1 進程 wakeup 了,此時雖然 T2 的時間片尚未用完,但由于 T1 的 virtual deadline 小于 T2 的,(t1<t2),因此 T1 立即得到調(diào)度。

進程用完自己的時間片

每個進程都擁有自己的時間片,即使不被其他進程搶占,假如屬于自己的時間片用完時,當前進程也一定會被剝奪 CPU 時間,以便讓別的進程有機會執(zhí)行。

當前進程的時間片用完后就必須讓出 CPU, 此時將它的 virtual deadline 按照公式一重新計算。

這保證了一個特性:只有其他就緒進程都獲得 CPU 之后,用完當前時間片的進程才可以再次得到運行,這避免了饑餓。

Linux 調(diào)度器造價信息

市場價 信息價 詢價
材料名稱 規(guī)格/型號 市場價
(除稅)
工程建議價
(除稅)
行情 品牌 單位 稅率 供應(yīng)商 報價日期
調(diào)度系列——音頻調(diào)度總機 DZY-1 查看價格 查看價格

13% 北京二七通信工廠
應(yīng)急調(diào)度服務(wù)器 E3-1220/8G/1T/1u機架式 查看價格 查看價格

13% 深圳市信沃成自動化技術(shù)有限公司
應(yīng)急調(diào)度服務(wù)器 E3-1220/8G/1T/1u機架式 查看價格 查看價格

13% 長沙美能電力設(shè)備股份有限公司廣州辦事處
調(diào)度系列——程控調(diào)度分機 DC-7 查看價格 查看價格

13% 北京二七通信工廠
調(diào)度控制 RF-AX403.43 1調(diào)度控制最多4個電梯控制 工作電壓:DC 12V(具有過壓流自保護、反接保護、自恢復(fù)功能)箱體含電源 廂外讀 查看價格 查看價格

13% 杭州立方控股股份有限公司深圳分公司
調(diào)度系列——音頻調(diào)度分機 DFY-1 查看價格 查看價格

13% 北京二七通信工廠
調(diào)度 0.35m×0.15m 冷軋板烤漆,字體絲印 查看價格 查看價格

13% 四川忠義廣告有限責任公司
調(diào)度主機設(shè)備 品種:調(diào)度主機設(shè)備;注釋:NC5200;數(shù)量:1;規(guī)格型號:KTJ7-8000;備注:含錄音系統(tǒng)(300門)及接線端子及保安單元; 查看價格 查看價格

杭州北辰

13% 寧夏魯安裝飾裝修工程有限公司
材料名稱 規(guī)格/型號 除稅
信息價
含稅
信息價
行情 品牌 單位 稅率 地區(qū)/時間
攪拌 查看價格 查看價格

臺班 汕頭市2012年4季度信息價
吸塵 查看價格 查看價格

臺班 汕頭市2012年2季度信息價
攪拌 查看價格 查看價格

臺班 汕頭市2012年1季度信息價
吸塵 查看價格 查看價格

臺班 汕頭市2011年4季度信息價
攪拌 查看價格 查看價格

臺班 汕頭市2011年2季度信息價
攪拌 查看價格 查看價格

臺班 廣州市2011年1季度信息價
吸塵 查看價格 查看價格

臺班 廣州市2010年4季度信息價
攪拌 查看價格 查看價格

臺班 汕頭市2010年4季度信息價
材料名稱 規(guī)格/需求量 報價數(shù) 最新報價
(元)
供應(yīng)商 報價地區(qū) 最新報價時間
軟件實現(xiàn) 火災(zāi)自動報警系統(tǒng)開發(fā)軟件(針對具體設(shè)備在區(qū)域火災(zāi)報警實現(xiàn))|100臺 1 查看價格 諾帝菲爾(中國)公司 廣東  廣州市 2019-09-16
操作系統(tǒng)(Linux) Linux Enterprise 12.0(2cpu)一年服務(wù),盒包|2套 1 查看價格 上海傾菲電子科技有限公司 全國   2018-05-17
Linux系統(tǒng) Linux Enterprise 12.0(2cpu)一年服務(wù),盒包|15套 1 查看價格 上海傾菲電子科技有限公司 全國   2018-05-17
調(diào)度中心 實時調(diào)度,主要實現(xiàn)餐廚垃圾在收運處過程中的日常作業(yè)安排與應(yīng)急情況調(diào)度管理|1套 1 查看價格 中國移動通信集團廣東有限公司江門分公司 全國   2019-12-19
調(diào)度管理 按照空間、時間、設(shè)備和規(guī)則創(chuàng)建和維護調(diào)度任務(wù),實現(xiàn)各專業(yè)設(shè)備的智能調(diào)度和聯(lián)動控制.|1套 2 查看價格 全國  
操作系統(tǒng)(Linux) Linux Enterprise 12.0(2cpu)一年服務(wù),盒包|4套 1 查看價格 上海傾菲電子科技有限公司 全國   2018-05-17
調(diào)度機搬遷 調(diào)度機搬遷|1.00項 1 查看價格 廣州市熹尚科技設(shè)備有限公司 全國   2019-12-20
調(diào)度機搬遷 調(diào)度機搬遷|1.00項 1 查看價格 廣州曹易智能科技有限公司 全國   2019-12-30

Linux 調(diào)度器對比

BFS vs CFS,設(shè)計上的不同 白天 Con Kolivas 在醫(yī)院里當麻醉師,為人們解除痛苦,業(yè)余的時候借 Linux 解除自己的痛苦。額,Kolivas 學習 Linux 并不是為了解決痛苦,我臆測而已。但據(jù) Kolivas 自述,他接觸 Linux 內(nèi)核時連 C 語言也沒有學習過。。。這個事實證明,語言只是一項工具,對問題本質(zhì)的深入理解才是寫程序的關(guān)鍵??赡苓€有執(zhí)著,CFS 和 RSDL 之爭導(dǎo)致 Kolivas 離開 Linux 社區(qū),此去經(jīng)年,當 Kolivas 再次開始看內(nèi)核代碼的時候,他立即發(fā)現(xiàn) CFS 存在以下幾個設(shè)計上的問題:

CFS 的目標是支持從桌面到高端服務(wù)器的所有應(yīng)用場景,這種大而全的設(shè)計思路導(dǎo)致其必須做一些實現(xiàn)上的折中,此外,那些只有在高端機器中才需要的特性將引入不必要的復(fù)雜代碼。

其次,為了維護多 CPU 上的公平性,CFS 采用了負載平衡機制,Kolivas 認為,這些復(fù)雜代碼抵消了 per cpu queue 曾帶來的好處。

最后,主流內(nèi)核的 CFS 還是對睡眠進程存在一些偏好,這意味著"不公平"。

設(shè)計目標不同

在現(xiàn)實中,調(diào)度算法類似一個處境尷尬的主婦,滿足孩子對晚餐的要求便有可能傷害到老人的食欲。Linux 內(nèi)核一直試圖做出一道讓全家老少都喜歡的菜,在這方面,CFS 已經(jīng)做的很好。但一道能被所有人接受的菜,或許就意味著稍許平淡。而 BFS 只打算滿足一種口味,以便將這種口味發(fā)展到極限。

根據(jù) Linux Magazine的說法,Con Kolivas是看到了下面這則來自 xkcd 的漫畫而開始思考 BFS 的。

事情源于一些 Linux 用戶,他們發(fā)現(xiàn) Linux 雖然號稱能夠充分發(fā)揮 4096 顆 CPU 系統(tǒng)的計算能力,但在普通的 laptop 上卻無法流暢地播放 Youtube 視頻。

這讓人們開始思考,對于 Desktop 環(huán)境來講,CFS 哪些復(fù)雜的特性究竟是否還有意義?人們是否有必要在自己的個人電腦中使用一個支持 4096 個 CPU 的調(diào)度器?

BFS 正是對這種質(zhì)疑的自然反應(yīng)。它不打算支持 4096 個 CPU 的龐然大物,BFS 的目標是普通人使用的桌面電腦。此外,BFS 還刪除了那些只有在服務(wù)器上才需要的特性。比如,BFS 拋棄了 CFS 的組調(diào)度特性,類似 CGROUP 這樣的特性對于普通的桌面用戶是多余的技術(shù)。

這很容易理解:在只有一個 CPU 的系統(tǒng)中,誰還會設(shè)計多個 CGroup,哪里還能用到 NUMA domain等概念呢?

此外 BFS 使用單一的 run queue,不再需要復(fù)雜的負載均衡機制。由于不再有 CGROUP 概念,也不再需要 Group 間的負載均衡。

這些簡單的裁剪使得 BFS 的代碼極大地簡化,簡化的代碼意味著執(zhí)行一次調(diào)度所需要的指令數(shù)減少了,相應(yīng)的 footprint 自然也減少了。

當然簡化代碼只是一個顯而易見的方面,更重要的是,這種理念的不同會對最終的調(diào)度器實現(xiàn)產(chǎn)生更加深遠的影響,這實在是難以盡述。

多隊列 vs 單一隊列

?在 Linux 內(nèi)核進入 2.6 時,調(diào)度器采用 per cpu run queue 從而克服了單一 run queue 的局限。在多 CPU 系統(tǒng)中,單一 run queue 意味著 run queue 成為了系統(tǒng)的瓶頸,因為在同一時刻,一個 CPU 訪問 run queue 時,其他的 CPU 即使空閑也必須等待。當使用 per CPU 的 run queue 之后,每個 CPU 不必再使用大鎖,從而能夠并行地處理調(diào)度。

但很多事情都不像第一眼看上去那樣簡單。

Kolivas 發(fā)現(xiàn),采用 per cpu run queue 所帶來的好處會被追求公平性的 load balance 代碼所抵消。在目前的 CFS 調(diào)度器中,每顆 CPU 只維護本地 run queue 中所有進程的公平性,為了實現(xiàn)跨 CPU 的調(diào)度公平性,CFS 必須定時進行 load balance,將一些進程從繁忙的 CPU 的 run queue 中移到其他空閑的 run queue 中。

這個 load balance 的過程需要獲得其他 run queue 的鎖,這種操作降低了多運行隊列帶來的并行性。

并且在復(fù)雜情況下,這種因 load balance 而引入的 footprint 將非常可觀。

當然,load balance 引入的加鎖操作依然比全局鎖的代價要低,這種代價差異隨著 CPU 個數(shù)的增加而更加顯著。但請您注意,BFS 并不打算為那些擁有 1024 個 CPU 的系統(tǒng)工作,假若系統(tǒng)中的 CPU 個數(shù)有限時,多 run queue 的優(yōu)勢便不明顯了。

而 BFS 采用單一隊列之后,每一個需要調(diào)度的新進程都可以在全局范圍內(nèi)查找最合適的 CPU,而無需 CFS 那樣等待 load balance 代碼來決定,這減少了多 CPU 之間裁決的延遲,最終的結(jié)果是更小的調(diào)度延遲。

向前看還是向后看?

多年來 Kolivas 一直關(guān)注著 Linux 在 desktop 上的表現(xiàn)。對于 desktop 的用戶,最注重的不是系統(tǒng)的吞吐量,而是交互性程序的流暢體驗。從 SD 開始,Kolivas 就告訴內(nèi)核黑客們,完全公平能夠從根本上保證交互性。他始終堅持一個基本觀點:調(diào)度器應(yīng)該 forward look only。決不要去考慮一個進程的過去。

CFS 卻偏偏要考慮進程的過去。2.6.23 的時候,CFS 記錄并使用 sleep time。之后不久,在 2.6.24 發(fā)布的時候,CFS 合并了"Real Fair Scheduler",刪除了 sleep time。因此在 2.6.24 之后的內(nèi)核中,CFS 終于也不再考慮進程過去的睡眠時間。

但 CFS 還是保留了 sleeper fairness 的思想,當進程 wakeup 的時候,在 place_entity() 函數(shù)中,CFS 將對 sleeper 進行獎勵,以便其能盡快得到 CPU。這個策略是非常微妙的,我們在 2.1 節(jié)中詳細介紹了 sleeper fairness 的演進過程。假如您花些時間回頭再看看,就會發(fā)現(xiàn) sleeper fairness 曾造成怎樣嚴重的延遲問題。雖然 Ingo 自稱 Gentle fairness 解決了延遲問題,但從代碼上看,Gentle Fairness 只是對 sleeper 的獎勵減半而已。因此我們可以說,CFS 依然對 Sleeper 進程進行獎勵,這代表著一種偏好,一種"不公平"。而這,正是 BFS 所反對的。

BFS 中,當一個進程 wakeup 時,調(diào)度器將根據(jù)進程的 deadline 來進行選擇(關(guān)于 deadline 本文將在第 4 章中詳細描述),其結(jié)果是,更早睡眠的進程能更快地得到調(diào)度;CFS 的 sleeper fairness 則意味著要根據(jù) wakeup 的時間來選擇下一個被調(diào)度的進程,更早 wakeup 的進程會更快得到調(diào)度。

這種不同究竟會對桌面應(yīng)用造成何種影響尚沒有理論依據(jù)可以參考。但我個人認為,BFS 的策略更加合理。

您現(xiàn)在可能已經(jīng)讀得有些煩躁了 ( 這些英文加中文的說些啥啊 ),所以我還是盡快介紹一下 BFS 的實現(xiàn)細節(jié)吧。然后或許您會理解我,有些詞還是不翻譯更好。

BFS 是一個進程調(diào)度器,可以解釋為"腦殘調(diào)度器"。這古怪的名字有多重含義,比較容易被接受的一個說法為:它如此簡單,卻如此出色,這會讓人對自己的思維能力產(chǎn)生懷疑。

BFS 不會被合并進入 Linus 維護的 Linux mainline,BFS 本身也不打算這么做。但 BFS 擁有眾多的擁躉,這只有一個原因:BFS 非常出色,它讓用戶的桌面環(huán)境達到了前所未有的流暢。在硬件越來越先進,系統(tǒng)卻依然常顯得遲鈍的時代,這實在讓人興奮。

進入 2010 年,Android 開發(fā)一個分支使用 BFS 作為其操作系統(tǒng)的標準調(diào)度器,這也證明了 BFS 的價值。后來放棄。

Linux 調(diào)度器實現(xiàn)原理常見問題

  • 安裝雙系統(tǒng)win7linux雙系統(tǒng)桌面實現(xiàn)?

    可以直接到網(wǎng)上下載源文件來安裝的,1.進入“安裝類型”界面,如果它顯示的是:“The?computer?currently?has?no?deteted?operating?system”的話,接著看...

  • Linux如何服務(wù)器作時間源

    一、執(zhí)行步驟:1.以root身份登錄2.查看系統(tǒng)時間(date)和系統(tǒng)bios時間(hwclock或/sbin/hwclock)3.在/usr/sbin下,使用命令 ntpdate ...

  • linux認證都有啥?

    LPI 作為國內(nèi)外知名的Linux認證機構(gòu),長期受IBM、google、hp、騰訊等國內(nèi)外知名企業(yè)委托招聘Linux工程師,同時LPIC Level 2證書獲得者大都供職于以上企業(yè)。Novell對所有...

linux調(diào)度器(BFS )是一款專門為 Linux 桌面環(huán)境所設(shè)計的內(nèi)核調(diào)度器,它基于 Staircase Deadline和 EEVDF 算法,支持 Linux 2.6.31之后的內(nèi)核。它提供了前所未有的流暢桌面性能,不僅得到了用戶的認可,也為一些商業(yè)系統(tǒng)所采用。

Linux 調(diào)度器實現(xiàn)原理文獻

高性能Linux網(wǎng)絡(luò)服務(wù)器設(shè)計與實現(xiàn) 高性能Linux網(wǎng)絡(luò)服務(wù)器設(shè)計與實現(xiàn)

格式:pdf

大?。?span id="vkegqub" class="single-tag-height">261KB

頁數(shù): 2頁

評分: 4.6

高性能的網(wǎng)絡(luò)服務(wù)器需要能夠處理海量的Socket連接,并及時處理各種網(wǎng)絡(luò)事件。提出了Linux下基于e-poll和池技術(shù)的設(shè)計實現(xiàn)方案,并將該方案和其他方案進行了對比測試,測試結(jié)果表明,該方案優(yōu)于其他方案,能滿足高性能網(wǎng)絡(luò)服務(wù)器的要求,并在實際應(yīng)用中表現(xiàn)出色。

立即下載
嵌入式Linux下溫濕度傳感器的設(shè)計與實現(xiàn) 嵌入式Linux下溫濕度傳感器的設(shè)計與實現(xiàn)

格式:pdf

大?。?span id="al2d7nq" class="single-tag-height">261KB

頁數(shù): 5頁

評分: 4.7

在嵌入式應(yīng)用領(lǐng)域,需要測量周圍環(huán)境的質(zhì)量對生產(chǎn)和工作進行監(jiān)控和預(yù)警。通過比較設(shè)計方案,提出在嵌入式Linux下,基于PXA310平臺溫濕度傳感器的設(shè)計與實現(xiàn)方法。在Linux操作系統(tǒng)下通過對驅(qū)動程序接口調(diào)用,完成溫濕度數(shù)據(jù)讀取和預(yù)警,并對Linux驅(qū)動程序編寫進行比較。實驗表明,本方案硬件和軟件設(shè)計切實可行,提高了環(huán)境測量的準確度和系統(tǒng)性能的實時性。

立即下載

Kiwi Linux是面向i386架構(gòu)的一份修改過的Ubuntu自啟動運行光盤,它包含羅馬尼亞語和匈牙利語的本地化,多媒體編碼解碼器,對加密DVD的支持, 面向Firefox的Flash及Java插件,用于訪問本地互聯(lián)網(wǎng)服務(wù)(Clicknet和RDS)的PPPoE圖形用戶界面,以及對NTFS分區(qū)的寫 支持。

生產(chǎn)調(diào)度是一項日常性的工作,應(yīng)當把一些反映生產(chǎn)調(diào)度規(guī)律性的、行之有效的例行工作方法制度化,以指導(dǎo)調(diào)度工作的有效開展。調(diào)度工作制度一般有:值班制度、調(diào)度會議制度、現(xiàn)場調(diào)度制度、調(diào)度報告制度等。其內(nèi)容視企業(yè)具體情況而定。

實行值班制度

為了組織調(diào)度,及時處理生產(chǎn)中出現(xiàn)的問題,廠部、車間都應(yīng)建立調(diào)度值班制度。規(guī)模較大的企業(yè)可設(shè)中央調(diào)度控制臺。廠部、車間都要設(shè)值班調(diào)度,處理日常生產(chǎn)中的問題。值班調(diào)度在值班期內(nèi),要經(jīng)常檢查車間、工段作業(yè)完成情況及科室配合情況,檢查調(diào)度會議決議的執(zhí)行情況,及時處理生產(chǎn)中的問題,填寫調(diào)度日志,把當班發(fā)生的問題和處理情況記錄下來實行調(diào)度報告制度。為了使各級調(diào)度機構(gòu)和領(lǐng)導(dǎo)及時了解生產(chǎn)情況,企業(yè)各級調(diào)度機構(gòu)要把每日值班調(diào)度的情況報告給上級調(diào)度部門和有關(guān)領(lǐng)導(dǎo)。企業(yè)一級生產(chǎn)調(diào)度機構(gòu)要把每日生產(chǎn)情況、庫存情況、產(chǎn)品配套進度情況、商品出產(chǎn)進度情況等,報企業(yè)領(lǐng)導(dǎo)和有關(guān)科室、車間掌握。

堅持調(diào)度會議制度

調(diào)度會議是一種發(fā)揚民主、集思廣益、統(tǒng)一指揮生產(chǎn)的良好形式。企業(yè)一級調(diào)度會議由企業(yè)負責生產(chǎn)的領(lǐng)導(dǎo)主持,主管調(diào)度工作的科長召集,各車間主任及有關(guān)科室科長參加。車間調(diào)度會由車間主任主持,車間計劃調(diào)度組長召集,車間技術(shù)副主任、工具員參加。會前要做好準備,事先摸清問題,通知會議內(nèi)容,集中解決生產(chǎn)中的關(guān)鍵問題。會議上議題要突出重點,要強調(diào)協(xié)作風格。會議既要發(fā)揚民主,又要有統(tǒng)一意志。

健全現(xiàn)場調(diào)度制度。領(lǐng)導(dǎo)人員下現(xiàn)場,到發(fā)生問題的現(xiàn)場去,會同調(diào)度人員、技術(shù)人員、工人三結(jié)合地研究生產(chǎn)中出現(xiàn)的問題,以求得矛盾的解決。這種方法有利于領(lǐng)導(dǎo)人員深入實際,密切聯(lián)系群眾,掌握下情,調(diào)動各方面的積極性,使問題可以獲得又快又好的解決。

堅持班前班后小組會制度

小組通過班前會布置任務(wù),調(diào)度生產(chǎn)進度;通過班后會檢查生產(chǎn)進度計劃完成情況,總結(jié)工作。

Linux Shell建立和運行shell程序

什么是shell程序呢"_blank" href="/item/linux">linux命令的文件.

像編寫高級語言的程序一樣,編寫一個shell程序需要一個文本編輯器.如Ⅵ等.

在文本編輯環(huán)境下,依據(jù)shell的語法規(guī)則,輸入一些shell/linux命令行,形成一個完整的程序文件.

執(zhí)行shell程序文件有三種方法

⑴#chmod x file(在/etc/profile中,加入export PATH=${PATH}:~/yourpath,就可以在命令行下直接運行,像執(zhí)行普通命令一樣)

⑵#sh file

⑶# . file

⑷#source file

在編寫shell時,第一行一定要指明系統(tǒng)需要那種shell解釋你的shell程序,如:#! /bin/bash,#! /bin/csh,/bin/tcsh,還是#! /bin/pdksh .

Linux Shellshell中的變量

⑴常用系統(tǒng)變量

$ # :保存程序命令行參數(shù)的數(shù)目

$ "para" label-module="para">

$ 0 :保存程序名

$ * :以("$1 $2...")的形式保存所有輸入的命令行參數(shù)

$ @ :以("$1""$2"...)的形式保存所有輸入的命令行參數(shù)

⑵定義變量

shell語言是非類型的解釋型語言,不象用C /JAVA語言編程時需要事先聲明變量.給一個變量賦值,實際上就是定義了變量.

在linux支持的所有shell中,都可以用賦值符號(=)為變量賦值.

如:

abc=9 (bash/pdksh不能在等號兩側(cè)留下空格)

set abc = 9 (tcsh/csh)

由于shell程序的變量是無類型的,所以用戶可以使用同一個變量時而存放字符時而存放整數(shù).

如:

name=abc (bash/pdksh)

set name = abc (tcsh)

在變量賦值之后,只需在變量前面加一個$去引用.如:

echo $name

⑶位置變量

當運行一個支持多個命令行參數(shù)的shell程序時,這些變量的值將分別存放在位置變量里.

其中第一個參數(shù)存放在位置變量1,第二個參數(shù)存放在位置變量2,依次類推...,shell保留

這些變量,不允許用戶以令外的方式定義他們.同別的變量,用$符號引用他們.

Linux Shellshell中引號的使用方法

shell使用引號(單引號/雙引號)和反斜線("\")用于向shell解釋器屏蔽一些特殊字符.

反引號(")對shell則有特殊意義.

如:

abc="how are you" (bash/pdksh)

set abc = "how are you" (tcsh)

這個命令行把三個單詞組成的字符串how are you作為一個整體賦值給變量abc.

abc1='$LOGNAME,how are you!' (bash/pdksh)

set abc1='$LOGNAME,how are you!' (tcsh)

abc2="$LOGNAME,how are you!" (bash/pdksh)

set abc2="$LOGNAME,how are you!" (tcsh)

LOGNAME變量是保存當前用戶名的shell變量,假設(shè)他的當前值是:wang.執(zhí)行完兩條命令后,

abc1的內(nèi)容是:$LOGNAME,how are you!.而abc2的內(nèi)容是;wang,how are you!.

象單引號一樣,反斜線也能屏蔽所有特殊字符.但是他一次只能屏蔽一個字符.而不能屏蔽

一組字符.

反引號的功能不同于以上的三種符號.他不具有屏蔽特殊字符的功能.但是可以通過他將

一個命令的運行結(jié)果傳遞給另外一個命令.

如:

contents=`ls` (bash/pdksh)

set contents = `ls` (tcsh)

Linux Shellshell程序中的test命令

在bash/pdksh中,命令test用于計算一個條件表達式的值.他們經(jīng)常在條件語句和循環(huán)

語句中被用來判斷某些條件是否滿足.

test命令的語法格式:

test expression

或者

[expression]

在test命令中,可以使用很多shell的內(nèi)部操作符.這些操作符介紹如下:

⑴字符串操作符 用于計算字符串表達式

test命令 | 含義

Str1 = str2 | 當str1與str2相同時,返回True

Str1! = str2| 當str1與str2不同時,返回True

Str | 當str不是空字符時,返回True

-n str | 當str的長度大于0時,返回True

-z str | 當str的長度是0時,返回True

⑵整數(shù)操作符具有和字符操作符類似的功能.只是他們的操作是針對整數(shù)

test表達式 | 含義

Int1 -eq int2|當int1等于int2時,返回True

Int1 -ge int2|當int1大于/等于int2時,返回True

Int1 -le int2|當int1小于/等于int2時,返回True

Int1 -gt int2|當int1大于int2時,返回True

Int1 -ne int2|當int1不等于int2時,返回True

⑶用于文件操作的操作符,他們能檢查:文件是否存在,文件類型等

test表達式 | 含義

-d file |當file是一個目錄時,返回 True

-f file |當file是一個普通文件時,返回 True

-r file |當file是一個可讀文件時,返回 True

-s file |當file文件長度大于0時,返回 True

-w file |當file是一個可寫文件時,返回 True

-x file |當file是一個可執(zhí)行文件時,返回 True

⑷shell的邏輯操作符用于修飾/連接包含整數(shù),字符串,文件操作符的表達式

test表達式 | 含義

! expr |當expr的值是False時,返回True

Expr1 -a expr2|當expr1,expr2值同為True時,返回True

Expr1 -o expr2|當expr1,expr2的值至少有一個為True時,返回True

注意:

tcsh shell 不使用test命令,但是tcsh中的表達式同樣能承擔相同的功能.tcsh

支持的表達式于C中的表達式相同.通常使用在if和while命令中.

tcsh表達式 | 含義

Int1 <= int2 |當int1小于/等于int2時,返回True

Int1 >= int2 |當int1大于/等于int2時,返回True

Int1 < int2 |當int1小于int2時,返回True

Int1 > int2 |當int1大于int2時,返回True

Str1 == str2 |當str1與str2相同時,返回True

Str1 != str2 |當str1與str2不同時,返回True

-r file |當file是一個可讀文件時,返回True

-w file |當file是一個可寫文件時,返回True

-x file |當file是一個可執(zhí)行文件時,返回True

-e file |當file存在時,返回True

-o file |當file文件的所有者是當前用戶時,返回True

-z file |當file長度為0時,返回True

-f file |當file是一個普通文件時,返回True

-d file |當file是一個目錄時,返回True

Exp1 || exp2 |當exp1和exp2的值至少一個為True時,返回True

Exp1 && exp2 |當exp1和exp2的值同為True時,返回True

! exp |當exp的值為False時,返回True

Linux 調(diào)度器相關(guān)推薦
  • 相關(guān)百科
  • 相關(guān)知識
  • 相關(guān)專欄

最新詞條

安徽省政采項目管理咨詢有限公司 數(shù)字景楓科技發(fā)展(南京)有限公司 懷化市人民政府電子政務(wù)管理辦公室 河北省高速公路京德臨時籌建處 中石化華東石油工程有限公司工程技術(shù)分公司 手持無線POS機 廣東合正采購招標有限公司 上海城建信息科技有限公司 甘肅鑫禾國際招標有限公司 燒結(jié)金屬材料 齒輪計量泵 廣州采陽招標代理有限公司河源分公司 高鋁碳化硅磚 博洛尼智能科技(青島)有限公司 燒結(jié)剛玉磚 深圳市東海國際招標有限公司 搭建香蕉育苗大棚 SF計量單位 福建省中億通招標咨詢有限公司 泛海三江 威海鼠尾草 廣東國咨招標有限公司 Excel 數(shù)據(jù)處理與分析應(yīng)用大全 甘肅中泰博瑞工程項目管理咨詢有限公司 山東創(chuàng)盈項目管理有限公司 當代建筑大師 廣西北纜電纜有限公司 拆邊機 大山檳榔 上海地鐵維護保障有限公司通號分公司 甘肅中維國際招標有限公司 舌花雛菊 湖北鑫宇陽光工程咨詢有限公司 GB8163標準無縫鋼管 中國石油煉化工程建設(shè)項目部 華潤燃氣(上海)有限公司 韶關(guān)市優(yōu)采招標代理有限公司 莎草目 建設(shè)部關(guān)于開展城市規(guī)劃動態(tài)監(jiān)測工作的通知 電梯平層準確度 廣州利好來電氣有限公司 蘇州弘創(chuàng)招投標代理有限公司