2025. 2. 8. 13:44ㆍ정보기술/운영체제 (OS)
5️⃣ IPC 사용 시 발생하는 문제와 해결법 (동기화, 경쟁 상태)
IPC(Inter-Process Communication)는 프로세스 간 데이터 공유를 가능하게 하지만, 여러 프로세스가 동시에 같은 데이터에 접근하면 문제가 발생할 수 있습니다.
이러한 문제를 해결하기 위해 동기화(Synchronization) 기법이 필요하며, 대표적인 해결책으로 세마포어(Semaphore)와 뮤텍스(Mutex) 가 사용됩니다.
이번 장에서는 동기화가 필요한 이유, 경쟁 상태(Race Condition)의 개념, 그리고 이를 해결하는 세마포어와 뮤텍스의 동작 방식을 살펴보겠습니다.
📌 1️⃣ 동기화(Synchronization): 데이터 충돌 방지
동기화(Synchronization)란 여러 프로세스가 동시에 공유 데이터에 접근할 때, 데이터의 일관성을 유지하도록 하는 방법입니다.
즉, 데이터가 올바르게 처리될 수 있도록 프로세스 간 실행 순서를 조정하는 것이 동기화의 핵심입니다.
🔹 동기화가 필요한 이유
- 여러 프로세스가 공유 자원(Shared Resource) 에 동시에 접근하면 데이터가 엉키거나 손상될 위험이 있음.
- 프로세스가 특정 자원을 사용 중일 때 다른 프로세스가 동일한 자원에 접근하지 못하도록 조정해야 함.
📌 비유: 도서관 예약 시스템
➡️ 한 도서관에 단 한 권의 인기 책이 있다고 가정해봅시다.
➡️ 여러 사람이 동시에 같은 책을 예약할 경우, 시스템이 동기화되지 않으면 중복 예약이 발생할 수 있음.
➡️ 따라서, 한 명이 예약을 완료할 때까지 다른 사용자는 대기 상태가 되어야 함.
➡️ 이처럼 공유 자원을 보호하기 위해 동기화 기법이 필요함.
✅ 해결 방법
- 특정 프로세스가 공유 데이터를 사용하는 동안, 다른 프로세스가 접근하지 못하도록 잠금(Locking) 기법을 사용.
- 대표적인 동기화 도구: 세마포어(Semaphore), 뮤텍스(Mutex).
📌 2️⃣ 경쟁 상태(Race Condition): 데이터 충돌 문제
경쟁 상태(Race Condition)는 여러 프로세스가 동시에 공유 자원에 접근하여 데이터의 일관성이 깨지는 문제를 의미합니다.
이 문제는 프로세스의 실행 순서가 달라짐에 따라 예상치 못한 결과가 발생할 때 나타납니다.
🔹 경쟁 상태가 발생하는 과정
- 프로세스 A와 프로세스 B가 동시에 같은 데이터(공유 변수)를 읽음.
- 두 프로세스가 각각 데이터를 수정한 후 저장.
- 수정된 값이 덮어씌워지면서 이전 프로세스의 변경 내용이 사라짐.
📌 비유: 항공사 좌석 예약 시스템
➡️ 두 명의 고객이 마지막 남은 좌석을 예약하려고 동시에 접속.
➡️ 시스템이 동시에 두 개의 예약 요청을 처리하면 같은 좌석이 두 번 예약될 가능성이 있음.
➡️ 이 문제를 해결하기 위해 하나의 예약이 끝날 때까지 다른 사용자의 접근을 차단하는 동기화 기법이 필요함.
✅ 해결 방법
- 임계 영역(Critical Section) 보호: 공유 데이터를 접근하는 코드 블록을 보호.
- 동기화 메커니즘 적용: 세마포어나 뮤텍스를 사용하여 한 번에 하나의 프로세스만 공유 데이터를 변경할 수 있도록 함.
📌 3️⃣ 세마포어(Semaphore)와 뮤텍스(Mutex) 개념 소개
세마포어(Semaphore)와 뮤텍스(Mutex) 는 모두 동시에 여러 프로세스가 공유 자원에 접근하지 못하도록 제어하는 동기화 기법입니다.
1️⃣ 뮤텍스(Mutex)
- 하나의 프로세스만 공유 자원에 접근할 수 있도록 하는 "이진 잠금(Binary Locking)" 기법.
- 한 프로세스가 뮤텍스를 획득(Acquire) 하면, 다른 프로세스는 해당 뮤텍스가 해제될 때까지 대기해야 함.
- 단일 프로세스 전용 잠금 시스템.
📌 비유: 화장실 키 시스템
➡️ 공중 화장실에서 한 사람이 사용 중이면, 다른 사람은 문이 열릴 때까지 기다려야 함.
➡️ 키를 가지고 있는 사람만 화장실을 사용할 수 있으며, 사용이 끝나면 키를 반환하여 다른 사람이 사용할 수 있도록 해야 함.
➡️ 한 번에 한 프로세스만 자원을 사용할 수 있도록 보장하는 것이 뮤텍스의 개념.
✅ 뮤텍스 예제 코드 (C)
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t lock; // 뮤텍스 선언
void* process(void* arg) {
pthread_mutex_lock(&lock); // 뮤텍스 잠금
printf("Process %d is using the resource\n", *(int*)arg);
sleep(1);
pthread_mutex_unlock(&lock); // 뮤텍스 해제
return NULL;
}
int main() {
pthread_t t1, t2;
int id1 = 1, id2 = 2;
pthread_mutex_init(&lock, NULL);
pthread_create(&t1, NULL, process, &id1);
pthread_create(&t2, NULL, process, &id2);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_mutex_destroy(&lock);
return 0;
}
2️⃣ 세마포어(Semaphore)
- 뮤텍스와 달리 여러 개의 프로세스가 동시에 공유 자원에 접근할 수 있도록 제어하는 동기화 기법.
- 카운터 값을 기반으로 동작하며, N개 이상의 프로세스가 접근할 수 있도록 조정 가능.
- 다중 리소스 관리에 적합.
📌 비유: 주차장 시스템
➡️ 주차장에 10개의 주차 공간이 있다고 가정.
➡️ 10대의 차는 동시에 주차할 수 있지만, 11번째 차는 공간이 날 때까지 기다려야 함.
➡️ 여러 프로세스가 일정 개수의 자원만 사용할 수 있도록 제어하는 것이 세마포어의 개념.
✅ 세마포어 예제 코드 (C)
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
sem_t semaphore; // 세마포어 선언
void* process(void* arg) {
sem_wait(&semaphore); // 세마포어 감소 (자원 획득)
printf("Process %d is using the resource\n", *(int*)arg);
sleep(1);
sem_post(&semaphore); // 세마포어 증가 (자원 반환)
return NULL;
}
int main() {
pthread_t t1, t2, t3;
int id1 = 1, id2 = 2, id3 = 3;
sem_init(&semaphore, 0, 2); // 동시에 2개 프로세스 접근 가능
pthread_create(&t1, NULL, process, &id1);
pthread_create(&t2, NULL, process, &id2);
pthread_create(&t3, NULL, process, &id3);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_join(t3, NULL);
sem_destroy(&semaphore);
return 0;
}
📌 정리
✔️ 동기화(Synchronization) 는 여러 프로세스가 동시에 공유 데이터를 수정할 때 충돌을 방지하는 기법.
✔️ 경쟁 상태(Race Condition) 는 여러 프로세스가 동시에 같은 데이터를 변경할 때 발생하는 문제.
✔️ 뮤텍스(Mutex) 는 한 번에 하나의 프로세스만 공유 자원에 접근하도록 제한하는 방법.
✔️ 세마포어(Semaphore) 는 동시에 N개의 프로세스가 공유 자원에 접근 가능하도록 제한하는 방법.
'정보기술 > 운영체제 (OS)' 카테고리의 다른 글
시스템 콜 (System Call) - 1. 운영체제와 시스템 콜이란? (0) | 2025.02.08 |
---|---|
IPC (Inter-Process Communication, 프로세스 간 통신) - 6. IPC 사용 시 발생하는 문제와 해결법 (0) | 2025.02.08 |
IPC (Inter-Process Communication, 프로세스 간 통신) - 4. 프로세스 간 데이터를 주고받는 방법 (0) | 2025.02.08 |
IPC (Inter-Process Communication, 프로세스 간 통신) - 3. 프로세스 간 데이터를 공유하는 방법 (0) | 2025.02.08 |
IPC (Inter-Process Communication, 프로세스 간 통신) - 2. IPC의 기본 개념과 종류 (0) | 2025.02.08 |