1 minute read

임계구역 해결 방법

코드로 설계, 하드웨어적인 해결 방법, 피터슨 알고리즘, 데어 알고리즘, 세마포어, 모니터 등을 사용함

- 하드웨어적인 해결 방법

    검사와 지정(코드 잠금 검사와 잠금 설정을 하드웨어적으로 동시에 실행)을 사용하여 임계해결 문제를 쉽게 해결하는 방법

    바쁜 대기를 사용하여 검사하기 때문에 시스템 자원 낭비 발생

- 피터슨 알고리즘, 데커 알고리즘

    임계구역 해결 조건을 모두 만족하는 소프트웨어적인 해결 방법

    알고리즘이 복잡하며 프로세스 수에 대한 확장성이 떨어지기 때문에 현재 잘 사용되지 않음

- 세마포어

    임계구역에 진입하기 전에 스위치를 사용 중으로 놓고 임계구역으로 들어가는 방법

    세마포어 큐에서 프로세스를 관리함

    - Semaphore(n)

        초기 설정 시 사용

        전역 변수 RS를 n 으로 초기화 함

        RS 는 현재 사용 가능한 자원의 수

    - P()

        잠금을 수행하는 코드

        검사와 지정 동시에 사용함

        RS 가 0보다 크면 1만큼 감소시키고 임계구역에 진입

        0보다 작으면 0보다 커질 때 까지 세마포어 큐에 저장됨

    - V()

        잠금 해제와 동기화를 같이 수행하는 코드

        RS 값을 1 증가시키고 세마포어 큐에서 기다리는 프로세스에게 임계구역에 진입해도 좋다는 wake_up 신호 보냄


    간단하고 사용하기 쉬움

- 모니터

    세마포어 알고리즘을 자동으로 처리하도록 설계한 코드

    보호할 자원을 임계 구역으로 숨기고 임계구역에서 작업할 수 있는 인터페이스만 제공하여 자원을 보호

    사용자들의 잘못된 세마포어 사용으로 임계구역이 보호받지 못 하는 문제 해결

    - 상태 변수

        임계구역 보호와 동기화를 위해 사용하며 wait(), signal() 기능 제공

        - wait()

            모니터 큐에서 자신의 차례가 올 때까지 기다림

            세마포어의 P() 에 해당

        - signal()

            모니터 큐에서 기다리는 다음 프로세스에 순서를 넘겨줌

            세마포어의 V() 에 해당

Categories:

Updated: