오전 11:03 2005-10-05
semaphore, mutex
조경민 bro@shinbiro.com
===================================================

동기화(Synchronization)는 semaphore, critical section, mutex, spinlock 처럼 두
또는 그 이상의 태스크간에 데이터나 코드를 보호 하기 위해서 사용된다.


critical section (conditinal critical region)
-----------------------
태스크들이 동시에 실행할 수 있는 코드 영역을 임계 영역으로 막아 한 순간에
해당 코드 영역은 한 태스크만 실행 할 수 있도록 막는 동기화 객체이다.

인터페이스
enter() - 이 곳부터 한 태스크만 들어올 수 있다. 다른 태스크는 이미 들어온
           태스크가 leave()를 호출 할때까지 enter()안에서 기다린다.
leave() - 임계영역을 나간다. enter()에서 기다리고 있는 태스크를 깨운다.

구현
일반적으로 한개의 프로세서 환경에서 타이머인터럽트나 소프트태스크 스위치를
일으키는 소프트 인터럽트가 발생되지 않도록 인터럽트를 막으면 된다.

intel x86에서는 cli (clear interrupt) sti (set interrupt)를 쓰면 된다.


semaphore
-----------------------
Dijkstra가 제안하여 처음으로 SystemV OS에서 도입됨 이후 posix에 도 도입됨
semaphore는 여러개(N개)의 자원을 여러개(M개)의 태스크가 접근할때 사용하는
동기화 기술이다.
semaphore에는 counter가 존재하며, 태스크는 semaphore 객체를 wait()과 post()
할 수 있다. wait()은 자원을 사용하는 함수이고, post()는 사용한 자원을 풀어주는
역활을 한다. 태스크는 wait()을 호출해 현재 사용가능한 자원이 있으면 사용하고
자원이 없어 counter 가 0 이면 자원이 생길때까지 계속 기다린다.

인터페이스
wait() - if( counter > 0 ) counter--;
          else if( counter == 0  ) 자원이 늘어날때까지 대기.
post() - counter++;

semaphore 생성시 counter를 지정안하면 초기값은 1이다.

구현
wait()과 post()안의 코드를 critical section으로 묶는다.

mutex
-----------------------
semaphore와 비슷하지만 자원(counter) 값이 0, 1이라는 두 값만 갖을 수 있는
이진 semaphore라고 볼 수 있다. 상호배제(Mutual Execusion)이라고 한다.

인터페이스
wait() - if( counter == 1 ) counter = 0;
          else 자원이 1이 될때 까지 대기.
post() - counter = 1;

구현
wait()과 post()안의 코드를 critical section으로 묶는다.


signal (condition)
------------------------

인터페이스
wait() - 시그널을 기다린다.
signal() - wait 상태인 쓰레드를 깨우기 위해 시그널을 전송한다.
broadcast() - signal과 유사하지만 wait 상태인 모든 쓰레드를 깨운다.

구현
wait()과 post()안의 코드를 critical section으로 묶는다.


spinlock
------------------------
ciritical section과 비슷하나 멀티 프로세서 환경(정확히는 SMP)에서 한 순간에
하나의 cpu만이 동작할 수 있도록 동기화하는 기술.

인터페이스
lock() - 이 곳부터 한 태스크만 들어올 수 있다. 다른 태스크는 이미 들어온
         태스크가 unlock()를 호출 할때까지 lock()안에서 기다린다.
unlock() - lock()에서 기다리고 있는 태스크를 깨운다.

구현
intel cpu 계열에서는 XCHG 명령어를 이용하여 구현


*SMP(Symmetric Multi Processing): 대칭형 멀티프로세싱 구조로 여러 프로세서가
하나의 메모리와 입출력, 데이터 버스를 공유하는 형식의 멀티 프로세싱 구조

'KB > RTOS' 카테고리의 다른 글

read sector in boot  (0) 2005.10.20
microkernel  (0) 2005.10.05
os scheduling종류  (0) 2005.10.05
segmentation issue on i386  (0) 2005.09.30
POSIX  (0) 2005.09.30

+ Recent posts