day21-進程
1、什么是進程
當我們運行一個開發(fā)的程序歧匈,我們將運行的程序叫做進程垒酬,當程序運行為進程后,系統(tǒng)會為該進分配內存件炉,以及進程運行的身份和權限勘究,在進程運行的過程中,系統(tǒng)會有各種指標來表示當前運行的狀態(tài)斟冕。
2口糕、程序和進程的區(qū)別
1.程序是數(shù)據和指令的集合,是一個靜態(tài)的概念磕蛇。同時進程可以長期存在系統(tǒng)中景描。
2.進程是程序運行的進程,是一個動態(tài)的概念秀撇。進程是存在生命周期的概念的伏伯,也是說進程隨著程序的終止而銷毀,不會永久存在系統(tǒng)中捌袜。
3说搅、進程的生命周期
當父進程收到任務調度時,會通過fock派生出進程來處理虏等,那么子進程會繼承父進程屬性
1.子進程在處理任務代碼時弄唧,父進程會進入等待狀態(tài)中.....
2.子進程在處理任務代碼后,會執(zhí)行退出霍衫,然后喚醒父進程來回收子進程的資源候引。
3.如果子進程在處理任務過程中,父進程退出敦跌,子進程沒退出澄干,那么這些子進程就沒有父進程來管理了逛揩,就變成僵尸進程
ps:每個進程父進程的PPID......子進程則叫PID.
4、進程狀態(tài)
程序在運行后麸俘,我們需要了解進程的運行狀態(tài)辩稽。查看進程的狀態(tài)分為:靜態(tài)和動態(tài)
使用ps命令查看當前的進程狀態(tài)(靜態(tài))
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
STAT狀態(tài)的顯示 S、 Ss从媚、Ss+逞泄、S<、S拜效、S+喷众、R、R+紧憾、D到千、T、Z
5赴穗、如何監(jiān)控進程的狀態(tài)憔四、靜態(tài)ps、動態(tài)top
Tasks: 146 total, 1 running, 145 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2028116 total, 1534552 free, 107776 used, 385788 buff/cache
KiB Swap: 1052668 total, 1052668 free, 0 used. 1735580 avail Mem
#Tasks: 154 total 任務總數(shù)
#2 running 有兩個進程正在運行
#151 sleeping 151個睡眠
#1 stopped 1個掛起 停止
#0 zombie 僵尸進程
#0.3 us 進程占用cpu的百分比(用戶進程)
#0.0 sy 內核進程 (硬件)
#0.0 ni 優(yōu)先級的進程占用cpu的百分比
#99.7 id 空閑的進程
#0.0 wa 大量的等待 -->
#0.0 hi 硬中斷
#0.0 si 軟中斷
#0.0 st 虛擬機占用物理CPU的時間
top常見指令
6望抽、進程中的iowait 軟中斷 硬中斷
中斷是指CPU在執(zhí)行程序的過程中加矛,出現(xiàn)了某些突發(fā)事件急需處理,CPU暫停當前程序的執(zhí)行煤篙,轉去處理突發(fā)事件斟览,處理完后又返回原程序被中斷的地方繼續(xù)執(zhí)行。
軟中斷:
1.軟中斷的處理非常像硬中斷辑奈。然而鸠窗,它們僅僅是由當前正在運行的進程所產生的稍计。
2.通常净刮,軟中斷是一些對I/O的請求淹父。這些請求會調用內核中可以調度I/O發(fā)生的程序暑认。對于某些設備蘸际,I/O請求需要被立即處理捡鱼,而磁盤I/O請求通常可以排隊并且可以稍后處理乍迄。根據I/O模型的不同闯两,進程或許會被掛起直到I/O完成,此時內核調度器就會選擇另一個進程去運行逊躁。I/O可以在進程之間產生并且調度過程通常和磁盤I/O的方式是相同稽煤。
3.軟中斷僅與內核相聯(lián)系。而內核主要負責對需要運行的任何其他的進程進行調度匾二。一些內核允許設備驅動的一些部分存在于用戶空間,并且當需要的時候內核也會調度這個進程去運行转培。
4.軟中斷并不會直接中斷CPU浸须。也只有當前正在運行的代碼(或進程)才會產生軟中斷删窒。這種中斷是一種需要內核為正在運行的進程去做一些事情(通常為I/O)的請求蕉拢。有一個特殊的軟中斷是Yield調用晕换,它的作用是請求內核調度器去查看是否有一些其他的進程可以運行。
硬中斷:
1.硬中斷是由硬件產生的夷家,比如库快,像磁盤,網卡湿蛔,鍵盤阳啥,時鐘等。每個設備或設備集都有它自己的IRQ(中斷請求)「藕桑基于IRQ继薛,CPU可以將相應的請求分發(fā)到對應的硬件驅動上(注:硬件驅動通常是內核中的一個子程序遏考,而不是一個獨立的進程)。
2.處理中斷的驅動是需要運行在CPU上的咖楣,因此胖腾,當中斷產生的時候锨阿,CPU會中斷當前正在運行的任務,來處理中斷末早。在有多核心的系統(tǒng)上,一個中斷通常只能中斷一顆CPU(也有一種特殊的情況,就是在大型主機上是有硬件通道的,它可以在沒有主CPU的支持下致份,可以同時處理多個中斷瞬沦。)锰提。
3.硬中斷可以直接中斷CPU边坤。它會引起內核中相關的代碼被觸發(fā)融蹂。對于那些需要花費一些時間去處理的進程区拳,中斷代碼本身也可以被其他的硬中斷中斷届良。
4.對于時鐘中斷乞而,內核調度代碼會將當前正在運行的進程掛起,從而讓其他的進程來運行。它的存在是為了讓調度代碼(或稱為調度器)可以調度多任務。