linux进程管理子系统分析,linux进程管理子系统简要分析
Linux進程管理:
進程與程序:
程序:存放在磁盤上的一系列代碼和數據的可執行映像,是一個靜止的實體。
進程:是一個執行中的程序,它是動態的實體
進程四要素:
1. 有一段程序供其執行,這段程序不一定是某個進程所專有,可以與其他進程共用
2. 有進程專用的內核空間堆棧
3. 在內核中有一個task_struct數據結構,即通常所說的“進程控制塊”。有了這個數據結構,進程才能成為內核調度的一個的一個基本單位接收內核的調度。
4. 有獨立的用戶空間
Linux進程狀態
1. TASK_RUNNING
進程正在被CPU執行,或者已經準備就緒,隨時可以執行,當一個進程剛被創建時,就處于TASK_RUNNING狀態。
2. TASK_INTERRUPTIBLE
處于等待中的進程,待等待條件為真時被喚醒,也可以被信號或者中斷喚醒。
3. TASK_UNINTERRUPTIBLE
處于等待中的線程,待資源有效時喚醒,但不可以由其它進程通過信號或中斷喚醒。
4. TASK_KILLABLE
Linux2.6新引入的進程睡眠狀態,原理類似于TASK_UNINTERRUPTIBLE,但是可以被致命信號SIGKILL喚醒。
5. TASK_TRACED
正處于被調試狀態的進程
6. TASK_DEAD
進程退出時(調用do_exit)所處的狀態
Linux進程描述
在Linux內核代碼中,線程、進程都使用結構task_struct(sched.h)來表示,它包含了大量描述進程/線程的信息,其中比較重要的有:
pid_t pid;//進程號
long state;//進程狀態
int prio;//進程優先級
Linux進程調度:
調度的概念:從就緒的進程中選出最合適的一個來執行。
1. 調度策略
SCHED_NORMAL(SCHED_OTHER):普通的分時進程
SCHED_FIFO:先入先出的實時進程
SCHED_RR:時間片輪轉的實時進程
SCHED_BATCH:批處理進程
SCHED_IDLE:只在系統空閑時才能夠被調度執行的進程
2. 調度時機
什么時候發生調度?即shedule()函數什么時候被調用。
調度時機----主動式
在內核中直接調用schedule().當進程需要等待資源等而暫時停止運行時,會把自己的狀態置于掛起(睡眠),并主動請求調度,讓出CPU。
范例:
1. current->state = TASK_INTERRUPTIBLE;
2. schedule();
調度時機---被動式
被動式調度又名:搶占式調度。分為:用戶態搶占和內核態搶占。
用戶態搶占:
內核態搶占:
調度時機---搶占計數
3. 調度步驟
Schedule函數工作流程如下:
1>. 清理當前運行中的進程
2>.選擇下一個要運行的進程
3>.設置新進程的運行環境
4>.進程上下文切換
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的linux进程管理子系统分析,linux进程管理子系统简要分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画饼图存在的问题_Matpl
- 下一篇: centos7安装php5.2yum源操