-
[Operating System] 프로세스 동기화 : 동기화란Operating System 2024. 5. 19. 22:15
프로세스 동기화에 대해 정리하였습니다.참조 : 인프런 '개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제'
< 동기화의 의미 >
동시다발적으로 실행되는 프로세스들은 서로 협력하며 영향을 주고 받게 되는데, 이 과정에서 자원의 일관성을 보장해야합니다.
동기화란 크게 두 가지를 의미합니다.
- 실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기
- 상호 배제 : 동시에 접근해서는 안 되는 자원 즉, 공유가 불가능한 자원에 하나의 프로세스만 접근하게 하기실행의 문맥을 갖는 모든 대상은 동기화 대상이기에 스레드도 동기화 대상입니다.
[ 실행 순서 제어를 위한 동기화 예시: Reader Writer Problem ]
Writer : Book.txt 파일에 값을 저장하는 프로세스
Reader : Book.txt 파일에 저장된 값을 읽어들이는 프로세스
Reader 프로세스는 'Book.txt 안에 값이 존재한다'는 특정 조건이 만족되어야지만 실행이 가능하므로 Writer 실행이 먼저 선행되어야 합니다.
[ 상호 배제를 위한 동기화 예시 1: Bank Account Problem ]
현재 계좌 잔액 : 10만원
프로세스 A는 현재 잔액에 2만 원을 추가하는 프로세스
프로세스 B는 현재 잔액에 5만 원을 추가하는 프로세스
: 프로세스 A가 끝나기 전에 B가 동시에 계좌에 접근한다면 계좌 잔액은 17만원이 아닌 15만원이 된다는 문제가 발생합니다.
[ 상호 배제를 위한 동기화 예시 2: Producer & Consumer Problem ]
Producer (프로세스 혹은 스레드) : 물건을 계속해서 생산하는 생산자
Consumer (프로세스 혹은 스레드) : 물건을 계속해서 소비하는 소비자
: Prodcer와 Consumer는 '총합'이라는 변수를 공유한다고 가정하겠습니다.
Q. 이 상태에서 생산자를 100,000번, 소비자를 100,000번 실행한다면 '총합'은?
결과 1 결과 2 : 동시에 접근해서는 안되는 자원(총합)에 동시에 접근했기 때문에, 때로는 0과 다른 값이 되거나, 오류가 발생합니다.
< 공유 자원과 임계 구역 >
공유 자원이란 여러 프로세스 혹은 스레드가 공유하는 자원을 말합니다.
(전역 변수, 파일, 입출력장치, 보조기억장치 등)
임계 구역이란 동시에 실행하면 문제가 발생하는 자원( = 공유 자원)에 접근하는 코드 영역을 말합니다.
(앞선 예시의 '총합' 변수, '잔액' 변수 등): 임계 구역에 진입하고자 하면 진입한 프로세스 이외에는 대기해야 합니다. 임계 구역에 동시에 접근하면 자원의 일관성이 깨질 수 있습니다. 이를 레이스 컨디션 (race condition)이라고 합니다.
[ Race Condition 발생 이유 상세 ]
: 고급언어로 작성된 어떤 한 줄짜리 코드라도 컴퓨터 내부에서 저금언어로 변환이 되면 그건 한 줄이 아닐 수가 있고,
그 여러 줄의 저급언어가 실행되는 과정에서 문맥교환이 발생하면 자원의 일관성이 깨질 수가 있기 때문에 Race Condition일 발생할 수 있습니다.
01Race Condition 발생 예시
< 임계 구역 문제 해결(상호배제) 세 가지 원칙 >
1. 상호 배제 (mutual exclusion)
: 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 들어올 수 없다.
2. 진행 (progress)
: 임계 구역에 어떤 프로세스도 진입하지 않았다면 진입하고자 하는 프로세스는 들어갈 수 있어야 한다.
3. 유한 대기 (bounded waiting)
: 한 프로세스가 임계 구역에 진입하고 싶다면 언젠가는 임계 구역에 들어올 수 있어야 한다.
(임계 구역에 들어왹 위해 무한전 대기해서는 안 된다.)
'Operating System' 카테고리의 다른 글
[Operating System] 교착 상태 : 교착 상태란 (0) 2024.05.20 [Operating System] 프로세스 동기화 : 동기화 기법 (0) 2024.05.20 [Operating System] CPU 스케줄링 : 알고리즘 (0) 2024.05.19 [Operating System] CPU 스케줄링 : 개요 (0) 2024.05.19 [Operating System] 운영체제 : 스레드 (0) 2024.05.18