2025. 2. 26. 12:25ㆍ정보기술/운영체제 (OS)
📌 마무리: 락(Lock)과 동기화 정리
멀티스레딩 환경에서는 여러 개의 스레드가 동시에 실행되면서 공유 자원(Shared Resource) 에 접근하게 됩니다.
이 과정에서 데이터 무결성(Data Integrity) 을 보장하고, 경쟁 상태(Race Condition) 를 방지하기 위해 락(Lock) 을 사용하여 동기화를 수행합니다.
이번 학습에서는 뮤텍스(Mutex), 재진입 가능 락(RLock), 읽기-쓰기 락(RWLock), 스핀락(Spinlock), 세마포어(Semaphore) 등을 다루며,
각 기법이 어떤 상황에서 적절한지, 어떤 문제점을 가질 수 있는지, 어떻게 해결해야 하는지 를 배우고 실습하였습니다.
✔ 락을 활용하여 동기화를 이해하기
🔹 락(Lock)이 필요한 이유
멀티스레드 프로그래밍에서 여러 스레드가 동시에 같은 자원에 접근할 경우, 다음과 같은 문제가 발생할 수 있습니다.
- 경쟁 상태(Race Condition) → 여러 스레드가 동시에 데이터를 수정하여 예측할 수 없는 결과 발생.
- 데이터 무결성(Data Integrity) 문제 → 공유 데이터가 잘못된 값으로 변경될 위험.
- 임계 영역(Critical Section) 보호 필요 → 특정 코드 블록에서 한 번에 하나의 스레드만 실행되도록 보장해야 함.
이를 해결하기 위해 락(Lock) 기반의 동기화 기법이 필요하며, 다음과 같은 다양한 락을 활용할 수 있습니다.
✔ OS 내부에서 락을 어떻게 관리하는지 배우기
운영체제(OS)에서는 다양한 락을 사용하여 프로세스 및 스레드 간 동기화 를 관리합니다.
각 락이 운영체제에서 어떻게 동작하는지 살펴보겠습니다.
🔹 1. 기본적인 동기화 기법
동기화 기법 | 개념 | OS에서의 역할 |
뮤텍스 (Mutex) | 하나의 스레드만 임계 영역에 접근 가능 | 프로세스 및 스레드 간 동기화 |
재진입 가능 락 (RLock) | 같은 스레드가 여러 번 락을 획득 가능 | 재귀 호출 또는 동일 객체 내 락 사용 |
읽기-쓰기 락 (RWLock) | 여러 개의 스레드가 동시에 읽기 가능, 쓰기는 단일 스레드만 가능 | 데이터베이스, 파일 시스템 동기화 |
🔹 2. 고급 동기화 기법
동기화 기법 | 개념 | OS에서의 역할 |
스핀락 (Spinlock) | 락이 해제될 때까지 CPU를 사용하며 바쁜 대기(Busy-Waiting) | 운영체제 커널 락, 짧은 시간의 락 사용 |
세마포어 (Semaphore) | N개의 스레드가 동시에 접근 가능 | 네트워크 연결 동기화, 리소스 제한 |
커널 락 (Kernel Lock) | OS에서 사용하는 락 (Linux: Spinlock, Windows: SRWLock) | 프로세스 간 동기화, OS 자원 보호 |
✔ 성능 최적화와 문제 해결 방법 익히기
락을 잘못 사용하면 데드락(Deadlock), 우선순위 역전(Priority Inversion), 병목 현상(Bottleneck) 등의 문제가 발생할 수 있습니다.
이를 해결하기 위한 방법을 정리하면 다음과 같습니다.
🔹 1. 데드락(Deadlock) 문제 해결
해결 방법 | 설명 |
락 획득 순서 지정 | 모든 스레드가 Lock을 획득할 때 항상 같은 순서로 락을 요청 |
타임아웃 설정 | Lock이 일정 시간 동안 해제되지 않으면 강제로 해제 |
은행가 알고리즘(Banker's Algorithm) | Lock 요청을 미리 분석하여 데드락 가능성이 있으면 거부 |
자원 할당 그래프(Resource Allocation Graph) | 데드락 탐지 알고리즘을 사용하여 데드락 발생 여부 확인 후 해결 |
🔹 2. 우선순위 역전(Priority Inversion) 문제 해결
해결 방법 | 설명 |
우선순위 상속 (Priority Inheritance) | 낮은 우선순위 스레드가 Lock을 보유한 경우, 우선순위를 일시적으로 높여 빠르게 Lock을 해제하도록 함 |
우선순위 봉쇄 (Priority Ceiling) | 특정 자원을 접근하는 스레드가 무조건 높은 우선순위를 가지도록 설정 |
🔹 3. 성능 최적화를 위한 락 선택 가이드
락 사용 목적 | 추천 동기화 기법 |
단순한 공유 자원 보호 | Mutex |
같은 스레드가 여러 번 Lock을 획득해야 함 | RLock |
읽기 작업이 많고, 쓰기 작업이 적은 경우 | RWLock |
빠르게 Lock을 획득/해제해야 함 | Spinlock |
일정 개수의 스레드만 접근 가능하도록 제한해야 함 | Semaphore |
🎯 최종 정리
배운 개념 | 설명 |
락(Lock)의 필요성 | 동시 실행되는 스레드 간 데이터 무결성 보호 |
뮤텍스, RLock, RWLock | 기본적인 동기화 기법, 읽기-쓰기 분리 가능 |
스핀락, 세마포어 | 고급 동기화 기법, 커널 락 & 동시 접근 제한 가능 |
데드락 문제 해결 | 락 획득 순서 지정, 타임아웃 설정, 은행가 알고리즘 사용 |
우선순위 역전 문제 해결 | 우선순위 상속(Priority Inheritance) 기법 활용 |
📌 결론
이제 락을 활용하여 멀티스레딩 환경에서 안정적인 동기화를 구현하고, 운영체제 내부에서 락이 어떻게 관리되는지 이해하며, 데드락과 우선순위 역전 같은 문제 해결 방법을 활용하여 최적의 성능을 유지하는 동기화 기법을 설계할 수 있습니다! 🚀
'정보기술 > 운영체제 (OS)' 카테고리의 다른 글
시스템 콜 (System Call) - 요약 (0) | 2025.03.05 |
---|---|
운영체제 락 개념과 동기화 기법 (4. OS 내부 락과 문제 해결) (0) | 2025.02.26 |
운영체제 락 개념과 동기화 기법 (Mutex, RLock, RWLock, 스핀락, 세마포어 비교 요약 정리) (0) | 2025.02.26 |
운영체제 락 개념과 동기화 기법 (3. 고급 락(Spinlock & Semaphore) / 스핀락(Spinlock)과 세마포어(Semaphore)) (0) | 2025.02.26 |
운영체제 락 개념과 동기화 기법 (2. 기본 락(Lock) / 2-3. 읽기-쓰기 락(Read-Write Lock, RWLock)) (0) | 2025.02.26 |