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