일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로세스 스케줄링
- Algorithm
- Codable
- 가상 메모리
- COLOR
- async
- deadlock
- Swift
- UserDefaults
- Apple Developer Academy
- 데드락
- 알고리즘
- SwiftUI
- 오브젝트
- core data
- 동시성
- Linked List
- decode
- forEach
- struct
- 인프런
- 비동기
- 파일 시스템
- 운영체제
- 앨런
- IOS
- 상호배제
- 동기화
- @state
- 100 days of SwiftUI
- Today
- Total
목록CS/운영체제 (39)
기어가더라도 제대로
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 으로 만들고 열심히 일..
HW 솔루션 TestAndSet (TAS) instruction test 와 set을 한번에 수행하는 기계어 Machine instruction Atomicity, Indivisible 실행 중 interrupt를 받지 않음(preemption 되지 않음) Busy waiting 비효율적 TAS Instruction 타겟값을 저장, 타겟에 true 저장, 반환 세동작이 한번에 실행된다. 한명이 들어가서 일을 하고 있을 때, 2,3번이 뺑뺑돌고 있는데, 3번이 갔다고 치고, 다음에 4번이 온다면? 2번은 계속 기다릴 수 밖에 없다. ME with TAS Instruction N-process mutual exclusion 장점 구현이 간단 단점 Busy waiti..
상호 배제 로직 구현은 쉽지 않다. 소프트웨어적 솔루션을 배워보자 Dekker's Algorithm 두개의 프로세스가 있을 때 상호 배제 구현 앞의 버전은 턴만 쓰거나, 플래그만 썼는데, 두개를 같이 써보자로 출발하였다. 1. 첫 줄에 들어가겠다는 의사 표시 1-1. 상대가 깃발을 들고 있지 않다면, 바로 진입 1-2. 상대가 깃발을 들고 있다면 턴을 봐야함. 1-2-1. 상대 턴이라면 깃발을 내리고, 내 턴을 기다리고 있다. 2. 상대가 일이 끝나면 상대의 깃발을 내리고 턴을 넘긴다. 3. P0 이 일을 한다. P0 이 뱅뱅돌다가 죽었다? P0 의 플래그가 없다. P1 이 들어갈 수 있다 => Progress 해결 P0 도 플래그가 세워졌고 P1 도 플래그가 있다? 나의 턴을 기다..