ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 동기화 하드웨어
    운영체제/프로세스 동기화 2018. 2. 4. 00:25

    많은 현대 기기들은 인터럽트 되지 않는 하드웨어 명령어를 제공한다.

     

     

    TestAndSet 명령어를 사용한 상호 배제 구현

    do {

         while(TestAndSet(&lock))

             //아무 일도 안함.

             // 임계 구역

         lock = FALSE;

            // 나머지 구역

     } while(TRUE)

    제일 처음에는 lock은 FALSE값으로 초기화되어 있다.

    따라서, 처음으로 실행한 프로세스는 첫 while문을 통과한다.

    그리고, TestAndSet에의해서 lock은 TRUE가 되었으므로,

    다른 프로세스가 임계 영역을 실행하려고 해도, while문에서 걸려서 실행할 수 없다.

    상호 배제 조건을 만족하는 셈이다.

    그리고 임계 영역을 다 끝낸 프로세스는 lock값을 다시 FALSE로 되돌려서

    다른 프로세스도 임계 영역을 실행할 수 있도록 한다.

    따라서, 진행 조건도 만족하는 셈이다.

    다만, 한정 대기 조건을 만족한다고 볼 수는 없다.

     

    TestAndSet() 명령어

    boolean TestAndSet(boolean* target) {

        boolean rv = *target;

        *target = TRUE;

        return rv;

    }

    명령들은 원자적으로 실행된다.

     

     

    Swap 명령어를 이용한 상호 배제 구현

    do {

        While (compareAndSwap(&lock,0,1) != 0)

            //아무 일도 안함

        //임계 구역

        Lock = 0;

        //나머지 구역

    } while (true);

    제일 처음에는 전역 변수 lock 0으로 초기화 된다.

    compareAndSwap 호출한 번째 프로세스는 lock 1 지정하고

    Lock 원래 값이 expected 값과 같으므로 프로세스는 임계구역으로 들어간다.

    이후의 호출은 lock 값이 기대 0 같지 않기 때문에 진입에 성공하지 못한다.

    이를 통하여 상호 배제 지켜 짐을 있다.

    그리고 임계 구역에 진입한 프로세스가 나올 때  lock 0으로 변경하기 때문에

    진행 조건 만족한다.

    하지만 한정 대기 조건을 만족시키지는 못한다.

     

    compareAndSwap명령어

    Void compareAndSwap(int *value, int expected, int newValue) {

        Int temp = *value;

        //피연산자 value는  (value == expected) 가 참일 때에만 newValue로 지정된다.

        If (value == expected)

            *value = newValue;

        return temp;

    }

    명령들은 원자적으로 실행된다.

     

     

    알고리즘들은 상호 배제진행 조건 만족하지만 한정 대기 조건을 만족시키지는 못한다.


    '운영체제 > 프로세스 동기화' 카테고리의 다른 글

    세마포어  (0) 2018.02.04
    뮤텍스 락  (0) 2018.02.04
    피터슨의 해결안  (0) 2018.02.04
    임계구역 문제  (0) 2018.02.03
    배경  (0) 2018.02.03

    댓글