반응형
SMALL

이번시간엔 임계구역에 대해 포스팅 해보려고 한다. 사실 임계구역이라는 개념은 조금만 이해해보면 간단한 개념이다.

그럼 임계구역이라는게 어떤것인지 살펴보자.


1. 임계구역이란?


임계구역이란 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다. 쉽게말해 임계영역에 접근하려고 하는 스레드들은 동시에 임계영역에 접근할 수 없다는 이야기이다. 한 임계구역당 하나의 스레드만이 접근을 할 수 있다.


2. 임계구역의 동기화?


동기화(asynchronous)라는 용어에 정의에 대해서 알고 있는가? 흔히 동기화라 하면 어떤걸 일치시켜준다는 의미로 널리 쓰인다. 하지만 임계구역에서의 동기화의 의미는 기존에 쓰였던것과는 약간 다르다. 임계구역에 접근하는 스레드 순서가 잘 지켜지고 있는지에 대한 의미이다. 1번에서도 설명했듯이 임계구역엔 동시에 여러 스레드가 접근하지 못한다. 그러기때문에 스레드도 들어오는 순서가 있고 그 순서가 잘 지켜져야 원활하게 수행이 된다. 


사실 이렇게 말로만 풀어서는 임계구역이 정확히 뭔지에 대한 파악은 좀 어렵고 감이 안올 수 있다. 아래의 그림을 보자.




 임계영역에 접근하려는 3개의 스레드가 있다. 고양이를 스레드로 비유하였다.


 3개의 스레드들이 동시에 임계영역에 접근하려고 한다. 하지만 이는 알고 있듯이 문제가 발생한다. 그래서 하나의 쓰레드만 임계영역에 접근할 수 있다. 하나의 쓰레드가 임계영역에 진입하면 다른 쓰레드들은 기다린다. 위 그림에서는 쓰레드들은 Block상태가 된다.



 먼저 들어간 스레드가 임계영역을 빠져나오면, Block상태의 스레드 중에 한  스레드가 임계영역에 진입할 수 있다. 진입하지 못한 스레드는 계속 Block상태가 된다.

<출저: http://mooneegee.blogspot.kr/, 윤성우의 시스템프로그래밍>


그림을 저렇게 보면서 이해하면 임계구역이란 어떤것인지 더 확실하게 감이 왔을거라고 생각한다. 나도 저 그림을 보면서 이해를 했다.

4. 코드에서의 임계구역

<사진출저: www.google.com>


대략적으로 그림은 위와 같다. EnterCriticalSection함수가 있고 LeaveCriticalSection이라는 함수가 있다. 이 두가지를 정확히 이해를 할 수 있어야 임계영역이 무엇인지에 대해 더 확실하게 감이 잡힐 수 있다. 한 쓰레드가 EnterCriticalSection() 함수를 실행하면 사용 중이라는 선언한다.여기서 EnterCriticalSection()함수가 어떤역할을 하는지 알 수 있을 것이다. 바로 '사용중'을 표시해서 스레드들이 동시에 들어가는 것을 막아주는 역할을 하게 된다. 그러면 다른 thread에 의해 EnterCriticalSection() 함수가 호출되면 이미 사용 중이기 때문에 이 스레드는 BLOCK 상태가 된다. 만약에 하나의 스레드가 완전히 다 실행이 되서 빠져나오면 다른 스레드들이 Block이 풀리면서 임계영역쪽으로 접근을 하게 된다. LeaveCriticalSection() 함수는 어떤 쓰레드가 임계영역을 빠져나올 때, 다른 쓰레드들이 임계구역을 사용할 수 있도록 해주기 위한 함수이다. 사용을 마치고 LeaveCriticalSection() 함수를 호출하면, EnterCriticalSection() 함수를 호출했다가 BLOCK 상태가 된 쓰레드가 있다면 그 쓰레드는 BLOCK 상태에서 빠져나와서 임계영역에 진입하게 된다. 이처럼 임계영역에는 한 구역에 한번에 하나의 스레드들이 접근한다는 것을 알아두면 좋을 것 같다.



대략 이런식으로 임계구역에 대해서 포스팅 해보았다. 처음엔 무슨 말인지 잘 몰랐지만 그림으로 이해하면 굉장히 쉬웠을 것이다. 임계구역에 대한 정보는 더 많을 수 있는데, 그것은 한번 더 공부하고 찾아보면서 해보아야 할 것 같다.




반응형
LIST

'운영체제 ' 카테고리의 다른 글

이중동작모드(Dual-Mode operation)  (0) 2017.01.15
멀티프로세싱(Multi Processing)이란?  (0) 2016.09.20
Context Switching  (0) 2016.09.08
DeadLock 특징들  (0) 2016.08.19
가상메모리  (0) 2016.08.10
블로그 이미지

만년필석사

,