1 ,進程:一個具有一定獨立功能的程序的一次運行活動
進程是一個正在執行的實例;
2,進程ID:
每個進程都有一個ID(正整數),唯一標識系統的進程;
每個進程都有一個創建他的進程,叫父進程;
進程 ID(PID)
父進程ID(PPID)
啓動進程的用戶ID(UID)
getpid()頭文件:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);
示例:輸出子進程和父進程IDint main()
{
printf("子進程ID :%d\n",getpid());
printf("父進程ID :%d\n",getppid());
return 0;
}
3,子進程有其父進程,父進程也有其父進程,那最原始的進程是 init 進程!
所有進程的祖先都是init 進程,其PID爲 1 .可以用 pstree 命令查看關係;
下面是關係圖一部分:
init─┬─/usr/bin/sealer
├─VGAuthService
├─acpid
├─atd
├─auditd─┬─python
│ └─{auditd}
├─automount───4*[{automount}]
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activati}
├─bt-applet
├─clock-applet
├─crond
├─cupsd
4,當一個進程的父進程在其之前終止,此時進程變爲孤兒時,次進程會被init 進程所領養。
5,進程的生命週期
創建:每個進程都有其父進程創建
運行:多個進程可以同時運行,進程之間可以進行通信
終止:結束一個進程的運行
6,進程的特點:
動態性:進程的實質是程序的一次執行過程,進程是動態產生,動態消亡的
併發性:任何進程都可以同其他進程一起併發執行
獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位
異步性:由於進程間的相互制約,使進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度向前推進
結構特徵:進程由程序、數據和進程控制塊三部分組成.
7,進程互斥:
當有若干個進程都要使用某一共享資源時,任何時候最多允許一個進程使用,其他使用該資源的進程必須等待,直到佔用該資源者釋放了該資源
臨界資源:
操作系統中一次只允許一個進程訪問的資源稱爲臨界資源
8,臨界區:
進程中訪問臨界資源的那段代碼區稱爲臨界區,爲實現對臨界資源的互斥訪問,應保證各進程互斥的進入各自的臨界區
9,進程調度:
先來先服務調度算法:按先後順序啓動進程
最短作業有限調度:選取執行時間最短的進程運行,難點是執行時間的測量,有時候可以通過歷史數據來預測或者用提交進程時輸入執行時間上限作爲依據。
基於優先級調度:每個進程都關聯一個優先級,內核將CPU分配給最高優先級的進程
循環調度:內核從ready隊列中選取第一個進程將CPU分配給他,並且設計一個計時器在一個時間後終斷該進程
10,進程死鎖:
多個進程因競爭資源而形成的一種僵局