일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- MSA
- C
- Algorithm
- 파이썬
- 디자인 패턴
- mongoDB
- Java
- Spring
- JPA
- 컴퓨터구조
- 알고리즘
- design pattern
- Galera Cluster
- 운영체제
- OS
- MySQL
- 백준
- Heap
- Kafka
- spring webflux
- 네트워크
- IT
- redis
- JavaScript
- c언어
- react
- 자료구조
- Proxy
- 자바
- Data Structure
Archives
- Today
- Total
시냅스
뮤텍스 락, 세마포어, 모니터, 라이브니스, Mutex Locks, Semaphores, monitors, Liveness 본문
뮤텍스 락 Mutex Locks
- 고급 언어에서 개발한 도구
- 동기화를 위한 가장 간단한 도구
- 2개만 가능하다.
- acquire()을 통해 ciritical section에 진입 허가를 받는다. (원자적 연산)
- release()를 통해 허가를 반납한다. (원자적 연산)
- busy waiting -> 무한 루프를 돌면서 프로세스는 낭비된다.
- spin lock (= busy waiting)
- core가 여러개 일 때는 busy waiting(= spin lock)은 유용할 수 있다.
- core 위에서 돌아가고 있어 context switch를 줄여준다.
- spin lock (= busy waiting)
세마포어 Semaphores
- 정수 variable
- binary semaphore -> mutex lock 과 비슷하다.
- counting semaphore -> 제한 없는 영역
- wait -> p(), signal -> v() (원자적 연산)
- 리소스가 available 한 개수로 초기화 한다.
- 세마포어는 원자적으로 제어되는 정수 변수로, 0보다 크면 접근함과 동시에 세마포어의 값을 1 감소시킨다.
- 반대로 종료하고 나갈 때에는 세마포어의 값을 1 증가시켜 다른 프로세스가 접근할 수 있도록 한다.
- count 가 0이면 모든 리소스가 사용 중으로 대기한다.
- wait() -> waiting queue
- signal() -> ready queue
모니터 monitors
- 고급 언어로 개발되어 에러 빈도가 줄어든다.
- Abstract data type, ADT (mutual exclusion 을 제공하는 data type)
- JAVA의 Synchronized 같은 거...
- 부가적인 동기화 기법을 위해 conditional variable를 이용한다. -> 오직 wait signal만 호출될 수 있다.
라이브니스 Liveness
- mutex lock + progress + bounded waiting 모두 가능
- 우선순위 역전 (priority inversion) 문제를 갖고 있다.
- 우선순위가 높은 task가 준비 상태로 바뀌었지만 더 낮은 task가 CPU를 점유하고 있어 실행되지 못하는 현상.
- 우선순위 상속 프로토콜(priority-inheritance protocol)을 구현으로 해결한다.
'운영체제' 카테고리의 다른 글
주메모리의 관리 Main Memory (0) | 2022.05.20 |
---|---|
교착상태, Deadlock (0) | 2022.05.15 |
프로세스 동기화 Process Synchronization (0) | 2022.04.28 |
실시간 CPU 스케줄링 Real-Time CPU Scheduling (0) | 2022.04.21 |
다중 처리기 스케줄링 Multiple-Processor Scheduling (0) | 2022.04.21 |
Comments