Study/Operating System
[OS] 상호배제(Mutual exclusion)이란?
Potato potage
2022. 4. 6. 11:53
반응형
앞서 읽고 오기
- https://good-potato.tistory.com/60
- 상호배제 : 멀티 스레드가 실행되는 환경에서, 한 스레드가 임계 구역을 진입하면 배타적으로 실행되도록 보장하는 기법이다.
상호배제를 포함한 프로그램 작성
- 임계구역 코드의 앞 뒤 부분에는 임계구역에 대한 상호 배제를 만들기 위해 임계구역 진입 코드(entry 코드)와 임계구역 진출 코드(exit 코드)가 반드시 있어야 한다.
- 일반 코드 - 공유 데이터를 액세스하지 않는 코드 부분
- 임계구역 진입 코드 (entry code)
- 임계구역에 진입하기 전 필요한 코드
- 다른 스레드가 임계구역에 들어가 있는지 검사하여 임계구역에 들어가 있는 스레드가 없는 경우 다른 스레드가 들어오지 못하도록 조치를 취함
- 만일 임계구역에 이미 들어가 있는 스레드가 있다면, 이 스레드가 임계구역을 벗어날 때까지 현재 스레드를 대기시키는 코드
- 임계구역 코드
- 공유 데이터를 접근하는 코드를 포함
- 한 스레드에 의해서만 배타적으로 사용되도록 보장되어야 함
- 짧을수록 좋음
- 임계구역 진출 코드 (exit code)
- 임계구역의 실행을 마칠 때 필요한 코드
- 대기 중인 스레드나 다른 스레드가 임계구역에 진입할 수 있도록, entry 코드에서 취한 조치를 풀어 놓는 코드
- entry code와 exit code는 짝을 이루어서 구현해야한다.
상호배제 구현
- 소프트웨어적 방법 - Peterson's 알고리즘
- 하드웨어적 방법 - 인터럽트 서비스 금지, 원자 명령 사용 < 최근에 사용 중인 방법
상호배제 방법1 - 인터럽트 서비스 금지
- 임계구역으로 진입할 때, entry 코드에서 인터럽트 서비스를 금지하는 명령어를 싱행하는 방법이다. 이렇게 하면, 스레드가 임계구역을 실행하고 있을 때 선점(preemption) 되지 않는다.
- 문제점 : 멀티코어를 비롯한 다중 CPU 시스템에서는 활용할 수 없다. CPU가 모든 인터럽트를 무시하게 될 수 있기 때문이다.
상호배제 방법2 - 원자 명령(atomic instruction) 사용
- 문제 상황
- lock 값을 읽어 들이는 명령과 lock 변수에 1을 저장하는 명령어 사이에 컨텍스트 스위칭이 발생할 때 문제가 발생한다.
- 해결 방법
- lock 값을 읽어 들이는 명령과 lock 변수에 1을 저장하는 명령 사이에 컨텍스트 스위칭이 일어나지 않도록 이 두 명령을 하나의 명령으로 만드는 것이다.
- 이를 원자 명령(atomic instruction) 혹은 TSL(Test and Set Lock) 명령어라고 부른다.
참고
운영체제(Operating system), 황기태 지음
반응형