프로세스 동기화
스케줄링과 동기화는 프로세스와 스레드 모두에 적용된다. 본 포스팅에서는 이를 통칭하여 `프로세스`라 부르겠다
프로세스 동기화란 한정된 자원 속에서 동시다발적으로 실행되는 프로세스 안에서 실행 순서와 자원의 일관성을 보장하는 것을 말한다.
운영체제가 제공하는 동기화의 의미
- 실행 순서 제어 : 프로세스를 올바른 순서로 실행하기
- 상호 배제 : 동시에 접근해서는 안되는 자원에 하나만 접근하기
1. 실행 순서 제어
실행 순서 제어는 특정 조건에서 올바른 실행 순서를 보장하기 위한 동기화 과정이다. 예를 들어, 다음과 같은 두 프로세스가 있다고 하자.
1. Book.txt가 없으면 파일을 생성하고 내용을 작성한 뒤 저장하는 프로세스.
2. Book.txt를 읽는 프로세스.
이 경우, 1번 프로세스는 실행 순서에 상관없이 동작 가능하지만, 2번 프로세스는 `Book.txt`가 존재해야 실행될 수 있다. 따라서 2번은 반드시 1번 이후에 실행되어야 한다. 이러한 순서 보장을 '실행 순서를 위한 동기화'라고 한다.
2. 상호 배제
상호 배제는 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하도록 보장하는 동기화 기법이다. 예를 들어, 다음과 같은 두 프로세스가 있다고 가정하자.
1. 2만원을 입금하는 프로세스
2. 5만원을 입금하는 프로세스
이 두 프로세스는 잔액을 읽고, 금액을 더한 후 저장하는 동일한 과정을 거친다. 동기화가 이루어지지 않으면, 두 프로세스가 동시에 잔액을 읽고 수정해 최종 잔액이 예상과 다르게 계산될 수 있다.
예를 들어, 초기 잔액이 10만 원일 때 두 프로세스가 동시에 작업을 수행하면, 최종 잔액이 17만 원이 아닌 12만 원이나 15만 원이 될 수 있다. 이는 한 프로세스가 잔액을 수정하는 동안 다른 프로세스가 접근하지 못하도록 상호 배제를 적용해야 올바른 최종 잔액을 보장할 수 있다.
문제의 근본적인 원인
위 예제에서 원하는 결과가 나오지 않는 근본적인 원인은 다음 두 가지다.
- 동시에 접근해서는 안 되는 자원에 접근했기 때문
- 상호 배제를 위한 동기화가 이루어지지 않았기 때문
공유 자원과 임계구역
"동시에 접근해서는 안 되는 자원"을 이해하기 위해 다음 두 가지 개념을 알아야 한다.
- 공유 자원: 여러 프로세스가 공동으로 사용하는 자원 (예: 파일, 전역 변수, 입출력 장치)
- 임계 구역: 동시에 접근하면 문제가 발생할 수 있는 공유 자원에 접근하는 코드
다음 그림과 같이, 프로세스 A가 임계 구역에 진입하면 프로세스 B는 A가 임계 구역에서 나올 때까지 대기해야 한다. 이는 임계 구역의 상호 배제를 통해 자원의 일관성을 보장하기 위함이다.
레이스 컨디션(race condition)
다음으로 알아야 할 개념은 레이스 컨디션이다. 레이스 컨디션이란 임계 구역을 여러 프로세스가 동시에 실행해 자원의 일관성이 깨지는 현상을 말한다. 예를 들어, 상호 배제 예시에서 두 프로세스가 동시에 잔액을 확인하고 수정함으로써 최종 잔액이 잘못 계산되는 상황이 이에 해당한다.
정리
근본적인 원인
문제의 핵심은 공유 자원에 대한 동시 접근과 상호 배제를 위한 동기화 미흡에 있다.
이를 해결하기 위해 적절한 동기화 기법으로 실행 순서와 자원의 일관성을 보장해야 한다.
동기화의 두 가지 예제
- 실행 순서 제어
- 문제: Book.txt를 읽는 프로세스(2번)가 파일이 생성되기 전(1번)에 실행되면 오류 발생
- 해결: 1번 프로세스 실행 후 2번이 실행되도록 순서를 동기화
- 상호 배제
- 문제: 잔액을 수정하는 두 프로세스가 동시에 실행되면 최종 잔액이 잘못 계산됨
- 해결: 한 프로세스가 잔액 수정 작업을 완료하기 전까지 다른 프로세스의 접근을 차단
문제의 근본적인 원인은 공유 자원에 여러 프로세스가 동시에 접근함으로써 자원의 일관성이 깨지는 데 있다. 이를 해결하기 위해서는 실행 순서를 제어하여 프로세스 간의 순서를 보장하고, 상호 배제를 통해 임계 구역에 하나의 프로세스만 접근하도록 해야 한다. 이러한 동기화 기법을 통해 실행 결과의 정확성과 자원의 안정성을 확보할 수 있다.
참고
https://fastcampus.co.kr/dev_online_newcomputer
초격차 패키지 : 현실 세상의 컴퓨터공학 지식 with 30가지 실무 시나리오 | 패스트캠퍼스
국내유일, 77시간 분량의 개발자를 위한 한 번에 끝내는 컴퓨터공학 (CS 지식) 강의를 확인하세요. 자료구조,알고리즘부터 디자인패턴, 클린코드까지 ! CS지식의 이론~실습뿐 아니라, 실제 실무에
fastcampus.co.kr
'Knowledge > 컴퓨터구조&운영체제' 카테고리의 다른 글
[운영체제] 동기화와 교착상태 - 3. 조건 변수와 모니터(동기화 기법) (0) | 2025.01.07 |
---|---|
[운영체제] 동기화와 교착상태 - 2. 뮤텍트와 세마포어(동기화 기법) (0) | 2025.01.06 |
[운영체제] CPU 스케줄링 - (2) CPU 스케줄링 알고리즘 (3) | 2024.12.30 |
[운영체제] CPU 스케줄링 - (1) 프로세스 우선순위와 스케줄링 큐 (2) | 2024.12.27 |
[운영체제] 프로세스 간 통신(IPC) (1) | 2024.12.11 |