深入Linux核心 一 程序排程

2021-05-28 09:06:24 字數 2529 閱讀 7349

1. 交換式程序interactive processes    

互動式程序是經常與使用者進行互動,因此需要花很多的時間等待鍵盤和滑鼠操作,當接受輸入後,程序必須被很快喚醒,不然就會出現系統反應遲鈍。典型的互動式程式是shell命令、文字編輯和影象應用程式

2. 批處理程序batch process

不必與使用者互動,經常在後台執行的程式,這樣的程式不必很快的響應,典型的應用是,資料庫索引引擎和科學計算等等。

3.實時程序real-time processes 

排程器: 程序管理子系統的核心功能 專為程序排程

有這樣一種情況

為了描述乙個資料的特徵,程序檢視需要知道程序名,程序號,由哪個程序啟動的,開啟哪個檔案,子程序號 ,與共享資源等等。在作業系統上有n個程序同時執行

對核心來說如何識別每乙個程序呢? 所以我們要用乙個資料結構來描述這些特徵,儲存乙個程序的這些資訊叫做資料結構表,每乙個結構體在32位系統中佔17k 用於描述乙個程序的狀態資訊,所有 的程序組合起來,就形成鍊錶,這個鍊錶是乙個雙向鍊錶 ,當我們建立新程序的時候就是實現在現有的連線中插入或新增乙個條目,當然這個過程比我們描述的遠遠要複雜

核心2.6 以後引入了 o(1) 排程器

o(1) |o(log n) | o(n) | o(n^2) | o(2^n) 

衡量演算法 / 佇列的關係

隨機挑乙個 執行程式長短的對應關係

排程器 隨著佇列長度的增加  隨機挑選出乙個時間長度的變化

o(1) 最大的缺點  完全平均  浪費執行時間

o(1)演算法 每一次掃瞄 140次  呼叫乙個執行

active活動佇列 等待執行

按照程序優先順序分組 級別最高開始執行 l0 

deadline 死亡期限  維護3個佇列

新增乙個佇列 裡面增加乙個死亡期限  倒數死亡計時器

互動式程序應用 最佳應用於資料庫 僅僅是參照

o(1) 排程演算法 最常見的是 cfs 完全公平演算法

為每乙個程序分配乙個 時間占用比例

程序排程策略:

靜態優先順序:       數字越小 優先順序越高

0-99, 100-139 

動態優先順序  只能調整 100--139 調整後表現為nice值調整

1--140

實時調整優先順序狀態

120--> 120(interactive) --> 115, nice(-5)

nice值:

-20-19

100-139

實時優先順序 : 數字越大優先順序越高

0--99

排程策略:

sched fifo  [1-99]

sched_rr    輪詢 不能用rr排程

posix :sched_normal other(100-139)  排程傳統常見的分時的程序 /動態優先順序    cfs

sched_fifo 先進先出

chrt -f [1-99] /path/to/program arguments

sched_rr  時間片輪轉

chrt -r [1-99] /path/to/program arguments

檢視cpu效能:

1.平均負載  程序個數  同時等待超過3就是cpu速度慢了

2.cpu利用率

w 過去一分鐘內的平均長度 

uptime 

topyum install sysstat

sar -q 1 2  每一秒中取一次 乙個取兩次

vmstat 1 5  正在佇列中執行的個數

檢視利用率

mpstat 

sar -p all 1

cpu 快取是如何實現的:

類別:直接對映

完全附屬快取:

yum install x86info

x86info

valgrind --tool=cachegrind ls

多個cpu訪問均衡:

實現程序與cpu繫結:

taskset -c -p cpu list pid

isolcpus=cpu nmuber.. 

排程域:

將程序繫結到指定的cpu上

cpu --> 指定在排程域中 

排程域會指派到cpu中 執行完後 就把程序放在後續態中

乙個cpu集合表示乙個排程域

numa  排程域中還可以由子排程域

create a mount point at /cpus 

add an entry to /etc/fstab

cat mems 

echo 0 > mems

echo 6918 tasks

echo 6918 > tasks

cat tasks

cat cpu_exlusive  該cpu是否屬於多個排程域/子域

0 ;不獨佔

1 :cpu唯一屬於這個域

cpuset 

Linux核心 程序排程

搶占式多工 由排程程式來決定什麼時間停止乙個程序的執行 程序的時間片 分配給每個可執行程序的處理器時間段 o 1 排程程式 反轉樓梯最後期限排程演算法 完全公平排程演算法 i o消耗型和處理器消耗型程序 i o消耗型程序 大部分時間用來提交i o請求或等待i o請求 處理器消耗型程序 把時間大部分用...

linux核心之程序排程(一)

等待佇列 sleep相關函式將程序的狀態設定為非執行態,在下一次排程來時,將在schedule函式中將本程序從執行佇列中移除。sleep函式將程序加入等待佇列,然後呼叫schedule函式選擇並重新開始另乙個程式的執行。當呼叫wake up類函式將程序喚醒時,wake up類函式將程序加入執行佇列中...

深入Linux核心架構筆記 程序管理與排程

概述 程序相關的基本概念 硬體實時程序有嚴格的時間限制,必須在可保證的時間範圍內得到處理,否則會有很嚴重的後果,請注意,這並不意味著所要求的時間範圍特別短,linux主流版本不支援硬實時處理 軟實時程序是硬實時程序的一種弱化形式,儘管仍然需要快速得到結果,但是稍微晚一點關係也不是很大,比如對cd機的...