01. 뮤텍스 락(Mutex lock; MUTual Exclusion lock)
- 동시 접근해서는 안되는 자원에 동시에 접근하지 않도록 만드는 도구
- 상호 배제를 위한 동기화 도구
- 뮤텍스 락을 통해 현재 자신이 임계 구역에 있음을 알릴 수 있음
- 다른 프로세스가 뮤텍스 락을 통해 임계 구역이 잠겨있다면 기다림
- 임계 구역이 잠겨있지 않으면 진입이 가능함
- 구성
- 자물쇠 역할: 프로세스들이 공유하는 전역변수 lock
- 임계 구역을 잠그는 역할: acquire 함수
- 임계 구역의 잠금을 해제하는 역할: release 함수
- acquire 함수
- 프로세스가 임계 구역에 진입하기 전에 호출하는 함수
- 임계 구역이 열릴(lock이 false가 될 때 까지)때까지 반복적으로 임계 구역을 확인
- 임계 구역이 열려있다면 구역을 잠그는 역할을 함(lock을 true로)
- release 함수
- 임계 구역에서의 작업이 끝나고 호출하는 함수
- 현재 잠긴 임계 구역을 열어주는 역할(lock을 false로)
- 바쁜 대기 (busy wait): 쉴 새 없이 잠금의 유무를 확인하는 것
acquire(); //lock 걸려있는 지 확인, lock=false라면 true로 만들고 들어감
// 임계 구역 //임계 구역에서의 작업 진행
release(); //lock을 false로 반환
02. 세마포(semaphore)
- 뮤텍스와 유사, 좀 더 일반화된 방식의 동기화 도구
- 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구
- 종류: 이진 세마포(binary semaphore), 카운팅 세마포(counting semaphore)
- 구성
- 임계 구역에 진입할 수 있는 프로세스의 개수(사용가능한 공유 자원의 개수)를 나타내는 전역 변수 S
- 임계 구역에 들어가도 좋은지, 기다려야 하는지 알려주는 wait 함수
- 임계 구역 앞에서 기다리는 프로세스에 허락 신호를 주는 signal 함수
- wait 함수
- 만일 임계 구역에 진입할 수 있는 프로세스 개수가 0 이하
- 사용할 수 있는 자원이 있는지 반복적으로 확인
- 임계 구역에 진입할 수 있는 프로세스 개수가 하나 이상이면 S를 1감소시키고 임계 구역 진입
- signal 함수
- 임계 구역에서의 작업을 마친 후 S를 1 증가
- 문제: 사용할 수 있는 공유자원이 없는 경우, 프로세스는 무작정 무한히 반복하여 확인해야 함(busy wait)
- CPU 주기를 낭비
- 해결 방안: wait 함수가 만일 사용 가능한 자원이 없을 경우, 해당 프로세스 상태를 대기로 상태로 만들고, 그 프로세스의 PCB를 세마포를 위한 대기 큐에 넣음, 다른 프로세스가 임계 구역에서의 작업이 끝나고 signal 함수를 호출하면 sginal 함수는 대기 중인 프로세스를 대기 큐에서 제거, 프로세스 상태를 준비 상태로 변경한 뒤 준비 큐로 옮겨줌
wait();
// 임계 구역
signal();
03. 모니터(monitor)
- 임계 영역의 전처리/후처리로 wait과 signal을 명시하는 번거로움을 해결
- 공유 자원과 공유 자원에 접근하기 위한 인터페이스(통로)를 묶어 관리
- 모니터를 통해 공유 자원에 접근하고자 하는 프로세스들을 큐에 삽입
- 큐에 삽입된 순서대로 하나씩 고유 자원을 이용하도록 함
- 모니터 -> 공유 자원을 다루는 인터페이스에 접근하기 위한 큐(모니터에 진입하기 위한 큐)를 만들고, 모니터 안에 항상 하나의 프로세스만 들어도록 하여 상호 배제를 위한 동기화를 제공
- 조건 변수 (condition variable): 특정 조건을 바탕으로 프로세스를 실행하고 일시 중단하기 위해 사용
- wait와 signal 연산을 수행할 수 있음
- wait: 호출한 프로세스의 상태를 대기 상태로 전환하고 일시적으로 조건 변수에 대한 대기 큐에 삽입하는 연산
'CS 상식 - 운영체제' 카테고리의 다른 글
[CS 상식 - 운영체제] 교착 상태 해결 방법 (1) | 2025.02.19 |
---|---|
[CS 상식 - 운영체제] 교착 상태 (0) | 2025.02.19 |
[CS 상식 - 운영체제] 동기화 (1) | 2025.02.19 |
[CS 상식 - 운영체제] CPU 스케줄링 알고리즘 (1) | 2025.02.14 |
[CS 상식 - 네트워크] CPU 스케줄링 (0) | 2025.02.14 |