프로 세 스 동기 화 (1) 의 PV 작 동 / 신 호 량 / 상호 배척 량

5682 단어 신호 량
OS 에서 신 호 량 은 자원 의 실체 수 를 나타 내 고 초기 신 호 량 은 하나의 Int 일 뿐 입 니 다. 하나의 int 에서 자원 수 를 나 타 낼 수 있 지만 여러 프로 세 스 가 CPU 를 선점 할 때 다음 선점 은 프로 세 스 대기 열의 혼란 을 초래 할 수 있 습 니 다. 예 를 들 어 ABC 4 개의 프로 세 스, A 가 먼저 CPU 를 빼 앗 았 습 니 다. 다음 에 CPU 선점 을 할 때 BCD 의 순 서 는 예측 할 수 없습니다. 그래서 신 호 량 의 데이터 구조 인 semaphore 를 도 입 했 습 니 다.
PV
PV 조작 은 네덜란드인 Dijkstra 가 제기 한 것 입 니 다. (네덜란드 어 에서 P: Probren 은 검 측 이라는 뜻 입 니 다. V: Verhogen 은 증분 이라는 뜻 입 니 다) PV 조작 은 병행 프로 세 스 간 CPU 의 경쟁 을 해결 할 수 있 고 병행 프로 세 스 의 협력 관 계 를 해결 할 수 있 습 니 다. PV 조작 은 지 키 는 공평 한 전략 은 FCFS 입 니 다.
주의: PV 작업 은 원 어 작업 입 니 다. 데이터 베 이 스 를 배 운 적 이 있 습 니 다. 우 리 는 원 어 는 코드 를 말 하 는 것 임 을 알 고 있 습 니 다. 다 하거나 하지 않 거나 이 코드 가 완성 되 지 않 으 면 중단 할 수 없습니다.
다음 코드 보기
 
 1 typedef struct semaphore{

 2 

 3   int value; //    

 4 

 5   struct pcb *list;//       

 6 

 7 };

 8 

 9 //  P  (      )

10 

11 void P(semaphore &s){

12 

13   s.value--;

14 

15   if(s.value<0){//        ,       ,      P  

16 

17     W.(s.list);//      wait.

18 

19   }

20 

21 }

22 

23 //  V  (            )

24 

25 void V(semaphore &s){

26 

27   s.value++;

28 

29   if(s.value<=0){//          ,        

30 

31     R(s.list);//      release.

32 

33   }

34 

35 }

 
이 부분 이 PV 작업 의 핵심 코드 입 니 다.
P 작업 중 자원 이 없 으 면 자신 을 막 고 스케줄 을 기다 리 는 대기 열 에 자신 을 넣 습 니 다.
V 작업 중 막 힌 대기 열 이 있 으 면 프로 세 스 를 깨 웁 니 다.
Note:
value 초기 값 은 자원 수 입 니 다.
value 는 0, 자원 이 마침 다 떨 어 졌 습 니 다.
value 가 0 보다 크 면, 그리고 자원..
value 가 0 보다 작 으 면, 절대 값 은 대기 열 에 걸 려 있 는 프로 세 스 수 와 같 습 니 다.
상호 배척 량
상호 배척 량 은 말 그대로 이해 하기 쉬 운 것 이 바로 과정 간 의 상호 배척 관 계 를 해결 하 는 것 이다.
일반적인 상호 배척 량 은 병렬 프로 세 스 가 임계 구역 에 들 어가 기 전의 테스트 에 사 용 됩 니 다. (임계 구역: 병렬 프로 세 스 에서 공유 변수 와 관련 된 코드 세그먼트)
구현 코드 는 다음 과 같 습 니 다:
 1 semaphore mutex;

 2 

 3 mutex = 1;

 4 

 5 void M(){

 6 

 7   P(mutex);

 8 

 9   {   }

10 

11   V(mutex);

12 

13 }

Note:
mutex 의 값 은 1 / 0 이 고 mutex 는 1 일 때 임계 구역 을 사용 할 수 있 음 을 나타 낸다. mutex 는 0 으로 임계 구역 을 사용 할 수 없 음 을 나타 낸다. mutex 도 공유 자원 에 자 물 쇠 를 추가 할 수 있다.
개념 총화:
1) 동기 화: 신 호 량 초기 화 S0 = n, S1 = 0, 두 개의 병행 프로 세 스 는 두 개의 신 호 량 이 필요 합 니 다. 다음 프로 세 스 는 0 으로 초기 화 되 고 다른 프로 세 스 는 자원 수로 초기 화 됩 니 다. 더 많은 병행 프로 세 스 를 도입 할 때 하나의 프로 세 스 를 추가 할 때마다 신 호 량 이 증가 합 니 다.
2) 상호 배척: 신 호 량 이 있 고 하나만 있 으 며 초기 값 은 1 이다.

좋은 웹페이지 즐겨찾기