1. 程式人生 > >國嵌視訊學習第三天-程序控制

國嵌視訊學習第三天-程序控制

程序ID(PID):標示程序的唯一數字

父程序的ID(PPID)

啟動程序的使用者ID(UID)

程序互斥

程序互斥是指當有若干程序都要使用某一共享資源時,任何時刻最多允許一個程序使用,其他藥使用該資源的程序必須等待,直到佔用該資源者釋放了該資源為止。

臨界資源

作業系統中將一次只允許一個程序訪問的資源稱為臨界資源

臨界區

程序中訪問臨界資源的那段程式程式碼稱為臨界區。為實現對臨界資源的互斥訪問,應保證諸程序互斥地進入各自的臨界區

程序同步

一組併發程序按一定的順序執行的過程稱為程序間的同步。具有同步關係的一組併發程序稱為合作程序,合作程序間互發傳送的訊號稱為訊息或事件

程序排程

概念:按一定演算法,從一組待執行的程序(就緒態的程序)中選出一個來佔有CPU

執行

排程方式: 搶佔式

非搶佔式

排程演算法

-----------先來先服務排程演算法

-----------短程序優先排程演算法

-----------高優先順序優先排程演算法

-----------時間片輪換法

死鎖

多個程序因競爭資源而形成一種僵局,若無外力作用,這些程序都將永遠不能再向前推進

獲取ID

#include <sys/types.h>

#include <unistd.h>

pid_t getpid(void)

獲取本程序ID

pid_t getppid(void)

獲取父程序ID

.

程序建立-fork

#include <unistd.h>

pid_t fork(void)

功能:建立子程序

Fork的奇妙之處在於它被呼叫一次,卻返回兩次(父程序和子程序各返回一次),它可能有三種不同的返回值:
1.在父程序中,fork返回新建立的子程序的PID

2.在子程序中,fork返回0(但是並不是說子程序的ID0,而只是返回0!)

3.如果出現錯誤,fork返回一個負值

.fork1.c

程序建立

子程序的資料空間、堆疊空間都會從父程序得到一個拷貝,而不是共享。

程序建立-vfork

#include <sys/types.h>

#include <unistd.h>

pid_t vfork(void)

功能:建立子程序

fork   VS.   vfork

區別:

1.fork:子程序拷貝父程序的資料段

  vfork:子程序與父程序共享資料段

2.fork:父、子程序的執行次序不確定

  vfork:子程序先執行,父程序後執行

.

exec函式族

exec用被執行的程式替換呼叫它的程式。(包括資料段)

區別:
fork建立一個新的程序,產生一個新的PID

exec啟動一個新程式,替換原有的程序,因此程序的PID不會改變

#include <unistd.h>

int execl(const char*  path, const char* arg1,...)

引數:

path:被執行程式名(還能完整路徑)

arg1 - argn:被執行程式所需的命令列引數,含程式名。以空指標(NULL)結束

execl.c

#include <unistd.h>

int execlp(const char* path,const char* arg1,...)

引數:

path:被執行的程式名(不含路徑,將從path環境變數中查詢執行該程式)

arg1 - argn:被執行程式所需的命令列引數,含程式名。以空指標(NULL)結束

execlp.c

#include <unistd.h>

int execv(const char* path,  char* const argv[])

引數:

path:被執行程式名(含完整路徑)

argv[]:被執行程式所需的命令列引數陣列

execv.c

#include <stdlib.h>

int system(const char* string)

功能:

該函式將呼叫fork產生子程序,由子程序來呼叫/bin/sh -c string來執行引數string所代表的命令

system.c

程序等待

#include <sys/types.h>

#include <sys/wait.h>

pid_t wait(int * status)

功能:

阻塞該程序,直到其某個子程序退出,wait返回的值是退出的子程序pid

wait.c