程式管理
一、程式與執行緒
程式和執行緒的相互比較:
(1)排程:程式是資源擁有的基本單位,執行緒是獨立排程的基本單位(CPU執行的基本單位)
(2)併發性:程式跟執行緒都可以併發
(3)地址空間:程式的地址空間是相互獨立的,同一程式的各個執行緒之間共享程式的資源
(4)通訊方面:程式間通訊需要程式同步和互斥手段的輔助,而執行緒之間可以直接讀寫程式資料段(如全域性變數)來進行通訊
二、處理機排程
三、程式同步
PV操作詳解:
typedef struct{
int value;//代表資源數目
struct process *L;//連結所有等待該資源的程式
}semaphore;
void wait(semaphore S)//相當於申請資源
{
S.value--;
if(S.value<0)
{
把這個程式新增到等待連結串列;
block(S.L);//進行自我阻礙,放棄處理機,並插到該類資源的等待佇列S.L中
}
}
void signal(semaphore S){//相當於釋放資源
S.value++;
if(S.value<=0)
{
從等待連結串列中摘除一個程式;
wakeup(P);//將S.L中的第一個等待程式喚醒
}
}
//生產者-消費者問題
問題描述:一組生產者程式和一組消費者程式共享一個初始為空、大小為n的緩衝區,只有緩衝區沒滿時,生產者才能將訊息放入到緩衝區,
否則必須等待;只有緩衝區不空時,消費者才能從中取出訊息,否則必須等待。由於緩衝區是臨界資源,它只允許一個生產者放入訊息
,或者一個消費者取出訊息
semaphore mutex=1;//臨界區互斥訊號量
semaphore empty=n;//空閒緩衝區
semaphore full=0;//緩衝區初始化為空
producer(){
while(1)
{
生產一個資料;
P(empty);//P(empty)必須放在P(mutex)之前,若相反,假如empty=0,當生產者執行時,生產者和消費之都會阻塞,陷入無休止的等待
P(mutex);
將資料放入緩衝區;
V(mutex);
P(full);
}
}
consumer(){
while(1)
{
p(full);
p(mutex);
從緩衝區取資料;
V(mutex);
V(empty);
消費資料;
}
}
四、死鎖
銀行家演算法核心思想:
保證系統現有的資源大於任何程式執行還需要的資源,從而找到一個安全序列,保證程式之間不會發生死鎖
相關文章
- Supervisor管理Laravels,Laravels程式管理Laravel
- hhdesk程式組管理
- Linux 程式管理Linux
- Linux程式管理Linux
- golang程式版本管理Golang
- 日誌管理程式
- Solaris 程式管理(轉)
- vps管理系統 批次管理程式
- Linux系統管理之程式管理Linux
- Linux系統管理-工作管理(後臺程式管理)Linux
- Linux:程式模型和程式管理Linux模型
- Linux-程式管理Linux
- Git命令程式碼管理Git
- svn程式碼版本管理
- Linux(六)——程式管理Linux
- LINUX 核心程式管理Linux
- 管理應用程式——流
- 管理捕獲程式——流
- FreeBSD程式管理(轉)
- 程式的版本號管理
- Linux 程式管理(轉)Linux
- 安裝及管理程式
- 程式管理程式supervisor安裝和使用
- Git操作和程式碼管理Git
- supervisor 程式管理入門
- 計算機原理:程式管理計算機
- Sonar程式碼質量管理
- Node.js的程式管理Node.js
- systemd程式管理工具
- Linux:使用systemd管理程式Linux
- 第二章 程式管理
- 作業系統-程式管理作業系統
- php多程式管理器PHP
- Linux詳解 --- 程式管理Linux
- 檔案管理程式:ForkLift for MacMac
- 程式碼質量管理-Sonar
- [Linux]——程式管理相關Linux
- linux下的程式管理Linux