• 임계 구역(Critical Section)이란? :: 마이구미
    운영체제 2017. 1. 30. 15:09
    반응형

    이번 글은 임계 구역에 대해 다뤄본다.

    원문을 번역한 글이다.


    임계 구역이란 파일, 입출력, 공유 데이터 등 원자적으로 실행할 필요가 있는 명령문 또는 코드의 일부 영역이다. 

    (원자적에 대한 글 참고)


    병렬 프로그래밍에서 만약 하나의 스레드가 공유 데이터의 값을 변경을 시도하는 시점에 다른 스레드가 그 값을 읽기를 시도한다면 예측하지 못한 결과가 초래한다.


    그렇기에 공유 데이터의 접근에 동기화를 해줘야한다.

    고급 언어에서는 동기화를 위한 지침들을 제공해준다. (관련 글)


    이러한 임계 구역은 지정되어야할 영역에 지정되지 않을 경우 위와 같이 예측하지 못한 결과를 초래한다.

    이러한 문제를 임계 구역 문제라고 불린다.


    해결법은 간단히 아래와 같이 간단히 나타낼 수 있다.


    acquireLock(); Process Critical Section releaseLock();


    우선적으로 임계 구역에 실행되는 스레드는 lock을 획득하게 된다.

    이 lock은 오직 하나의 스레드만 가질 수 있다.


    이러한 임계 구역 문제를 해결하기 위해서는 요구 조건이 필요하다.

    상호 배제, 진행, 한정된 대기라는 3가지 조건을 충족시켜야 한다.


    상호 배제 (mutual exclusion)

     - 하나의 프로세스가 임계 구역에서 실행되고 있다면, 다른 프로세스들은 임계 구역에서 실행될 수 없음.

    진행 (progress)

     - 임계 구역에 실행되고 있는 프로세스가 없을 경우, 들어갈 프로세스를 적절히 선택해줘야한다.

    한정된 대기 (bounded waiting)

     - 프로세스의 기아를 방지하기 위해, 한번 임계 구역에서 실행된 프로세스는 다음 실행에 대한 제한을 두어야한다.


    임계 구역에 대한 설명과 그로 인한 문제 및 문제 해결을 위한 조건을 알아보았다.

    이러한 임계 구역 문제의 해결 방안다양한 방식으로 구현될 수 있다.

    그렇기에 문제 해결 방안에 대한 자세한 내용은 따로 글을 다루도록 하겠다.

    그 중 대중적인 예로 세마포어가 있다.

    아래 링크를 참고 바란다.


    세마포어 vs 뮤텍스

    http://mygumi.tistory.com/114


    반응형

    댓글 0

Designed by Tistory.