### Readers and Writers Problem ### : database에서 공유데이터에서 접근하는 여러개의 concurrent processes(writers, readers)가 있다. : writer process가 공유 데이터에서 데이터를 수정할 때 다른 concurrent process가 들어오면 data consistency에 문제 발생 ( 같은 시간에 예방책 => 공유 데이터을 critical section으로 해두고 mutual exclusion을 하여 data inconsistency를 예방한다 ) : Reader - data set만 읽을 수 있지만 update 할 수 없다 : Writer - shared data를 읽고 쓸 수 있다 int read_count = 0; //..
### Bounded Buffer Problem ### : 유한 buffer 문제 : 생산자와 소비자 문제(생상자가 data를 buffer에 넣고 소비자가 buffer에서 data를 읽는다) : pool/buffer cache (1개의 buffer에는 1개의 item을 저장할 수 있다) int n; // mutual exclusion을 해결하기 위한 semaphore 변수들 semaphore mutex = 1; //lock 담당, 제공하는 역할 semaphore empty = n; //buffer 상태 semaphore full = 0; //buffer 상태 // producer process while (true) { // next_produce에서 item 생성 wait(empty); wa..
### Synchronization Problems ### - Disabling interrupt : process가 shared data에 접근하는 동안에는 interrupt/systemcall이 걸리지 않게 비활성화 시키는 것 - Atomic instruction(test-and-set, compare-and-swap) : 값을 수정하는 동안에 다른 instruction이 수행이 되지 않게 하는 것(cpu 차원 지원-하드웨어 기반) : 다른 기법과 연관되서 사용한다. - Mutex lock : process가 critical section에 접근하면 lock을 걸어 다른 process가 접근 하지 못하게 하는 것 - Semaphore : 일반화된 mutex lock(2진 lock) + 정수..
### Mutex Lock ### : S/W수준의 synchronization tool : critical section에서 mutual exclusion을 해결하기 위해 rock변수를 사용한다. : busy waiting 문제 발생 (busy waiting - 권한을 얻을 때까지 확인하는 것(원하는 자원을 얻기 위해 기다리는 것 x) => cpu 자원 낭비) acquire() { while (!available); // busy wait available = false; } release() { // lock을 풀어주는 function available = true; } while true{ // acquire lock{ //critical section } // release lock{ // rema..
### Hardware Supprot Synchronization ### 1. : 하나의 word가 주어질때 word 확인 후 값 바꾸는 일한다 : test-and-set instruction동안에는 system call/interrupt가 발생하지 않는다. => instruction 자체가 이러한 특성을 가진다(cpu가 고정된 형태로 지원해 준다) => overhead가 없다. : 자동적으로 실행 : 전달된 parameter의 원래 value를 return한다. : 전달된 parameter의 새 값을 true로 설정한다. boolean test_and_set(boolean *target){ boolean return_value = *target; ..
### Critical Section(임계구역) ### while (true){ //entry section critical section // exit section remainder section } : 각 process 별로 포함하고 있는 code 집합(다른 process와 같이 접근 가능한 code영역) => 여러개 process가 공통의 data에 접근하기 때문에 data inconsistency 발생 : data inconsistency같은 문제 막기위한 제약조건 => process 1개가 critical section에 진입을 하여 code 수행하면 다른 process들은 critical section에 접근 불가 (2개 이상의 process가 cri..
### Producer and Consumer Problem ### producer(data 넣기), consumer(data 사용) : 컴퓨터가 가지는 상관 관계 (producer 와 consumer이 누구와 관계하고 있느냐에 따라 달라질 수 있다) : data를 공유하기 위해서 중간에 buffer을 사용한다. 1. : producer process는 consumer process에 의해 consumer되는 정보를 생성합니다. 2. : capacity가 무한한 buffer : producer가 data를 buffer에 넣을 때 대기하지 않아도 된다. : consumer인 경우 buffer에 data 없는 경우 wait해야 한다. : 이론적일 때 사용(이상적인 것) 3. : ca..
Synchronize : 현재 작업의 응답이 발생 동시에 다음 작업을 요청하는 작업이 발생하는 것 ### Synchronization Tools ### : process가 끝나기 전에 잘못된 data를 가지고 process를 실행할 경우 문제(잘못된 출력)가 발생하는데 이러한 문제를 해결하기 위한 것 1. : 여러 process가 더 나은 성능을 위해 명령을 동시에 실행하는 컴퓨팅 모델 : Cooperating process가 동시에 shared data에 접근해서 연산작업을 할 수 있는 것 (process가 data를 공유할 때 data에 대한 접근 순서가 동시에 이뤄질 수 있다.) : 협력 p..