프로세스 동기화란 무엇입니까?

동기화

프로세스는 서로 데이터를 교환하여 협력적으로 실행됩니다.

공동으로 실행되는 이러한 프로세스는 특정 순서를 따릅니다.

제대로 작동해야 합니다.

그래서 동기화가 필요합니다.

동기화는 프로세스 간의 실행 타이밍입니다.

수단.

프로세스 간 실행 타이밍 정렬에는 두 가지 주요 의미가 있습니다.

1. 실행 순서 확인

올바른 순서로 프로세스를 실행하는 것을 의미합니다.

글쓰기와 읽기 과정이 있다고 가정해 봅시다.

두 프로세스를 임의의 순서로 실행하면 텍스트를 읽기 전에 텍스트를 읽는 프로세스가 실행됩니다.

텍스트를 읽는 과정은 읽을 텍스트에 값이 있어야 한다는 특정 조건이 충족되어야만 진행될 수 있습니다.

따라서 글을 읽기 전에 글을 쓰는 과정이 선행되어야 합니다.

이것은 실행 순서를 제어하기 위한 동기화입니다.

2. 상호 배제

즉, 한 프로세스만 동시에 액세스해서는 안 되는 리소스에 액세스할 수 있습니다.

간단한 예를 들자면,

A와 B라는 두 사람이 같은 계좌에 $20,000와 $50,000를 입금했다고 가정합니다.

계좌에 자금이 없는 경우,

Person A가 수행하는 프로세스는 다음과 같습니다.

– 잔고 읽기(0원)

– 독서잔고에 2만원 적기(2만원)

– 부가가치 확보(2만원)

A가 실행된 후 프로세스 B가 실행되면 20000 + 50000원이므로 계정에 70000원이 남아 있어야 합니다.

동시에 실행된다면? B의 과정은 A가 계좌에 추가된 20,000원의 가치를 아직 저장하지 않았을 때 시작됩니다.

작동한다고 가정해 봅시다.

프로세스는 다음과 같이 작동합니다.

– 잔고 읽기(0원)

– 독서잔고에 5만원 적기(5만원)

– 부가가치 확보(50,000원)

통장에 7만원이 남아야 할 5만원이 문제가 됩니다.

계좌이체 예와 같이 동시접속 금지

사용할 수 없는 리소스가 동시에 액세스되지 않도록 방지하는 것을 상호 배제 동기화라고 합니다.

그렇다면 동시에 액세스해서는 안 되는 리소스란 무엇을 의미합니까?

공유 리소스 및 중요 섹션

다음과 같이 동시에 실행되는 프로세스 B. 은행 송금, 전체 변수라고 하는 공통 리소스로 작업했습니다.

이러한 리소스

이를 공유 리소스라고 합니다.

공유 리소스에 동시에 액세스해서는 안 됩니다.

위의 계좌 이체 사례와 같이 정상적인 프로세스 동작입니다.

그렇지 않기 때문입니다.

공유 리소스는 전역 변수, 파일 또는 I/O 장치일 수 있습니다.

이러한 공유 리소스에

액세스되는 코드 영역을 크리티컬 섹션이라고 합니다.

둘 이상의 프로세스가 실행 중이라고 가정하면 한 프로세스가 크리티컬 섹션에 진입하면 다른 프로세스는

이 프로세스가 작업을 완료할 때까지 기다려야 합니다.

이 시점에서 프로세스는 순서와 액세스를 동시에 따르지 않습니다.

문제가 발생할 것입니다.

이를 경쟁 조건이라고 합니다.

경쟁 조건이 발생하면 계정 이체와 같이 데이터 일관성을 깨는 문제가 발생합니다.

상호 배제 동기화는 프로세스가 동시에 중요 섹션에 액세스하지 않음을 의미합니다.

운영 체제는 세 가지 원칙으로 이를 해결합니다.

– 상호배제 : 어떤 프로세스가 크리티컬 섹션에 진입하면 다른 프로세스는 진입할 수 없다.

– Go : 크리티컬 섹션에 진입한 프로세스가 없다면 크리티컬 섹션에 진입하고자 하는 프로세스가 진입할 수 있다.

– 유한 대기: 프로세스가 임계 구역에 들어가려면 어느 시점에 들어가야 합니다.

앞서 언급한 바와 같이 실행 순서를 제어하기 위한 동기화와 상호 배제를 위한 동기화가 있습니다.

이 동기화는 어떻게 구현됩니까?

동기화 기술

동기화 기술에는 세 가지 일반적인 예가 있습니다.

뮤텍스 잠금, 세마포어 및 모니터. 하나씩 살펴보겠습니다.

