일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 동기화
- decode
- 운영체제
- UserDefaults
- SwiftUI
- async
- 비동기
- 상호배제
- 100 days of SwiftUI
- 앨런
- Algorithm
- 데드락
- 알고리즘
- @state
- struct
- IOS
- Linked List
- 인프런
- 오브젝트
- 동시성
- core data
- COLOR
- Apple Developer Academy
- deadlock
- scrollview
- Swift
- Codable
- forEach
- 프로세스 스케줄링
- 가상 메모리
- Today
- Total
목록상호배제 (4)
기어가더라도 제대로
Semaphore 를 비롯한 운영체제 레벨의 동기화, 상호배제 로직은 복잡하고 쓰기가 어렵다. 그래서 사용이 쉬운 언어 레벨의 상호배제와 동기화를 배워보자. High-level Mechanism Monitor Language-level constructs Object-Oriented concept과 유사 사용이 쉬움 Monitor 공유 데이터와 Critical section의 집합 Conditional variable wait(), signal() operations 한번에 한명만 들어올 수 있는 책방을 가정해보자. 구조 Entry Queue(진입큐) 모니터 내의 procedure(function) 수만큼 존재 Mutual exclusion 모니터 내에는 항상 하나의 프로세스만 진입..
Semaphore 1965년 다익스트라님이 제안 Busy waiting 문제 해결 음이 아닌 정수형 변수(S) 초기화 연산, P(),V()로만 접근 가능 P: Probern(검사) V: Verhogen(증가) 임의의 S 변수 하나에 ready queue 하나가 할당됨 Semaphore의 종류 Binary semaphore S가 0과 1 두종류의 값만 갖는 경우 상호 배제나 프로세스 동기화의 목적으로 사용 Counting Semaphore S가 0 이상의 정수값을 가질 수 있는 경우 Producer-Consumer 문제 등을 해결하기 위해 사용 생산자-소비자 문제 P(S) 연산 물건이 없을 땐 빙빙 s Q로 가서 기다린다. Block된 상태(busy waiting X) V(S) 연산 ..
HW 솔루션도 Busy Waiting 문제가 있다는 것을 알게됨 Spinlock 정수 변수 S = a + 1 위와 같은 연산은 불가 초기화, P(), V() 연산으로만 접근 가능 위 연산들은 indivisible(or atomic) 연산 OS support 보장 전체가 한 Instruction cycle 에 수행 됨 S = 물건의 개수 P() 물건을 꺼내가는 것 자물쇠를 거는것 V() 물건을 집어 넣는 것 자물쇠를 푸는 것 active 라는 변수를 가정해 보겠습니다. 1 물건이 있다. 있어야 다른 프로세스가 실행 가능 0 물건이 없다. P = 잠는 것 - 잠그고 일을하다 끝나면 나올 때 푼다. V = 푸는 것 프로세서가 하나인 경우 Pi 가 active 를 0 으로 만들고 열심히 일..