導航:首頁 > 操作系統 > linux磁碟調度

linux磁碟調度

發布時間:2022-05-16 09:21:42

linux kernel可不可以完成進程調度

操作系統要實現多進程,進程調度必不可少。 有人說,進程調度是操作系統中最為重要的一個部分。我覺得這種說法說得太絕對了一點,就像很多人動輒就說"某某函數比某某函數效率高XX倍"一樣,脫離了實際環境,這些結論是比較片面的。 而進程調度究竟有多重要呢? 首先,我們需要明確一點:進程調度是對TASK_RUNNING狀態的進程進行調度(參見《linux進程狀態淺析》)。如果進程不可執行(正在睡眠或其他),那麼它跟進程調度沒多大關系。 所以,如果你的系統負載非常低,盼星星盼月亮才出現一個可執行狀態的進程。那麼進程調度也就不會太重要。哪個進程可執行,就讓它執行去,沒有什麼需要多考慮的。 反之,如果系統負載非常高,時時刻刻都有N多個進程處於可執行狀態,等待被調度運行。那麼進程調度程序為了協調這N個進程的執行,必定得做很多工作。協調得不好,系統的性能就會大打折扣。這個時候,進程調度就是非常重要的。 盡管我們平常接觸的很多計算機(如桌面系統、網路伺服器、等)負載都比較低,但是linux作為一個通用操作系統,不能假設系統負載低,必須為應付高負載下的進程調度做精心的設計。 當然,這些設計對於低負載(且沒有什麼實時性要求)的環境,沒多大用。極端情況下,如果CPU的負載始終保持0或1(永遠都只有一個進程或沒有進程需要在CPU上運行),那麼這些設計基本上都是徒勞的。 優先順序 現在的操作系統為了協調多個進程的“同時”運行,最基本的手段就是給進程定義優先順序。定義了進程的優先順序,如果有多個進程同時處於可執行狀態,那麼誰優先順序高誰就去執行,沒有什麼好糾結的了。 那麼,進程的優先順序該如何確定呢?有兩種方式:由用戶程序指定、由內核的調度程序動態調整。(下面會說到) linux內核將進程分成兩個級別:普通進程和實時進程。實時進程的優先順序都高於普通進程,除此之外,它們的調度策略也有所不同。 實時進程的調度 實時,原本的涵義是“給定的操作一定要在確定的時間內完成”。重點並不在於操作一定要處理得多快,而是時間要可控(在最壞情況下也不能突破給定的時間)。 這樣的“實時”稱為“硬實時”,多用於很精密的系統之中(比如什麼火箭、導彈之類的)。一般來說,硬實時的系統是相對比較專用的。 像linux這樣的通用操作系統顯然沒法滿足這樣的要求,中斷處理、虛擬內存、等機制的存在給處理時間帶來了很大的不確定性。硬體的cache、磁碟尋道、匯流排爭用、也會帶來不確定性。 比如考慮“i++;”這么一句C代碼。絕大多數情況下,它執行得很快。但是極端情況下還是有這樣的可能: 1、i的內存空間未分配,CPU觸發缺頁異常。而linux在缺頁異常的處理代碼中試圖分配內存時,又可能由於系統內存緊缺而分配失敗,導致進程進入睡眠; 2、代碼執行過程中硬體產生中斷,linux進入中斷處理程序而擱置當前進程。而中斷處理程序的處理過程中又可能發生新的硬體中斷,中斷永遠嵌套不止……; 等等…… 而像linux這樣號稱實現了“實時”的通用操作系統,其實只是實現了“軟實時”,即盡可能地滿足進程的實時需求。 如果一個進程有實時需求(它是一個實時進程),則只要它是可執行狀態的,內核就一直讓它執行,以盡可能地滿足它對CPU的需要,直到它完成所需要做的事情,然後睡眠或退出(變為非可執行狀態)。 而如果有多個實時進程都處於可執行狀態,則內核會先滿足優先順序最高的實時進程對CPU的需要,直到它變為非可執行狀態。 於是,只要高優先順序的實時進程一直處於可執行狀態,低優先順序的實時進程就一直不能得到CPU;只要一直有實時進程處於可執行狀態,普通進程就一直不能得到CPU。 那麼,如果多個相同優先順序的實時進程都處於可執行狀態呢?這時就有兩種調度策略可供選擇: 1、SCHED_FIFO:先進先出。直到先被執行的進程變為非可執行狀態,後來的進程才被調度執行。在這種策略下,先來的進程可以執行sched_yield系統調用,自願放棄CPU,以讓權給後來的進程; 2、SCHED_RR:輪轉調度。內核為實時進程分配時間片,在時間片用完時,讓下一個進程使用CPU; 強調一下,這兩種調度策略以及sched_yield系統調用都僅僅針對於相同優先順序的多個實時進程同時處於可執行狀態的情況。 在linux下,用戶程序可以通過sched_setscheler系統調用來設置進程的調度策略以及相關調度參數;sched_setparam系統調用則只用於設置調度參數。這兩個系統調用要求用戶進程具有設置進程優先順序的能力(CAP_SYS_NICE,一般來說需要root許可權)(參閱capability相關的文章)。 通過將進程的策略設為SCHED_FIFO或SCHED_RR,使得進程變為實時進程。而進程的優先順序則是通過以上兩個系統調用在設置調度參數時指定的。 對於實時進程,內核不會試圖調整其優先順序。因為進程實時與否?有多實時?這些問題都是跟用戶程序的應用場景相關,只有用戶能夠回答,內核不能臆斷。 綜上所述,實時進程的調度是非常簡單的。進程的優先順序和調度策略都由用戶定死了,內核只需要總是選擇優先順序最高的實時進程來調度執行即可。唯一稍微麻煩一點的只是在選擇具有相同優先順序的實時進程時,要考慮兩種調度策略。 普通進程的調度 實時進程調度的中心思想是,讓處於可執行狀態的最高優先順序的實時進程盡可能地佔有CPU,因為它有實時需求;而普通進程則被認為是沒有實時需求的進程,於是調度程序力圖讓各個處於可執行狀態的普通進程和平共處地分享CPU,從而讓用戶覺得這些進程是同時運行的。 與實時進程相比,普通進程的調度要復雜得多。內核需要考慮兩件麻煩事: 一、動態調整進程的優先順序 按進程的行為特徵,可以將進程分為“互動式進程”和“批處理進程”: 互動式進程(如桌面程序、伺服器、等)主要的任務是與外界交互。這樣的進程應該具有較高的優先順序,它們總是睡眠等待外界的輸入。而在輸入到來,內核將其喚醒時,它們又應該很快被調度執行,以做出響應。比如一個桌面程序,如果滑鼠點擊後半秒種還沒反應,用戶就會感覺系統“卡”了; 批處理進程(如編譯程序)主要的任務是做持續的運算,因而它們會持續處於可執行狀態。這樣的進程一般不需要高優先順序,比如編譯程序多運行了幾秒種,用戶多半不會太在意; 如果用戶能夠明確知道進程應該有怎樣的優先順序,可以通過nice、setpriority系統調用來對優先順序進行設置。(如果要提高進程的優先順序,要求用戶進程具有CAP_SYS_NICE能力。) 然而應用程序未必就像桌面程序、編譯程序這樣典型。程序的行為可能五花八門,可能一會兒像互動式進程,一會兒又像批處理進程。以致於用戶難以給它設置一個合適的優先順序。 再者,即使用戶明確知道一個進程是互動式還是批處理,也多半礙於許可權或因為偷懶而不去設置進程的優先順序。(你又是否為某個程序設置過優先順序呢?) 於是,最終,區分互動式進程和批處理進程的重任就落到了內核的調度程序上。 調度程序關注進程近一段時間內的表現(主要是檢查其睡眠時間和運行時間),根據一些經驗性的公式,判斷它現在是互動式的還是批處理的?程度如何?最後決定給它的優先順序做一定的調整。 進程的優先順序被動態調整後,就出現了兩個優先順序: 1、用戶程序設置的優先順序(如果未設置,則使用默認值),稱為靜態優先順序。這是進程優先順序的基準,在進程執行的過程中往往是不改變的; 2、優先順序動態調整後,實際生效的優先順序。這個值是可能時時刻刻都在變化的; 二、調度的公平性 在支持多進程的系統中,理想情況下,各個進程應該是根據其優先順序公平地佔有CPU。而不會出現“誰運氣好誰佔得多”這樣的不可控的情況。 linux實現公平調度基本上是兩種思路: 1、給處於可執行狀態的進程分配時間片(按照優先順序),用完時間片的進程被放到“過期隊列”中。等可執行狀態的進程都過期了,再重新分配時間片; 2、動態調整進程的優先順序。隨著進程在CPU上運行,其優先順序被不斷調低,以便其他優先順序較低的進程得到運行機會; 後一種方式有更小的調度粒度,並且將“公平性”與“動態調整優先順序”兩件事情合而為一,大大簡化了內核調度程序的代碼。因此,這種方式也成為內核調度程序的新寵。 強調一下,以上兩點都是僅針對普通進程的。而對於實時進程,內核既不能自作多情地去動態調整優先順序,也沒有什麼公平性可言。 普通進程具體的調度演算法非常復雜,並且隨linux內核版本的演變也在不斷更替(不僅僅是簡單的調整),所以本文就不繼續深入了。 調度程序的效率 “優先順序”明確了哪個進程應該被調度執行,而調度程序還必須要關心效率問題。調度程序跟內核中的很多過程一樣會頻繁被執行,如果效率不濟就會浪費很多CPU時間,導致系統性能下降。 在linux 2.4時,可執行狀態的進程被掛在一個鏈表中。每次調度,調度程序需要掃描整個鏈表,以找出最優的那個進程來運行。復雜度為O(n); 在linux 2.6早期,可執行狀態的進程被掛在N(N=140)個鏈表中,每一個鏈表代表一個優先順序,系統中支持多少個優先順序就有多少個鏈表。每次調度,調度程序只需要從第一個不為空的鏈表中取出位於鏈表頭的進程即可。這樣就大大提高了調度程序的效率,復雜度為O(1); 在linux 2.6近期的版本中,可執行狀態的進程按照優先順序順序被掛在一個紅黑樹(可以想像成平衡二叉樹)中。每次調度,調度程序需要從樹中找出優先順序最高的進程。復雜度為O(logN)。 那麼,為什麼從linux 2.6早期到近期linux 2.6版本,調度程序選擇進程時的復雜度反而增加了呢? 這是因為,與此同時,調度程序對公平性的實現從上面提到的第一種思路改變為第二種思路(通過動態調整優先順序實現)。而O(1)的演算法是基於一組數目不大的鏈表來實現的,按我的理解,這使得優先順序的取值范圍很小(區分度很低),不能滿足公平性的需求。而使用紅黑樹則對優先順序的取值沒有限制(可以用32位、64位、或更多位來表示優先順序的值),並且O(logN)的復雜度也還是很高效的。 調度觸發的時機 調度的觸發主要有如下幾種情況: 1、當前進程(正在CPU上運行的進程)狀態變為非可執行狀態。 進程執行系統調用主動變為非可執行狀態。比如執行nanosleep進入睡眠、執行exit退出、等等; 進程請求的資源得不到滿足而被迫進入睡眠狀態。比如執行read系統調用時,磁碟高速緩存里沒有所需要的數據,從而睡眠等待磁碟IO; 進程響應信號而變為非可執行狀態。比如響應SIGSTOP進入暫停狀態、響應SIGKILL退出、等等; 2、搶占。進程運行時,非預期地被剝奪CPU的使用權。這又分兩種情況:進程用完了時間片、或出現了優先順序更高的進程。 優先順序更高的進程受正在CPU上運行的進程的影響而被喚醒。如發送信號主動喚醒,或因為釋放互斥對象(如釋放鎖)而被喚醒; 內核在響應時鍾中斷的過程中,發現當前進程的時間片用完; 內核在響應中斷的過程中,發現優先順序更高的進程所等待的外部資源的變為可用,從而將其喚醒。比如CPU收到網卡中斷,內核處理該中斷,發現某個socket可讀,於是喚醒正在等待讀這個socket的進程;再比如內核在處理時鍾中斷的過程中,觸發了定時器,從而喚醒對應的正在nanosleep系統調用中睡眠的進程。 所有任務都採用linux分時調度策略時: 1,創建任務指定採用分時調度策略,並指定優先順序nice值(-20~19)。 2,將根據每個任務的nice值確定在cpu上的執行時間(counter)。 3,如果沒有等待資源,則將該任務加入到就緒隊列中。 4,調度程序遍歷就緒隊列中的任務,通過對每個任務動態優先順序的計算權值(counter+20-nice)結果,選擇計算結果最大的一個去運行,當這個時間片用完後(counter減至0)或者主動放棄cpu時,該任務將被放在就緒隊列末尾(時間片用完)或等待隊列(因等待資源而放棄cpu)中。 5,此時調度程序重復上面計算過程,轉到第4步。 6,當調度程序發現所有就緒任務計算所得的權值都為不大於0時,重復第2步。 所有任務都採用FIFO時: 1,創建進程時指定採用FIFO,並設置實時優先順序rt_priority(1-99)。 2,如果沒有等待資源,則將該任務加入到就緒隊列中。 3,調度程序遍歷就緒隊列,根據實時優先順序計算調度權值(1000+rt_priority),選擇權值最高的任務使用cpu,該FIFO任務將一直佔有cpu直到有優先順序更高的任務就緒(即使優先順序相同也不行)或者主動放棄(等待資源)。 4,調度程序發現有優先順序更高的任務到達(高優先順序任務可能被中斷或定時器任務喚醒,再或被當前運行的任務喚醒,等等),則調度程序立即在當前任務堆棧中保存當前cpu寄存器的所有數據,重新從高優先順序任務的堆棧中載入寄存器數據到cpu,此時高優先順序的任務開始運行。重復第3步。 5,如果當前任務因等待資源而主動放棄cpu使用權,則該任務將從就緒隊列中刪除,加入等待隊列,此時重復第3步。 所有任務都採用RR調度策略時: 1,創建任務時指定調度參數為RR,並設置任務的實時優先順序和nice值(nice值將會轉換為該任務的時間片的長度)。 2,如果沒有等待資源,則將該任務加入到就緒隊列中。 3,調度程序遍歷就緒隊列,根據實時優先順序計算調度權值(1000+rt_priority),選擇權值最高的任務使用cpu。 4,如果就緒隊列中的RR任務時間片為0,則會根據nice值設置該任務的時間片,同時將該任務放入就緒隊列的末尾。重復步驟3。 5,當前任務由於等待資源而主動退出cpu,則其加入等待隊列中。重復步驟3。 系統中既有分時調度,又有時間片輪轉調度和先進先出調度: 1,RR調度和FIFO調度的進程屬於實時進程,以分時調度的進程是非實時進程。 2,當實時進程准備就緒後,如果當前cpu正在運行非實時進程,則實時進程立即搶占非實時進程。 3,RR進程和FIFO進程都採用實時優先順序做為調度的權值標准,RR是FIFO的一個延伸。FIFO時,如果兩個進程的優先順序一樣,則這兩個優先順序一樣的進程具體執行哪一個是由其在隊列中的未知決定的,這樣導致一些不公正性(優先順序是一樣的,為什麼要讓你一直運行?),如果將兩個優先順序一樣的任務的調度策略都設為RR,則保證了這兩個任務可以循環執行,保證了公平。 Ingo Molnar-實時補丁 為了能並入主流內核,Ingo Molnar的實時補丁也採用了非常靈活的策略,它支持四種搶占模式: 1.No Forced Preemption (Server),這種模式等同於沒有使能搶占選項的標准內核,主要適用於科學計算等伺服器環境。 2.Voluntary Kernel Preemption (Desktop),這種模式使能了自願搶占,但仍然失效搶占內核選項,它通過增加搶占點縮減了搶占延遲,因此適用於一些需要較好的響應性的環境,如桌面環境,當然這種好的響應性是以犧牲一些吞吐率為代價的。 3.Preemptible Kernel (Low-Latency Desktop),這種模式既包含了自願搶占,又使能了可搶占內核選項,因此有很好的響應延遲,實際上在一定程度上已經達到了軟實時性。它主要適用於桌面和一些嵌入式系統,但是吞吐率比模式2更低。 4.Complete Preemption (Real-Time),這種模式使能了所有實時功能,因此完全能夠滿足軟實時需求,它適用於延遲要求為100微秒或稍低的實時系統。 實現實時是以犧牲系統的吞吐率為代價的,因此實時性越好,系統吞吐率就越低。