1. 뮤텍스 잠금

Talmutex 잠금은 상호 배제 동기화 도구입니다.

특정 프로세스가 크리티컬 섹션에 접근할 때 mutex lock을 사용

중요한 섹션에 있음을 나타냅니다.

크리티컬 섹션에 들어간 후 잠금은 다른 프로세스가 액세스하는 것을 방지합니다.

막는 것으로 받아들일 수 있습니다.

다른 프로세스는 뮤텍스 잠금이 유지되면 대기하고 그렇지 않으면 임계 영역에 남아 있습니다.

당신은 입력합니다

뮤텍스 잠금은 전역 변수와 두 가지 함수로 구현할 수 있습니다.

전역 변수가 동시에 액세스해서는 안 되는 리소스라고 가정할 때 두 함수는 무엇입니까?

그중 하나가 적립 기능입니다.

프로세스가 크리티컬 섹션에 들어가기 전에 호출되는 함수. 크리티컬 섹션에 잠겨 있을 때

열 때까지 반복해서 확인하십시오. 크리티컬 섹션이 열려 있으면 프로세스를 실행하고 크리티컬 섹션을 잠그는 기능입니다.

다른 하나는 공유 기능입니다.

크리티컬 섹션 작업이 끝날 때 호출됩니다.

즉, 중요한 섹션 잠금을 엽니다.

작업을 수행하는 기능입니다.

캡처 기능은 잠금이 유지되는지 여부를 반복적으로 확인합니다.

즉, 접근이 가능한지 지속적으로 체크하고 있기 때문에 이 대기 방식을 사용한다.

바쁜 대기라고 부르십시오.

2. 세마포어

뮤텍스 락은 공유 자원이 하나뿐일 때 사용할 수 있는 기술이라면 세마포어는 공유 자원이 여러 개일 때 사용할 수 있는 조금 더 정교한 기술이다.

일반화된 동기화 도구. 세마포어는 중지 및 시작 신호로 중요한 섹션을 관리합니다.

이를 위한 두 가지 기능

그것을 구현

그 중 하나는 중요한 섹션에 들어가기 전에 기다려야 하는지 여부를 알려주는 대기 기능입니다.

다른 하나는 임계 영역에 들어가도 괜찮음을 프로세스에 알리는 신호 기능입니다.

원리는 뮤텍스 잠금과 유사합니다.

세 개의 프로세스 P1, P2 및 P3이 두 개의 공유 리소스에 액세스한다고 가정합니다.

시퀀스는 다음과 같이 처리됩니다.

– 대기중인 P1 통화 처리. 어떤 프로세스도 공유 자원 S에 액세스하지 않기 때문에 P1은 공유 자원 S에 액세스합니다.

그리고 공유 리소스의 수를 하나씩 줄입니다.

– 프로세스 P2는 P1과 같은 공유 리소스에 액세스합니다.

– P3 과정은 현재 공유 자원이 0이므로 무한 반복하며 S의 개수가 0이 아닌지 확인한다.

P1이 작업을 수행할 때

완료되면 S를 1씩 늘리고 signal 함수를 호출합니다.

그런 다음 P3는 S를 1씩 감소시키고 임계 영역에 들어갑니다.

뮤텍스 잠금과 동일한 문제가 있습니다.

즉, 무한정 반복하여 S가 0이 아닌지 확인해야 합니다.

확인하는 시간에 다른 작업을 하고 있으면 CPU가 더 생산적으로 작동할 수 있습니다.

세마포어는 이를 위한 더 나은 방법을 제공합니다.

사용.

위의 예에서 우리는 프로세스 P3가 S의 숫자가 0인지 여부를 지속적으로 확인한다고 말했습니다.

이 작업을 수행하는 대신 P3를 처리하십시오.

보드를 세마포어 대기열에 넣습니다.

P1 또는 P2가 완료되면 신호 함수가 호출됩니다.

시그널링 함수가 호출되면 P3를 대기열에서 빼고 준비 상태로 전환한 후 준비 대기열로 이동합니다.

3. 모니터

모니터는 세마포어처럼 앞뒤로 대기 및 신호 기능을 지정할 필요가 없습니다.

공유 리소스 및 이에 대한 액세스

인터페이스(통로)가 그룹화되어 관리되기 때문입니다.

프로세스는 이 경로를 통해 공유 리소스에 액세스해야 합니다.

공유 리소스에 액세스하려는 프로세스는 대기하고 공유 리소스는 대기열에 있는 순서대로 사용됩니다.

이렇게 하면 한 번에 하나의 프로세스만 모니터에 입력됩니다.