<쉽게 배우는 운영체제> 교재를 참고하였습니다.
공유 자원과 임계구역 : 여러 프로세스가 한정된 자원을 가지고 프로세스가 공동으로 작업할 때 발생할 수 있는 문제가 있음
공유 자원의 접근
공유 자원 (shared resource)
- 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말함
- 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있음
- 이 때문에 원치 않는 문제 발생하기도 함
경쟁 조건
- 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황
- 경쟁 조건이 발생하면 공유 자원 접근 순서에 따라 실행 결과가 달라질 수 있음
공유 자원의 접근 예
- [그림 5-10]은 두 프로세스가 공유 자원인 전역 변수를 이용해 작업을 하는 예시임.
- 프로세스 P1은 예금 10만원 확인 후 10만원 입금, 동시에 P2도 예금 10만원 확인 후 5만원 입금
- 프로세스 P2는 10만원에 5만원을 더해 15만원을 저장한 후 작업을 마침
- 예금은 원래 10만원에 P1이 입금한 10만원과 P2가 입금한 5만원을 합해서 25만원이 되어야함
- 그런데 5만원이 부족함. 정상적인 상황은 P1이 작업을 마친 후 P2가 예금 20만원을 확인 후 5만원을 입금해야 함
- 그러나, 두 프로세스가 예금 10만원을 동시에 읽은 후 다른 프로세스 작업을 무시하고 입금을 시도해(덮어쓰기) 총액이 정확하지 않음
- 이와 같이 2개 이상 프로세스가 공유자원을 병행적으로 읽거나 쓰는 상황을 "race condition:경쟁조건" 이 발생했다고 함(동시성 문제).
- 경쟁조건이 발생하면 [그림5-10]처럼 공유자원 접근 순서에 따라 실행 결과가 달라질 수 있음
임계 구역
임계 구역
- 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
- 임계구역에서는 프로세스들이 동시에 작업하면 안 됨
- 어떤 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역 밖에서 기다려야 하며 임계구역의 프로세스가 나와야 들어갈 수 있음
- 즉, 예금을 임계구역으로 지정하면 문제가 발생하지 않음. 프로세스 P1이 먼저 실행 되어 작업을 마친 후 프로세스 P2가 실행된다면 총액 25만원이 될 것임
생산자-소비자 문제
임계 구역
: critical section에 관련된 전통적인 문제로 생산자-소비자 문제(producer-consumer problem)이 있음
- 생산자-소비자 문제에서 생산자 프로세스와 소비자 프로세스는 서로 독립적으로 작업을 함
- 생산자는 말 그대로 계속 물건을 생산해서 버퍼에 넣고[input(buf)], 소비자는 계속해서 버퍼에서 물건을 가져옴[out(buf)]
- 작업을 계속하기 위해 원형 버퍼를 사용하며, 버퍼가 비어 있는지 가득 찼는지 확인하기 위해 전역변수 sum을 사용함
- sum에는 현재 버퍼에 있는 상품의 숫자가 저장됨
- [그림5-12]에서 생산자-소비자 문제의 코드와 상태를 보여줌
코드 및 실행 순서에 따른 결과
- 생산자는 수를 증가시켜가며 물건을 채우고 소비자는 생산자를 쫓아가며 물건을 소비
- 현재 버퍼는 1에서 3까지 차 있고 sum값은 3임
- 생산자 코드와 소비자 코드가 동시에 실행되면 문제가 발생
- 생산자와 소비자가 전역변수 sum에 접근하는 타이밍을 서로 맞추지 않았기 때문임
- 즉, sum이 바로 critical section이며 race condition이 발생하는 것임
- 생산자가 buf에 물건을 하나 추가함, 그러나 sum을 아직 안 바꾸었음, 현재 sum은 3
- 소비자가 buf에서 물건을 하나 소비함, sum을 2로 바꾸어야 하는데 아직 바꾸지 않음, 현재 sum은 3
- 이 상태에서 sum = sum + 1과 sum = sum – 1; 이 동시에 실행되면 문제가 발생함
- 생산자와 소비자가 독립적이기 때문에 상대방이 sum을 바꾸려는 것을 알지 못하고, 현재 상태인 sum=3을 읽고 작업을 함
- 만약 sum = sum + 1이 먼저 실행되면 4가 되고, sum = sum - 1을 하면 sum은 2가 됨, 왜냐하면 2번에서의 sum은(소비자 관점) 4가 아니라 3이기 때문임
- 만약 sum = sum - 1이 먼저 실행되면 2가 되고, sum = sum + 1이 실행되면 4가 됨, 1번에서의 sum은(생산자 관점) 3이기 때문이다.
- 이렇게 이 때의 실행 순서에 따라 값이 변하는 현상이 발생함
임계구역 해결 조건
상호 배제 (mutual exclusion)
- 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없는 것
한정 대기 (bounded waiting)
- 상호 배제 때문에 기다리게 되는 프로세스가 무한 대기하지 않아야 함. 즉, 특정 프로세스가 임계구역에 진입하지 못하면 안 됨
진행의 융통성 (process flexibility)
- 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다는 것
- 임계구역에 프로세스가 없다면 어떠한 프로세스라도 들어가서 자원을 활용할 수 있음
- 즉, 두 프로세스가 자원을 번갈아 쓴다고 가정할 때 한 쪽에서 자원을 안 쓰고 있다면, 다른 한 쪽 프로세스가 자원을 쓰고 싶어도 자신의 순서가 아니라고 기다리는 것은 효율적이지 못함
'전공 > 운영체제' 카테고리의 다른 글
[심화]Ch05. 프로세스 동기화_04)파일, 파이프, 소켓 프로그래밍 (0) | 2023.04.19 |
---|---|
Ch05. 프로세스 동기화_03)임계구역 해결 방법 (1) | 2023.04.19 |
Ch05. 프로세스 동기화_01) 프로세스 간 통신 (0) | 2023.04.18 |
[심화]Ch04. CPU 스케줄링 _05)인터럽트 처리 (0) | 2023.04.04 |
Ch04. CPU 스케줄링 _04) 스케줄링 알고리즘 (0) | 2023.04.04 |
댓글