㈡ 考計算機專業的研究生時考的操作系統是什麼系統,是windows、linux、還是unix啊

操作系統考研不針對具體系統,而是針對於操作系統理論知識,當然,可能會涉及到諸如linux和windows中的某些細微的機制。
例如2010年的考綱是這樣的:
【考查目標】
1、了解操作系統在計算機系統中的作用、地位、發展和特點。
2、理解操作系統的基本概念、原理,掌握操作系統設計方法與實現技術。
3、能夠運用所學的操作系統原理、方法與技術分析問題和解決問題。
一)操作系統概述
(一)操作系統的概念、特徵、功能和提供的服務
(二)操作系統的發展與分類
(三)操作系統的運行環境
二)進程管理
(一) 進程與線程
1、進程概念
2、進程的狀態與轉換
3、進程式控制制
4、進程組織
5、進程通信:共享存儲系統、消息傳遞系統和管道通信。
6、線程概念與多線程模型
(二)處理機調度
1、調度的基本概念
2、調度時機、切換與過程
3、調度的基本准則
4、調度方式
5、典型調度演算法:先來先服務調度演算法、短作業(短進程、短線程)優先調度演算法優先調度演算法、時間片輪轉調度演算法、優先順序調度演算法、高響應比優先調度演算法和多級反饋隊列調度演算法。
(三)進程同步
1、進程同步的基本概念
2、實現臨界區互斥的基本方法:軟體實現方法和硬體實現方法。
3、信號量
4、管程
5、經典同步問題:生產者-消費者問題、讀者-寫者問題、哲學家進餐問題。
(四)死鎖
1、死鎖的概念
2、死鎖處理策略
3、死鎖預防
4、死鎖避免:系統安全狀態(銀行家演算法)
5、死鎖檢測和解除
三)內存管理
(一)內存管理基礎
1、內存管理概念
程序裝入與鏈接;邏輯地址與物理地址空間;內存保護。
2、交換與覆蓋
3、連續分配管理方式
4、非連續分配管理方式
分頁管理方式;分段管理方式;段頁式管理方式。
(二)虛擬內存管理
1、虛擬內存基本概念
2、請求分頁管理方式
3、頁面置換演算法:最佳置換演算法(OPT)、先進先出置換演算法(FIFO)、最近最少使用置換演算法(LRU)、時鍾置換演算法(CLOCK)。
4、頁面分配策略
5、抖動:抖動現象、工作集。
6、請求分段管理方式
7、請求段頁式管理方式
四)文件管理
(一)文件系統基礎
1、文件概念
2、文件結構:順序文件、索引文件、索引順序文件。
3、目錄結構:文件控制塊和索引節點、單級目錄結構和兩級目錄結構、樹形目錄結構、圖形目錄結構。
4、文件共享
5、文件保護
(二)文件系統實現
1、文件系統層次結構
2、目錄實現
3、文件實現
(三)磁碟組織與管理
1、磁碟的結構
2、磁碟調度演算法
3、磁碟的管理
五)輸入輸出(I/O)管理
(一)I/O管理概述
1、I/O設備
2、I/O管理目標
3、I/O管理功能
4、I/O應用介面
5、I/O控制方式
(二)I/O核心子系統
1、I/O調度概念
2、高速緩存與緩沖區
3、設備分配與回收
4、假離線技術(SPOOLing)
5、出錯處理

