세마포어(Semaphore)

- 세마포어는 여러 프로세스나 스레드가 공유된 자원의 데이터 또는 임계 영역등에 동시에 접근하지 않도록 막아준다.
- 자원에 접근할 수 있는 프로세스의 수를 카운트하는 값(세마포어 값)을 가지고 있다.
- 세마포어는 소유권 개념이 없어서 다른 프로세스/스레드가 해제할 수 있다. 여러 자원에 대한 동시 접근을 허용할 수 있다.
- 유연한 리소스 관리가 가능하며 여러 자원의 동시 점근을 조율할 수 있다.
- 단점 : 교착상태(Deadlock)를 해결하기 어렵고, 프로그램 오류 시에 자원 누수 또는 불일치가 발생할 수 있다.
- 데드락(Deadlock) : 교착상태, 두 개 이상의 프로세스가 서로 자원을 기다리며 무한정 대기하는 상태.
예시로 이해하기
학교 도서관에 있는 5개의 컴퓨터를 생각해보자. 이 컴퓨터들은 동시에 최대 5명이 사용할 수 있다. 세마포어는 남은 컴퓨터 수를 알려주고, 누군가가 컴퓨터를 사용할 때마다 숫자를 줄이고 사용이 끝나면 숫자를 다시 늘려줘서 공유자원(컴퓨터)에 접근할 수 있는 사람 수를 알려주는 역할을 한다.
뮤텍스(Mutex)

- 뮤텍스는 한 번에 하나의 프로세스나 스레드만 자원에 접근하도록 보장하는 잠금 장치이다. 오직 하나의 프로세스만 자원을 사용할 수 있도록 해서 다른 프로세스는 그 자원이 해제될 때까지 기다려야 한다.
- 자원 소유권이 있는 프로세스만 잠금을 해제할 수 있어서 보다 엄격한 통제가 가능
- 단점 : 프로세스가 임계 구역에서 오래 머물면 다른 프로세스가 기다려야한다. → 기아현상 발생 할 수 있음.
예시로 이해하기
집에 하나뿐인 화장실이 있다고 생각해보자. 한 사람이 안에서 사용 중이면 다른 사람은 밖에서 기다려야 하는 상황과 같다.
세마포어와 뮤텍스의 차이점
- 동시성 : 세마포어는 여러 프로세스가 동시 접근을 제한적으로 허용하지만, 뮤텍스는 한 번에 하나의 프로세스만 자원을 사용할 수 있다.
- 소유권 : 뮤텍스는 자원을 잠근 프로세스만 잠금을 해제할 수 있지만, 세마포어는 다른 프로세스가 해제할 수 있다.
프로세스 간 통신(IPC) 방식
IPC(Inter-Process Communication)는 여러 프로세스가 데이터를 주고받으며 상호작용할 수 있도록 해주는 방법이다. 각각의 프로세스는 독립된 메모리 공간을 사용하기 때문에 데이터를 교환할 때 IPC 기법이 필요하다.
주요 IPC 방식
1. 파이프(Pipes)
한 프로세스가 데이터를 쓰고 다른 프로세스가 읽는 방식.
한 방향으로만 데이터 전송이 가능하다.
2.메시지 큐(Message Queue)
데이터를 큐에 넣고 다른 프로세스가 읽어가는 방식.
비동기적으로 데이터를 주고받을 수 있다.
3. 공유 메모리(Shared Memory)
여러 프로세스가 같은 메모리 영역을 공유하여 데이터를 빠르게 주고받을 수 있다.
속도는 빠르지만 동기화 도구(세마포어, 뮤텍스)가 필요하다.
4. 소켓(Sockets)
네트워크를 통해 다른 컴퓨터의 프로세스와 데이터를 주고받는 방식.
웹 브라우저와 웹 서버 간 데이터 교환이 소켓에 해당된다.