방법 Synchronization: OS의 중요 섹션 문제
프로세스란? Sync정시화?
방법 Sync정시화 두 프로세스가 동일한 공유 데이터 및 리소스에 액세스할 수 없도록 프로세스 실행을 조정하는 작업입니다.
다중 프로세스가 함께 실행되고 둘 이상의 프로세스가 동시에 동일한 공유 리소스 또는 데이터에 액세스하려고 할 때 다중 프로세스 시스템에 특히 필요합니다.
이는 공유 데이터의 불일치로 이어질 수 있습니다. 따라서 한 프로세스에서 변경한 내용이 다른 프로세스가 동일한 공유 데이터에 액세스했을 때 반드시 반영되지는 않습니다. 이러한 유형의 데이터 불일치를 방지하려면 프로세스가 서로 동기화되어야 합니다.
프로세스 방법 Sync동기화가 작동하나요?
예를 들어 프로세스 A가 메모리 위치의 데이터를 변경하는 동안 다른 프로세스 B가 메모리 위치에서 데이터를 읽으려고 시도하는 경우 같은 메모리 위치. 두 번째 프로세스에서 읽은 데이터가 오류가 있을 가능성이 높습니다.
프로그램의 섹션
다음은 임계 섹션의 네 가지 필수 요소입니다.
- 진입 섹션: 특정 프로세스의 진입을 결정하는 프로세스의 일부입니다.
- 중요 섹션: 이 부분을 통해 하나의 프로세스가 공유 변수를 입력하고 수정할 수 있습니다.
- 종료 섹션: 종료 섹션은 진입 섹션에서 대기 중인 다른 프로세스가 임계 섹션에 들어갈 수 있도록 합니다. 또한 이 섹션을 통해 실행이 완료된 프로세스를 제거해야 하는지 확인한다.
- 나머지 섹션: Critical, Entry, Exit 섹션을 제외한 코드의 다른 모든 부분은 나머지 섹션으로 알려져 있습니다.
크리티컬 섹션 문제란?
임계 섹션은 특정 시점에 신호 프로세스에 의해 액세스될 수 있는 코드 세그먼트입니다. 이 섹션은 다른 프로세스에서 액세스해야 하는 공유 데이터 리소스로 구성됩니다.
- 임계 구역에 대한 항목은 wait() 함수에 의해 처리되며 P()로 표시됩니다.
- 임계 섹션의 종료는 V()로 표시되는 signal() 함수에 의해 제어됩니다.
임계 영역에서는 단일 프로세스만 실행할 수 있습니다. 임계 섹션 실행을 기다리는 다른 프로세스는 현재 프로세스가 실행을 완료할 때까지 기다려야 합니다.
중요 섹션에 대한 규칙
중요 섹션에서는 세 가지 규칙을 모두 적용해야 합니다.
- 상호 배제: 상호 배제는 공유 리소스에 대한 액세스를 제어하는 데 사용되는 특수한 유형의 이진 세마포어입니다. 확장된 우선순위 반전 문제를 방지하기 위한 우선순위 상속 메커니즘이 포함되어 있습니다. 한 번에 하나 이상의 프로세스가 임계 섹션에서 실행될 수 있습니다.
- 진행 : 이 솔루션은 임계 섹션에 아무도 없고 누군가가 들어가고 싶어할 때 사용됩니다. 그러면 미리 알림 섹션에 없는 프로세스는 제한된 시간 내에 누가 들어가야 하는지 결정해야 합니다.
- 바운드 대기: 프로세스가 임계 섹션에 들어가도록 요청할 때 임계 섹션에 들어갈 수 있는 프로세스 수에 대한 특정 제한이 있습니다. 따라서 한계에 도달하면 시스템은 프로세스에 대한 요청이 임계 섹션에 들어가도록 허용해야 합니다.
중요 섹션에 대한 솔루션
과정에서 Sync크로니제이션, 크리티컬 섹션이 주요 역할을 하므로 문제를 해결해야 합니다.
임계 구역 문제를 해결하기 위해 널리 사용되는 몇 가지 방법은 다음과 같습니다.
피터슨 솔루션
Peterson의 솔루션은 임계 섹션 문제에 대한 솔루션으로 널리 사용됩니다. 이 알고리즘은 컴퓨터 과학자인 Peterson이 개발했기 때문에 Peterson 솔루션이라는 이름이 붙었습니다.
이 솔루션에서는 프로세스가 위험 상태에서 실행 중이면 다른 프로세스는 나머지 코드만 실행하며 반대 상황이 발생할 수 있습니다. 또한 이 방법은 특정 시간에 중요 섹션에서 단일 프로세스만 실행되도록 하는 데에도 도움이 됩니다.
예시
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동기화 하드웨어
때때로 Critical Section의 문제는 하드웨어로 해결되기도 합니다. 일부 운영 체제는 프로세스가 Critical Section에 진입할 때 잠금을 획득하고, Critical Section을 빠져나간 후 잠금을 해제하는 잠금 기능을 제공합니다.
따라서 다른 프로세스가 임계 영역에 들어가려고 하면 잠겨 있으므로 들어갈 수 없습니다. 잠금 자체를 획득하여 무료인 경우에만 그렇게 할 수 있습니다.
뮤텍스 잠금
Sync동기화 하드웨어는 모든 사람이 구현할 수 있는 간단한 방법이 아니므로 Mutex Locks라고 알려진 엄격한 소프트웨어 방법도 도입되었습니다.
이 접근 방식에서는 코드의 진입 섹션에서 임계 섹션 내부에서 사용된 중요 리소스에 대해 LOCK이 획득됩니다. 출구 섹션에서 잠금이 해제됩니다.
Semaphore 해법
Semaphore 단순히 음수가 아니고 스레드 간에 공유되는 변수입니다. 이는 임계 섹션 문제에 대한 또 다른 알고리즘 또는 솔루션입니다. 이는 신호 메커니즘이자 다른 스레드에서 신호를 보낼 수 있는 세마포어를 기다리는 스레드입니다.
프로세스 동기화를 위해 1) 대기, 2) 신호라는 두 가지 원자적 연산을 사용합니다.
예시
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;
요약
- 프로세스 동기화는 두 프로세스가 동일한 공유 데이터 및 리소스에 액세스할 수 없도록 프로세스 실행을 조정하는 작업입니다.
- 중요 섹션의 네 가지 요소는 1) 시작 섹션 2) 중요 섹션 3) 종료 섹션 4) 미리 알림 섹션입니다.
- 임계 섹션은 특정 시점에 신호 프로세스에 의해 액세스될 수 있는 코드 세그먼트입니다.
- 임계 섹션에서 시행해야 하는 세 가지 필수 규칙은 다음과 같습니다. 1) 상호 배제 2) 프로세스 솔루션 3) 경계 대기
- 상호 배제는 공유 리소스에 대한 액세스를 제어하는 데 사용되는 특수한 유형의 이진 세마포어입니다.
- 프로세스 솔루션은 임계 구역에 아무도 없고 누군가가 들어오기를 원하는 경우에 사용됩니다.
- 바운드 대기 솔루션에서는 프로세스가 임계 섹션에 들어가도록 요청한 후 임계 섹션에 들어갈 수 있는 다른 프로세스 수에 제한이 있습니다.
- Peterson의 솔루션은 임계 섹션 문제에 대한 솔루션으로 널리 사용됩니다.
- Critical Section의 문제점은 하드웨어 동기화를 통해서도 해결된다.
- Sync동기화 하드웨어는 모든 사람이 구현할 수 있는 간단한 방법이 아니므로 Mutex Locks라고 알려진 엄격한 소프트웨어 방법도 도입되었습니다.
- Semaphore 임계 섹션 문제에 대한 또 다른 알고리즘 또는 솔루션입니다.