ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 멀티 스레드의 임계 구역과 뮤텍스, 세마포어
    CS 지식/운영체제 2020. 8. 17. 11:37
    반응형

    임계 구역과 뮤텍스, 세마포어

    • 임계 영역

      • 한개의 연산을 둘 이상의 쓰레드가 동시에 실행할 경우 발생할 수 있는 코드 블록
      • 쓰레드 안에 있는 코드 블록이 임계 영역이 된다.
      • 따라서, 문제가 발생하지 않게 독점을 보장해줘야 함. (Lock, 동기화)
    • 동기화 기법

      • 뮤텍스(Mutex => Mutual Exclusion)

        • 쓰레드의 동시 접근을 허용하지 않음
        • Mutex를 이용해서 특정 변수로 접근하는 쓰레드를 차단하면, 나머지 쓰레드는 대기줄에서 기다린다.
        • 뮤텍스를 사용한 쓰레드가 뮤텍스를 반환하면, 대기줄에 있는 순서대로 쓰레드가 변수가 접근
        • 뮤텍스 생성, 삭제, 잠금, 잠금해제 함수가 있음
        • 단, 뮤텍스 잠금 후 해제를 하지 않으면, 잠금 함수는 블로킹 상태에 빠져 못나감
          • 이 상태를 데드락 상태라고 부름
        • 뮤텍스 잠금, 해제 함수 호출은 오랜시간이 걸림 ~> 함수 호출 횟수를 최소화
      • 무한루프로 상태를 확인(Busy Waiting) ~> CPU 점유하고 있는 상태, 그래서 나온것이 세마포어

      • 세마포어(Semaphore)

        • 프로세스의 동시접근을 허용하지 않음

        • 리소스의 상태를 나타내는 카운터로 이해하면 된다.

        • 비교적 긴 시간을 확보하는 리소스에 대해 사용하며, Unix에서는 OS의 리소스를 경쟁적으로 사용하는 다중 프로세스에서 행동을 조정하거나 동기화 시키는 기술

        •     P(S) {
                  S--;
                  if S < 0
                      // 이 프로세스를 재움 큐에 추가 (잠 듦)
              }
          
              V(S) {
                  S++;
                  if S <= 0
                      // 재움 큐로부터 프로세스를 제거 (깨어남)
              }
          • P함수와 V함수의 동작은 독립적이기 때문에 잘못 사용하는 경우 문제가 발생
        • P 임계구역 - P ~> 현재 프로세스가 임계 구역에서 빠져나갈 수 없게된다. 교착상태(Deadlock) 발생

          • V 임계구역 - P ~> 2개 이상의 프로세스가 동시에 임계구역에 들어갈 수 있으므로 상호 배제(Mutex)를 보장할 수 없게 된다.
        • 바이너리 세마포어

          • 0과 1값만 가지는 세마포어
          • sem_post, sem_wait
        • sem_wait 함수로 블록킹, sem_post로 해제

          • 드라이브 쓰루를 생각하면 편할것 같음
        • 카운팅 세마포어

        • 초기값은 가능한 자원의 수로 정해지며, 세마포어 값의 범위는 정해지지 않음.

          • 커피샾에 테이블이 한정적이고, 자리가 꽉 찬 경우 밖에서 대기한다고 이해하면 된다.
      • 정리

        • Semaphore는 Mutex가 될 수 있지만 반대는 안된다.
          • Mutex는 상태가 0,1 뿐 인 binary Semaphore
        • Semaphore는 소유할 수 없지만, Mutex는 소유 가능하며 이에 대한 책임을 진다.
      • Mutex의 경우 Mutex를 소유하고 있는 쓰레드가 해제해야하지만,
        Semaphore는 소유하지 않은 쓰레드가 Semaphore 해제 가능

    • 2 이상의 값을 가지는 세마포어는 카운팅 세마포어. 뮤텍스로 임계구역에 동시에 접근하는 것을 방지할 수 있고 + 카운팅 세마포어로 임계구역 내부에서 공유변수들을 사용하는 것을 제어할수 있음
    반응형

    'CS 지식 > 운영체제' 카테고리의 다른 글

    Deadlock & Starvation  (0) 2020.10.21
    프로세스와 스레드  (0) 2020.10.21
    프로세스와 스레드  (0) 2020.08.17
    PCB와 TCB  (0) 2020.08.17
    CPU ( 중앙처리장치 )  (2) 2020.08.08

    댓글

Designed by Tistory.