전체 글

전체 글

    [OS] 12. Process Synchronization and Mutual Exclusion 5

    그 유명한 세마포어(Semaphore)에 대해 알아봅시다. Semaphore 다익스트라씨가 또 만듬...(대단하신 분,,) 가장 핵심은 이전에 고질적인 문제였던 busy waiting 문제 해결했다는 것! 음이 아닌 정수형 변수(S)를 사용하며 spinlock과 동일하게 초기화 연산, P(검사), V(증가)연산으로만 접근이 가능하다. 하지만 spinlock과 다른 점이 있다! 세마포어는 임의의 S 변수 하나에 ready queue 하나를 할당한다는 것이 큰 차이이다. 우선 세마포어는 두 가지로 구분할 수 있다. Binary semaphore S가 0 혹은 1의 값만 가지는 경우 상호배제(Mutual Exclusion)나 프로세스 동기화를 목적으로 사용 Counting semaphore S가 0이상의 정수..

    [Network] 네트워크 계층 5

    지난번에 이어서 distance vector 알고리즘에 대해 알아볼 것이다. 이전 글에서 봤듯이, 본인과 인접한 부분에 대한 정보만 알고, 나머지 정보들은 이웃에 의해 전달받아야 한다. 그렇기 때문에 Distance vector 알고리즘의 핵심은 이웃에게 정보를 받아 이를 기반으로 정보를 업데이트한다는 것이 된다. 이러한 구조에서, x로부터 z로의 최단 경로를 구하기 위해서는 min(C(x,y) + Dy(z), C(x,z) + Dz(z))의 식으로 값을 구해낼 수 있다. y를 거쳐서 가는 경우 z로 바로 가는 경우 이 두 가지 경우 중 최소값을 가지는 경우를 선택하여 정보를 업데이트 해주는 것이다. 이러한 계산 과정이 반복되며 정보는 계속 업데이트 되고 더 이상 값이 바뀌지 않는(stable)한 상태가 ..

    [OS] 11. Process Synchronization and Mutual Exclusion 4

    SW와 HW적인 여러 해결책들이 등장함에도 Busy waiting 문제가 해결되지 않았던 것을 볼 수 있다. 이제는 OS차원에서의 해결방법을 살펴보자. 먼저 스핀락(spinlock)에 대해 먼저 알아보자. 스핀락은 정수형 변수로서 초기화, P(), V() 연산으로만 접근 가능하다. 이러한 연산들은 atomic한 연산이며 OS에서 preemption이 발생하지 않도록 보장해준다. swift 코드로 한 번 봐보자. (임의로 짬..!) // P 연산 - S라는 물건을 계속 빼내는 것 func P(S: inout Int) { while S

    [RxSwift] Operators - deferred

    Creating 카테고리에 속하는 deferred에 대해서 알아볼 것이다. 공식문서에는 defer라고 되어있지만, RxSwift에서는 deferred로 사용한다. deferred 1. 정의 defer라는 단어의 뜻처럼 옵저버블의 생성을 "지연"하는 역할을 한다. deferred는 옵저버가 구독하기 전까지 옵저버블을 생성하지 않도록 하며, 구독 이후에는 각 옵저버 별로 새로운 옵저버블을 생성해준다. 2. 구현 public static func deferred(_ observableFactory: @escaping () throws -> Observable) -> Observable { Deferred(observableFactory: observableFactory) } 클로저를 통해 옵저블을 생성해주는데..

    [OS] 10. Process Synchronization and Mutual Exclusion 3

    이번엔 하드웨어 쪽에서의 해결책을 살펴보자. Synchronization Hardware TestAndSet(TAS) instruction test와 set을 한 번에 수행하는 기계어이다. Machine instruction (한 번에 수행됨) 실행 중에 interrupt를 받지 않는다 (preemption 안됨!) 여기서 TAS는 값을 반환하고, 값을 바꿔준다. swift로는 약간 이런 느낌..? func TAS(_ target: inout Bool) -> Bool { var temp = target // 이전 값 기록 target = true // 값 변경 return temp // 값 반환 } 즉 초기에는 lock이 false여서 while문을 패스하는데, 이 때 TAS(lock)이 false를 뱉..

    [RxSwift] Operators - Interval, timer

    Creating에 속하는 Interval operator에 대해서 알아볼 것이다. Interval 1. 정의 주어진 시간 간격을 두고 주기마다, emit되는 옵저버블을 생성한다. Interval 연산자의 경우 completed 되지 않고, 무한한 시퀀스를 생성한다. 즉, 직접 dispose 시키지 않는다면 구독 이후에 계속 반복되는 것이다! 2. 구현 Observables의 Timer에서 구현 내용을 살펴볼 수 있다. public static func interval(_ period: RxTimeInterval, scheduler: SchedulerType) -> Observable { return Timer( dueTime: period, period: period, scheduler: schedule..