💻CS/OS

    [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이상의 정수..

    [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

    [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를 뱉..

    [OS] 9. Process Synchronization and Mutual Exclusion 2

    지난 강의에서는 상호 배제를 구현하기 위한 노력들을 살펴 봤었다. 그 이후에 어떠한 소프트웨어적인 해결책을 내놓았는지 하나씩 살펴보자. Dekker's algorithm 이 알고리즘은 프로세스가 두 개일 때, Mutual Exclusion을 보장하는 최초의 알고리즘이다. 앞의 버전 0, 1보다 더 발전한 모양으로, 해당 문제들을 처음으로 해결해냈다. 진행되는 플로우를 살펴보자. 먼저 P0이 작업을 하려고 flag를 true로 바꾸었다고 해보자. 이 때 flag[1]에 따라 작업을 수행할 수 있는지 여부가 정해지는 데, P1도 flag를 true로 전환 시킨 상태라고 가정해보자. 그렇다면 while문 안으로 들어가서 현재 turn을 통해 누구의 차례인지 알아낼 수 있다. turn이 1이라면 P1의 차례이기..

    [OS] 8. Process Synchronization and Mutual Exclusion 1

    Process Synchronizatiton (동기화) 동기화라는 말을 생각해보면, 하나의 프로세스를 대상으로 하는 행위는 아닐 것이라는 생각이 들 것이다. 동기화라는 말의 사전적 의미를 먼저 들여다보자. 동기화(同期化, synchronization)는 시스템을 동시에 작동시키기 위해 여러 사건들을 조화시키는 것을 의미한다. 여러 사건, 즉 컴퓨터에서는 "여러 프로세스"에 대한 행위가 되는 것이다. 이에 여러 개의 프로세스가 존재하는 다중 프로그래밍 시스템 상에서 필요로 하는 것이 동기화이다. 왜냐하면 각 프로세스들은 서로 독립적으로 동작하는데, 만약 공유 자원이나 데이터에 동시에 접근하게 되면 이 때 문제가 발생한다. 만약 자원 A를 P1(=프로세스)과 P2이 동시에 접근한다고 하면, 작업 도중에 값이..

    [OS] 7. Process Scheduling 4

    마지막으로 MLQ와 MFQ에 대해서 알아보자! MLQ (Multi-level Queue) 말 그대로 ready queue를 여러 개 가지는 방식이다. 이전의 스케줄링 방식들은 ready queue를 한 개만 가지고 우선순위를 두고 작업을 진행했었다. 작업(or 우선순위)별 별도의 ready queue를 가진다 최초 배정된 queue를 못 벗어남 (= 다른 queue로 이동 불가) 각각의 queue는 자신만의 스케줄링 기법을 사용한다. Queue와 queue 사이에는 "우선순위 기반"의 스케줄링 사용 (고정 우선순위, 동적 등등) 장점 중요한 작업에 대해서는 빠른 응답시간을 가진다. 단점 여러 개의 queue를 관리해줘야 하기에 스케줄링 overhead가 발생한다. 우선순위가 낮은 queue에서는 star..