운영체제/프로세스 동기화
-
모니터운영체제/프로세스 동기화 2018. 2. 4. 01:07
세마포어를 이용하여 임계 구역 문제를 해결할 때 프로그래머가 세마포어를 잘못 사용할 경우 다양한 유형의 오류가 쉽게 발생한다.이 오류는 상호 배제 요구 조건을 위반하거나 교착 상태를 발생시킨다모니터는 쉽고 효율적인 프로세스 동기화 수단을 제공하는 고급 언어 수준의 동기화 구조물이다. 모니터 사용법추상 데이터 형은 데이터와 이 데이터를 조작하는 함수들의 집합을 하나의 단위로 묶어놓은 것이다. 모니터 형의 표현은 다른 프로세스들이 직접 사용할 수 없고, 모니터 내에 정의된 함수만이 모니터 내의 지역 변수와 형식 매개변수들에 접근할 수 있다.모니터 구조물은 모니터 안에 항상 하나의 프로세스만이 활성화 될 수 있도록 보장한다.모니터 구조물은 동기화 기법을 모델링하는 데에는 충분한 능력을 제공하지 않기 때문에 c..
-
고전적인 동기화 문제들운영체제/프로세스 동기화 2018. 2. 4. 01:04
유한 버퍼 문제유한 버퍼 문제는 동기화 문제의 대표적인 예로서 데이터를 생산하는 생산자 프로세스와 데이터를 소비하는 소비자 프로세스 간에 한정된 공유 버퍼를 사용하는 문제이다.이 문제에서 소비자와 생산자는 다음과 같은 자료구조를 공유한다. int n; semaphore mutex = 1; semaphore empty = n; semaphore full = 0; n개의 버퍼들로 구성된 풀이 있으며 각 버퍼들은 한 항목을 저장할 수 있다고 가정한다.mutex 세마포어는 버퍼 풀을 접근하기 위한 상호 배제 기능을 제공하며 1로 초기화된다.empty 세마포어는 비어있는 버퍼의 수를 기록하며 n값으로 초기화 된다.full 세마포어는 꽉 찬 버퍼의 수를 기록하며 0으로 초기화된다. 생산자가 counter을 올리는 ..
-
세마포어운영체제/프로세스 동기화 2018. 2. 4. 00:40
세마포어는 뮤텍스와 비슷하게 동작하지만 프로세스들이 자신의 행동을 더욱 정교하게 동기화 할 수 있는 방법을 제공한다. 세마포어 S는 정수 변수로 초기화를 제외하고는 원자적 연산인 wait() , signal() 로만 접근 가능하다. 세마포어 사용법 운영체제는 카운팅 세마포어와 이진 세마포어를 구분한다. 카운팅 세마포어의 값의 범위는 제한이 없고, 이진 세마포어의 값은 0과 1 사이의 값만 가능하다. 따라서 이진 세마포어는 뮤텍스 락과 유사하게 동작한다. 카운팅 세마포어는 유한한 개수를 가진 자원에 대한 접근을 제어하는데 사용될 수 있다. 세마포어는 사용 가능한 개수로 초기화 된다. 각 자원을 사용하려는 프로세스는 세마포어에 wait() 연산을 실행하고 세마포어의 값을 감소시키고 작업이 끝나고 자원을 방출..
-
뮤텍스 락운영체제/프로세스 동기화 2018. 2. 4. 00:32
임계 구역 문제에 대한 하드웨어 기반 해결책은 복잡하고, 응용 프로그래머는 사용할 수 없다.이때문에 소프트웨어 기반 해결책들이 사용되는데 이 중 가장 간단한 것이 뮤텍스 락이다.뮤텍스 락을 사용하게 되면 프로세스가 임계 구역에 들어가기 전 반드시 락을 획득해야 하고임계 구역을 빠져나올 때 락을 반환해야 한다. 뮤텍스 락을 이용한 임계 구역 문제 해결 방안 do { acquire() // 락을 획득 // 임계 구역 release() // 락을 반환 // 나머지 구역 } while (true); acquire() { while (!available) //바쁜 대기 available = false; } release() { available = true; } 뮤텍스 락은 available 이라는 boolean..
-
동기화 하드웨어운영체제/프로세스 동기화 2018. 2. 4. 00:25
많은 현대 기기들은 인터럽트 되지 않는 하드웨어 명령어를 제공한다. TestAndSet 명령어를 사용한 상호 배제 구현 do { while(TestAndSet(&lock)) //아무 일도 안함. // 임계 구역 lock = FALSE; // 나머지 구역 } while(TRUE) 제일 처음에는 lock은 FALSE값으로 초기화되어 있다. 따라서, 처음으로 실행한 프로세스는 첫 while문을 통과한다. 그리고, TestAndSet에의해서 lock은 TRUE가 되었으므로, 다른 프로세스가 임계 영역을 실행하려고 해도, while문에서 걸려서 실행할 수 없다. 상호 배제 조건을 만족하는 셈이다. 그리고 임계 영역을 다 끝낸 프로세스는 lock값을 다시 FALSE로 되돌려서 다른 프로세스도 임계 영역을 실행할 수..
-
피터슨의 해결안운영체제/프로세스 동기화 2018. 2. 4. 00:12
임계 구역에 대한 고전적인 소프트웨어 기반 해결책 임계구역 문제를 해결하기 위한 좋은 알고리즘적 설명을 제공한다. 피터슨의 해결안은 두 프로세스가 두 개의 데이터 항목을 공유하도록 하여 해결한다. Int turn; - 임계구역으로 진입할 순번을 나타냄 Turn == i 이면 프로세스 Pi가 임계구역에서 실행됨 Boolean flag[2]; - 프로세스가 임계구역으로 진입할 준비가 되었다는 것을 나타냄 Flag[i] == true 이면 Pi 가 임계구역으로 진입할 준비가 되었다는 것을 나타낸다. 프로세스 Pi의 구조 do { Flag[i] = TRUE; turn = j; while (flag[j] && turn == j ); // 임계구역 flag[i] = FALSE; // 나머지 구역 } while (T..
-
임계구역 문제운영체제/프로세스 동기화 2018. 2. 3. 19:24
둘 이상의 프로세스들이 동시에 접근해서는 안 되는 공유 자원을 임계구역 이라고 하고임계구역으로 지정되어야 할 코드 영역이 임계구역으로 지정되지 않았을 때 발생하는 문제를 상호 배제 문제 라고 한다. 임계구역 문제 해결안의 조건상호 배제하나의 프로세스가 임계구역에 들어가 있다면 다른 프로세스는 임계구역에 들어갈 수 없어야 한다. 진행임계 구역에 들어간 프로세스가 없는 상태에서 들어가고자 하는 프로세스가 여러 개 있다면 어느 것이 들어갈지를 적절히 결정 해 주어야 한다. 한정된 대기다른 프로세스들의 기아를 방지하기 위하여 한 번 임계구역에 들어간 프로세스는 다음 번 임계구역에 들어갈 때 제한을 두어야 한다. 선점형 커널프로세스가 커널모드에서 수행되는 동안 선점되는 것을 허용하는 커널 장점응답이 민첩할 수 있..