㈢ linux操作系統有哪五個基本的組成部分

Linux系統一般有4個主要部分:內核、shell、文件系統和應用程序。Linux內核主要由五個子系統組成:進程調度,內存管理,虛擬文件系統,網路介面,進程間通信。

操作系統的組成要素:

操作系統 = 內核 + 系統程序

系統程序 = 編譯環境 + API

編譯環境 = 編譯程序 + 連接程序 + 裝載程序

API = 系統調用 + 語言庫函數(C、C++、Java等等)

AUI = shell + 系統服務常式(如x伺服器等)+ 應用程序(瀏覽器,字處理,編輯器等)

軟體系統:

軟體系統 = 操作系統 + AUI

操作系統最底層的組件是內核,其上層搭建了許多系統軟體。

系統程序包括三個部分,分別是:編譯環境、應用程序介面和用戶介面。

編譯環境包含匯編、C 等低高級語言編譯程序,連接程序和裝載程序,這些程序負責將文本格式的程序語言轉變為機器能識別和裝載的機器代碼。

應用程序介面(API)包含內核提供的系統調用介面和語言庫,系統調用是為了能讓應用程序使用內核服務,語言庫函數則是為了方便應用程序開發,所以將一些常用的基礎功能預先編譯以供使用,比如對C語言來說常用的C庫等;

用戶介面(AUI)包括我們熟悉的shell、系統服務程序和常用的應用程序。

這是一個典型的結構,但不是一成不變。許多操作系統的發行中會有所刪減,比如應用於嵌入式設備的系統,對X伺服器就可能不做要求。但是像內核、系統調用等要素是必不可少的。

Linux系統一般有4個主要部分:內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件並使用系統。

一.Linux內核

內核是操作系統的核心,具有很多最基本功能,如虛擬內存、多任務、共享庫、需求載入、可執行程序和TCP/IP網路功能。Linux內核主要由五個子系統組成:進程調度,內存管理,虛擬文件系統,網路介面,進程間通信。

二.Linux shell

shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種介面。它接收用戶輸入的命令並把它送入內核去執行,是一個命令解釋器。另外,shell編程語言具有普通編程語言的很多特點,用這種編程語言編寫的shell程序與其他應用程序具有同樣的效果。

三.Linux文件系統

文件系統是文件存放在磁碟等存儲設備上的組織方法。Linux系統能支持多種目前流行的文件系統,如EXT2、 EXT3、 FAT、 FAT32、VFAT和ISO9660。

四.Linux應用程序

標準的Linux系統一般都有一套都有稱為應用程序的程序集,它包括文本編輯器、編程語言、X

Window、辦公套件、Internet工具和資料庫等。

㈣ linux操作系統的組成有哪幾部分

