ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스 동기화(Process Synchronization)
    Computer Engineering/운영체제 2019. 8. 16. 05:07

    안녕하세요 dely입니다:)

    오늘은 프로세스 동기화(Process Synchronization)에 대해 정리해보겠습니다.

     

    구글 스프레드시트를 공유문서로 두고 동시에 여러명이서 편집하다보면

    내가 쓴 글자가 어느샌가 사라져버린 것을 발견하기도 합니다

    주황색의 두루미(누구냐 넌...)가 편집해버렸기 때문입니다.....

     

    이처럼 운영체제 내에서도 동시에 여러개의 스레드가 동일한 자료를 접근하여 조작하고,

    그 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황이 발생하게 됩니다.

    이를 경쟁 상황(race condition)이라고 합니다.

     

    경쟁 상황으로부터 보호하기 위해서는

    한 순간에 하나의 스레드만이 변수 count를 조작하도록 보장해야합니다.

     

    > 공유 자원에 대한 접근을 제어하는 방법

     

    1. 임계 구역(Critical Section) 문제

    각 스레드는 critical section이라는 코드 세그먼트를 갖고 있는데,

    그 구역에서 스레드가 공통 변수들을 변경하고, 테이블을 갱신하며, 파일에 쓰기 작업 등을 수행할 수 있습니다.

    임계 구역 문제는 임계구역으로 지정되어야 할 코드 영역이 임계 구역으로 지정되지 않았을 때 발생할 수 있는 문제를 말합니다.

    임계구역 문제에 대한 해결안으로는 다음 세가지 조건을 충족해야합니다.

     

      1) 상호 배제(mutual exclusion) : 하나의 스레드가 자신의 임계 구역에서 실행된다면,

          다른 스레드들은 각자의 임계 구역에서 실행 될 수 없습니다.

     

      2) 진행(progress) : 임계 구역에서 실행되는 스레드가 없고, 임계 구역으로 진입하려고 하는 스레드들이 있다면

         임계 구역에 진입할 수 있는 다음 순서를 결정하는 데 참여할 수 있고, 그 다음 순서는 무한 연기 될 수 없습니다.

     

      3) 한정된 대기(bounded waiting) : 스레드가 임계 구역에 진입하려는 요청을 한 후부터 그 요청이 허락될 때까지

        다른 스레드에게 순서가 밀리는 횟수에 한계가 있어야 합니다. 이는 기아(starvation)를 예방합니다.

     

    2. 세마포(Semaphores)

    세마포는 원래 깃발이라는 뜻을 가지고 있다고 합니다.

    예전에는 기차길에서 깃발의 색깔에 따라 기차가 지나갈지 멈출지 신호를 알려줬다고 하는데,

    운영체제에서도 이와 동일한 원리로 임계 구역에 접근해도 되는지 안되는지를 알려주는 역할인 것을 의미합니다.

     

    세마포에서는 1 감소와 1 증가를 함으로써 신호 역할을 하는 정수 값을 변경합니다.

    0일 때는 다른 스레드가 사용하고 있다는 의미고,

    1이나 다른 숫자일 때는 그 수만큼 사용가능하다는 의미입니다. (binary일 때는 0 or 1)

     

    네덜란드 언어로 Proberen(검사하다) Verhogen(증가하다)의 앞 글자를 따서

    감소와 증가의 연산을 각각 P, V로 정의합니다.

     

    이렇게 세마포를 두어 임계 구역 접근 가능 여부를 알게 되면 모든 게 해결될 것 같았지만..

    만약 각각의 임계 구역에 세마포를 두게 된다면 교착 상태(deadlock)에 빠지게 됩니다.

    여기서 그 유명한 식사하는 철학자들(x) 문제 이야기가 나옵니다.

     

    5명의 철학자가 자신의 양 옆에 하나씩 있는 젓가락을 가지고 음식을 먹게 되는데,

    순서에 따라 A가 먹고, 젓가락 내려놓고,

    B가 먹고, 젓가락 내려놓고.. 하면 좋겠지만

    혹시나 모두 왼쪽 젓가락을 집게 된다면 철학자들은 영원히 굶게 됩니다.

    또한 불행히도 인접한 양 옆 철학자가 모두 젓가락을 먼저 획득한다면

    가운데 앉은 철학자는 역시 굶게 됩니다..

     

    이를 해결하기 위한 방법으로 철학자들에게 조건을 주어 교착 상태를 방지할 수 있습니다.

    - 테이블에는 최대 철학자 4명까지만 앉을 수 있다.

    - 양 옆의 젓가락을 모두 집을 수 있을 때만 젓가락을 집는다.

    - 철학자에게 번호를 매겨 짝수 철학자는 왼쪽, 오른쪽 순으로 집고, 홀수 철학자는 오른쪽, 왼쪽 순으로 젓가락을 집는다.

     

    3. 모니터(Monitors)

    동기화 작업을 위해 세마포를 사용하다보면 오류가 발생할 수 있게 됩니다.

    예를 들어 P 연산 후에 V 연산을 하여

    임계 구역에 들어가기 전에 접근하려고 한다는 것을 알려주고,

    임계 구역에서 나올 때 사용을 하지 않는다는 것을 알려주게 되는데

    이 순서를 바꿔서 사용하게 되면 동기화 작업은 엉망이 되어버립니다.

     

    이를 방지하기 위한 방법으로 모니터가 있는데,

    모니터는 사용자가 쉽게 사용할 수 있는 고수준 언어 구조로

    동기화 작업을 할 수 있게 만들어줍니다.

    반응형

    'Computer Engineering > 운영체제' 카테고리의 다른 글

    메모리 관리(Memory Management)  (0) 2019.08.18
    교착 상태(Deadlocks)  (0) 2019.08.17
    CPU 스케쥴링(CPU Scheduling)  (0) 2019.08.08
    스레드(Threads)  (0) 2019.07.19
    프로세스(Process)  (0) 2019.07.13

    댓글

Designed by Tistory.