Programming/Algorithm

[Algorithm]동기화 기법(Synchronization)

MB Brad KWON 2012. 11. 19. 14:46


  • 동기화(Synchronization)

http://en.wikipedia.org/wiki/Synchronization
    - 멀티프로그래밍(두개 이상의 쓰레드가 같은 데이터를 공유하며 실행되고 있을때)에서
    에러(충돌,교착)가 발생하지 않고 조화롭게 실행되도록 하는 일련의 작업
    - 이용되는 이론 : 세마포어(Semaphore), 임계구역(Critical Section), 스핀락(SpinLock), 상호배제(Mutual Exclusion, Mutex), 이벤트, Metered Section

 

 

  • 세마포어 (Semaphore)

http://ko.wikipedia.org/wiki/%EC%84%B8%EB%A7%88%ED%8F%AC%EC%96%B4
    - 멀티프로그래밍에서 공유자원에 대한 동시 접근을 제한하는 방법
    - 세마포어 S는 정수값을 가지는 변수이며, 다음과 같이 P(test--)와 V(increment++)라는 명령에 의해서만 접근할 수 있다.
        P는 임계 구역에 들어가기 전에 수행되고, V는 임계 구역에서 나올 때 수행된다
    - 세마포어는 임계구역을 다루기 위한 커널 객체다.(0이상의 정수)
    CreateSemaphore : 세마포어 생성
    ReleaseSemaphore : 세마포어 카운트 증가
    WaitForMultipleObjects : 세마포어 시그널을 기다림

    공유자원(임계구역)에 대한 접근을 하면 세마포어 카운트 감소

    - 상태 : wait/ capture/  release

    - 카운트       
        - 감소 : capture, 공유자원에 접근시
        - 증가 : release, ReleaseSemaphore()함수 호출시
        - 0    : wait, 이면 공유자원에 대한 접근이 거부되지 않는다.

    - 동작 : 세마포어 카운트가 증가(ReleaseSemaphore)하면,
        wait에 시그널이 가고(WaitForMultipleObjects), - 임계구역 안에 위치
        공유자원(임계구역[EnterCriticalSection()-LeaveCriticalSection())의 사용이 허용되면서
        세마포어 카운트 감소

 

  • 임계 구역( Critical section )

http://ko.wikipedia.org/wiki/%EC%9E%84%EA%B3%84_%EA%B5%AC%EC%97%AD
    - 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘
동시에 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
임계 구역은 주로 지정된 시간이 지난 후 사라진다. 그래서 어떤 스레드(작업 또는 프로세스)가 임계 구역에 들어가려면 지정된 시간을 기다려야 한다.
세마포어와 같이, 배타적인 사용을 보장하기 위해서는 임계영역의 입장과 퇴장에는 어떤 동기화 기작이 필요하다.
    - InitializeCriticalSection : 임계구역 초기화
    - DeleteCriticalSection : 임계구역 삭제
    - EnterCriticalSection : 임계구역 진입, Lock
    - LeaveCriticalSection : 임계구역 떠남, Release

 

 

  • 스핀락(SpinLock)

임계구역에 진입이 불가능할때 잠시 루프를 돌면서 재시도 하는 것(스핀)
    - 커널프로그래밍에서는 특히 가능한한 짧은 시간내에 처리를 완료해야한다. MS 에서는 처리시간을 25마이크로초 이하로 하도록 권장한다.
크리티컬 섹션에 진입하기 전에 커널은 보호된 DPC 큐와 관련된 스핀락을 획득해야 한다.
스핀락 획득에 실 패하면 성공할 때까지 계속 시도한다.
스핀락이란 이름은 락을 획득할 때까지 커널(즉, 프로세스)는 계속해서 빙빙 돌고 있다(spinning)는데서 왔다.



출처 : http://codens.tistory.com/84

'Programming > Algorithm' 카테고리의 다른 글

[Algorithm]패러럴 퀵 소트  (0) 2012.11.07