프로세스 동기화
race condition : 동시에 여러개의 프로세스가 동일한 자료를 접근하여 조작하고, 그 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황을 race condition이라고 한다.
임계구역 문제
각 프로세스는 임계구역(Critical section)이라고 부르는 코드 부분을 포함하고 있고, 그 안에서는 다른 프로세스와 공유하는 변수를 변경하거나, 테이블을 갱신하거나 파일을 쓰거나 하는 등의 작업을 수행한다.
이 시스템의 중요한 특징은 "한 프로세스가 자신으 임계구역에서 수행하는 동안에는 다른 프로세스들은 그들의 임계구역에 들어갈 수 없다"
는 사실이다.
임계구역 문제 해결방안 3가지
상호배제(mutual exclusion)
프로세스 pi가 자기의 임계구역에서 실행된다면, 다른 프로세스들은 그들 자신의 임계구역에서 실행될 수 없다.
진행(progress)
임계구역을 사용하고 있지 않다면, 다른프로세스가 접근할 수 있도록한다.
한정된 대기(bounded waiting)
임계구역 진입 횟수에 한계가 있어서 같은 프로세스가 계속 독점해서 사용하지 못하게 한다. 다른 프로세스들이 기아상태에 빠지지 않도록 한다.
이 3가지를 모두 만족시켜야 유효한 알고리즘이 된다.
Mutex lock
뮤텍스 란?
mutual exclusion을 줄인말 우리말로 상호배제라고한다. Critical Section을 가진 Thread들의 running time이 서로 겹치지 않게, 각각 단독으로 실행되게 하는 기술.
임계구역을 보호하고 경쟁조건을 방지하기위해 뮤텍스 락을 사용한다. 프로세스는 임계구역을 보호하고 따라서 경쟁조건을 방지하기위해 뮤텍스 락을 사용한다. 프로세스는 임계구역에 들어가기 전에 반드시 락을 획득
해야 하고 임계구역을 빠져 나올 때 락을 반환
해야 한다. acquire()함수가 락을 획득하고 release() 함수가 락을 반환한다.
뮤텍스 락은 available이라는 boolean변수를 가지는데 이 변수 값이 락의 가용여부를 표시한다. 락이 가용하면 acquire() 호출은 성공하고 락은 곧 사용불가 상태가 된다.
acquire() 또는 release() 함수 호출은 원자적으로 수행되어야한다.(수행도중 중단될수 없다는 말임).
뮤텍스 락의 단점
바쁜 대기(busy waiting)를 해야한다.
임계구역에 들어가기 원하는 다른 프로세스들은 acquire()함수를 호출하는 반복문을 계속 실행해야 한다. 이러한 유형의 mutex 락은 가용해지기를 기다리면서 프로세스가 계속 회전을 하고 있기 때문에 spinlock
이라고 부른다.
spinlock 의 문제는 무엇인가?
ㅣ러한 지속적인 반복은 많은 프로세스들이 CPU를 공유하는 실제 다중 프로그래밍 시스템에서는 문제이다. 다른 프로세스가 더 생산적인 작업에 사용할 수 있었던 CPU 사이클을 낭비하게 된다.
spinlock 의 장점??
락을 기다리는 동안 상당한 시간을 소모하는 context switch 를 전혀 필요로 하지 않는다.
그럼 언제 사용되는것이 적당한가?
짧은 시간 동안만 락을 소유할 것이라고 예상되면 spinlock이 유용하다. context switiching은 오버헤드가 크기때문에 짧게 락을 소유한다면 spinlock이 오히려 유용하다.
Reference
Operating Systeml:concepts 9th edition(교재) 참고
Last updated
Was this helpful?