///////
Search
2️⃣

연습문제 5 ~ 8

05. 공유 자원을 병행적으로 읽거나 쓰는 상황을 무엇이라 하는가?

경쟁조건

06. 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역은 무엇인가?

임계 구역

공유 자원

여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등
→ 프로세스들의 공유 자원 접근 순서를 정해야 문제가 발생하지 않는다

경쟁 조건

2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황

임계구역

공유 자원의 접근 순서에 따라 결과가 달라진다
→ ex. 가스렌지는 화구가 3개라 한번에 여러개가 접근 가능, 하지만 믹서는 1개니까 주방의 임계구역
프로세스들이 동시에 작업하면 안 된다.
→ 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역 밖에서 기다려야 한다

공유자원의 접근 예

P1이 예금을 확인한다
P2가 진행되어 예금 확인 및 입금을 진행한다
P1은 P2의 과정을 무시하고 기존 예금 10만원에 자신의 입금 과정을 진행해 결과 20만원이 나온다
예금 : 임계 구역

07. 임계구역 해결 조건 중 한 프로세스가 임계구역에 들어갔을 때 다른 프로세스는 임계구역에 들어갈 수 없는 조건을 무엇이라 하는가?

상호 배제

08. 임계구역 해결 조건 중 한 프로세스가 다른 프로세스의 진행을 방해해서는 안된다는 조건을 무엇이라 하는가?

진행의 융통성

생산자-소비자 문제

생산자는 수를 증가시켜가며 물건을 채운다
소비자는 생산자를 쫓아가며 물건을 소비한다
→ 전역 변수 sum에 접근하는 타이밍을 맞추지 않으면 (a), (b) 처럼 결과가 달라진다
(a)
1.
생산자는 sum = 3 일 때 sum=sum+1 수행 → sum = 4
2.
소비자는 sum = 3 으로 읽고 sum=sum - 1 수행 → sum = 2
(b)
1.
소비자는 sum = 3 일 떄를 읽고 sum=sum - 1 수행 → sum = 2
2.
생산자는 sum = 3 으로 읽고 sum=sum+1 수행 → sum = 4

해결 조건

1. 상호 배제

한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없다

1.1 잠금 구현

1.
프로세스 P1, P2는 임계구역에 진입하기전에 잠금이 걸려있는지 확인 (lock == true)
2.
잠겨있으면 무한 루프를 돌며 대기 while(lock==ture);
3.
잠금이 풀리면 무한루프를 나와서 작업 시작
4.
잠금을 건다 (lock=true;)
5.
작업을 마치면 잠금을 푼다 (lock=false;)

1.2 동시 진입 상황

1.
P1이 while(lock==true); 실행. 무한루프를 빠져나옴
→ 다음 문장을 실행하려는 순간 CPU 시간을 다 써서 준비상태로 옮겨진다
→ 문맥 교환이 발생하고 P2 가 실행상태로 바뀐다
2.
P2가 while(lock==true); 실행
→ P1이 잠금을 걸지 않았기 때문에 lock은 false. P2는 임계구역에 진입 가능
3.
P1은 lock=true; 문을 실행하여 임계구역에 잠금을 걸고 진입
4.
P2도 lock=true; 문을 실행하여 임계구역엥 잠금을 걸고 진입
→ P1, P2 둘 다 while 문을 빠져나오지 못하고 무한 루프에 빠져서 임계구역에진입 못함
→ 교착상태
위의 경우 프로세스가 늘어나면 검사해야 하는 lock의 개수도 늘어나 비효율적이다.

2. 한정 대기

어떤 프로세스도 무한 대기하지 않아야 한다
→ 특정 프로세스가 임계구역에 진입하지 못하면 안 된다.

2.2 무한 대기 상황

P1과 P2가 동시에 임계구역에 진입하지 않는다
무한 대기상황 발생 가능
1.
P1은 lock1=true; 문을 실행한 후 타임아웃 → 문맥 교환이 발생하고 P2가 실행상태로 바뀐다
2.
P2도 lock2=true; 문을 실행한 후 타임아웃 → 문맥 교환이 발생하고 P1이 실행상태로 바뀐다
3.
P2가 lock2=true; 문을 실행했기 때문에 P1은 while(lock2==true); 문에서 무한루프에 빠진다.
4.
P1이 lock1=true; 문을 실행했기 때문에 P1은 while(lock1==true); 문에서 무한루프에 빠진다.

3. 진행의 융통성

한 프로세스가 다른 프로세스의 진행을 방해하면 안된다
ex. B가 믹서를 쓰고 A가 쓰기로 했는데 A가 쓸 일이 없음에도 B 가 사용 후 마냥 A를 기다리면 안된다.

3.1 상호배제, 한정대기 조건을 충족하는 코드

lock에 1, 2 처럼 네이밍을 해서 사용중인 프로세스를 표시
→ 잠금을 확인하는 코드가 하나이므로 상호 배제와 한정 대기를 보장
→ 서로 번갈아가며 실행되는것이 문제
한 프로세스가 연달아 임계구역에 진입할 수 없다
→ 경직된 동기화