프로세스 동기화는 데이터 불일치로 이어질 수 있는 공유 데이터에 대한 동시 액세스 문제를 해결하는 기술입니다. 협업 프로세스는 다른 프로세스에 영향을 주거나 다른 프로세스의 영향을 받아 일관성 없는 프로세스 데이터를 생성할 수 있는 프로세스를 의미합니다. 따라서 데이터 일관성을 보장하려면 프로세스 동기화가 필요합니다.
중요 섹션 문제
모든 프로세스에는
중요 섹션이라는 예약된 코드 섹션이 있습니다. 이 섹션에서 프로세스는 공용 변수 변경, 테이블 업데이트, 파일 쓰기 등을 수행할 수 있습니다. 임계 섹션에 대해 주목해야 할 핵심 사항은 한 프로세스가 임계 섹션에서 실행되는 동안 다른 프로세스가 임계 섹션에서 실행될 수 없다는 것입니다. 모든 프로세스는 임계 섹션에 들어가기 전에 권한을 요청해야 하며, 이 요청을 구현하는 코드 섹션은
entry 섹션, 코드 끝은
exit 섹션, 나머지 코드는
remaining 섹션입니다. 아래에는 특정 프로세스 P1의 중요 섹션 구조가 나와 있습니다.
에는 다음 세 가지 요구 사항이 있습니다. 중요 섹션이 충족되어야 합니다.
-
상호 배타적 - 프로세스가 가정하는 경우 P1은 임계 섹션에서 실행되는 다른 프로세스가 아닌 P2가 임계 섹션에서 실행될 수 없다고 가정합니다.
-
Progress - 임계 섹션에서 프로세스가 실행되고 있지 않고 임계 섹션의 임계 섹션에 들어가려는 프로세스가 있는 경우 나머지 부분에서 실행되지 않는 프로세스만 임계 영역 진입을 요청할 수 있습니다. 섹션에 따라 선택이 무기한 연기될 수 있습니다.
-
Bounded Wait - 제한된 대기에서는 프로세스가 임계 섹션에 들어가라는 요청을 보낸 후 요청이 승인되기 전에 임계 섹션에 들어갈 수 있는 횟수에 제한이 있습니다.
운영 체제에서 중요한 부분을 처리하기 위해 일반적으로 사용되는 두 가지 방법이 있습니다.
선점형 커널 - 선점형 커널을 사용하면 프로세스가 선점되는 동안 프로세스를 선점할 수 있습니다. 커널 모드에서 실행됩니다.
비선점형 커널 - 비선점형 커널은 커널 모드에서 실행되는 프로세스가 선점되는 것을 허용하지 않습니다.
Peterson의 솔루션
Peterson의 솔루션은 임계 영역 문제에 대한 고전적 기반 소프트웨어 솔루션입니다. 중요한 부분과 나머지 부분을 번갈아 사용하는 두 가지 프로세스로 제한됩니다. Peterson의 부분에서는 두 프로세스 간에 두 개의 데이터 항목을 공유해야 합니다. 즉,
Boolean flag[2] -
- 여기서 변수 Turn은 임계 섹션에 들어갈 차례를 나타내고 플래그 배열은 프로세스가 임계 영역에 진입할 준비가 되어 있는지 여부.
turn == i인 경우 프로세스 Pi가 임계 섹션에 들어갈 수 있음을 의미합니다.
플래그[j]가 TRUE이면 프로세스 j가 임계 섹션에 들어갈 준비가 되었음을 의미합니다.
다음은 Peterson 솔루션의 프로세스 P 구조입니다.
Peterson 솔루션은 세 가지를 모두 유지합니다. 조건 -
상호 배타적
− 한 번에 하나의 프로세스만 임계 섹션에 액세스할 수 있습니다. -
Progress
− 중요 섹션 외부의 프로세스는 다른 프로세스가 중요 섹션에 들어가는 것을 막지 않습니다. -
Bounded Wait
- 각 프로세스는 무기한 기다리지 않고 임계 섹션에 들어갈 기회가 있습니다. 동기화 하드웨어
는 두 가지 유형의 명령을 사용하여 구현되었습니다.
Test 및 Set()
swap()-
- Test 및 Set()은 동기화 문제에 대한 하드웨어 솔루션입니다. 그 중 Lock이라는 여러 프로세스가 공유하는 공유변수가 있는데, 이는 0과 1의 값을 가질 수 있는데, 1은 잠금 획득을 의미하고 0은 잠금 해제를 의미합니다.
프로세스가 임계 섹션에 들어가려고 할 때마다 잠금 값을 쿼리해야 합니다. 잠금 값이 1이면 잠금 값이 0으로 변경되지 않을 때까지 기다려야 합니다.
아래는 TestAndSet()의 상호 배타적 구현입니다.
Semaphore
Semaphore는 TestAndSet() 및 Swap() 명령으로 인해 발생하는 문제를 극복하는 데 사용되는 동기화 도구입니다. 세마포어 S는 wait() 및 signal()의 두 가지 표준 원자 연산을 통해 액세스할 수 있는 정수 변수입니다.
wait() 함수:
wait(S) {
While S <= 0
; // no operation
S--;
}
로그인 후 복사
Signal() 함수 함수:
signal(S) {
S++;
}
로그인 후 복사
프로세스가 세마포어 값을 수정하는 중이면 다른 프로세스가 동시에 동일한 세마포어 값에 대해 작업을 수행할 수 없습니다.
아래는 세마포어를 사용한 상호 배제 구현입니다.
운영 체제는 두 가지 유형의 세마포어를 사용합니다.
세마포 계산
- 이 유형의 세마포 값은 무제한 도메인 내에서 달라질 수 있습니다
이진 세마포
- 이 유형의 세마포 값은 0에서 1 사이일 수 있습니다. 뮤텍스 잠금이라고도 합니다. 이는 운영 체제에서 여러 프로세스의 중요 섹션 문제를 해결하는 데 사용됩니다.
위 내용은 C/C++의 프로세스 동기화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!