상호배제란?
앞서 스레드 동기화에서 언급된 임계구역과 상호배제는 스레드 동기화를 위한 중요한 개념이다.
먼저, 임계 구역(Critical Section)은 각 스레드들이 동시에 접근할 수 있는 공유 데이터를 관리하는 구역이다.
상호 배제는 먼저 임계 구역에 접근한 스레드가 임계 구역을 독점적으로 사용하여 스레드 간의 순서를 보장할 수 있는 개념이다. 임계 구역과 상호 배제도 조금 더 쉽게 생각해보자.
스레드 A는 횟집, 스레드 B는 매운탕 집이다. 스레드 A와 B는 수산도매에서 싱싱한 생선을 가져와야한다. 스레드 A와 B는 서로 경매가를 부르고 있는데 도매상이 "마지막으로 현재 경매가 보다 높은 가격을 먼저 제시한 사람에게 판매하겠습니다."라고 했다. 스레드 A와 B는 동시에 "100만 원!"을 외쳤다. 이 때, 도매상은 누가 먼저 제시 했는지 몰라서 난감한 상황에 빠진다.
만약, 앞에 부저가 있었고 먼저 부저를 누른 사람이 있을 경우 다른 부저가 동작하지 않는 시스템이 있다면 순서를 정확히 알 수 있다. 여기서 수산도매가 임계 구역, 부저가 상호 배제로 볼 수 있다.
상호배제
- 일반 코드(non-critical code) : 각 스레드에서 처리하는 코드이다.
- 임계구역 진입 코드(entry code) : 임계 구역에 다른 스레드가 있는지 확인한다. 다른 스레드가 없다면 현재 스레드가 임계구역에 진입하게 되고 다른 스레드가 존재한다면 대기한다. 상호배제의 시작이다.
- 임계구역 코드(critical code) : 한 스레드가 순서를 보장받고 공유 자원에 실제적으로 접근하는 코드이다.
- 임계구역 진출 코드(exit code) : 임계구역에서의 처리가 끝났다면 다른 스레드가 진입할 수 있도록 상호배제를 종료하는 코드이다.
상호배제를 구현하는 방법
SW적, HW적으로 구현하는 방법이 있는데 오늘날에는 주로 HW 솔루션을 사용한다고 한다.
인터럽트 서비스 금지 방법, 원자 기계 명령(atomic instruction) 사용 방법
'CS > 운영체제' 카테고리의 다른 글
18. 상호배제 구현 방법 (0) | 2024.06.16 |
---|---|
16. 스레드 동기화 (Thread Synchronization) (0) | 2024.06.15 |
15. CPU Scheduling Algorithm (1) | 2024.04.22 |
14. CPU Scheduling (0) | 2024.04.22 |
13. 멀티스레드 구현 (0) | 2024.04.22 |