Linux操作系統主要由五個基本部分組成:進程調度、內存管理、虛擬文件系統、網路介面、進程間通信。
進程調度:控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的程序,可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其他資源,則該進程不可運行進程。Linux使用比較簡單的基於優先順序的進程調度演算法選擇新的進程。
內存管理:允許多個進程安全的共享主內存區域。Linux的內存管理支持虛擬內存,即在計算機中運行的程序,其代碼、數據、堆棧的總量可以超過實際內存的大小,操作系統只是把當前使用的程序塊保留在內存中,其餘的程序則保留在磁碟中。必要時,操作系統負責在磁碟和內存空間交換程序塊。
虛擬文件系統:隱藏了各種硬體的具體細節,為所有的設備提供了統一的介面,VFS提供了多達數十種不同的文件系統。虛擬文件系統可以分為邏輯文件系統和設備驅動程序。邏輯文件系統指Linux所支持的文件系統,如ext2、fat等,設備驅動程序指為每一種硬體控制器所編寫的設備驅動程序模塊。
網路介面:提供了對各種網路標準的存取和各種網路硬體的支持。網路介面可分為網路協議和網路驅動程序。網路協議部分負責實現每一種可能的網路傳輸協議,網路設備驅動程序負責與硬體設備通訊,每一種可能的硬體設備都有相應的設備驅動程序。
進程間通訊:支持進程間各種通信機制。

㈤ linux系統性能怎麼優化

