'크리티컬섹션 뮤텍스 세마포어 차이'에 해당되는 글 1건

  1. 2010.09.19 크리티컬 섹션 vs 뮤텍스 vs 세마포어


1. 스레드 동기화 방법
① 유저 모드 동기화
- 동기화가 진행되는 과정에서 커널의 힘을 빌리지 않고 동기화 -> 커널모드의 전환이 불필요해서 성능상의 이점이 있음
② 커널 모드 동기화
- 동기화가 진행되는 과정에서 커널의 힘을 빌려 동기화 -> 동기화에 관련된 함수 호출 때마다 커널 모드로의 변경 필요해 성능 저하
- 유저 모드에서 제공하지 못하는 기능을 제공 받음

2. 임계 영역에 대한 이해
두개 이상이 스레드가 동시에 접근해서는 안되는 공유 자원을 접근하는 코드의 일부
- 두개의 스레드가 동시에 임계영역에 접근할 경우 문제가 발생할 수 있으니 이를 제한

3. 스레드 동기화 기법
크리티컬 섹션 기반 동기화(유저 모드) : 코드상 다수의 라인을 보호해야 하는 경우
인터락 기반 동기화(유저 모드) : 전역으로 선언된 변수 하나의 접근 방식을 동기화 하는 경우
뮤텍스 기반 동기화(커널 모드) : 누군가가 뮤텍스에 접근이 가능한 상태가 되었을때 Signaled 상태에 놓이고 접근을 하였으면 Non-Signaled 상태로 변함
세마포어 기반 동기화(커널 모드) : 뮤텍스와 유사, 차이점은 카운트의 존재


-------------------------------------------------------------------------------------------------------------------------------------------------------


1. 크리티컬 섹션

유저 객체입니다. 커널에서 제공되는 객체가 아니라는 말입니다.

커널 객체가 아니므로 가볍고 빠릅니다.

그러나 한 프로세스 내의 쓰레드 사이에서만 동기화가 가능합니다.

보통의 경우 가볍고 쉽게 쓸 수 있는 동기화 객체입니다.


2. 뮤텍스

크리티컬 섹션과 다르게 커널 객체입니다.

그러므로 크리티컬 섹션보다 무겁습니다.

크리티컬 섹션이 한 프로세스 내의 쓰레드 사이에서만 동기화가 가능한 반면,

뮤텍스는 여러 프로세스의 스레드 사이에서 동기화가 가능합니다.

뮤텍스를 가장 흔히 사용하는 예가 프로세스 다중 실행을 막을 때입니다.

이런 기능은 크리티컬 섹션으로는 불가능합니다.


3. 세마포어

세마포어 역시 커널 객체입니다.

위의 크리티컬 섹션, 뮤텍스는 동기화 함에 있어서 동시에 하나의 쓰레드만

실행되게 합니다.

이에 반해, 세마포어는 지정된 수만큼의 쓰레드가 동시에 실행되도록 동기화하는 것이 가능합니다.

지정된 수보다 작거나, 같을 때까지 쓰레드의 실행을 허용하고,

지정된 수를 넘어서 쓰레드가 실행되려 하면 실행을 막습니다.

'리눅스 > Development' 카테고리의 다른 글

vi + ctags + cscope  (0) 2011.06.17
사용자 쓰레드와 커널 쓰레드  (0) 2011.06.02
크리티컬 섹션 vs 뮤텍스 vs 세마포어  (0) 2010.09.19
리눅스 세그먼테이션과 페이징  (0) 2010.01.31
GDT,LDT Segment Descriptor  (0) 2010.01.31
GDT vs LDT  (0) 2010.01.31

댓글을 달아 주세요

 «이전 1  다음»