ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 동기화(Synchronization)
    CS/OS(운영체제) 2022. 6. 1. 23:11
    728x90

    동기화의 목표는 스레드의 협업이 올바르게 운영된다는것을 보증하기 위함임.

     

    Race Condition

    공유 리소스에 스레드가 접근하게 된다면, Incorrect error 및 Reproducible이 발생한다.

    실행 시기에 따라 다르지만,

    MultiThreading - 실행은 CPU 스케줄러에 의해 interleaved 될 수 있음. (예측할 수 없는 요인)

    MultiProcessor - 멀티프로세서 안에서의 실행 시기는 다양함. (프로세서가 얼마나 busy한지에 의존)

    스레드 문제

    - atomic 작업에서 공유 리소스에 접근하기 어려움.

    - Atomic operation : 전체 또는 전혀 인터럽트가 불가능하다.

    - 단일 연산자를 여러 개의 명령으로 컴파일 할 수 있음 ( ++ 연산자는 로드/추가/저장의 세가지 단계를 포함함)

    - multi-word 작업이 원자성을 띈다는 보장을 할 수 없음.

     

    Critical Resource

    - 한 번에 최대 한 프로세스에서만 사용할 수 있는 리소스

    - 프린터와 같은 리소스에 접근하기 위해선 두개 또는 그 이상의 프로세스가 요구된다고 가정함.

    각 스레드에는 자체 스택과 CPU 레지스터의 복사본이 있음.

    리소스 공유

    - 정적 데이터, 힙 메모리, 파일 , IO장치와 같은 기타 리소스는 프로세스의 모든 스레드에서 공유됨.

    - critical resource에 속하는 하드웨어에는 프린터와 테이프 드라이브가 있고, 소프트웨어에는 메세지 버퍼 대기열, 변수 , 배열 및 버퍼가 포함됨.

     

    Critical Section & Mutual Exclusion ( 중요 섹션 및 상호 배제 )

    Critical Section( or Critical Region)

    - 중요한 리소스에 접근하는 코드 조각

    - 공유된 변수 또는 데이터 구조를 점검

    - 스레드가 동시에 엑세스할 수 있는지 여부를 검사

     

    Mutual Exclusion(상호 배제)

    - critical section에서 한 번에 하나의 스레드만 실행되도록 함.

    - ciritical section을 상호 배타적으로 만듦.

     

    동기화 용어

    Process/thread synchronization - 공유 리소스 또는 실행을 사용하여 올바른 프로세스/스레드 조정 방법

    Race Condition - 여러 프로세스/스레드가 동시에 공유 데이터에 접근하고, 조작하는 상황

    Critical Section - 공유 리소스에 접근하는 코드 조각

    Mutual Exclusion - critical section 안에서 동시에 하나의 프로세스/스레드만 존재해야 한다.

    Condition Synchronization - 프로세스가 특정 작업이 발생할때 까지 대기하도록 허용.

     

    Critical section의 문제점

    크리티컬 섹션은 반드시 다음 세가지 조건을 만족해야 한다.

    1. Mutual Exclusion (상호 배제)

    - 만약 프로세스 P가 크리티컬 섹션 안에서 실행중이라면, 다른 프로세스들은 그 크리티컬 섹션 안에서 실행할 수 없다.

    2. Progress (진행)

    - 크리티컬 섹션에 실행 중인 프로세스가 없고, 해당 크리티컬 섹션에 진입하려는 일부 프로세스가 있는 경우 다음으로 크리티컬 섹션에 진입할 프로세스의 선택을 계속 미룰 수 없다.

    3. Bounded Wating (한정 대기)

    - 프로세스가 임계 섹션 진입 요청을 한 후, 다른 프로세스가 임계 섹션 진입을 허용하는 횟수에 제한 또는 제약이 있다.

     

    Disabling Interrupts

    - 가장 쉬운 해결책 중 하나로, 크리티컬 섹션에서의 인터럽트를 불가능 하게 만드는 것이다.

    장점 : 간단하다.

    단점 : 장시간 인터럽트를 차단하면, 인터럽트가 손실될 수 있음, 이러한 권한 있는 작업은 일부 악성 프로그램에 의해 악용될 수 있음, 이 접근 방식은 멀티프로세서에 적합할 수 없음.

     

    HW Support

    몇몇 시스템은 lock 메커니즘을 구현하기 위해 추가적은 명령을 제공함.

    1. Test-And-Set operation (called TAS)

    Test(load)와 Set(store)를 하나의 atomic 명령으로 만듦.

    Test - old lock value를 체크한다.

    Set - lock을 새 value로 설정한다.

    int TestAndSet(int *old_ptr, int new) {
        int old = *old_ptr; // fetch old value
        *old_ptr = new; // store ‘new’ value
        return old; // return the old value
    }

     

    2. Compare And Swap 

    Lock을 위한 또 다른 HW Primitive.

    - 메모리 위치의 내용을 지정된 값과 비교하고, 동일한 경우에만 해당 메모리 위치의 내용을 새로운 지정된 값으로 수정함.

    Test-And-Set과 유사한 lock 구현 방식.

    int CompareAndSwap(int *ptr, int expected, int new) {
         int actual = *ptr; 
         if (actual == expected) 
         *ptr = new; // update the memory location
         return actual; // return the actual value
    }

    Spin lock

    - Spin lock은 한 번에 하나의 스레드만 크리티컬 섹션에 들어갈 수 있도록 함. (상호 배제)

    - 싱글 프로세서 사용 시 lock을 유지하는 스레드를 제외한 다른 모든 스레드는 spinning 동안 CPU 사이클을 낭비해야 함.

    - 멀티 프로세서 사용 시 다른 프로세서에 lock이 될 때 까지 spinning을 대기하면 많은 사이클이 낭비되지 않음.

    - 그러나 spin lock은 공평성을 보장하지 않기 때문에 starvation으로 이어질 수 있음.

     

    Semaphore

    동시 시스템에서 엑세스를 제어하는 보다 일반적인 동기화 방법.

    세마포어 S - 정수 값을 가진 객체 ( value는 현재 사용 가능한 리소스의 단위 수 )

    2개의 수정 표준 연산. semWait() / semSignal()

    semWait() - value값 감소 연산

    semSignal() - value값 증가 연산

     

    - 오랜 대기 시간을 피하기 위해, 세마포어는 세마포어에서 대기중인 관련 프로세스 대기열을 사용할 수 있음.

    - 세마포어를 사용하여 n-process 크리티컬 섹션의 문제점을 해결.

     

    Binary Semaphore

    - 정수 값은 lock의 사용을 위해 0과 1사이의 범위만 사용할 수 있음. ( 뮤텍스 lock 이라고도 함 )

    Counting Semaphore

    - 정수 값은 제한되지 않는 도메인에 걸쳐 있을 수 있음.

     

     

    728x90

    'CS > OS(운영체제)' 카테고리의 다른 글

    교착 상태(DeadLock)  (0) 2022.06.12
    동기화(Synchronization) 2  (0) 2022.06.12
    스레드(Thread)  (0) 2022.05.30
    인터럽트(Interrupts)  (0) 2022.04.17
    컴퓨터 하드웨어(Computer Hardware)  (0) 2022.04.17
Designed by Tistory.