프로세스 동기화 문제

5314 단어
우리는 프로세스 간에 서로 통신할 수 있다는 것을 알고 있다. 한 그룹의 프로세스가 공동으로 가지고 있는 코드와 공간에 접근하는 것은 앞에서 우리가 이미 토론한 바와 같다. 그러나 컴퓨터 내부에서 그 프로세스를 실행하는 것은 사실상 매우 복잡하다. 프로세스 간에 실행하는 순서도 때때로 확실하지 않다. 따라서 현재 코드가 어느 단계까지 실행되는지 확인하려면 코드 내부의 변수가 어떤 값인지 확인하는 것은 우리에게 매우 어렵다. 그리고두 프로세스가 하나의 변수를 동시에 수정하면 오류가 발생할 수 있기 때문에 우리는'프로세스 동기화'라는 개념을 도입했다.
1. 임계 구역 문제
모든 프로세스에 하나의 코드 세그먼트가 있는데 우리는 임계구라고 부른다. 이 세그먼트의 계승은 공동 변수를 바꿀 수 있고 표를 업데이트하고 파일을 쓸 수 있다. 이상의 문제가 발생하는 것을 방지하기 위해 우리는 시스템을 최적화하여 상술한 문제를 해결해야 한다.
임계점 문제에 대한 해답은 다음과 같은 세 가지 조건을 충족시켜야 한다.
(1) 상호 배척: 만약에 하나의 프로세스가 임계 구역에 있다면 다른 프로세스는 임계 구역에 들어갈 수 없다.
(2) 전진: 프로세스가 임계 구역에서 실행되지 않고 프로세스가 임계 구역에 들어가야 한다면 임계 구역에 없는 프로세스만 선택할 수 있고 이런 선택은 기한 없이 늦출 수 없다.
(3) 유한 대기: 한 프로세스에서 임계구에 대한 요청을 하고 이 요청이 허용될 때까지 다른 프로세스가 임계구에 들어갈 수 있는 횟수는 상한선이다.
2. Peterson 알고리즘
do
{
     flag[i]=TRUE;
      turn=j;
      while(flag[j] && turn==j);
         
      flag[i]=FALSE;
           
} while(TRUE);   
   

 
상기 코드에서turn은 그 프로세스가 임계 구역에 들어갈 수 있음을 나타낸다.flag[i]=TRUE는 프로세스 i가 임계 구역에 들어갈 수 있음을 나타낸다.
상술한 코드는 우리가 언급한 상호 배척, 전진 조건과 유한한 기다림을 만족시킨다
flag[j]=false 또는turn==i일 때만 프로세스 i가 임계 구역에 들어가 상호 배척을 만족시킬 수 있습니다.
flag[j]=true와turn=j가 성립되면 프로세스 j는while 순환문장에 빠지고 기다림을 나타낸다. 실행 중인 프로세스 i가 임계구역에서 퇴출될 때flag[i]=false에 빠지면 프로세스 j는 임계구역에 들어가 전진 조건을 충족시킬 수 있다.
프로세스 i가 임계 구역에서 물러나기만 하면 프로세스 j는 임계 구역에 들어갈 수 있고 제한된 만족을 기다릴 수 있다.
3. 신호량
 
PV 조작은 P조작 원어와 V조작 원어로 구성되어 (원어는 중단할 수 없는 과정) 신호량에 대해 조작한다. 구체적인 정의는 다음과 같다. P(S): ① 신호량 S의 값을 1, 즉 S=S-1로 줄인다.② S가³0이면 프로세스가 계속됩니다.그렇지 않으면 프로세스가 대기 상태로 설정되어 대기 대기열에 들어갑니다.V(S): ① 신호량 S의 값을 1, 즉 S=S+1 추가한다.② S>0이면 프로세스가 계속됩니다.그렇지 않으면 대기열에서 신호량을 기다리는 첫 번째 프로세스를 방출합니다.PV 조작의 의미: 우리는 신호량과 PV 조작으로 프로세스의 동기화와 상호 배척을 실현한다.PV 작업은 프로세스의 하위 레벨에 속합니다.
 
