이 글에서는 컴퓨터에서 발생하는 데드락(deadlock)에 대해서 알아본다. 여기저기서 글을 읽고 나름대로 정리한 것이므로 개념이 100% 정확하다고 할 수는 없겠지만 이해에는 도움이 될 것이다... 데드락 데드락은 교착 상태라고 부르기도 한다. 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있어, 결과적으로 아무것도 완료되지 못하는 상태를 말한다. 그렇다면 데드락은 왜 생겨나게 되었을까? 특히 멀티스레드 환경에서 자주 발생하는 문제이기 때문에 이를 중심으로 설명하겠다. (단, 아래 사진에서 볼 수 있듯이 멀티스레드 외에도 조건을 만족하는 비슷한 상황에서 발생할 수 있는 문제이다.) 배경 먼저 Multi-Programming(프로그램을 여러 개 돌리는 것, 다중 프로그래밍이라고 번역할 ..
운영체제
개요 이 글에서는 서로 다른 아키텍처에서 바이트를 주고 받을 때 신경 써야 하는 바이트 배열 방법, 엔디안에 대해서 알아볼 것이다. 엔디안 엔디안(Endian)은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻한다. 특히 컴퓨터에서 바이트를 메모리에 나열할 때 두 가지 방법이 있다. 하나는 빅 엔디안(Big endian)이고 하나는 리틀 엔디안(Little endian)이다. 빅 엔디안과 리틀 엔디안 빅 엔디안은 우리가 바이트 숫자를 쓸 때와 똑같다. 최상위 비트(Most Significant Bit, MSB)를 메모리의 가장 낮은 주소에 배치시켜 나머지를 쭉 나열시킨다. 말그대로 제일 큰 값을 먼저 나열시키는 방법이다. 사람이 숫자를 읽고 쓰는 방법과 똑같기 때문에 디버깅 과정에서 메모리의..
Semaphore vs. Monitors - what's the difference? Monitor A Monitor is an object designed to be accessed from multiple threads. The member functions or methods of a monitor object will enforce mutual exclusion, so only one thread may be performing any action on the object at a given time. If one thread is currently executing a member function of the object then any other thread that tries to call ..