linux系統性能怎麼優化
一、前提
我們可以在文章的開始就列出一個列表,列出可能影響Linux操作系統性能的一些調優參數,但這樣做其實並沒有什麼價值。因為性能調優是一個非常困難的任務,它要求對硬體、操作系統、和應用都有著相當深入的了解。如果性能調優非常簡單的話,那些我們要列出的調優參數早就寫入硬體的微碼或者操作系統中了,我們就沒有必要再繼續讀這篇文章了。正如下圖所示,伺服器的性能受到很多因素的影響。
當面對一個使用單獨IDE硬碟的,有20000用戶的資料庫伺服器時,即使我們使用數周時間去調整I/O子系統也是徒勞無功的,通常一個新的驅動或者應用程序的一個更新(如SQL優化)卻可以使這個伺服器的性能得到明顯的提升。正如我們前面提到的,不要忘記系統的性能是受多方面因素影響的。理解操作系統管理系統資源的方法將幫助我們在面對問題時更好的判斷應該對哪個子系統進行調整。
二、Linux的CPU調度
任何計算機的基本功能都十分簡單,那就是計算。為了實現計算的功能就必須有一個方法去管理計算資源、處理器和計算任務(也被叫做線程或者進程)。非常感謝Ingo Molnar,他為Linux內核帶來了O(1)CPU調度器,區別於舊有的O(n)調度器,新的調度器是動態的,可以支持負載均衡,並以恆定的速度進行操作。
新調度器的可擴展性非常好,無論進程數量或者處理器數量,並且調度器本身的系統開銷更少。新調取器的演算法使用兩個優先順序隊列。
引用
・活動運行隊列
・過期運行隊列
調度器的一個重要目標是根據優先順序許可權有效地為進程分配CPU 時間片,當分配完成後它被列在CPU的運行隊列中,除了 CPU 的運行隊列之外,還有一個過期運行隊列。當活動運行隊列中的一個任務用光自己的時間片之後,它就被移動到過期運行隊列中。在移動過程中,會對其時間片重新進行計算。如果活動運行隊列中已經沒有某個給定優先順序的任務了,那麼指向活動運行隊列和過期運行隊列的指針就會交換,這樣就可以讓過期優先順序列表變成活動優先順序的列表。通常互動式進程(相對與實時進程而言)都有一個較高的優先順序,它佔有更長的時間片,比低優先順序的進程獲得更多的計算時間,但通過調度器自身的調整並不會使低優先順序的進程完全被餓死。新調度器的優勢是顯著的改變Linux內核的可擴展性,使新內核可以更好的處理一些有大量進程、大量處理器組成的企業級應用。新的O(1)調度器包含仔2.6內核中,但是也向下兼容2.4內核。
新調度器另外一個重要的優勢是體現在對NUMA(non-uniform memory architecture)和SMP(symmetric multithreading processors)的支持上,例如INTEL@的超線程技術。
改進的NUMA支持保證了負載均衡不會發生在CECs或者NUMA節點之間,除非發生一個節點的超出負載限度。
三、Linux的內存架構
今天我們面對選擇32位操作系統還是64位操作系統的情況。對企業級用戶它們之間最大的區別是64位操作系統可以支持大於4GB的內存定址。從性能角度來講,我們需要了解32位和64位操作系統都是如何進行物理內存和虛擬內存的映射的。
在上面圖示中我們可以看到64位和32位Linux內核在定址上有著顯著的不同。
在32位架構中,比如IA-32,Linux內核可以直接定址的范圍只有物理內存的第一個GB(如果去掉保留部分還剩下896MB),訪問內存必須被映射到這小於1GB的所謂ZONE_NORMAL空間中,這個操作是由應用程序完成的。但是分配在ZONE_HIGHMEM中的內存頁將導致性能的降低。
在另一方面,64位架構比如x86-64(也稱作EM64T或者AMD64)。ZONE_NORMAL空間將擴展到64GB或者128GB(實際上可以更多,但是這個數值受到操作系統本身支持內存容量的限制)。正如我們看到的,使用64位操作系統我們排除了因ZONE_HIGHMEM部分內存對性能的影響的情況。
實際中,在32位架構下,由於上面所描述的內存定址問題,對於大內存,高負載應用,會導致死機或嚴重緩慢等問題。雖然使用hugemen核心可緩解,但採取x86_64架構是最佳的解決辦法。
四、虛擬內存管理
因為操作系統將內存都映射為虛擬內存,所以操作系統的物理內存結構對用戶和應用來說通常都是不可見的。如果想要理解Linux系統內存的調優,我們必須了解Linux的虛擬內存機制。應用程序並不分配物理內存,而是向Linux內核請求一部分映射為虛擬內存的內存空間。如下圖所示虛擬內存並不一定是映射物理內存中的空間,如果應用程序有一個大容量的請求,也可能會被映射到在磁碟子系統中的swap空間中。
另外要提到的是,通常應用程序不直接將數據寫到磁碟子系統中,而是寫入緩存和緩沖區中。Bdflush守護進程將定時將緩存或者緩沖區中的數據寫到硬碟上。
Linux內核處理數據寫入磁碟子系統和管理磁碟緩存是緊密聯系在一起的。相對於其他的操作系統都是在內存中分配指定的一部分作為磁碟緩存,Linux處理內存更加有效,默認情況下虛擬內存管理器分配所有可用內存空間作為磁碟緩存,這就是為什麼有時我們觀察一個配置有數G內存的Linux系統可用內存只有20MB的原因。
同時Linux使用swap空間的機制也是相當高效率的,如上圖所示虛擬內存空間是由物理內存和磁碟子系統中的swap空間共同組成的。如果虛擬內存管理器發現一個已經分配完成的內存分頁已經長時間沒有被調用,它將把這部分內存分頁移到swap空間中。經常我們會發現一些守護進程,比如getty,會隨系統啟動但是卻很少會被應用到。這時為了釋放昂貴的主內存資源,系統會將這部分內存分頁移動到swap空間中。上述就是Linux使用swap空間的機制,當swap分區使用超過50%時,並不意味著物理內存的使用已經達到瓶頸了,swap空間只是Linux內核更好的使用系統資源的一種方法。
簡單理解:Swap usage只表示了Linux管理內存的有效性。對識別內存瓶頸來說,Swap In/Out才是一個比較又意義的依據,如果Swap In/Out的值長期保持在每秒200到300個頁面通常就表示系統可能存在內存的瓶頸。下面的事例是好的狀態:
引用
# vmstat
procs ———–memory————- —swap– —–io—- –system– —-cpu—-
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 5696 6904 28192 50496 0 0 88 117 61 29 11 8 80 1
五、模塊化的I/O調度器
就象我們知道的Linux2.6內核為我們帶來了很多新的特性,這其中就包括了新的I/O調度機制。舊的2.4內核使用一個單一的I/O調度器,2.6 內核為我們提供了四個可選擇的I/O調度器。因為Linux系統應用在很廣闊的范圍里,不同的應用對I/O設備和負載的要求都不相同,例如一個筆記本電腦和一個10000用戶的資料庫伺服器對I/O的要求肯定有著很大的區別。
引用
(1).Anticipatory
anticipatory I/O調度器創建假設一個塊設備只有一個物理的查找磁頭(例如一個單獨的SATA硬碟),正如anticipatory調度器名字一樣,anticipatory調度器使用「anticipatory」的演算法寫入硬碟一個比較大的數據流代替寫入多個隨機的小的數據流,這樣有可能導致寫 I/O操作的一些延時。這個調度器適用於通常的一些應用,比如大部分的個人電腦。
(2).Complete Fair Queuing (CFQ)
Complete Fair Queuing(CFQ)調度器是Red Flag DC Server 5使用的標准演算法。CFQ調度器使用QoS策略為系統內的所有任務分配相同的帶寬。CFQ調度器適用於有大量計算進程的多用戶系統。它試圖避免進程被餓死和實現了比較低的延遲。
(3).Deadline
deadline調度器是使用deadline演算法的輪詢的調度器,提供對I/O子系統接近實時的操作,deadline調度器提供了很小的延遲和維持一個很好的磁碟吞吐量。如果使用deadline演算法請確保進程資源分配不會出現問題。
(4).NOOP
NOOP調度器是一個簡化的調度程序它只作最基本的合並與排序。與桌面系統的關系不是很大,主要用在一些特殊的軟體與硬體環境下,這些軟體與硬體一般都擁有自己的調度機制對內核支持的要求很小,這很適合一些嵌入式系統環境。作為桌面用戶我們一般不會選擇它。
六、網路子系統
新的網路中斷緩和(NAPI)對網路子系統帶來了改變,提高了大流量網路的性能。Linux內核在處理網路堆棧時,相比降低系統佔用率和高吞吐量更關注可靠性和低延遲。所以在某些情況下,Linux建立一個防火牆或者文件、列印、資料庫等企業級應用的性能可能會低於相同配置的Windows伺服器。
在傳統的處理網路封包的方式中,如下圖藍色箭頭所描述的,一個乙太網封包到達網卡介面後,如果MAC地址相符合會被送到網卡的緩沖區中。網卡然後將封包移到操作系統內核的網路緩沖區中並且對CPU發出一個硬中斷,CPU會處理這個封包到相應的網路堆棧中,可能是一個TCP埠或者Apache應用中。
這是一個處理網路封包的簡單的流程,但從中我們可以看到這個處理方式的缺點。正如我們看到的,每次適合網路封包到達網路介面都將對CPU發出一個硬中斷信號,中斷CPU正在處理的其他任務,導致切換動作和對CPU緩存的操作。你可能認為當只有少量的網路封包到達網卡的情況下這並不是個問題,但是千兆網路和現代的應用將帶來每秒鍾成千上萬的網路數據,這就有可能對性能造成不良的影響。
正是因為這個情況,NAPI在處理網路通訊的時候引入了計數機制。對第一個封包,NAPI以傳統的方式進行處理,但是對後面的封包,網卡引入了POLL 的輪詢機制:如果一個封包在網卡DMA環的緩存中,就不再為這個封包申請新的中斷,直到最後一個封包被處理或者緩沖區被耗盡。這樣就有效的減少了因為過多的中斷CPU對系統性能的影響。同時,NAPI通過創建可以被多處理器執行的軟中斷改善了系統的可擴展性。NAPI將為大量的企業級多處理器平台帶來幫助,它要求一個啟用NAPI的驅動程序。在今天很多驅動程序默認沒有啟用NAPI,這就為我們調優網路子系統的性能提供了更廣闊的空間。
七、理解Linux調優參數
因為Linux是一個開源操作系統,所以又大量可用的性能監測工具。對這些工具的選擇取決於你的個人喜好和對數據細節的要求。所有的性能監測工具都是按照同樣的規則來工作的,所以無論你使用哪種監測工具都需要理解這些參數。下面列出了一些重要的參數,有效的理解它們是很有用處的。
(1)處理器參數
引用
・CPU utilization
這是一個很簡單的參數,它直觀的描述了每個CPU的利用率。在xSeries架構中,如果CPU的利用率長時間的超過80%,就可能是出現了處理器的瓶頸。
・Runable processes
這個值描述了正在准備被執行的進程,在一個持續時間里這個值不應該超過物理CPU數量的10倍,否則CPU方面就可能存在瓶頸。
・Blocked
描述了那些因為等待I/O操作結束而不能被執行的進程,Blocked可能指出你正面臨I/O瓶頸。
・User time
描述了處理用戶進程的百分比,包括nice time。如果User time的值很高,說明系統性能用在處理實際的工作。
・System time
描述了CPU花費在處理內核操作包括IRQ和軟體中斷上面的百分比。如果system time很高說明系統可能存在網路或者驅動堆棧方面的瓶頸。一個系統通常只花費很少的時間去處理內核的操作。
・Idle time
描述了CPU空閑的百分比。
・Nice time
描述了CPU花費在處理re-nicing進程的百分比。
・Context switch
系統中線程之間進行交換的數量。
・Waiting
CPU花費在等待I/O操作上的總時間,與blocked相似,一個系統不應該花費太多的時間在等待I/O操作上,否則你應該進一步檢測I/O子系統是否存在瓶頸。
・Interrupts
Interrupts 值包括硬Interrupts和軟Interrupts,硬Interrupts會對系統性能帶來更多的不利影響。高的Interrupts值指出系統可能存在一個軟體的瓶頸,可能是內核或者驅動程序。注意Interrupts值中包括CPU時鍾導致的中斷(現代的xServer系統每秒1000個 Interrupts值)。
(2)內存參數
引用
・Free memory
相比其他操作系統,Linux空閑內存的值不應該做為一個性能參考的重要指標,因為就像我們之前提到過的,Linux內核會分配大量沒有被使用的內存作為文件系統的緩存,所以這個值通常都比較小。
・Swap usage
這 個值描述了已經被使用的swap空間。Swap usage只表示了Linux管理內存的有效性。對識別內存瓶頸來說,Swap In/Out才是一個比較又意義的依據,如果Swap In/Out的值長期保持在每秒200到300個頁面通常就表示系統可能存在內存的瓶頸。
・Buffer and cache
這個值描述了為文件系統和塊設備分配的緩存。在Red Flag DC Server 5版本中,你可以通過修改/proc/sys/vm中的page_cache_tuning來調整空閑內存中作為緩存的數量。
・Slabs
描述了內核使用的內存空間,注意內核的頁面是不能被交換到磁碟上的。
・Active versus inactive memory
提供了關於系統內存的active內存信息,Inactive內存是被kswapd守護進程交換到磁碟上的空間。
(3)網路參數
引用
・Packets received and sent
這個參數表示了一個指定網卡接收和發送的數據包的數量。
・Bytes received and sent
這個參數表示了一個指定網卡接收和發送的數據包的位元組數。
・Collisions per second
這個值提供了發生在指定網卡上的網路沖突的數量。持續的出現這個值代表在網路架構上出現了瓶頸,而不是在伺服器端出現的問題。在正常配置的網路中沖突是非常少見的,除非用戶的網路環境都是由hub組成。
・Packets dropped
這個值表示了被內核丟掉的數據包數量,可能是因為防火牆或者是網路緩存的缺乏。
・Overruns
Overruns表達了超出網路介面緩存的次數,這個參數應該和packets dropped值聯繫到一起來判斷是否存在在網路緩存或者網路隊列過長方面的瓶頸。
・Errors 這個值記錄了標志為失敗的幀的數量。這個可能由錯誤的網路配置或者部分網線損壞導致,在銅口千兆乙太網環境中部分網線的損害是影響性能的一個重要因素。
(4)塊設備參數
引用
・Iowait
CPU等待I/O操作所花費的時間。這個值持續很高通常可能是I/O瓶頸所導致的。
・Average queue length
I/O請求的數量,通常一個磁碟隊列值為2到3為最佳情況,更高的值說明系統可能存在I/O瓶頸。
・Average wait
響應一個I/O操作的平均時間。Average wait包括實際I/O操作的時間和在I/O隊列里等待的時間。
・Transfers per second
描述每秒執行多少次I/O操作(包括讀和寫)。Transfers per second的值與kBytes per second結合起來可以幫助你估計系統的平均傳輸塊大小,這個傳輸塊大小通常和磁碟子系統的條帶化大小相符合可以獲得最好的性能。
・Blocks read/write per second
這個值表達了每秒讀寫的blocks數量,在2.6內核中blocks是1024bytes,在早些的內核版本中blocks可以是不同的大小,從512bytes到4kb。
・Kilobytes per second read/write
按照kb為單位表示讀寫塊設備的實際數據的數量。

