250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

뮤텍스(Mutext), 세마포어(Semaphore), 스핀락(Spinlock), 레이스 컨디션(Race condition), 동기화(Syschronezed), 크리티컬 섹션(Critical Section) 에 대해서 본문

[Snow-ball]프로그래밍(컴퓨터)/java

뮤텍스(Mutext), 세마포어(Semaphore), 스핀락(Spinlock), 레이스 컨디션(Race condition), 동기화(Syschronezed), 크리티컬 섹션(Critical Section) 에 대해서

Snow-ball 2021. 1. 27. 19:54
반응형

뮤텍스(Mutext)란 무엇인가?

Mutext는 Muteal exclusion(상호배제)의 약자로 Critical Section문제를 해결할 수 있는 개발 도구 중 하나입니다.

 

일종의 Locking 매커니즘이며 Lock을 가지고 있을때만 공유 데이터에 접근이 가능합니다. 화장실에 갈 때 키를 가진 사람만이 갈 수 있고, 일을 다 본 후에는 키를 반납하고 그 다음 사람이 갈 수 있는 것과 같은 매커니즘입니다. 유의할 점은 lock에 대한 소유권이 있다는 점. 열쇠를 획득한 사람만이 반납할 수 있습니다.

 

뮤텍스

 

 

세마포어(Semaphore)란 무엇인가?

세마포어는 동시에 리소스에 접근할 수 있는 "허용 가능한 counter의 개수"를 말합니다. 예를 들면, 병원에 있는 어느 한 병실에 5명까지 들어 갈 수 있다고 한다면, 5명까지 들어갈 때 counting을 하고 5명 이후에는 밖에서 기다려야 합니다. 한 사람이 나오게 되면 다음 사람이 들어갈 수 있게 되는 것입니다.

 

그리고 count수에 따라서 1개이면 binary semaphore, 여러개이면 counting semaphore라고 합니다. binary semaphore는 뮤텍스와 개념적으로 같습니다.

세마포어

 

 

 

 

 

 

 

 

 

 

 

 

레이스 컨디션(Race condition)이란 무엇인가?

경합조건이라고 하며, 유닉스 계열의 시스템에서 여러개의 프로세스가 동시에 실행될 때, 서로 CPU에 대한 우선권을 차지하기 위해 경쟁하게 되는데, 그것이 바로 레이션 컨디션입니다. 또한 이것은 규칙적인 것이 아니라 불규칙하게 이루어집니다. 이를 이용해서 해킹에도 사용되기도 합니다.

 

동기화(Syschronezed)란 무엇인가?

둘 이상의 스레드(Tread)가 공동의 자원(파일이나 메모리 블록)을 공유하는 경우, 순서를 잘 맞추어 다른 스레드가 자원을 사용하고 있는 동안 한 스레드가 절대 자원을 변경할 수 없도록 해야 합니다. 한 스레드(Tread)가 파일에서 레코드를 수정하는데, 다른 스레드가 동시에 같은 레코드를 수정하면 심각한 문제가 발생할 수 있습니다. 이런 상황을 처리할 수 있는 한 방법은 관련된 스레드에 대한 동기화를 이용하는 방법입니다.

 

동기화의 목적은 여러 개의 스레드가 하나의 자원에 접근하려 할때 주어진 순간에는 오직 하나의 스레드만이 접근 가능하도록 하는 것이며, 동기화를 이용해 스레드의 실행을 관리할 수 있는 방법은 두 가지가 있습니다.

 

  • 코드를 메소드 수준에서 관리 할 수 있다. - 동기화 메소드

  • 코드를 블록 수준에서 관리 할 수 있다. - 동기화 블록

동기화 메소드와 동기화 블록은 모두 sychronized를 이용하여서 구현됩니다.  파워풀한 기능을 간단하게 사용할 수 있다는 장점이 있지만 남발하면 안됩니다. 성능상에 문제를 줄 수 있기 때문입니다.

 

 

 

 

 

 

 

 

 

크리티컬 섹션(Critical Section)란 무엇인가?

운영체제가 지원하는 동기화 방법의 하나로 크리티컬 섹션은 번역하자면 '임계 구역'혹은 '치명적 영역'이라고 하지만 번역해서 사용하지 않는것이 좋습니다. 크리티컬섹션은 보호되어야 할 영역에 이르며, '공유 자원의 독점을 보장해주는 역할을 수행합니다.

 

한마디로 요약하면, 한 순간에 하나의 스레드만 접근이 요구되는 공유 자원에 접근 하는 코드 영역을 의미합니다. 이러한 문제가 생기는 이유는 각 스레드들은 각자의 Stack 과 Register만 독립적으로 갖고 있고, 나머지 자원들은 '공유'하고 있기 때문이다

 

 

스핀락(Spinlock)란 무엇인가?

스핀락은 Critical Section에 진입이 불가능할 때 진입이 가능할 때 까지 루프를 돌면서 재시도 하는 방식으로 구현된 락을 가리킨다. 스핀락은 바쁜 대기의 한 종류이다.

 

스핀락은 운영 체제의 스케줄링 지원을 받지 않기 때문에, 해당 스레드에 대한 Cnotext Switch가 일어나지 않는다. 따라서 스핀락은 임계 구역에 짧은 시간안에 진입할 수 있는 경우에 Context Switch을 제거할 수 있어서 효율적이다. 하지만 만약 스핀락이 오랜 시간을 소요한다면 다른 스레드를 실행하지 못하고 대기하게 되며, 이 경우 비효율적인 결과를 가져온다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

베타존 : 네이버쇼핑 스마트스토어

나를 꾸미다 - 인테리어소품 베타존

smartstore.naver.com

 

반응형
Comments