내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
2024-07-04: 운영 체제 동기화 및 상호 배제 연구 노트
동시 프로세스나 프로그램은 실행 시 닫히지 않습니다. 즉, 두 프로그램이 별도의 영역에서 공유 리소스를 사용하는 경우 각 실행 결과가 다를 수 있습니다.
그 이유는 프로그램 a와 프로그램 b가 모두 액세스해야 하는 공유 리소스 x를 보호하지 않았기 때문입니다.
상호 제한적인 관계는 동기화입니다. 동기화를 간단히 이해하면 프로세스 실행에는 순서가 있어야 한다는 것입니다.
서로 간접적으로 제한하는 관계를 상호 배타적 관계라고 합니다.
"생산자 및 소비자 모델"
카운터+ +
首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
카운터- -
首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
해결 방법: 카운터를 중요한 리소스로 취급하고 프로세스가 변수 카운터에 상호 액세스할 수 있도록 허용합니다. (동기화 메커니즘은 나중에 배우게 됩니다.)
하드웨어에 중요한 리소스이든 소프트웨어에 중요한 리소스이든 여러 프로세스가 상호 액세스해야 합니다.
이 영역은 본질적으로 코드입니다.
크리티컬 섹션에 프로세스가 없다는 것은 크리티컬 섹션 자원이 유휴 상태라는 것을 의미한다. 크리티컬 섹션 진입을 요청한 프로세스는 자원을 효과적으로 활용하기 위해 즉시 자신의 크리티컬 섹션 진입을 허용해야 한다.
기존 프로세스가 임계 영역에 진입하면 임계 리소스에 액세스하고 있음을 나타냅니다. 따라서 임계 영역에 진입하려는 다른 프로세스는 임계 리소스에 대한 상호 배타적 액세스를 보장하기 위해 기다려야 합니다.
중요한 리소스에 액세스해야 하는 프로세스의 경우 "죽기를 기다리는 중" 상태에 빠지지 않도록 제한된 시간 내에 자체 임계 섹션에 들어갈 수 있는지 확인해야 합니다.
프로세스가 자체 임계 섹션에 진입할 수 없는 경우 프로세스가 "busy wait" 상태에 빠지는 것을 방지하기 위해 프로세서(CPU)를 즉시 해제해야 합니다.
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则
이중 플래그 우선 확인 방법은 부울 배열 플래그[2]를 설정하여 각 프로세스가 임계 영역에 진입하려는 의지를 표시합니다. flag[i]=true는 Pi가 임계 영역에 진입하기를 원한다는 것을 의미합니다.
- while 루프는 신호등 메커니즘과 동일합니다.
- 상대방의 깃발을 세우는 것은 상대방의 신호등을 바꾸는 것과 같습니다.
- 그러나 두 프로세스 모두 플래그를 먼저 확인하고(신호등을 먼저 확인) 처음에는 둘 다 거짓(모두 녹색등)이므로 두 프로세스가 동시에 신호등을 통과하여 함께 임계 구간에 진입하는 것이 가능합니다. .
이중 플래그 사후 확인 방법은 상대방의 플래그를 확인한 후 자체적으로 설정합니다. 이 두 작업은 한 번에 수행할 수 없으므로 두 프로세스가 동시에 임계 영역에 들어갈 수 있습니다. 먼저 자신의 플래그를 설정한 다음 상대방의 플래그를 확인하고, 상대방의 플래그가 true이면 기다리며, 그렇지 않으면 임계 섹션에 들어가는 방법이 고안되었습니다.
Peterson의 알고리즘은 다음을 결합합니다.단일 마크 방식그리고이중 표시 사후 확인 방법아이디어는 상호 배타적 액세스 문제를 해결하기 위해 flag[]를 사용하고 기아 문제를 해결하기 위해 Turn을 사용하는 것입니다.
양 당사자가 임계 영역에 진입하기 위해 경쟁하는 경우 상대방에게 임계 영역에 진입할 수 있는 기회를 제공하는 프로세스가 허용될 수 있습니다.
각 프로세스는 임계 영역에 진입하기 전에 자신의 플래그를 설정하고 진입이 허용되는 턴 플래그를 설정한 후 상대방의 플래그를 감지하고 동시에 턴을 수행하여 한 프로세스만 진입할 수 있도록 합니다. 양 당사자가 동시에 임계 영역에 들어가도록 요청합니다.
기다릴 권리를 포기하지 않음
각 프로세스가 임계 영역에 진입하는 것을 상호 배제하는 문제를 소프트웨어가 해결하기는 어렵고, 따라서 컴퓨터는 문제를 해결하기 위해 몇 가지 특별한 하드웨어 지침을 제공합니다.
TS 명령은 실행 프로세스가 분할 불가능한 함수 프로세스(원시)로 간주될 수 있습니다.
TS를 사용하여 중요 섹션을 관리하고 각 중요 리소스에 대한 잠금을 설정하세요.
이를 교환 명령이라고 하며 두 단어의 내용을 교환하는 데 사용됩니다.
자원 수를 나타내는 데 사용되는 정수 S로 정의됩니다. 이 정수 세마포에는 초기화(초기값 할당), 대기(감소), 신호(증가)의 세 가지 작업만 있습니다.
"busy wait" 현상이 없는 프로세스 동기화 메커니즘
- 대기 작업은 P 작업과 동일합니다.
- 신호 작동은 V 작동과 동일합니다.
- 이름만 다를 뿐 기능은 똑같습니다
- 대기(A) = P(A)
- 신호(B) = V(A)
상호 배타적인 세마포어 mutex=1로 설정한 다음, wait(mutex)와 signal(mutex) 사이에 중요한 리소스에 접근할 수 있도록 각 프로세스의 중요한 섹션을 배치합니다.
동기화 세마포어 S=0으로 설정하여 명령문 신호(S)가 먼저 실행되고 그 다음 대기(S)가 실행되도록 합니다.