목록운영체제 (13)
-
지금까지 다루어 봤던 솔루션들은 사실 꽤나 low-level에 속한 솔루션들입니다. 그로 인해 구현하기 어렵다는 단점이 존재하고 에러가 발생할 확률도 올라간다는 단점이 있었습니다. 물론 OS가 support해주면서 성능은 향상시킬 수 있었지만 그에 따른 눈에 안보이는 단점도 존재할 수 있습니다. 따라서 이번 시간에 배워볼 것은 조금 더 가벼운 수준에서 이 상호배제를 풀어나가보려고 합니다. 이번 시간에 배울 솔루션은 명암으로도 구분이 되는 Monitor라는 솔루션입니다. 지금까지 했던 것보다 사용이 쉽다는 특징을 가지고 있는데 어떤 것인지 살펴보겠습니다. 모니터라는 것은 Critical data와 CS영역을 모아놓은 하나의 방이라고 생각하시면 되겠습니다. 예를 들어 책 방인데, 한 방에 한 명만 들어갈 수..
세마포어가 Busy Waiting을 해결하는 좋은 솔루션이 된 것을 지난 포스팅에서 확인했습니다. 하지만 Waiting하고 있는 프로세스를 깨울 때 누구를 깨울지 정해진 것이 없었기 때문에 그것을 정형화하는 룰이 등장하기 시작합니다. 이번에 사용될 아이디어는 은행의 번호표와 비슷한 개념으로서, 대기번호에 따라 프로세스의 순서를 매길 수 있습니다. 그것이 바로 Eventcount / Sequencer입니다. 은행을 가면 번호표를 뽑고 자신의 순서를 기다리며 자신의 번호가 호명될 때 업무를 할 수 있습니다. 여기에선 번호 뽑는 기계를 Sequencer라고 부릅니다. 이 기계는 1씩 증가하며 번호를 매기게 되며 최초 생성시 0으로 초기화를 하고 절대 감소하지 않습니다. 그리고 이 Sequencer는 ticke..
지난 포스팅에선 SW 솔루션을 다루어봤고 SW쪽으로만 해결하려니 문제가 많아, 이를 하드웨어쪽에서 지원하기 시작합니다. 어떤 것이 있는지 한 번 살펴보겠습니다. - TestAndSet (TAS) Instruction -> Test와 Set을 한 번에 수행하는 기계어입니다. 실 행 중 방해를 전혀 받지 않기 때문에 선점(preemption) 이 이루어지지 않습니다. TAS 명령어입니다. 중요한건 저 구문이 한 번만 수행이 된다는 사실입니다. boolean 타입의 temp 는 target이라는 값을 가집니다. 그리고 이 target은 true로 만들고 temp를 return합니다. 이 동작이 한 번만 이루어 지고 있으며 현재 가진 target의 값을 반환하면서 값을 true로 바꾸는 원리입니다. 이게 한 번..
이전시간엔 상호배제의 구문을 짜기 위해 여러 가지 아이디어를 가지고 와서 시도해보았습니다. 결론적으로 제대로 해결되는 것 없이, 계속해서 새로운 문제가 파생되는 모양새가 드러났습니다. 과거 우리의 선배들은 이런 문제에 일찌감치 직면하였고 이에 대한 해결책을 여러 가지 방면으로 연구하셨습니다. 그러므로 이번 포스팅에선 어떻게 앞선 문제들을 해결할 수 있을지 알아보겠습니다. 첫번째로 볼 알고리즘은 Dekker's Algorithm입니다. 최초의 두 프로세스간 ME를 보장하는 알고리즘입니다. 아이디어는 대충 감이오시나요? 앞에서 썼던 아이디어는 flag와 turn중 하나를 썼는데 Dekker는 둘 다를 사용했음을 확인할 수 있습니다. 일단 flag[0] = true라는 것을 모두에게 알립니다. 그리고 P0의 ..
FCFS에서 가장 문제점이 난 금방 일을 끝낼 수 있는데 앞에 있는 다른 프로세스 때문에 오래 기다려야하는 이런 불공평함이 존재했었습니다. 그래서 이를 보완하기 위해 짧은 프로세스는 먼저 빼주자는 전략이 등장하게 됩니다. 즉, 다시 말해 Burst time이 가장 작은 프로세스부터 먼저 처리하겠다는 의미로 받아들여집니다. 이를 다른 말로 Job이 가장 짧은 것 부터 처리한다는 의미에서 SJF라고도 부릅니다. 또한 한 번 할당받으면 끝나기 때문에 "비선점" 스케줄링 방식을 채택하고 있습니다. 그로 인한 장점은 여러 가지가 있습니다. 아무래도 BT가 짧은 프로세스 위주로 처리하다 보니 평균 대기시간(WT)가 적어지게 될 것입니다. 또한 시스템 내 프로세스 수를 최소화시킴으로써 스케줄링 부하가 감소되고 메모리..
이번 시간엔 프로세스 스케줄링이 일어날 때 여러 알고리즘에 의해서 수행되는데, 어떤 알고리즘이 있는지 어떻게 연산이 되는지 등을 알아보겠습니다. 다 정리하려면 굉장히 많겠지요??? 그래서 2가지 글로 나누어서 설명을 해보고자 합니다. 가능하면 한 개로 할 수 있으면 좋겠네요 첫 번째 FCFS (First-Come-First-Service)입니다. 쉽게 이해하자면 선착순입니다. 먼저 오는 프로세스에게 먼저 CPU를 할당해주겠다는 의미입니다. 따라서 비선점 스케줄링이라고도 합니다.(프로세스가 끝날 때까지 누구도 뺏을 수 없음) 그리고 스케줄링의 기준은 도착 시간을 기준으로 선택하고 먼저 도착한 프로세스를 먼저 처리하게 됩니다. 그러므로 자원을 효율적으로 사용할 수 있습니다. 왜 그럴까요? 자, 컴퓨터 공학에..