05 CPU 스케줄링 ~ 06 프로세스 동기화

6단원

>

    프로세스 동기화

    공유 데이터에 대한 동시 접근은 데이터의 비일관성을 낳을 수 있다. 논리 주소 공간을 공유하는 협력적 프로세세의 질서 있는 실행을 보장하여, 이를 통해 데이터의 일관성을 유지하는 다양한 메커니즘을 논의한다.
  • 6.1 배경

    프로세스가 병행 또는 병렬로 실행될 때 여러 프로세스가 공유하는 데이터 무결성에 어떤 문제를 일으키는지 동시에 여러 개의 프로세스가 동일한 자료를 접근하여 조작하고, 그 실행 결과가 접근이 발생한 특정 순서에 의존하는 상황을 경쟁 상황(racd condition)이라고 한다. 이러한 상황에서 데이터를 보호하기 위해 프로세스들이 동기화 되도록 해야함
  • 6.2 임계구역 문제(The Critical_Section Problem)

    각 프로세스는 임계구역을 가지고 있다. 한 프로세스가 자신의 임계구역에서 수행하는 동안에는 다른 프로세스들은 그들의 임계구역에 들어갈 수 없다. 임게구역 문제는 프로세들이 협력할 때 사용할 수 있는 프로토콜 설계이다. 프로세스는 자신의 임계구역으로 진입하려면 진입허가를 요청해야한다. 이러한 요청을 구현하는 코드 부분을 진입구역(entry section)이라고 하고 임계구역에 뒤에는 퇴출 구역(exit section)이 따라올 수 있다. 코드의 나머지 부분은 나머지 구역(remainder section)이라 한다. 임계구역 문제에 대한 해결안은 다음의 세가지 요구조건을 충족해야한다. 1. 상호 배체(mutual exclusion) 프로세스 Pi가 자기의 임계구역에서 실행된다면 다른 프로세스들은 그들 자신의 임계구역에서 실행될 수 없다. 2. 진행(proress) 자기의 임계구역에서 실행되는 프로세스가 없고 그리고 그들 자신의 임계구역으로 진입하려고 하는 프로세스들이 있다면, 나머지 구역에서 실행 중이지 않은 프로세스들만 다음에 누가 그 임계구역으로 진입할 수 있는 지를 결정하는데 참여할 수 있으며, 이 선택은 무한정 연기가 될 수없다. 3. 한정된 대기(bounded waiting) 프로세스가 자기의 임계구역에 진입하려는 요청을 한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 그 요청이 허용될 때까지 다른 프로세스들이 그들 자신의 임계구역에 진입하도록 허용되는 횟수에 한계가 있어야 한다. OS 내에서 임계구역을 다루기 위해 선점형 커널과 비선점형 커널의 두가지 일반적인 접근법이 사용된다 선점형 커널 : 프로세스가 커널모드에서 수행되는 동안 선점되는 것을 허용한다. 비선점형 커널 : 커널 모드에서 수행되는 프로세스의 선점을 허용하지 않고 커널 모드 프로세스는 커널을 빠져 나갈 때까지 또는 봉쇄될 때까지의 또는 자발적으로 CPU의 제어를 양보할 때까지 계속 수행
  • 6.3 피터슨의 해결안

    Peterson's solution 상호 배제, 진행, 한정된 대기의 요구조건을 모두 보장한다
  • 6.4 동기화 하드웨어

    피터슨해결안으로 두개가 넘는 프로세스에서는 해결이 불가함 락킹에 대한 가정, 즉 임계구역을 보호하기 위해서 락을 사용하는 것에 기반을 둔다. 임계구역 문제는 단일 처리기 환경에서는 공유 변수가 변경되는 동안 인터럽트 발생을 허용하지 않음으로써 간단히 해결 할 수 있다. (비선점형 커널 방법) 다중처리기 환경에서는 적용이 불가능함(인터럽트의 메시지 전달 시간이 너무큼) 한 워드(word)의 내용을 검사하고 변경하거나, 두 워드의 내용을 원자적으로 교환 할 수 있는, 즉 인터럽트 되지 않는 하나의 단위로서, 특별한 하드웨어 명령들을 사용하여 극복 test_and_set() 과 compare_and_swap() 명령어가 있다.
        Boolean test_and_set(boolean *target){
          boolean rv = *target;
          *target = true;
          return rv;
        }
    false로 초기화되는 lock이라는 Boolean변수를 선언하여 상호배제 구현
        do{
          while (test_and_set(&lock))
            ; //do nothing
            // critical seciton
    
            lock = FALSE;
    
            // remainder section
        } while(true);
    실행 된 이후 FALSE로 값 초기화, 즉 다시 락을 해제 compare_and_swap() 명령어 정의
        int compare_and_swap(int *value, int expected, int new_value) {
        int temp = *value;
        if (*value == expected)
          *value = new_value;
          return temp;
        }
    위 두 알고리즘은 상호 배제 조건은 만족하지만 한정된 대기 조건은 만족시키지 못한다. 한정된 대기 조건을 만족시키는 상호 배제 코드는 waiting[n] 과 lock을 사용한다
  • 6.5 Mutex Locks

    임계구역 문제를 해결하기 위한 소프트웨어 도구 중 하나가 mutex 락이다. mutual exclusion 의 약어로, 임계구역을 보호하고 경쟁조건을 방지하기 위해 mutex락을 사용한다. 프로세스는 임계구역에 들어가기 전에 반드시 락을 획득해야 하고 임계구역을 빠져 나올 때 락을 반환해야한다. acquire() 함수가 락을 획득하고, release() 함수가 락을 반환한다. mutex락은 available 이라는 불린 변수를 통해 락의 가용 여부 표시
        acquire(){
          while(!available)
            ; /* busy wait */
            available = false;
        }
        ----------------------
        release(){
          available = true;
        }

© 2018. All rights reserved.

Powered by Hydejack v8.4.0