병행 프로세스들이 서로 데이터를 주고 받으면서 수행될 때 프로세스간 동기화 필요
병행 프로세스들이 공유데이터를 접근할 때, 병행접근하면 데이터 일관성이 잘못될 수 있다.
따라서 일관성을 유지하려면 데이터접근을 순서화 하여야한다.
count ++ or -- 는 순서화하여 한번에 하나씩 수행.. 1/1/1/2/1/이렇게 할 경우 일관성이 잘못됨
N개의 프로세스가 공유데이터에 접근하고 각 프로세스는 공유데이틀 접근하는 코드 세그먼트를 갖고 있는데 이것을 임계구역이라고 한다.
임계구역은 순서화해서 수행해야한다. 중간난입이 불가능하여 오직 하나의 프로세스만 임계구역을 수행하여야 한다.
진입구역: 임계구역 들어가기전 허가 구하기
출구구역: 임계구역 수행을 끝낸다는 것을 알림
임계구역 문제 요구 조건
1. 상호배제 : 하나가 임계구역 실행 중이라면 다른 프로세스들은 임계구역 실행할 수 없다.
2. 진행: 임계구역에 실행되는 프로세스 x 임계구역을 실행하려는 프로세스들이 잔류구역에 있지 않은 프로세스들 중 선택
3. 한계 대기 : 임계구역의 수행에 대한 요청을 하고 요청이 허용될 떄 까지 다른프로세스가 임계구역을 수행하도록 허용하는 횟수에 한계를 둠
해결 방법
피터슨 알고리즘
세마포어
모니터
피터슨 알고리즘: 두 프로세스만 가정함
세마포어
정수변수로서 오직 두개의 연산만으로 접근
wait or signal
wait : 임계구역 들어가기전 연산 수행 (S --)
signal : 임계구역 나올 때 연산 수행 (S++)
이 두개는 원자적으로 수행됨. 도중에 인터럽트(중단) X
binary 세마포어 : 0또는 1 초기값 1
counting 세마포어: N개의 프로세스의 병행적 접근 허용 초기값 N
세마포어의 문제점: 교착상태 가능
wait(Q) wait(S)
wait(S) wait(Q)
일 경우 서로가 풀어주기만 원하다가 무한히 대기하는 상태가 됨
모니터:동기화를 자동적으로 제공
문제점: 철학자의 만찬문제-> 바로 옆만 공유가능