㈥ Linux下每天自動執行查看磁碟剩餘空間的shell文件

1. crontab -e
##編輯文件格式如下
0 6 * * * ~/check.sh

2.編輯check.sh 內容如下:
#!/bin/bash
[email protected] # 你的e_mail
code=`df | grep -c -E \(9[1-9]\%\)\|\(100\%\)` # 判斷磁碟的佔用有沒有超過90%
if [ $code -gt 0 ]
then
df | mail -v -s "subject" $mail - ## 如果有,就發郵件,郵件內容為df 命令的輸出(即:磁碟使用統計)
fi
#######################################################chech.sh 文件結束

3. 將check.sh移動到當前用戶的home目錄下
#######################################################
把你的郵件設置好,就能發了

4. chmod +x check.sh ## 設為可執行

5. /etc/init.d/crond restart ## 重起crond服務

㈦ 請稍等片刻系統正在做最後部署

系統用自由天空的封裝工具es3封裝的(是製作系統的意思,然後用ghost備份,)封裝完就要部署(恢復ghost的備份)一般要30分鍾。
Linux是一個多用戶多任務操作系統。多用戶多用戶在同一時間使用電腦系統的多任務Linux的可以執行多個任務的同時,也可以是一個任務,他還沒有得到落實,執行另一項任務。

操作系統來管理多用戶和多任務的要求。大多數系統都只有一個CPU和主存儲器,一個系統可能有多個二級存儲磁碟和多個輸入/輸出設備。操作系統來管理這些資源和資源共享,在多個用戶之間造成你,當你提出請求,一種錯覺,好像只有你獨自一人占據。事實上,操作系統的等待被執行監視任務隊列,這些任務包括用戶的工作,操作系統任務,電子郵件和列印作業。操作系統根據每個任務的優先順序為每個任務分配合適的時間片,每個時間片大約有零點幾秒,雖然看起來很短,但其實有足夠的計算機完成成千上萬的指令集。每個任務都將是系統運行一段時間,然後掛機系統轉向其他任務;回來過了一段時間來處理這個任務,直到任務完成,從任務隊列中刪除。

跑出來的東西Linux系統的流程和作業可以被稱為一個過程。每個用戶任務,每個系統管理守護程序,可以稱為一個過程。 Linux的分時管理方法使所有的任務共享系統資源。我們所關心的是如何控制這些過程,讓他們可以很好的為客戶服務。

過程更正式的定義是:一個獨立的程序運行在自己的虛擬地址空間。流程和程序是有區別的,該過程是不是一個程序,雖然它是由程序生成的。程序只是一個靜態的指令集合,不佔系統資源的操作過程中隨時可能發生變化的動態,使用的系統資源來運行程序。一個程序可以啟動多個進程。

操作的過程和概念是不同的。一個正在執行的進程稱為一個作業,作業中可包含一個或多個進程,尤其是當使用管道和重定向命令。

作業控制正在運行的進程的行為進行控制。例如,用戶可以暫停一個過程,稍等片刻,然後繼續這個過程。 shell來啟動的過程中,在每個進程過程中的所有記錄,用戶可以隨心所欲地掛起進程或重新啟動該進程。作業控制是許多shell(包括bash和tcsh)的一個特點,允許用戶之間進行切換多個獨立的業務。

例如,當用戶編輯一個文本文件,並需要中止編輯做其他事情時,利用作業控制,用戶可以讓編輯器暫時掛起,並返回到shell提示符開始做其他的事情。做其他的事情,你可以重新啟動掛起的編輯器,返回到剛停下來,如果用戶不離開編輯器。這僅僅是一個例子,作業控制,還有很多其他實際用途。

啟動這一進程

類型需要運行的程序的程序名的,執行一個程序,其實是啟動一個進程。在Linux系統中,每個進程都有一個用於系統識別和調度進程的進程號。主要有兩種方式啟動一個進程:手動啟動和調度啟動,這是預先設定的,可根據用戶要求,開始自己的。

1,手動啟動它

直接輸入用戶命令啟動一個進程是手動啟動該進程。手動啟動該進程開始在前台和後台可分為啟動。

在前台啟動手動啟動一個進程,是最常見的方式。在一般情況下,用戶鍵入的命令的「ls-升」,這啟動了一個過程,和一個前台進程。此時系統已經是多狀態的過程中。也許有些用戶可能會感到困惑:我只啟動一個進程。但實際上有很多在後台運行,系統啟動時自動啟動的進程正在悄悄運行。有些用戶快速後鍵入「ls-l的」命令「PS-X」來查看,但並沒有看到ls的過程,也覺得很奇怪。事實上,這是結束這個進程因為LS太快,使用ps看到該進程已經執行結束。

直接從後台手工啟動一個進程用不到,除非這個過程是非常耗時的,用戶不急於結果是必要的。假設用戶要開始一個長期運行的過程中格式化的文本文件。為了不使整個shell在格式化過程中,在癱瘓狀態「是一個明智的選擇,從後台啟動進程。

2調度啟動

有時需要一些更耗費時間和資源密集型的維護工作,該系統適合在半夜,這時候用戶可以提前安排,指定任務運行的時間或場合,時間,系統會自動完成所有這些工作。自動啟動的過程中,你需要有以下的啟動命令。

用戶在命令在指定時間執行指定的命令序列的第一個重要的命令在命令其他也就是說,命令至少需要指定一個命令,執行時間可以正常運行在命令允許您只指定時間,也可以是指定的日期和時間。請注意,在指定的時間歧視問題。 :現在,用戶可以指定執行時間:3:20在早晨,在當時發出命令的前一天晚上20:00,那麼究竟什麼是執行命令的日期?如果用戶仍然在工作前3: 20,則該命令將在這個時候完成退出工作狀態,如果用戶在3:20之前,那麼該命令將被執行,只有在第二天清晨以下命令語法:

[-V] [-Q隊列] [-f文件名] [-mldbv]時間

AT-C工作[工作]

>允許使用一個非常復雜的方法,指定的時間,它可以接受在當天為hh:mm(小時:分鍾)指定的時間,如果時間已過,然後在第二天執行,當然,也可用於午夜(深夜),中午(中午),更晦澀難懂的話下午茶(下午茶時間,通常為16:00)指定的時間,用戶還可以使用12小時制,也就是後面的時間AM(上午)或PM(下午)來說明在上午或下午,也可以指定命令執行指定日期格式月份的一天(月日)或MM / DD / YY(月/日/年)或DD.MM.YY(月,年)指定的日期必須遵循在後面指定時間。

