티스토리 툴바


IT /IT 관련 잡담2012/01/28 00:12



안녕하세요. (-_-); 

이번 글은 세마포어와 뮤텍스의 근본 원리에 대해서 다뤄볼 생각입니다. 
제목은 별로 신경쓰지 마시고,


흔히 세마포어와 뮤텍스에 대해서 설명할 때 예를 듭니다. 

화장실이 하나다 여러개다. 뻑!!! 뻑!! 아 이 소리는 가려워서 손등을 긁는 소리입니다. 

원론적인 얘기로 돌아가, 
세마포어와 뮤텍스는 왜 생겼을까요?? 
왜 갑자기 화장실이 튀어나올까요? 그리고 그 화장실은 여자용일까요 남자용일까요? 
 
우리는 세마포어와 뮤텍스를 배울때 임계영역(Critical Section)에 대해서 배웁니다.

임계 구역(critical section)또는 공유변수 영역 병렬컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다. 임계 구역은 지정된 시간이 지난 후 종료된다. 때문에 어떤 스레드(태스크 또는 프로세스)가 임계 구역에 들어가고자 한다면 지정된 시간만큼 대기해야 한다. 스레드가 공유자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들어가거나 나올때는 세마포어 같은 동기화 매커니즘이 사용된다.    -wiki

그렇죠? 아는척 하셔야지 제목보고 궁금해서 들어온 체면이 사시지 않겠습니까? 
이 이야기를 곰곰히 풀어보시고, 다시 화장실 얘기로 돌아가봅시다. ( 그 화장실이 여자용인지 좀 물어봐주세요. )
 
즉, 세마포어와 뮤텍스는 여러 스레드(태스크 또는 프로세스)가 임계 구역에 들어가고자 할때 스레드의 배타적 사용을 보장해주기 위해서 나왔습니다. 무슨 얘기인지 어려우시다구요? 쉽게 얘기해서 당신이 화장실에 들어가서 문을 잠그는 이유는 뭡니까? 화장실을 혼자 쓰기 위해서죠. 마찬가지로 스레드와 같은 작업자들도 화장실과 같은(임계영역)을 사용할 때 혼자 사용할 시간을 줘야한다는 것입니다. 

하지만 생각을 해보세요. 화장실을 쓰던 사람이 나왔을 때, 당신이 문을 열고 들어가 문을 닫고 잠그기 전까지 시간의 꽤나 걸립니다. 이 때 누군가 정말 너무 급해서 당신을 밀치고 들어가버리거나, 그러려고 손잡이를 잡아채서 당신과 함께 손잡이를 잡고 있습니다. 서로 먼저 들어가려고 애쓰는 사이, 둘 모두 지려버리거나 하는 불행한(?)일도 일어날 수 있습니다. 

 그렇기 때문에 화장실 예는 정말 뻑!!! 뻑!!! ( 아 자꾸 가렵네요) 예가 좋지 못합니다. 
 화장실의 예가 이렇게 예의 장소같은 냄세가 나는 예가 되버린 이유는 화장실 예를 만든 사람이 후배를 가르치기 귀찮아서 혹은 자신이 무지해서 한 가지를 빼먹었기 때문입니다. 

 그것은 바로 한 시간대에 하나의 작업자만이 화장실 문을 열고 들어가 문을 잠글 수 있다는 정의입니다. 
 이 정의를 IT용어로는 ATOMIC OPERATION = 원자적 연산 이라고 부릅니다. 
 
 원자란 무엇입니까? 맞죠, 바로 더 이상 쪼개질 수 없는 어떤 근원적인 것을 말합니다. 
 원자적 연산이란 이에 따라 더 쪼개질 수 없는 연산을 말하는 것입니다.

 눈치가 빠른 분은 벌써 아셨을 겁니다. 
  "화장실 문에 접근해 손잡이를 잡고 문을 열고 들어가서 문을 닫고 잠근다. " -> 이를 원자적 연산으로 정의해놨습니다. 

 더 호기심이 많은 분들을 위해 글을 써보면,
 원자적 연산이 원자적 연산일 수 있는 이유는 이를 연산하는 주체가 이를 원자적으로 받아들이기 때문입니다. 
 쉽게 얘기해서 CPU에는 원자적 연산으로 정의된 명령군이 있습니다. 
 세마포어나 뮤텍스는 이렇게 정의된 명령군을 어셈블리어(혹은 매크로)로 코딩해놨습니다. ( 해놨겠지? )
 또한 이제 한 프로세서가 하나의 코어를 지니는 시절이 아니기 때문에 멀티 코어에서 오는 원자적 연산 명령어 군은 다른 코어에서 동시에 메모리에 접근하는 것을 막습니다. 이로서 원자성을 보장할 수 있습니다. 

더더욱 호기심 많은 분들에게, 
x86 cpu는 CISC 이고, CISC 명령을 풀어서 리오더링을 하는 슈퍼스카라 적용 cpu입니다. 이 때문에 원자적 연산의 원자성을 깰 수 있기 때문에 메모리 펜스라는 특별한 기능도 있습니다. 


혹시 그 동안 모호한 예로 알고 있어 답답했거나 했던 부분이 있으시면 아는 범위내에서 답변해드릴께요. 
댓글이나 쪽지로 남겨주세요~^^

 
저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 화박 화박