yoongrammer

목차Process synchronization: 모니터(monitor)세마포어는 동시성 문제를 해결하는데 유용하지만 프로그래머가 올바르게 사용하지 않으면 타이밍 문제가 발생할 수 있습니다.타이밍 문제란 타이밍에 따라 문제가 발생할 수도 발생하지 않을 수도 있는 것을 의미하는데 이러한 문제는 대처하기 까다롭고 디버깅에 어려움을 줍니다.이러한 타이밍 문제를 해결하기 위해 모니터라는 기법이 개발되었습니다. 모니터는 프로세스 간의 상호 배제를 달성하기 위해 프로그래밍 언어로 지원됩니다.Java 및 C # 등은 해당 언어로 내장된 모니터를 제공합니다.Java - Synchronized 키워드C # - lock 키워드세마포어는 프로그래머가 signal과 wait 함수를 사용해서 동기화를 구현해야 하는 반면 모니터는..

목차동기화 문제 (Problems of Synchronization)동기화에는 다음과 같은 고전적인 문제들이 있습니다.Bounded-buffer (Producer-Consumer) ProblemThe Readers-Writers Problem식사하는 철학자 문제(The Dining-Philosophers Problem)이번에는 세마포어를 사용하여 고전적인 문제들을 해결방법에 대해서 알아보도록 하겠습니다.Bounded-buffer (producer-consumer) problem생산자 소비자 문제라고도 하는 경계 버퍼 문제는 동기화의 고전적인 문제 중 하나입니다. 문제 설명n개의 슬롯의 버퍼가 있으며 각 슬롯은 하나의 데이터를 저장할 수 있습니다.실행 중인 두 개의 프로세스, 즉 생산자(in)와 소비자(o..
목차스핀락(Spin lock), 뮤텍스(Mutex), 세마포어(Semaphore) 알아보기스핀 락(Spin lock)스핀 락(Spin lock)은 임계 구역에 진입이 불가능할 때 진입이 가능할 때까지 루프를 돌면서 재시도하는 방식으로 구현된 락을 가리킵니다.임계 구역 진입 전까진 루프를 계속 돌고 있기 때문에 busy waiting이 발생하게 됩니다. 다음은 spin lock을 사용하고 있는 세마포어 함수의 예입니다.wait(S) { while (S 스핀 락은 운영체제의 스케줄링 지원을 받지 않기 때문에, 해당 스레드에 대한 문맥 교환(context switch)이 일어나지 않습니다. 짧은 시간 안에 진입할 수 있는 경우 문맥 교환 비용이 들지 않으므로 효율을 높일 수 있지만 그 반대의 경우에는 다른 ..
목차상호 배제 여러 가지 기법들 : HW solution상호 배제를 보장하기 위해 하드웨어에서 제공하는 방법에 대해서 알아보도록 하겠습니다. TestAndSet (TAS) instructionTestAndSet 명령어는 동시성을 제어 어하기 위한 동기화 명령어 중 하나로서, 하드웨어의 도움을 받아 수행됩니다. 이 명령어는 test 와 set을 한 번에 수행하는 기계어(machine instruction)입니다.// target을 검사하고, target 값을 true로 변경boolean TestAndSet (boolean *target) { //기계어이기 때문에 원자성(atomicity)을 가지며 실행 중 interrupt를 받지 않아 명령어 수행 중에 선점(preemption)이 되지 않습니다.T..
목차상호 배제 여러 가지 기법들 : SW solution소프트웨어를 이용하여 상호 배제를 보장하는 알고리즘은 여러 가지가 있습니다.데커의 알고리즘 (Dekker's algorithm)피터슨의 알고리즘 (Peterson's algorithm)다익스트라 알고리즘 (Dijkstra algorithm)램포트의 베어커리 알고리즘 (Lamport's bakery algorithm)데커의 알고리즘 (Dekker's algorithm)프로세스 두 개일때 상호 배제를 보장하는 최초의 알고리즘입니다.flag는 누가 CS(Critical Section)에 진입할 것인지 알리는 변수이고, turn은 누가 CS에 들어갈 차례인지 알리는 변수입니다. while(1) { // 프로세스i의 진입 영역 fl..