BASIC의 개발 노트
Transport layer에서는 sending process에서 receiving process로 data를 전달하는 기능을 제공하는데 Network layer에서는 Segment를 sending host에서 receiving host로 전달하는 기능을 제공한다. sending side에서는 transport layer에서 보내준 segment를 받아서 datagram으로 만든다. 참고로 segment 앞에 network layer의 header를 붙여주면 datagram이 된다. 이후 receiving side에서는 이 datagram을 받아서 segment를 꺼내고 transport layer로 전달해주게 된다. transport layer나 application layer에서는 보내는 쪽과 받는 ..
보호되어 있는 글입니다.
지금까지 Lock을 구현하면서 계속 spin에 의존해왔다. 그런데 spin은 CPU를 계속 사용하기 때문에 문제가 될 수 있다. 이 문제를 Yield를 사용해서 해결해보려고 한다. yield라고 하는 것은 자기 자신을 스케쥴링 해서 디스케쥴링하는 System Call이다. spin을 사용한 코드와 비교해봤을 때, 다른 것은 다 똑같은데 spin 대신 yield가 들어갔다는 차이가 있다. 여기서 yield는 flag가 1인데 TestAndSet을 통해 1로 바꾸었을 때 작동한다. 이 yield를 호출하게 되면 Running 상태에서 Ready 상태로 바뀌어버린다. Ready 상태로 바뀌었기 때문에 다른 프로그램이 Running 상태가 될 것이다. 즉 yield를 하게 되면 Context Switching이..
보호되어 있는 글입니다.
현재 우리가 계속해서 주목하고 있는 이슈는 Linked List에서 Lock을 사용 해야 하는데 Node 별로 Lock을 분산 시킬 것이냐 아니면 Lock을 하나만 쓸 것이냐 에 대한 것이다. 병행성을 좋게 하면 성능이 좋을 것이라는 기대를 하면서 Lock을 분산 시켜봤지만 Overhead가 커지면서 성능이 오히려 떨어질 수도 있다는 얘기 까지 했다. 이러한 이슈를 그대로 가지고 Concurrent Queues에 대해서 살펴보자. Concurrent Queues 기본 아이디어는 Lock을 두 개를 사용하고, dummy node라는 것을 사용한다. Lock을 하나만 사용했을 때는 bottle neck이 발생할 수 있기 때문에 head와 tail로 분리한다. dummy node는 꺼내는 것 끼리는 경쟁이 발..
지금까지 Multi Threading 환경을 계속 다뤄왔는데, Multi Threading을 다룰 때 중요한 것이 'thread safe' 문제이다. 즉 Library나 System Call 등을 호출 할 때 각 Thread가 경쟁적으로 호출을 하더라도 Race Condition과 같은 문제가 없어야 한다는 뜻이다. 이를 'MT-safe' 라는 용어를 사용한다. 참고로 Multi Thread가 나오면서 많은 라이브러리들이 MT-safe 하도록 수정하는 과정을 거쳐왔다. 지금부터 우리가 다뤄 볼 자료 구조들에서 Race Condition 뿐만 아니라 Performance에도 신경을 쓰면서 어떻게 MT-safe 하게 만들 수 있는지 살펴보자. Concurrent Counters 그동안 counter를 가지고..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
앞에서 Race Condition을 설명할 때 Thread가 공유 자원을 사용하면서 발생한 문제에 대해서 알아봤다. 문제의 근본적인 원인은 counter를 1 더하는 과정이 기계어로 세 단계로 나뉘는데, 이 세 단계가 atomic 하지 않기 때문에 중간에 interrupt가 걸려서 끊어질 수 있고 그렇게 끊어질 경우 우리가 기대했던 counter 값이 나오지 않는다. 이런 문제를 해결하는 방법은 Lock을 사용하는 것이다. Lock은 한 쪽에서 코드에 진입을 하게 되면 다른 쪽에서 진입하려고 할 때 이를 막고 기다리도록 하는 역할을 한다. 먼저 진입한 쪽을 T1, 나중에 진입한 쪽을 T2 라고 하면 T1이 먼저 Critical Section에 진입하면 T1이 Lock을 얻고 코드를 실행하는 동안 T2는 ..
보호되어 있는 글입니다.