Linux進程的調(diào)度
Linux調(diào)度時機主要有:進程狀態(tài)轉(zhuǎn)換的時刻:進程終止、進程睡眠。當前進程的時間片用完時(current-counter=0)。設(shè)備驅(qū)動程序。進程從中斷、異常及系統(tǒng)調(diào)用返回到用戶態(tài)時。
首先,我們需要明確一點:進程調(diào)度是對TASK_RUNNING狀態(tài)的進程進行調(diào)度(參見《linux進程狀態(tài)淺析》)。如果進程不可執(zhí)行(正在睡眠或其他),那么它跟進程調(diào)度沒多大關(guān)系。所以,如果你的系統(tǒng)負載非常低,盼星星盼月亮才出現(xiàn)一個可執(zhí)行狀態(tài)的進程。
Linux下的任務(wù)調(diào)度分為兩類,系統(tǒng)任務(wù)調(diào)度和用戶任務(wù)調(diào)度。l 系統(tǒng)任務(wù)調(diào)度:系統(tǒng)周期性所要執(zhí)行的工作,比如寫緩存數(shù)據(jù)到硬盤、日志清理等。在/etc目錄下有一個crontab文件,這個就是系統(tǒng)任務(wù)調(diào)度的配置文件。
Linux的調(diào)度策略區(qū)分實時進程和普通進程,實時進程的調(diào)度策略是SCHED_FIFO和SCHED_RR,普通的,非實時進程的調(diào)度策略是SCHED_NORMAL(SCHED_OTHER)。實時調(diào)度策略被實時調(diào)度器管理,普通調(diào)度策略被完全公平調(diào)度器來管理。
)rq: 進程的運行隊列( runqueue), 每個CPU對應(yīng)一個 ,包含自旋鎖(spinlock)、進程數(shù)量、用于公平調(diào)度的CFS信息結(jié)構(gòu)、當前運行的進程描述符等。實際的進程隊列用紅黑樹來維護(通過CFS信息結(jié)構(gòu)來訪問)。
Linux系統(tǒng)中的進程調(diào)度介紹
1、在linux下,用戶程序可以通過sched_setscheduler系統(tǒng)調(diào)用來設(shè)置進程的調(diào)度策略以及相關(guān)調(diào)度參數(shù);sched_setparam系統(tǒng)調(diào)用則只用于設(shè)置調(diào)度參數(shù)。
2、進程狀態(tài)轉(zhuǎn)換的時刻:進程終止、進程睡眠 進程要調(diào)用sleep()或exit()等函數(shù)進行狀態(tài)轉(zhuǎn)換,這些函數(shù)會主動調(diào)用調(diào)度程序進行進程調(diào)度。
3、)rq: 進程的運行隊列( runqueue), 每個CPU對應(yīng)一個 ,包含自旋鎖(spinlock)、進程數(shù)量、用于公平調(diào)度的CFS信息結(jié)構(gòu)、當前運行的進程描述符等。實際的進程隊列用紅黑樹來維護(通過CFS信息結(jié)構(gòu)來訪問)。
Linux中啟動進程的方法有哪些?哪種更好用?
1、復制進程映像——fork函數(shù)fork函數(shù)的應(yīng)用 exec調(diào)用用新的進程替換當前執(zhí)行的進程,而我們也可以用fork來復制一個新的進程,新的進程幾乎與原進程一模一樣,執(zhí)行的代碼也完全相同,但新進程有自己的數(shù)據(jù)空間、環(huán)境和文件描述符。
2、Linux中如何啟動進程?啟動進程的方法是什么?手工啟動。用戶在輸入端發(fā)出命令,直接啟動進程。分為前臺啟動和后臺啟動。前臺啟動:直接在SHELL中輸入命令進行啟動。后臺啟動:啟動一個目前并不緊急的進程。調(diào)度啟動。
3、linux啟動進程的命令可以用sh,python ,./文件名。下面是有關(guān)進程的操作:查進程 ps命令查找與進程相關(guān)的PID號:ps a 顯示現(xiàn)行終端機下的所有程序,包括其他用戶的程序。ps -A 顯示所有程序。
4、Linux系統(tǒng)中的進程分為:獨立守護進程和被動守護進程。 獨立守護進程由相應(yīng)的獨立啟動,而被動守護進程由Xinetd服務(wù)監(jiān)聽啟動。