[OS] Thread - 동기화, Critical Section, 뮤텍스와 세마포어, 교착상태와 기아상태

2020. 12. 20. 17:00프로그래밍/운영체제

반응형

동기화(Synchronization)

    작업들 사이에 실행시기를 맞추는 것

    여러 스레드가 동일한 자원 접근시 동기화 이슈 발생

    동일자원을 여러 스레드가 동시수정하면, 각 스레드 결과에 영향을 준다

 

동기화 이슈 해결방안

    Mutual exclusion(상호배제)

        ‣ 임계 자원(critical resource)  g_count

        임계 영역(critical section)    lock.acquire(), lock.release()

 

    

    여러 스레드가 변경하는 공유변수에 대해 Exclusive Access필요!

     (스레드가 동시 접근하지 못하게 막자)

 

Mutex 와 Semaphore

    Critical Section(임계영역)에 대한 접근을 막기위한 locking 필요

 

    Mutex(binary semaphore)

       ‣ 임계구역에 하나의 스레드만 들어갈 수 있음

 

    Semaphore

       ‣ 임계구역에 여러 스레드가 들어갈 수 있음

 

교착상태(Deadlock)와 기아상태(Starvation)

    교착상태    

       ‣ 무한대기상태로 두개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있어

         다음단계로 진행하지 못하는 상태

 

    기아상태(Starvation)

       ‣ 특정프로세스의 우선순위가 낮아서 원하는 자원을 할당받지 못하는 상태

       ‣ ex) 50개의 프로세스

              -49개의 프로세스 우선순위1

              -1개의 프로세스 우선순위2

              -10번실행 우선순위가 1번인 것만 계속 실행하게 되어 우선순위2번은 자원할당X

 

    교착상태와 기아상태

       ‣ 교착상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생

       ‣ 기아상태는 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원할당이 안되는 경우

 

반응형