방법 Synchronization: OS의 중요 섹션 문제
⚡ 스마트 요약
방법 Sync조정이란 두 프로세스가 동시에 동일한 공유 데이터나 리소스에 접근하지 않도록 프로세스 실행을 조정하는 작업입니다. 이는 임계 영역 진입을 제어함으로써 다중 프로세스 시스템에서 데이터 불일치를 방지합니다.

프로세스란? Sync정시화?
방법 Sync정시화 두 프로세스가 동일한 공유 데이터 및 리소스에 액세스할 수 없도록 프로세스 실행을 조정하는 작업입니다.
이는 특히 여러 프로세스가 동시에 실행되고 둘 이상의 프로세스가 동일한 공유 리소스 또는 데이터에 동시에 접근하려고 시도하는 다중 프로세스 시스템에서 필요합니다.
이는 공유 데이터의 불일치를 초래할 수 있습니다. 즉, 한 프로세스에서 변경한 내용이 다른 프로세스가 동일한 공유 데이터에 접근할 때 반드시 반영되는 것은 아닙니다. 이러한 데이터 불일치를 방지하려면 프로세스 간의 동기화가 필요합니다.
프로세스 방법 Sync동기화가 작동하나요?
예를 들어, 프로세스 A가 메모리 위치의 데이터를 변경하는 동안 다른 프로세스 B는 해당 위치에서 데이터를 읽으려고 시도합니다. 같은 메모리 위치. 두 번째 프로세스에서 읽은 데이터가 오류가 있을 가능성이 높습니다.
프로그램의 섹션
다음은 핵심 부분을 구성하는 네 가지 필수 요소입니다.
- 진입 섹션: 특정 프로세스의 진입을 결정하는 프로세스의 일부입니다.
- 중요 섹션: 이 부분을 통해 하나의 프로세스가 공유 변수를 입력하고 수정할 수 있습니다.
- 종료 섹션: 종료 섹션은 진입 섹션에서 대기 중인 다른 프로세스가 임계 영역으로 진입할 수 있도록 합니다. 또한 실행을 완료한 프로세스가 이 섹션을 통해 제거되어야 하는지 여부를 확인합니다.
- 나머지 섹션: 나머지 모든 부분 Code중요 구역, 진입 구역 및 출구 구역에 속하지 않는 구역은 나머지 구역으로 알려져 있습니다.
크리티컬 섹션 문제란?
임계 영역이란 특정 시점에 단 하나의 프로세스만 접근할 수 있는 코드 부분을 말합니다. 이 영역은 다른 프로세스들이 반드시 접근해야 하는 공유 데이터 리소스로 구성됩니다.
- 임계 구역에 대한 항목은 wait() 함수에 의해 처리되며 P()로 표시됩니다.
- 임계 섹션의 종료는 V()로 표시되는 signal() 함수에 의해 제어됩니다.
임계 영역에서는 단일 프로세스만 실행할 수 있습니다. 임계 섹션 실행을 기다리는 다른 프로세스는 현재 프로세스가 실행을 완료할 때까지 기다려야 합니다.
중요 섹션에 대한 규칙
핵심 부분은 다음 세 가지 규칙을 모두 준수해야 합니다.
- 상호 배제: 상호 배제는 공유 리소스에 대한 액세스를 제어하는 데 사용되는 특수한 유형의 이진 세마포어입니다. 확장된 우선순위 반전 문제를 방지하기 위한 우선순위 상속 메커니즘이 포함되어 있습니다. 한 번에 하나 이상의 프로세스가 임계 섹션에서 실행될 수 있습니다.
- 진행 : 이 해결책은 임계 영역에 아무도 없고 누군가 진입하려는 경우에 사용됩니다. 이때, 나머지 영역에 속하지 않은 프로세스들이 유한한 시간 내에 누가 진입해야 하는지 결정해야 합니다.
- 바운드 대기: 프로세스가 임계 영역에 진입하려는 요청을 할 때, 해당 임계 영역에 진입할 수 있는 프로세스 수에는 특정 제한이 있습니다. 따라서 이 제한에 도달하면 시스템은 해당 프로세스의 임계 영역 진입 요청을 허용해야 합니다.
중요 섹션에 대한 솔루션
과정에서 Sync연대 측정에서 중요한 부분이 핵심적인 역할을 하므로 이 문제는 반드시 해결해야 합니다.
임계 구역 문제를 해결하기 위해 널리 사용되는 몇 가지 방법은 다음과 같습니다.
피터슨 솔루션
피터슨 해법은 임계 영역 문제에 널리 사용되는 해법입니다. 이 알고리즘은 피터슨이라는 컴퓨터 과학자가 개발했기 때문에 피터슨 해법이라고 불립니다.
이 솔루션에서는 프로세스가 위험 상태에서 실행 중이면 다른 프로세스는 나머지 코드만 실행하며 반대 상황이 발생할 수 있습니다. 또한 이 방법은 특정 시간에 중요 섹션에서 단일 프로세스만 실행되도록 하는 데에도 도움이 됩니다.
예시
PROCESS Pi
FLAG[i] = true
while( (turn != i) AND (CS is !free) ){ wait;
}
CRITICAL SECTION FLAG[i] = false
turn = j; //choose another process to go to CS
- N개의 프로세스(P1, P2, … PN)가 있고, 모든 프로세스는 어느 시점에든 임계 영역에 진입해야 한다고 가정합니다.
- 크기가 N인 FLAG[] 배열이 유지되며 기본값은 false입니다. 따라서 프로세스가 임계 영역에 진입해야 할 때마다 해당 플래그를 true로 설정해야 합니다. 예를 들어, Pi가 임계 영역에 진입하려면 FLAG[i]=TRUE로 설정해야 합니다.
- TURN이라는 또 다른 변수는 현재 CS에 진입하기 위해 대기 중인 프로세스 번호를 나타냅니다.
- 종료하는 동안 임계 섹션에 들어가는 프로세스는 TURN을 준비된 프로세스 목록의 다른 숫자로 변경합니다.
- 예시: 턴이 2이면 P2가 임계 영역에 진입하고, 임계 영역을 빠져나올 때 턴이 3이 되므로 P3가 대기 루프에서 벗어납니다.
Sync동기화 하드웨어
때로는 임계 영역의 문제가 하드웨어적으로 해결되기도 합니다. 일부 운영 체제는 프로세스가 임계 영역에 진입할 때 잠금을 획득하고 임계 영역을 벗어난 후 잠금을 해제하는 기능을 제공합니다.
따라서 다른 프로세스가 임계 영역에 들어가려고 하면 잠겨 있으므로 들어갈 수 없습니다. 잠금 자체를 획득하여 무료인 경우에만 그렇게 할 수 있습니다.
뮤텍스 잠금
Sync하드웨어 기반 명예화는 누구나 쉽게 구현할 수 있는 방법이 아니므로, 뮤텍스 락(Mutex Locks)이라는 엄격한 소프트웨어 방식도 도입되었습니다.
이 접근 방식에서는 코드의 진입 섹션에서 임계 섹션 내부에서 사용된 중요 리소스에 대해 LOCK이 획득됩니다. 출구 섹션에서 잠금이 해제됩니다.
Semaphore 해법
Semaphore 세마포어는 단순히 음수가 될 수 없는 변수이며 스레드 간에 공유됩니다. 이는 임계 영역 문제에 대한 또 다른 알고리즘 또는 해결책입니다. 세마포어는 신호 메커니즘으로, 세마포어를 기다리는 스레드는 다른 스레드로부터 신호를 받을 수 있습니다.
이 코드는 1) 대기, 2) 프로세스 동기화를 위한 신호라는 두 가지 원자적 연산을 사용합니다.
예시
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


