操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)
生活随笔
收集整理的這篇文章主要介紹了
操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 進程的同步基本概念
- 進程同步的主要任務
- 進程間的制約關系
- 臨界資源
- 臨界區
- 同步機制應遵循的規則
- 信號量機制
- 整型信號量
- 記錄型信號量 ???
- AND型信號量
- 信號量的應用
- 實現進程互斥
- 實現前驅關系
- 利用記錄型信號量實現同步
前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。點擊這里
進程的同步基本概念
進程同步的主要任務
使并發執行的諸進程之間能有效地共享資源和相互合作,從而使程序的執行具有可再現性。
進程間的制約關系
-
由于資源共享造成的間接相互制約關系
-
由于進程合作造成的直接相互制約關系
臨界資源
一次僅允許一個進程訪問的資源叫做臨界資源(互斥訪問)
臨界區
進程中訪問臨界資源的代碼
設計流程:
- 檢查臨界資源是否可用
- 訪問
- 將正在訪問的標志恢復為未被訪問的標志
同步機制應遵循的規則
- 空閑讓進
- 忙則等待(臨界資源占用需等待)
- 有限等待(等待時間有限)
- 讓權等待(讓出CPU)
信號量機制
整型信號量
P操作 wait(S)
wait(S):While (S<=0) do no-op;# 會一直占CPU運行,不能做到讓權等待S--;V操作 signal(S)
signal(S):S++;注意:P操作和V操作屬于原子操作,不可被中斷
記錄型信號量 ???
typedef struct{int value;struct process_control_block *list }semphore;wait(semaphore *S){S->value--; // 代表可用資源數-1if (S->value<0)block(S->list); // 若減1后小于0,則證明資源缺乏,故阻塞進程 }signal(semphore *S){S->value++; // 代表可用資源數+1if(S->value<=0)wakeup(S->list); // 若加1后小于等于0,證明有阻塞的進程,故喚醒1個 }AND型信號量
將進程需要的資源一次性分配,運行完后一次性釋放
Swait(S1,S2,S3...) //同時滿足所有信號量S Ssignal(S1,S2,S3...) //同時釋放所有信號量S信號量的應用
實現進程互斥
為進程設置初始信號量 mutex = 1 ,將臨界區置于wait(mutex)和signal(mutex)之間
實現前驅關系
設置共享信號量 S = 0,實現先P1,后P2
S = 0 P1:語句1;...signal(S) P2:wait(S)語句1;...利用記錄型信號量實現同步
semaphore empty = 1; semaphore full = 0; begin parbeginp1:beginrepeat......wait(full)print(x) # 默認將x打印完后銷毀signal(empty)......untilendp2:beginrepeat......wait(empty);x:=處理結果 # x重新創建賦值signal(full);until false;end ......總結
以上是生活随笔為你收集整理的操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统(二 )| 进程管理初探(前趋图
- 下一篇: 操作系统(四) | 经典进程的同步问题(