Busy Waiting이란?
원하는 자원을 얻기 위해 기다리는 것이 아니라 권한을 얻을 때까지 확인하는 것을 의미합니다.
Busy Waiting은 어떤 상황일때 사용하는게 좋을까?
자원의 권한을 얻는데 많은 시간이 소요되지 않는 상황인 경우.
Context Switching 비용보다 성능적으로 더 우수한 상황인 경우.
Busy Waiting의 단점은 없을까?
권한 획득을 위해 많은 CPU를 낭비한다는 단점이 있습니다.
Busy Waiting말고 다른 방법은 없을까?
지속적으로 확인하는 Busy Waiting이 아닌 Sleeping이라는 방법을 사용할 수 있습니다.
Sleeping이란?
권한을 얻기 위해 기다리는 시간을 wait queue에 실행 중인 Thread 정보를 담고 다른 Thread에게 CPU를 양보하는 것을 의미합니다.
커널은 권한 이벤트가 발생하면 wait queue에 담긴 Thread를 깨워 CPU를 부여합니다.
Sleeping은 어떤 상황일때 사용하는게 좋을까?
기다리는 시간이 예측이 불가능한 상황인 경우.
Sleeping의 단점은 없을까?
wait queue에 넣는 비용 + Context Switching 비용이 드는 단점이 있습니다.
출처 : nesoy.github.io/articles/2019-06/OS-Busy-Waiting
critical section내에서 일정 조건이 충족되었는지 확인해야 하는 상황이라면,
자원 낭비가 심한 busy watining 방법보다는 condition variable을 사용하는 것이 좋다.
condition variable을 통해 wait와 signal 역할을 수행할 수 있는데,
- wait의 역할?
- 조건이 충족되길 기다리고 있는 thread를 잠들게 하는 것이다.
- 즉, thread를 condition variable에 넣되, 이 thread가 가지고 있는 mutex는 unlock한다.
- signal의 역할?
- 특정 조건이 만족되면 잠들어있는 thread를 깨우는 역할을 수행한다.
- 이 때 일어나게된 thread는 mutex를 다시 얻으려는 시도를 한다. mutex를 얻었다면 wait 함수로부터 리턴된다.
condition variable은 어떤 변수의 실제값을 통해 thread를 동기화할 수 있다.동기화하는데 사용되는 함수로는 pthread_cond_wait와 pthread_cond_signal이 있다.
'다전공_컴퓨터공학 > 시스템프로그래밍, 운영체제' 카테고리의 다른 글
[SP] vi editor 복사 붙여넣기 (0) | 2020.12.06 |
---|---|
[SP] undefined reference to 'pthread_**' (0) | 2020.12.05 |
[SP] system call, 운영체제, 커널, 컴퓨터구조 (0) | 2020.12.03 |
[SP] atomic (0) | 2020.12.03 |
[SP] unlink, remove (0) | 2020.12.03 |