유저모드 동기화에는 CRITICAL_SECTION , interlock 의 방법이 있고

 

크리티컬 섹션은 범위를 설정 할 수 있다

 

인터락은 증가에 관한 변수에 대해 간략한 동기화 기능

 

커널모드 동기화 에는 세마포어, 뮤텍스 등등이 있다

 

 

세마포어와, 뮤텍스의 의 차이는 키의 개수의 차이다

 

뮤텍스는 허용 하는 키의 개수가 하나, 세마포어는 여러개

 

 

그래서 세마포어의 키의 개수르 1 개를 두면 뮤텍스처럼 이용할 수 있다

 

유저모드나 커널모드나 한 프로세스 내에서 사용 할 수 있는건 마찬가지 이지만

 

커널모드동기화는 동기화 관리를 커널이 해주기 대문에 프로세스와 프로세스 간의 동기화도 지원해준다

 

그렇기 대문에 유저보드 보단 커널 모드의 기능들이 더 많아진다는 것을 유추해 볼 수 있으며

 

속도는 일반적으로 유저모드가 더 빠름을 짐작 할 수 있다 

 

Tip1 : 크리티컬 섹션 즉 유저모드에서는 임계영역에 대한 변수를 선언 하지만, 커널모드에서는 각 프로세스 내에서 유효한 핸들을

선언해 동기화를 관리한다

 

Tip2: 핸들은 한 프로세스 내에서만 유효한 것임으로 서로 다른 프로세스 끼리의 동기화를 하기 위한 커널모드에서의 기법은

동기화 함수 생성시 동기화할 프로세스들간의 이름으로 동기화를 꾀할 수 있다

 


http://blog.naver.com/kimgudtjr/140107512792

[ 유저 모드에서의 동기화(Synchronization in User Mode) ]

 

윈도우즈에서 쓰레드를 동기화 시키는 방법은 크게 유저 모드를 기반으로 하는 동기화 기법과

커널 모드를 기반으로 하는 동기화 기법 두가지로 나누어 진다.  각각의 장,단점이 존재한다고 한다.

유저 모드 동기화 기법으로는 CRITICAL_SECTION 오브젝트(Object)를 사용하는 방법이 있다.

사용 방법은 잠시 뒤로하고 유저 모드에서의 동기화 기법이 지니는 장점과 단점부터 이야기 해보자.

유저 모드에서 동기화를 하는 경우에 동기화 작업을 위해서 프로세스의 연산 모드를 변경할 필요가 없다.

응용 프로그램이 유저 모드로 돌아오는 작업을 할 필요가 없다. 사실 연산 모드의 변환 자체가

많은 연산 과정을 거쳐서 이루어진다. 즉 CPU가 해야 하는 일이 많다는 것이다. 결과적으로

유저 모드에서의 동기화 기법은 커널 모드 동기화 기법에 비해 빠르다. 따라서 유저모드에서의

동기화 기법만으로도 충분할 경우에는 이 방법을 적용하는 것이 좋을 것이다.

물론 사용하는 방법도 빅적 쉬운 편이다. 그러나 이러한 장점을 지니는 대신에 커널 모드에서의

동기화 기법에 비해서 제한된 기능만을 지닌다는 단점이 있다.

※ CRITICAL_SECTION 오브젝트를 사용하는 동기화 방법을 자칫 "임계 영역을 이용하는 동기화 방법인가 보다"

라는 오해를 하기 쉽다. (CRITICAL_SECTION 을 한글로 번역하면 임계영역이 된다.) 그러나

임계 영역은 동기화를 해야 하는 영역을 가리키는 것이지 그 자체가 동기화 방법이 될 수는 없다. 그냥

동기화를 하기 위해 사용하는 객체를 가리켜 CRITICAL_SECTION 이라는 이름을 붙여 준 것이다.


=============================================================================

 

 

 

[ 커널 모드에서의 동기화(Synchronization in Kernel Mode) ]

 

유저모드에서의 동기화 기법이 지는 제한 사항 중에 하나는 단일 프로세스 내에서만 사용 가능

하다는 것이다. 경우에 따라서는 서로 다른 프로세스 안에 존재하는 쓰레드들 간의 동기화가 필요한

경우도 존재한다. 이러한 경우에 반드시 커널 모드 동기화 기법을 적용해야만 한다. 커널 모드

동기화에서는 다른 프로세스 안에 존재하는 쓰레드들간의 동기화도 가능하다.

또한 유저 모드 동기화 기법은, 잘못 구현했을 경우 Deadlock 에 빠지기 쉽다는 문제도 지니고 있다.

그러나 커널 모드 동기화 기법엣는 Deadlock 에 빠지지 않도록 타임-아웃을 설정해 줄 수 있다.

 

--------------- < Deadlock 설명 생략 ... >  ---------------

대략 스레드가 무한 대기상태에 빠지는 경우인데...

이것의 완벽한 해결책은 없다고 한다. 프로그래머가 신경 써야 한다고 함..

그외 설명 생략...

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

커널 모드 동기화 기법으로는 Event, Semaphore, Mutex 오브젝트를 사용하는 방법이 있다.

이들은 모두 커널 오브젝트(Kernel Object)이다.

커널 오브젝트는 다른 프로세스 안에 존재 하는 쓰레드들간의 동기화도 가능하다.

왜냐하면 커널 오브젝트는 하나의 프로세스에 의해 소유되는 것이 아니라, 커널의 의해 공유되기

때문이다. 성능상에 있어서는 유저모드 동기화보다 느리지만(유저모드와 커널모드 사이에 발생하는

전환과정 때문에), 보다 유연성 있는 방법을 제공한다.


반응형

+ Recent posts