上述是絕對的計時方法,其實,你可以使用相對計時法,這是很不錯的,要執行的命令安排指定的格式為:+計時單位,現在是當前時間,時間單位是一個單位時間,可以是分鍾(分鍾),小時數(h),天數(天),周(周)計數的時間量,無論是幾天或幾個小時,等等。

是一個時序方法用於直接指定命令完成今日(今天),明天(明天)。下面一些例子來說明具體用法。假設現在的時間是

[例]今天下午5:30在指定執行命令。 2月24日中午12:30,2001年,命令格式如下:

在下午5:30

在17:30

今天在17:30

現在+ 5小時

現在+ 300分鍾

17:30 24.2.99

17:30 2/24/99

在17:30 2月24日

這些命令的表達更重要的意義是完全一樣的,所以時間完全自由地選擇根據個人喜好和情況,一般採用絕對時間的24小時時鍾,以避免導致時序錯誤發生由於用戶自己的疏忽,例如,上面的例子可以寫成:

17:30 2/24/99

這是很清楚的,和其他人理解。

at命令自動執行的命令從標准輸入或使用-f選項指定的文件讀取和執行命令從一個使用su命令切換到用戶shell,則當前用戶被認為是執行用戶,所有的錯誤和輸出將被發送到用戶但是,如果發送電子郵件,收到的消息將是原來的用戶登錄shell的所有者。作業文件的工作,在7月31日上午10時許。

在任何情況下,超級用戶可以使用此命令。對於其他用戶,是否可以使用取決於兩個文件:在/ etc / at.allow和/ etc / at.deny中中。

cron命令<BR /上述兩個命令完成某些任務,在一定時間內,但要知道,他們只能執行一次,換句話說,指定運行命令時,系統完成的任務在指定的時間,一切都結束了。但在許多情況下,需要到被重復一個幾個命令,如:一家公司的自動報告員工公司的活動,一個星期的第一周,這個時候你需要使用完成任務cron命令。cron命令不應手動啟動它,cron命令在系統啟動時自動啟動,進入後台(所以沒有必要使用的符號(&))的用戶沒有許可權運行該命令由一個shell腳本,雖然超用戶可以手動啟動cron,但它建議把由系統自行啟動shell腳本。

cron命令搜索找到在/ var / spool / cron內目錄中的用戶名/ etc / passwd文件名為crontab文件,這個文件被發現,將被載入到內存中。例如,一個的用戶名為狡猾用戶的,它所對應的crontab文件/ var / spool / cron內/狡猾的,換句話說,用戶名為crontab文件存儲在/ var / spool / cron內目錄搜索的/ etc / crontab文件,這是寫在不同的格式。cron命令cron的啟動,它會首先檢查用戶是否設置crontab文件,如果不轉移到「休眠」狀態,釋放系統資源。後台進程佔用資源非常少,它每分鍾「醒了」隨著時間的推移,看是否有當前需要運行的命令,執行命令後,任何輸出將發送電子郵件的crontab的所有者,或者在/ etc / crontab文件中MAILTO環境變數中指定的用戶。上面簡單的介紹一些的cron cron命令執行的工作原理不需要用戶干預,要求用戶的順序執行crontab命令,下面的crontab命令。

crontab命令用於安裝,刪除,crontab命令或列表形式用來驅動cron守護進程。換句話說,用戶需要到執行的命令序列到crontab文件執行。每個用戶都可以有自己的crontab文件。下面看看如何創建一個crontab文件。在/ VAR / spool / cron內的crontab文件不能直接創建或crontab文件crontab命令。現在假設一個用戶名為狡猾需要創建自己的crontab文件。首先,你可以使用任何文本編輯器來創建一個新的文檔,然後向其中寫入需要運行的定期要執行的命令,然後保存並退出。假設文件/ tmp / test.cron中,然後使用crontab命令將文件安裝到用戶的crontab文件。類型: crontab test.cron的

創建一個crontab文件,你可以去到/ var / spool / cron內的目錄看看,發現了一個狡猾的文件,這個文件是必需的crontab文件。

如何在crontab文件中輸入要執行的命令和時間。文件中的每一行由六個域,其中前五個欄位指定命令執行的時間,最後一個域是要執行的命令。使用每個域之間的一個空格或製表符分隔的格式如下:

分鍾小時一天一個月月的一年一天一周命令

第二個小時的第一分鍾,3個月的一天,第四個是在今年的前幾個月,在一周的第五天,第六個是要執行的命令,這些項目不能為空,必須填補。如果你不需要指定一些這些,你可以用*代替*通配符,可以代替任何字元,所以在任何時間,也就是忽略不計。

過程暫停和恢復命令允許進程被暫停和恢復過程BG FG

作業控制,當你需要它來運行,待就業的復甦從流產後開始繼續運行。在鍵盤上按ctrl + Z來掛起當前的前台作業。鍵盤,按下CTRL + Z將暫停當前執行的命令cat使用jobs命令顯示的列表操作的外殼,包括具體的工作,工作數量和工作電流。狀態。執行恢復過程中,有兩個選項:作業將掛起fg命令把它放回在前台操作bg命令在後台開始將掛起。靈活在使用該命令,將帶來極大的方便。

進程查看器

,由於Linux是一個多用戶的系統,有時候也要了解其他用戶現在正在做的,而Linux是一個多進程系統,部署和管理這些過程往往需要和管理過程:首先,我們必須知道到底是什麼過程?過程?等過程,因此有必要查看工作

命令時,

命令主要用於查看當前在線用戶,這個命令非常有用,如果用戶希望創建即時消息和其他用戶,如使用talk命令,你必須首先確定的,用戶在網上做,或談話過程中不能成立。又如,系統管理員希望監視每個登錄的用戶此刻的行動,但也使用誰命令誰命令的應用程序是非常簡單的,你可以更准確地把握用戶的情況,它被廣泛使用。

w命令

命令也用於顯示登錄到系統的用戶,但誰是w命令功能更強大的,它可以不僅誰登錄到系統,還可以顯示這些用戶的工作進展,並統計相對更詳細和科學的增強版本,w命令是誰的命令。命令w命令顯示項目按以下順序:當前時間,系統啟動到現在的時間,記錄的數量的用戶,該系統在過去1秒,5秒和15秒的平均負載。然後,每個用戶的數據,該項目的顯示順序如下的時間是指:登錄帳號,終端名稱,遠程主機名,登錄時間,空閑時間,JCPU,PCPU當前正在運行的進程的命令行。JCPU所花費的時間和終端(tty)連接的所有進程。這時候不包括過去的後台作業,但它不包括當前正在運行的後台作業所佔用的時間。PCPU時間是指由當前進程所佔用的時間(即程序)的項目。

ps命令 BR /> ps命令是最基本的命令也是非常強大的進程查看器,使用此命令可以決定哪些進程正在運行和運行狀態,這個過程是,僵屍進程,哪些進程佔用了過多的資源,等等總之,大多數的信息通過執行命令。

ps命令最常用的監控後台進程的工作,因為後台進程是不溝通這些標准和屏幕上的鍵盤輸入/輸出設備,所以如果需要檢測其狀態,他們可以使用ps命令。

ps [選項]

下面的命令選項說明:
>

-E顯示所有進程。

-F格式。

h不顯示標題。

- L的長格式。

-W寬輸出。

顯示終端的進程,包括其他用戶的進程。

R只正在運行的進程。

X顯示沒有控制終端的進程。

