2024.09.16 - [Programming/OS[운영체제]] - [OS/운영체제] 공유자원 경쟁상태 (Synchronization 사전 지식)
[OS/운영체제] 공유자원 경쟁상태 (Synchronization 사전 지식)
동기화를 통해 여러 프로세스나 쓰레드가 동시에 같은 자원에 접근할 때 발생할 수 있는 오류나 비정상적인 결과를 방지할 수 있습니다.Synchronization 포스팅에 앞선 선수 지식에 대한 포스팅입니
tete-all.tistory.com
공유자원 경쟁 상태에 대해서 아직 선수가 되어있지 않으신 분들은 이 글로!
1. Mutex(Mutual exclusion) - 상호배제
책 : 임계 영역(공유 자원)
크루 : 프로세스 또는 쓰레드
사서 : mutex lock
이라고 가정해보고 진행하겠습니다.
뮤텍스란 Mutual exclusion의 축약어 이고 한국어로는 상호 배제라 합니다. |
하나의 프로세스가 임계 영역에 내에 있다면 |
프로세스의 동작이 끝날 때까지 |
다른 프로세스가 임계 영역으로 들어올 수 없도록 제한하는 알고리즘입니다. |
운영체제에서는 뮤텍스를 위해 Lock이라는 매커니즘(오른쪽 사진)을 제공하는데요,
크루1(프로세스1)이 사서(mutex lock)에게 책(임계 영역)에 접근하겠다는 의사를 밝히면 |
사서는 책을 이용하는 사람이 없는 것을 확인하고 |
크루1이 진입하는것을 허용하고 크루1은 lock을 겁니다. |
크루2(프로세스2)가 사서(mutex lock)에개 책(임계 영역)에 접근하려고 의사를 밝히면 |
이미 책은 lock이 걸려있어서 접근할 수 없습니다. |
크루1이 책을 다 읽으면 lock을 해제하면서 임계 영역을 빠져나갑니다. |
이제 크루2가 임계 영역에 진입하고 lock을 겁니다. |
이렇게 하나의 프로세스가 임계 영역에 lock이 걸려있는지 아닌지 검증하는 과정에서
Spin Lock이라는 성능 이슈 사항이 생기게 됩니다.
2. Spin Lock (스핀락)
앞서 하나의 프로세스가 임계 영역에 접근할 때 lock을 건다고 말씀드렸습니다.
다른 프로세스가 임계 영역에 접근할 때 lock이 걸려있는지 걸려있지 않은지 확인하는
while(락이_이미_걸려있다면()) 을 계속 실행하게 될 것입니다.
lock이 풀릴 때서야 반복문을 탈출 할 수 있게 됩니다.
사서는 여러명의 크루들이 임계 영역에 접근하려고 할 때
그 요청들에 대해서 반복해서 응답을 해줘야하는 이슈가 발생하게 됩니다.
3. 다른 방식의 lock
spin lock 이슈를 해결하고자 다른 방식을 lock을 이용할 수도 있습니다.
크루1이 전과 같이 임계 영역에 접근하고 lock을 걸고 |
크루2가 임계 영역에 접근하려고 lock을 확인한 후 |
lock이 걸려있으면 대기실에 간 후 크루2는 대기실에 가서 잠(block)을 취합니다. |
크루1이 임계 영역을 벗어난 후 크루2는 잠(block)에서 깨는 약간의 시간 (ready)후 |
Context switch를 한 후 임계 영역에 접근할 수 있게 됩니다. |
오른쪽의 코드를 보면 while문이 아니라 if 문이 있는것을 확인하실 수 있지요!
while 반복문을 돌지 않으니 이 방식이 스핀 락의 경우보다 더 낫다고 생각하실 수 있는데요
만약 공유 자원 사용시간이 Context switch시간 보다 짧다면 스핀 락의 경우가 더 나은 성능을 발휘할 수 있습니다.
스핀 락의 경우 계속해서 lock이 걸린지 확인하는데 그 소요시간이
block -> ready -> context switch 시간보다 짧다면 스핀락을 이용하는게 낫겠지요
4. Semaphore (세마포어)
세마포어의 경우 여러권의 책(임계영역)을 관리할 수 있습니다.
또한 장부에는 읽을 수 있는 책의 갯수(bookCount), 대기자 명단이 있습니다.
하나의 크루가 임계영역에 접근할 때마다 bookCount는 -1이 감소하게 됩니다.
크루1이 사서에게 의사를 밝히면 |
사서는 bookCont숫자를 확인하고 0보다 크니 들여보냅니다. |
bookCount가 0일 때 |
크루6은 임계 영역에 들어가지 못하고 대기실로 보내지고 잠이 들게 됩니다. 이 때도 bookCount는 -1 감소합니다. |
임계영역에서 동작을 완료한 크루1이 빠져나가면 bookCount가 +1 증가합니다. |
사서는 대기실에서 크루6을 깨우고 임계 영역에 들여보냅니다. |
즉, bookCount를 확인하면서 공유 자원의 접근을 관리하고 대기자 명단을 통해 다음에 접근할 수 있는 프로세스를 확인할 수 있습니다.
- 공유_자원의_수 : bookCount
- sem_wait. : 임계 영역에 접근 시 실행 / 진입 여부 확인 / bookCount -1
- sem_signal : 임계 영역을 벗어날 시 실행 / bookCount +1
'Programming > OS[운영체제]' 카테고리의 다른 글
[OS/운영체제] 공유자원 경쟁상태 (Synchronization 사전 지식) (1) | 2024.09.16 |
---|