운영체제: 가장 쉬운 세가지 이야기 - Operating Systems: Three Easy Pieces를 바탕으로 작성하였습니다. 컨디션 변수 - 컨디션 변수는 특정 조건이 만족되기를 기다리며 대기하는 "큐"다. - 다른 쓰레드가 시스템의 상태를 변경시키고, 이에 따라 조건이 충족되면 대기 중인 쓰레드에게 signal을 발생시킨다. - 쓰레드 실행 전 특정 조건의 만족 여부를 검사하는 경우는 흔하다. 이 때 컨디션 변수를 사용할 수 있다. - 회전 대기(while과 flag로 구현)는 단순하나 낭비가 있다. 동작 *어떤 쓰레드가 먼저 실행될지는 비결정적이라는 사실을 기억한다. 1. 부모 쓰레드가 먼저 실행되는 경우 1 thr_join() 실행, done이 1이 아니면 wait() 실행, 이 때 보유 중..
운영체제: 가장 쉬운 세가지 이야기 - Operating Systems: Three Easy Pieces를 바탕으로 작성하였습니다. 락 기반의 병행 자료구조 - 락을 사용하지 않는 병행 자료구조도 존재한다! - Correctness와 Performance의 관점에서 자료구조를 평가한다. 1. 병행 카운터 - 간단한 방식으로 모니터 기법과 유사한 방식을 사용한다. 즉 호출할 때 락 할당. 리턴 시 락을 해제한다. - 매우 간단하나 성능 문제가 있다. - 즉, 확장성없이 다수의 쓰레드로 카운팅 시 성능이 낮아진다. 1.1 확장성있는 카운팅 - 근사 카운팅 방식이 흔히 사용된다. - 근사 카운팅 방식에서는 하나의 전역 카운터와 전역 락, CPU 마다 지역 카운터와 지역 카운터 락이 사용된다. 1. 각 CPU ..
운영체제: 가장 쉬운 세가지 이야기 - Operating Systems: Three Easy Pieces를 바탕으로 작성하였습니다. 락이란 무엇인가? - 락은 변수이다. - 소스코드 임계영역을 락으로 둘러 원자 단위로 실행되게 끔 한다. - lock() 함수를 통해 락 획득을 시도하고, 가용 상태가 아니라면 return하지 않고 spin하며 대기한다. - unlock() 함수를 통해 보유중인 락을 해제하고, spin하며 대기중인 쓰레드가 있다면 그 쓰레드는 락을 획득한다. - 락을 통해 운영체제의 영역인 스케쥴링 제어권을 프로그래머가 일부 이양받게 된다. Pthread 락 - POSIX 라이브러리를 통해 사용하여, 하나의 락을 사용하여 전체 쓰레드를 관리하는 coarse-grained 방식과 여러개의 쓰..