O [+ | - ] K1 [+ | - ] K2 [,...]]短按鍵,K1, K2的快捷鍵指定的多級排序順序的進程列表。詩有不同的格式,在指定的預設值。這些默認順序可以由用戶指定的覆蓋面。「+」字元是可選的,其中的方向,「 - 」字元被反轉指定鍵。

最常用的三個參數U,一,X

top命令的

top命令和ps命令的是相同的,顯示目前的流程,和其他條件,但頂部是一個動態的過程,即通過用戶按鍵來刷新當前狀態。如果在前台執行該命令,它將獨占前台,直到用戶終止程序更准確的說,top命令提供了實時監控系統處理器的狀態,它會顯示系統中CPU最「敏感」的任務列表。該命令可以按CPU使用,內存使用率和執行時間對任務進行排序;許多互動式命令或者在個人定製文件的命令集的特點。

進程調度

當你需要中斷一個前台進程時,他們通常使用至於有很多理由要殺背景按Ctrl + C組合鍵,但對於一個後台進程,恐怕它不是一個組合鍵就可以解決,那麼你必須打開kill命令,該命令可以終止後台進程。這個過程中所消耗的過程,也許太多的CPU時間,也許過程已經掛。總之,這種情況經常發生。

kill命令發送指定的信號給進程的結束過程。如果發送的信號不指定,則默認值為TERM信號。TERM信號將終止所有的進程永遠不能捕捉到的信號。誰可以捕捉信號的過程中,可能需要使用kill(9)信號,信號不能被捕獲。

kill命令語法很簡單,基本上有兩種方式:

殺[-s信號|-P] [-a〕進程ID ...
殺-L [信號]

㈧ 誰有linux i/o 調度演算法deadline,anticipatory,noop,cfq中各個調優參數的具體作用。

1.Deadline scheler Deadline scheler 用 deadline 演算法保證對於既定的 IO 請求以最小的延遲時間,從這一點理解,對於 DSS 應用應該會是很適合的。
2.Anticipatory scheler(as) 曾經一度是 Linux 2.6 Kernel 的 IO scheler 。Anticipatory 的中文含義是」預料的, 預想的」, 這個詞的確揭示了這個演算法的特點,簡單的說,有個 IO 發生的時候,如果又有進程請求 IO 操作,則將產生一個默認的 6 毫秒猜測時間,猜測下一個 進程請求 IO 是要干什麼的。這對於隨即讀取會造成比較大的延時,對資料庫應用很糟糕,而對於 Web Server 等則會表現的不錯。這個演算法也可以簡單理解為面向低速磁碟的,因為那個」猜測」實際上的目的是為了減少磁頭移動時間。
3.Completely Fair Queuing 雖然這世界上沒有完全公平的事情,但是並不妨礙開源愛好者們設計一個完全公平的 IO 調度演算法。Completely Fair Queuing (cfq, 完全公平隊列) 在 2.6.18 取代了 Anticipatory scheler 成為 Linux Kernel 默認的 IO scheler 。cfq 對每個進程維護一個 IO 隊列,各個進程發來的 IO 請求會被 cfq 以輪循方式處理。也就是對每一個 IO 請求都是公平的。這使得 cfq 很適合離散讀的應用(eg: OLTP DB)。我所知道的企業級 Linux 發行版中,SuSE Linux 好像是最先默認用 cfq 的.
4.NOOP Noop 對於 IO 不那麼操心,對所有的 IO請求都用 FIFO 隊列形式處理,默認認為 IO 不會存在性能問題。這也使得 CPU 也不用那麼操心。當然,對於復雜一點的應用類型,使用這個調度器,用戶自己就會非常操心。

㈨ linux伺服器的優點

很多人都認為Linux伺服器具有最好的生態系統,伺服器端的各種軟體都為它而設計。Linux系統之所以會成為目前最受關注的系統之一,主要原因是它的免費,以及系統的開放性,可以隨時取得程序的原代碼,這對於程序開發人員是很重要的。除了這些它還具有以下的優勢:

Linux伺服器優勢1:良好的穩定性

Linux內核的源代碼是以標准規范的32位(在64位CPU上是64位)的計算機來做的最佳化設計,可確保其系統的穩定性。正因為Linux的穩定,才使得一些安裝Linux的主機像Unix機一樣常年不關而不曾宕機。

Linux伺服器優勢2:豐富的軟體支持

與其他的操作系統不同的是,安裝了Linux系統後,用戶常用的一些辦公軟體、圖形處理工具、多媒體播放軟體和網路工具等都已無需安裝。而對於程序開發人員來說,Linux更是一個很好的操作平台,在Linux的軟體包中,包含了多種程序語言與開發工具,如gcc、cc、C++、Tcl/Tk、Perl、Fortran77等。

Linux伺服器優勢3:可靠的安全性

Linux系統是一個具有先天病毒免疫能力的操作系統,很少受到病毒攻擊。

對於一個開放式系統而言,在方便用戶的同時,很可能存在安全隱患。不過,利用Linux自帶防火牆、入侵檢測和安全認證等工具,及時修補系統的漏洞,就能大大提高Linux系統的安全性,讓黑客們無機可乘。

Linux伺服器優勢4:完善的網路功能

Linux內置了很豐富的免費網路伺服器軟體、資料庫和網頁的開發工具,如Apache、Sendmail、VSFtp、SSH、MySQL、PHP和JSP等。近年來,越來越多的企業看到了Linux的這些強大的功能,利用Linux擔任全方位的網路伺服器。

Linux伺服器優勢5:多用戶多任務

和Unix系統一樣,Linux系統是一個真正的多用戶多任務的操作系統。多個用戶可以各自擁有和使用系統資源,即每個用戶對自己的資源(例如:文件、設備)有特定的許可權,互不影響,同時多個用戶可以在同一時間以網路聯機的方式使用計算機系統。多任務是現代計算機的最主要的一個特點,由於Linux系統調度每一個進程是平等地訪問處理器的,所以它能同時執行多個程序,而且各個程序的運行是互相獨立的。

Linux伺服器優勢6:跨平台的硬體支持

由於Linux的內核大部分是用C語言編寫的,並採用了可移植的Unix標准應用程序介面,所以它支持如i386、Alpha、AMD和Sparc等系統平台,以及從個人電腦到大型主機,甚至包括嵌入式系統在內的各種硬體設備。

Linux在它的追捧者眼裡是一個近乎完美的操作系統,它具有運行穩定、功能強大、獲取方便等優點,因而有著廣闊的前景。只要你不是有什麼特殊的需求,那麼你就可以採用Linux系統。可參考書籍《Linux就該這么學》了解更多Linux知識。

閱讀全文

與linux磁碟調度相關的資料

熱點內容
如何重啟資料庫伺服器 瀏覽:658
聯通程序員發展怎麼樣 瀏覽:705
山東省聯想伺服器供貨商雲空間 瀏覽:145
鴻天神尊小說哪個app可以看 瀏覽:394
做程序員的沒朋友嗎 瀏覽:358
阿里雲伺服器傳奇微端 瀏覽:924
phplinux時間 瀏覽:449
雲伺服器20性能 瀏覽:986
android強制系統橫屏 瀏覽:280
怎麼提前看未播出的電視劇app 瀏覽:666
cad轉pdf圖層 瀏覽:600
程序員接私活初級 瀏覽:434
全無油潤滑壓縮機 瀏覽:186
代碼加密常用方法 瀏覽:953
安卓手機如何解除已禁用 瀏覽:396
演算法的隨機性 瀏覽:487
高中解壓體育游戲 瀏覽:533
androidstudior丟失 瀏覽:345
命令行筆記 瀏覽:739
360目標文件夾訪問拒絕 瀏覽:520