CS/운영체제
[OS] 프로세스 동기화
yoon_seon
2023. 9. 9. 17:08
실행에 문맥을 갖고있는 모든 것들은 동기화 대상이다.
동시다발적으로 실행되는 프로세스(& 스레드)는 실행 순서와 자원의 일관성을 고려해야한다.
운영체제가 제공하는 동기화의 의미
1. 실행 순서 제어 : 프로세스를 올바른 순서로 실행하기
2. 상호 배제 : 자원의 일관성을 위해서 동시에 접근해서는 안되는 자원에 하나만 접근하기
운영체제에서 이야기하는 동기화 라는 것은 동시다발적으로 실행되는 프로세스와 스레드가 고려해야하는 것 중 하나인데 크게 실행 순서제어, 상호 배제로 나눌 수 있다. 실행 순서 제어는 프로세스 혹은 스레드를 올바른 순서대로 실행하는 것을 의미하고 상호 배제는 동시에 접근하면 안되는 자원에 하나만 접근하는 것을 의미한다.
실행 순서 제어를 위한 동기화의 예
다음과 같이 동시에 실행되는 프로세스가 두개 있다.
- Book.txt가 없다면 파일을 만들고 값을 쓰고 저장하는 프로세스
- Book.txt를 읽어 들이는 프로세스
파일이 있어야 읽을 수 있기 때문에 1 → 2 순으로 실행해야만 올바르게 실행된다.
상호 배제를 위한 동기화의 예
- 2만원 입금 프로세스
- 잔액을 읽어들인다.
- 잔액에 2만원을 더한다.
- 더한 값을 잔액에 저장한다.
- 5만원 입금 프로세스
- 잔액을 읽어들인다.
- 잔액에 5만원을 더한다.
- 더한 값을 잔액에 저장한다.
컨텍스트 스위칭이 일어나면서 저장한 잔액이 아닌 기본 잔액을 읽어 들어 최종잔액에 오류가 생길 수 있다.
이 문제를 해결하기 위해서는 잔액에 접근하기 전 이전 프로세스의 잔액 수정 작업이 끝나기를 기다린 후 작업을 해야 오류를 방지할 수 있다.
문제의 근본적인 발생 원인은 동시에 접근해서는 안되는 자원에 접근하였고, 상호배제를 위한 동기화가 이루어지지 않았기 때문이다.
⭐ 공유 자원과 임계 구역
- 공유 자원 : 공동의 자원(파일, 전역변수, 입출력장치)
- 임계 구역 : 동시에 접근하면 문제가 발생할 수 있는 공유자원에 접근하는 코드
- 레이스 컨디션 : 임계구역을 동시에 실행하여 자원의 일관성이 깨지는 현상
정리
- 운영체제에서 이야기하는 동기화 라는 것은 동시다발적으로 실행되는 프로세스와 스레드가 고려해야하는 것 중 하나인데 크게 실행 순서제어, 상호 배제로 나눌 수 있다. 실행 순서 제어는 프로세스 혹은 스레드를 올바른 순서대로 실행하는 것을 의미하고 상호 배제는 동시에 접근하면 안되는 자원에 하나만 접근하는 것을 의미한다.
- 공유자원은 공동의 자원을 의미한다.
- 임계 구역은 동시에 접근하면 문제가 발생할 수 있는 공유자원에 접근하는 코드를 의미한다.
- 레이스 컨디션은 임계구역을 동시에 실행하여 자원의 일관성이 깨지는 현상을 의미한다.