一.程序是乙個具有獨立功能的程式的一次執行活動。
二.特性:
(1)動態性
(2)非同步性
(3)獨立性
(4)併發性
三.三態:
1.就緒:任何時刻都只有乙個程序在cpu執行,但是同一時刻有多個程序就緒。通過一定的演算法將就緒的程序挑選出來,然後交給cpu執行。
2.執行:當程序被排程以後,就進入執行狀態。
3.阻塞:程序的請求暫時得不到滿足,就是阻塞狀態。
4.在阻塞和執行之後都會在此回到就緒狀態,等待下一次的排程。
四。程序id:用來對程序進行標識。------pid
父程序-----ppid
啟動程序的使用者id--------uid
五.程序互斥
若干程序同時訪問同一資源,但是這個資源任意時刻只允許有乙個程序訪問他。則其他資源必須等待。直到占用該資源釋的程序釋放他為止。
六.臨界資源
作業系統中同一時刻只允許乙個程序訪問的資源稱為臨界資源。
七.臨界區:
程序中訪問臨界資源的那段**叫做臨界區。為實現對臨界資源的互斥訪問,應保證諸多程序互斥的進入各自的臨界區。
八.程序同步:一組程序按照一定的順序執行的過程就是程序間的同步。具有同步關係的這組程序叫做合作程序。
九.程序排程:按照一定的演算法,從一組就緒的程序中選出乙個占有cpu執行。
十。排程演算法:
(1)(2)按照排程時機,排程可以分為搶占式排程和非搶占式排程。這兩個規則和前面說的四中排程演算法共同決定作業系統中的程序排程。
十一.死鎖:多個程序因為競爭資源而形成的僵局。導致這些程序都無法繼續往前執行。
十二.getpid
十三.函式學習
4.1建立程序
4.1.1函式名
fork
4.1.2 函式原形
pid_t fork(void);
4.1.3 函式功能
建立乙個子程序
4.1.4 所屬標頭檔案
4.1.5 返回值
成功:在父程序中返回子程序的pi
在子程序中返回0
失敗:父程序中返回-1
4.1.6 引數說明
無
4.1.7:工作原理:父程序呼叫fork以後會產生乙個子程序,這個子程序會在記憶體中開闢乙個空間,裡面的**和父程序的一樣,只是她不從起始位址開始執行,而是從fork後面的**開始執行。一般是父程序先執行,但其實不一定誰先誰後。子程序再執行。可以通過程序pid來區別父程序和子程序。大於0的就是父程序。相應的子程序擁有自己獨立的資料段和棧。不和父程序共享。
4.2建立程序
4.2.1函式名
vfork
4.2.2 函式原形
pid_t vfork(void);
4.2.3 函式功能
建立乙個子程序並且阻塞父程序
4.2.4 所屬標頭檔案
4.2.5 返回值
成功:在父程序中返回子程序的pid
在子程序中返回0
失敗:父程序中返回-1
4.2.6 引數說明
無
4.2.7:建立之後,子程序一定先執行。但是和父程序共享資料段和棧。
4.2.8:程序退出:void exit(int var)
父程序退出可以用return 和exit但是子程序只能用exit。一般情況下,正常退出用exit(0),異常退出用exit(1)
4.3程序等待4.3.1函式名
wait4.3.2 函式原形
pid_t wait(int *status);4.3.3 函式功能
掛起呼叫它的程序,直到其子程序結束4.3.4 所屬標頭檔案
4.3.5 返回值成功:返回終止的那個子程序的pid
失敗:-14.3.6 引數說明
status:記錄子程序的退出狀態。
4.4執行程式
4.4.1 函式名execl
4.4.2 函式原形int execl(const char *path, const char *arg, ...);
4.4.3 函式功能執行可執行檔案
4.4.4 所屬標頭檔案
4.4.5 返回值成功:不返回
失敗:返回-1.且巨集定義errno會被設定。4.4.6 引數說明
path:要執行的可執行程式的路徑,雖然一直包含到檔案,但是其後的第二個引數還要指出你要執行的檔案。arg:以及後面的引數都是可執行檔案執行需要的引數。遇到空指標結束且一定要由null在最後。
4.4.7在呼叫execl以後,**段會變化,保留原有的pid,不會產生新程序,執行新**。但是fork是保留原**,產生新的pid。
第8章 程序控制
pid t getppid void 返回值 呼叫程序的父程序id uid t getuid void 返回值 呼叫程序的實際使用者id uid t geteuid void 返回值 呼叫程序的有效使用者id gid t getgid void 返回值 呼叫程序的實際組id gid t getegi...
程序及程序控制
學習程序之前,先了解一下程式 所謂程式就是指編譯好的二進位制檔案,在磁碟上,不占用系統資源 cpu 記憶體.而程序是與作業系統相關,是指在記憶體中執行起來的程式,占用一些系統資源,每當乙個程式執行,就相應產生乙個程序。程序的一些相關資訊被放在乙個叫程序控制塊的資料結構中,稱之為pcb。linux下的...
第8章節 程序控制
1.每乙個程序都有唯一的乙個非負整數程序id 2.核心態 程序呼叫了系統api 注意不是標準庫函式 正在執行核心 的狀態 使用者態 正在執行的是使用者編寫的 狀態 3.核心自舉 自舉是指上電自檢,即核心檢查硬體平台都擁有什麼硬體,為硬體載入驅動,最終載入根文 件系統並執行第乙個程序。程序id 1的程...