본문 바로가기

6. 컴퓨터 공학 공부

[120] 운영체제 08차시 상호배제와 동기화

1. 병행 프로세스 간 상호작용

가. 상호 배제 개념

병행 프로세스에서 프로세스 하나가 공유 자원 사용 시 다른 프로세스들이 동일한 일을 할 수 없도록 하는 방법

읽기 연산은 공유 데이터에 동시에 접근해도 문제가 발생하지 않음.
병행 프로세스간 상호작용

변수나 파일은 프로세스별로 하나씩 차례로 읽거나 쓰도록 해야 하는데, 공유 자원을 동시에 사용하지 못하게 실행을 제어하는 방법을 프로세스 간 동기화라고 함.

https://ko.wikipedia.org/wiki/상호_배제

 

상호 배제 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 두 개의 노드 i와 i + 1이 동시에 제거되면 노드 i + 1은 제거되지 않는다. 상호 배제(相互排除, mutual exclusion, Mutex, 뮤텍스)는 동시 프로그래밍에서 공유 불가능한

ko.wikipedia.org

나. 상호 배제 예제

 

다. 상호 배제 조건

두 프로세스는 동시에 공유 자원에 진입 불가

프로세스의 속도나 프로세서 수에 영향 받지 않음.

공유 자원을 사용하는 프로세스만 다른 프로세스 차단 가능

프로세스가 공유 자원을 사용하려고 너무 오래 기다려서는 안 됨.

라. 생산자 소비자 프로세스

운영체제에서 비동기적으로 수행하는 모델

생산자 프로세스가 생산한 정보를 소비자 프로세스가 소비하는 형태

마. 소비자에게 데이터 전송

바. 생산자와 소비자의 공유 버퍼

사. 생산자와 소비자 문제와 상호배제 해결 방법

아. 경쟁상태

여러 프로세스가 동시에 공유 데이터에 접근 시, 접근 순서에 따라 실행 결과가 달라지는 상황을 말함.

공유 데이터에 마지막으로 남는 데이터의 결과를 보장할 수 없는 상황

장치나 시스템이 둘 이상의 연산 동시 실행 시, 어느 프로세스를 마지막으로 수행한 후 결과를 저장했느냐에 따라 오류가 발생하므로 적절한 순서에 따라 수행해야 함.

읽기와 쓰기 명령을 거의 동시에 실행해야 한다면, 기본적으로 읽기 명령을 먼저 수행 후 쓰기 명령을 수행하는 접근

경쟁상태를 방지하기 위해 동기화가 필요함.

동기화를 위해 상호배제, 임계영역이 필요함.

https://ko.wikipedia.org/wiki/경쟁_상태

 

경쟁 상태 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 논리 상태에서의 경쟁 상태 공학 분야에서 경쟁 상태(race condition)란 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말

ko.wikipedia.org

2. 임계영역

가. 의미

프린터처럼 둘 이상의 프로세스가 공유할 수 없는 자원을 임계자원이라 하며 프로그램에서 임계자원을 이용하는 부분

공유 메모리가 참조되는 프로그램을 부분으로 다수의 프로세스가 접근 가능한 영역이면서 한 순간에 하나의 프로세스만 사용할 수 있는 영역

프로세스들이 공유 데이터를 통해 협력할 때, 어떤 프로세스가 임계영역에 들어가면 다른 모든 프로세스는 임계영역으로의 진입이 금지되어야 함.

임계영역 문제는 프로세스들이 서로 협력하여 자원을 사용할 수 있도록 프로토콜을 설계함으로써 해결할 수 있음.

각 프로세스는 접근하려는 자원의 임계영역에 들어갈 수 있는지 여부를 미리 요청해야 하는데, 이런 요구를 코드로 구현한 부분을 진입영역이라 함.

임계영역 다음에는 임계영역에서 수행을 마치고 나갈 프로세스를 선택하는 출구영역이 있음.

나머지 코드는 잔류영역이라 하며 임계영역을 마치고 나고 수행함.

https://ko.wikipedia.org/wiki/임계_구역

 

임계 구역 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 임계 구역(critical section) 또는 공유변수 영역은 병렬컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코

ko.wikipedia.org

나. 임계영역의 조건

1) 상호배제

프로세스(p1)가 임계영역에서 수행 중일 때 다른 프로세스(p2)는 임계영역에서 수행할 수 없음.

2) 진행

임계영역에서 수행하는 프로세스가 없고 여러 개의 프로세스가 임계영역으로 들어가려고 하면 프로세스 선정 알고리즘에 따라 다음 임계영역에서 수행할 대상을 선정

다음 임계영역으로 들어갈 프로세스 선택은 무한정 미룰 수 없음.

3) 제한된 대기

한 프로세스가 임계영역을 요청한 후 요청이 수락되기까지 다른 프로세스가 임계영역에 진입할 수 있는 횟수를 제한해야 함.

다. 데커 알고리즘

두 프로세스가 서로 통신하려고 공유 메모리를 사용하여 충돌 없이 단일 자원을 공유할 수 있도록 허용하는 것.

https://ko.wikipedia.org/wiki/데커의_알고리즘

 

데커의 알고리즘 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 데커의 알고리즘(Dekker's algorithm)은 네덜란드의 수학자 테오도루스 데커가 상호 배제를 위해 고안한 병행 프로그래밍 알고리즘이다. 이 알고리즘은 의사소통을

ko.wikipedia.org

3. 세마포어

가. 개념

다익스트라가 테스 명령어의 문제 해결을 위해 제안

상호배제 및 다양한 연산의 순서도 제공

세마포어 값은 True나 False로, P와 V연산과 관련됨.

네덜란드어로 P는 검사, V는 증가 의미

음이 아닌 정수 플래그 변수

세마포어를 의미하는 S는 표준 단위 연산 P(프로세스를 대기하게 하는 wait 동작, 임계 영역에 진입하는 연산)와 V(대기 중인 프로세스 깨우려고 신호를 보내는 signal 동작, 임계 영역에서 나오는 연산)로만 접근하는 정수 변수

https://ko.wikipedia.org/wiki/세마포어

 

세마포어 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 세마포어(Semaphore)는 에츠허르 데이크스트라가 고안한, 두 개의 원자적 함수로 조작되는 정수 변수로서, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제

ko.wikipedia.org

나. 세마포어 공유 자원 접근 관리

다. 세마포어의 프로세스 n개의 임계영역 문제 해결

do {
    wait(mutex);
        // 임계 영역
    signal(mutex);
        // 나머지 영역
}  while(1);

 

라. 세마포어 동기화

// 프로세스 P1
S1;
signal(synch);

// 프로세스 P2
wait(synch);
S2;