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