신호량은 무엇입니까?신호량(semaphore)의 데이터 구조는 하나의 값과 하나의 바늘로 이 신호량을 기다리는 다음 프로세스를 가리킨다.신호량의 값은 해당 자원의 사용 상황과 관계가 있다.그것의 값이 0보다 크면 현재 사용할 수 있는 자원의 수량을 나타낸다.값이 0보다 작을 때, 절대값은 이 자원을 사용하기를 기다리는 프로세스 개수를 나타낸다.신호량의 값은 PV 작업으로만 변경할 수 있습니다.일반적으로 신호량 S³0이면 S는 사용 가능한 리소스의 수를 나타냅니다.P를 한 번 실행하면 단위 자원 분배를 요청하여 S의 값을 1로 줄인다.S<0일 때, 사용할 수 있는 자원이 없습니다. 요청자는 다른 프로세스가 이 자원을 방출할 때까지 기다려야 실행할 수 있습니다.V를 실행하는 것은 단위 자원을 방출하는 것을 의미하기 때문에 S의 값은 1을 더한다.S.0 은 리소스를 기다리는 프로세스가 있음을 나타내므로 리소스가 실행되도록 대기 상태의 프로세스를 깨웁니다.
 
신호량과 PV 조작을 이용하여 프로세스의 상호 배척을 실현하는 일반적인 모델은 프로세스 P1 프로세스 P2... 프로세스 Pn...... P (S) 이다.              P(S);                         P(S);임계 구역;임계 구역;임계 구역;  V(S);              V(S);                        V(S);  ……                  ……            ……           ……
 
여기서 신호량 S는 상호 배척에 사용되며 초기값은 1이다.PV 조작을 사용하여 프로세스의 상호 배척을 실현할 때 주의해야 할 것은 (1) 모든 프로그램에서 사용자가 상호 배척을 실현하는 P, V 조작은 반드시 쌍으로 나타나야 한다. 먼저 P 조작을 하고 임계 구역에 들어간 다음에 V 조작을 하고 임계 구역을 나가야 한다.만약 여러 가지 지점이 있다면, 그 성대성을 진지하게 검사해야 한다.(2) P, V 작업은 각각 임계 구역의 머리와 꼬리에 바짝 붙어 있어야 하고 임계 구역의 코드는 가능한 한 짧아야 하며 사순환이 있어서는 안 된다.(3) 상호 배척 신호량의 초기값은 일반적으로 1이다.
 
PV 작업은 일반적인 동기화 메커니즘 중 하나입니다.하나의 신호량으로 하나의 소식과 연결되며 신호량의 값이 0일 때 기대하는 소식이 아직 발생하지 않았음을 나타낸다.신호량의 값이 0이 아닐 때, 기대하는 메시지가 이미 존재한다는 것을 나타낸다.PV 작업으로 프로세스를 동기화할 때 P를 호출하여 메시지가 도착했는지 테스트하고 V를 호출하여 메시지를 보냅니다.PV 작업을 사용하여 프로세스를 동기화할 때 주의해야 할 사항은 다음과 같습니다.
 
(1) 프로세스 간의 제약 관계를 분석하고 신호량의 종류를 확정한다.프로세스 간의 정확한 동기화 관계를 유지하는 상황에서 어느 프로세스가 먼저 실행되고 어떤 프로세스가 나중에 실행되며 서로 어떤 자원(신호량)을 통해 조화를 이루어 어떤 신호량을 설정해야 하는지를 명확히 한다.(2) 신호량의 초기값은 해당 자원의 수량과 관계가 있고 P, V 조작이 프로그램 코드에 나타난 위치와 관계가 있다.(3) 같은 신호량의 P, V 작업은 쌍으로 나타나지만 각각 다른 프로세스 코드에 나타난다.
 
4. 일정:
 
