멀티스레딩은 CPU 자원을 효율적으로 활용하고 작업 성능을 높이는 데 유용한 기술이다. 하지만 여러 스레드가 동시에 자원에 접근할 수 있는 환경에서는 데이터 충돌, 교착 상태(Deadlock) 등 여러 문제가 발생할 수 있습니다.
교착 상태의 조건과 이를 예방하기 위한 전략들을 정리해보자.
멀티스레딩
멀티스레딩은 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다. 예를 들어 웹 요청을 처리할 때 새 프로세스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비하며, 한 스레드가 중단되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능하다.
멀티스레딩 환경에서 발생할 수 있는 문제
1. 동기화 문제
- 여러 스레드가 동시에 하나의 공유 자원(임계영역)에 접근할 때, 미리 접근한 스레드에 의해 데이터의 정보가 바뀌면서 생길 수 있는 문제
- 임계영역이란? 멀티스레딩 환경에서 여러 스레드가 동시에 접근하면 문제가 발생할 수 있는 공유 자원에 접근하는 영역을 말한다.
- 임계 영역은 한 번에 하나의 스레드만 진입할 수 있도록 해야 한다.
- Lock, synchronized, Atomic 변수 등을 활용해 자원 접근을 순차화해야 한다.
2. 교착 상태 (Deadlock)
- 두 개 이상의 스레드가 서로가 가진 자원을 기다리며 영원히 대기하는 상태이다.
- 교착 상태 발생 조건 (4가지 모두 충족 시 발생)
- 상호 배제 (Mutual Exclusion) - 자원은 한 번에 하나의 프로세스만 사용 가능
- 점유 대기 (Hold and Wait) - 자원을 가진 상태로 다른 자원을 기다림
- 비선점 (No Preemption) - 자원을 강제로 회수할 수 없음
- 순환 대기 (Circular Wait) - 자원을 기다리는 관계가 원형으로 형성
- 교착 상태의 해결방법
- 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계한다 - 같은 순서로 항상 요청하도록
- 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스당 요청할 자원들의 최대치를 통해 자원 할당 가능 여부를 파악하는 '은행원 알고리즘'을 쓴다.
- 일정 시간 내 락을 획득하지 못하면 잠금 포기 후 재시도한다.
- 운영체제가 주기적으로 자원 그래프를 분석해 Deadlock을 감지하고, 프로세스 강제 종료 등으로 복구한다.
'OS' 카테고리의 다른 글
[운영체제] 운영체제의 역할과 구조 (0) | 2025.06.15 |
---|---|
[운영체제] 선점형 스케줄링 vs 비선점형 스케줄링 (1) | 2025.06.08 |