page4
두 프로세스를 위한 소프트웨어 기반 해결책으로,
turn
변수와
flag
배열을 사용합니다 . 세 가지 요
구사항을 모두 만족하지만, 현대 아키텍처에서는 명령어 재배열로 인해 올바르게 작동하지 않을 수 있
습니다 .
현재 값을 반환하고 새 값을 true로 설정하는 원자적 명령어입니다 . 이를 이용해 뮤텍스 락의 기본
구현이 가능하지만 바쁜 대기 문제가 있습니다 .
값이 예상값과 같으면 새 값으로 변경하고 이전 값을 반환하는 원자적 명령어입니다 .
가장 간단한 동기화 도구로,
acquire()
와
release()
함수를 제공합니다 . 락이 사용 가능한지 나타내
는 부울 변수를 사용하며, 바쁜 대기를 사용하므로 스핀락이라고도 불립니다 .
정수 변수 S와
wait()
P ,
signal()
V 두 원자적 연산으로 구성되는 동기화 도구입니다 . 카운팅 세
마포어와 이진 세마포어로 구분됩니다 .
바쁜 대기 없는 구현에서는 각 세마포어마다 대기 큐를 유지하고,
block
과
wakeup
연산을 사용합니다
.
wait()
에서 값이 음수가 되면 프로세스를 대기 큐에 추가하고,
signal()
에서 대기 중인 프로세스를
깨웁니다 .
2.3 피터슨의 해결책
[2]
[2]
2.4 하드웨어 지원
Test-and-Set 명령어
[2]
[2]
Compare-and-Swap 명령어
[2]
2.5 뮤텍스 락
[2]
[2]
2.6 세마포어
기본 개념
[2]
[2]
세마포어 구현
[2]
[2]
사용 예시
임계 구역 문제: 세마포어를 1로 초기화하여 상호 배제 보장
[2]
실행 순서 동기화: 세마포어를 0으로 초기화하여 특정 순서 보장
[2]
2.7 모니터