신호량 메커니즘의 기능은 강하지만 사용할 때 신호량에 대한 조작이 분산되고 통제하기 어려워 읽기와 쓰기가 어렵다.그래서 나중에 집중식 동기화 프로세스인 파이프라인을 제기했다.그 기본 사상은 변수를 공유하고 그것들에 대한 조작을 하나의 모듈에 집중하는 것이다. 운영체제나 병행 프로그램은 이런 모듈로 구성된다.이렇게 하면 모듈 간의 연결이 뚜렷하여 유지보수와 수정에 편리하고 정확성을 확보하기 쉽다.
 
파이프라인은 하나의 모듈로 그 유형 정의는 다음과 같다: 모니터name = MoNITOR;변수 설명 공유하기;define 본 파이프라인 내부 정의, 외부 호출 가능한 함수 명표;use 본 파이프라인 외부 정의, 내부 호출 가능한 함수 명표;내부에 정의된 함수 설명과 함수체 {공유 변수 초기화 문장;}
 
언어의 측면에서 볼 때 파이프라인은 주로 다음과 같은 특성이 있다. (1) 모듈화.파이프라인은 하나의 기본 프로그램 단위로 단독으로 컴파일할 수 있다.(2) 추상적인 데이터 유형.파이프라인은 데이터가 있을 뿐만 아니라 데이터에 대한 조작도 있다.(3) 정보 엄폐.파이프 밖에서는 파이프 내부에 정의된 일부 함수를 호출할 수 있으나 함수의 구체적인 실현은 외부에서 볼 수 없다.파이프라인에 정의된 공유 변수의 모든 작업은 파이프라인에 국한되며 외부에서는 파이프라인의 일부 함수를 호출하여 이러한 변수에 간접적으로 접근할 수 있습니다.그래서 파이프라인은 매우 좋은 포장성을 가지고 있다.공유 변수의 데이터 일치성을 확보하기 위해 파이프라인은 서로 밀어붙여 사용해야 한다.파이프라인은 보통 자원을 관리하는 데 사용되기 때문에 파이프라인에는 프로세스 대기 대기열과 상응하는 대기 및 깨우기 작업이 있다.관리 루트 입구에 대기 대기열이 있는데 이를 입구 대기 대기열이라고 부른다.파이프라인에 들어간 프로세스가 기다리고 있을 때 파이프라인의 상호 배제 사용권을 방출한다.이미 파이프라인에 들어간 프로세스가 다른 프로세스를 깨울 때 둘 중 하나는 파이프라인 사용을 종료하거나 중지해야 합니다.루틴 내부에서 깨우기 작업을 수행하기 때문에 여러 개의 대기 프로세스(루틴 사용 대기)가 존재할 수 있습니다. 이를 비상 대기 대기열이라고 하는데 이 대기열의 우선순위는 입구 대기 대기열보다 높습니다.따라서 하나의 프로세스가 프로세스에 들어가기 전에 먼저 신청해야 한다. 일반적으로 프로세스가 하나의enter프로세스를 제공한다.떠날 때 사용권을 방출합니다. 만약 긴급 대기 대기열이 비어 있지 않으면 첫 번째 대기자를 깨우고, 일반적으로 외부 프로세스 leave를 제공합니다.행정 내부에는 자신의 대기 메커니즘이 있다.파이프라인은 특수한 조건형 변수를 설명할 수 있다. var c:condition;실제로는 이 조건을 기다리는 PCB 대기열을 가리키는 바늘입니다.조건형 변수에 대해 wait와 signal 작업을 수행할 수 있습니다: (P와 V, take, give) wait (c): 긴급 대기 대기열이 비어 있지 않으면 첫 번째 대기자를 깨우고, 그렇지 않으면 프로그램 사용권을 방출합니다.이 작업을 수행하는 프로세스가 C 대기열 끝에 들어갑니다.signal (c): C 대기열이 비어 있으면 원래 프로세스를 계속합니다. 그렇지 않으면 대기열의 첫 번째 대기자를 깨우고 긴급 대기 대기열의 끝에 들어갑니다.
부분 참조:https://www.cnblogs.com/sonic4x/archive/2011/07/05/2098036.html
 
전재 대상:https://www.cnblogs.com/PIRATE-JFZHOU/p/8111665.html

좋은 웹페이지 즐겨찾기