임계구역
상호배제
상호배제의 위치
entry코드
---------------------------
임계구역
--------------------------
exit 코드
상호배제 구현
1. 소프트웨어적 방법
2. 하드웨어적 방법
but 소프트웨어적 방법 사용 x
하드웨어적 방법
1. 인터럽트 서비스 금지
2. 원자명령 사용
인터럽트 서비스 금지
entry 코드에서의 인터럽트 서비스를 금지하고
exit 코드에서 임계구역에서 벗어나면 다시 허용한다.
cli 와 sti
cli 는 cpu 내부의 인터럽트 플래그(IF)를 0으로 리셋하여 인터럽트 무시
sti는 1로 설정 인터럽트 서비스 루틴 실행
인터럽트 서비스 금지의 문제점
1. 모든 인터럽트가 무시되어 중요한 인터럽트 서비스 루틴이 제때 실행되지 못할 수도 있다.
2. 멀티 코어 CPU에서 사용하지 못한다.
- 다른 코어에서 실행되는 스레드가 임계구역을 공유할 때 그 스레드까지 인터럽트 서비스 금지가 불가능하다.
원자명령
원자명령 없이 lock 변수를 이용한 상호배제
lock 변수 0이나 1의 값을 가짐
lock이 0이면 임계구역에 들어갈 수 있음
entry 코드를 보면
초기 lock 변수의 값은 0이고 ax레지스터에 lock의 값을 저장
lock에 1을 넣고
ax와 0을 비교해서
같으면 임계구역 통과
같지 않으면 l1으로 점프한다.
하지만 여기서 문제점이
1번 스레드가 mov ax, lock 코드를 진행하고 인터럽트가 발생하게 되고
2번 스레드가 임계구역을 통과
그리고 1번 스레드의 인터럽트가 종료되고 이어서 임계구역으로 들어가게 되면
두 스레드가 임계구역에서 충돌하게 되어 상호배제가 실패하게 된다.
'명품 운영체제' 카테고리의 다른 글
[명품 운영체제] 8장 복합문제 (0) | 2024.05.13 |
---|---|
[운영체제] 생산자 소비자 (2) | 2024.04.18 |
[운영체제] 세마포에 대해서 (0) | 2024.04.18 |
뮤텍스와 스핀락 (2) | 2024.04.18 |
[명품 운영체제] 4장 복합문제 (0) | 2024.04.03 |