Just do IT
article thumbnail

Mutex 세마포어 (Semaphore)

   * Critical Section (임계 구역) 대한 접근을 막기 위해 LOCKING 매커니즘이 필요

     - Mutex (binary semaphore) : 임계구역에 하나의 스레드만 들어갈 있음 

     - Semaphore : 임계구역에 여러 스레드가 들어갈 있음

                       : counter 두어서 동시에 리소스에 접근할 있는 허용 가능한 스레드 수를 제어

 

세마포어 (Semaphore)

   * P : 검사 (임계영역에 들어갈 )

     - S값이 1 이상이면 임계 영역 진입 S 1 차감 (S값이 0이면 대기)

   * V : 증가 (임계영역에서 나올 )

     - S값을 1 더하고 임계 영역을 나옴

   * S : 세마포어 (초기 값만큼 여러 프로세스가 동시 임계 영역 접근 가능)

   * 바쁜 대기 : wait() S 0이라면 임계 영역에 들어가기 위해 반복문수행

     - 바쁜 대기, busy waiting

   * 프로그래밍은 근본적으로는 중단이 없음. 끊임없이 코드 실행

     - 중단은 대부분 loop 표현 / loop CPU 부하를 걸리게

 

참고 : 주요 세마포어 함수 (POSIX 세마포어)

   * sem_open() : 세마포어를 생성 

   * sem_wait() : 임계영역 접근 , 세마포어를 잠그고, 세마포어가 잠겨 있다면, 풀릴 까지 대기

   * sem_post() : 공유자원에 대한 접근이 끝났을 세마포어 잠금을 해제한다

 

교착상태(Deadlock)

   * 무한 대기 상태 : 이상의 작업이 서로 상대방의 작업이 끝나기 만을 가다리고 있기 때문에

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

   * 교착상태 발생 조건

     1. 상호배제 (Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다 

     2. 점유대기 (Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다

     3. 비선점 (No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 자원을 뻇을 없다

     4. 순환대기 (Circular wait) : 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다

 

교착상태 해결 방법

   1. 교착상태 예방 : 교착 상태 발생 4 가지 조건 하나를 제거하는 방법

   2. 교착상태 회피 : 교착상태 조건 4번만 제거 / 자원 할당 순서를 정의하지 않음

   3. 교착상태 발견 : 교착상태가 발생했는지 점검하여 교착 상태에 있는 프로세스와 자원을 발견하는

   4. 교착상태 회복 : 교착 상태를 일으킨 프로세스를 종료하거나

                           교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는

      1) 상호배제 조건의 제거 : 임계 영역 제거

      2) 점유와 대기 조건의 제거 : 한번에 모든 필요 자원 점유 해제

      3) 비선점 조건 제거 : 선점 가능 기법을 만들어  

      4) 순환 대기 조건 제거 : 자원 유형에 따라 순서를 매김

 

기아상태 (Starvation)

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

   * 교착상태와 기아상태 

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

      - 기아상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 , 특정

         프로세스는 영원히 자원 할당이 안되는 경우를 주로 의미함

 

기아상태 해결 방안

   * 우선순위 변경

      - 프로세스 우선순위를 수시로 변경해서 프로세스가 높은 우선순위를 가질 기회를 주기

      - 오래 기다린 프로세스의 우선순위를 높여주기

      - 우선순위가 아닌, 요청 순서대로 처리하는 FIFO 기반 요청큐 사용

 

출처 : 제로베이스

profile

Just do IT

@AmyG

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!