목록CS 지식/운영체제 (6)
개발놀이터
리눅스를 공부하다보니 리눅스 커널이라는 것을 공부하면 좋다고 하더군요. 원래 이론공부는 나중에 하는 편이지만 이론공부도 좋아하기 때문에 한번 공부해봤습니다. 리눅스 커널우선, 커널이 뭔지 개념을 잡고 넘어가면 좋을 것 같습니다. 커널은 컴퓨터에 장착되어 있는 하드웨어 제품들 (하드디스크, 메모리, CPU, 키보드, 마우스, 모니터 등등...) 을 소프트웨어로 추상화하여 OS가 사용할 수 있도록 하는 것입니다. 즉, 쉽게 말해 커널은 OS가 하드웨어 디바이스를 제어하기위한 중계자 역할을 한다는 것입니다. 우리는 그 중에서 리눅스 커널에 대해서 알아볼 것입니다. 윈도우도 커널이 있습니다! 하지만 우리는 윈도우로 개발할 것은 아니기 때문에 리눅스로 한번 알아봤습니다. 리눅스 커널에는 크게 다섯가지 관리..
프로세스 동기화에 대한 면접질문을 외우다가 문득 생각이 들었습니다. "Critical Section (이하 임계구역) 에 접근하는 것을 제어하기 위해 세마포어나 뮤텍스를 사용합니다." 라는 문장에서 세마포어가 뭐지? 뮤텍스는? 원래 이런 궁금증이 생기진 않았습니다. 하지만 문득 들더군요. 저것에 대한 꼬리질문이 나올 수도 있겠다는 생각이말이죠. 때문에 오늘 포스팅에선 세마포어와 뮤텍스에 대해서 알아보도록 하겠습니다. 세마포어와 뮤텍스 우선 결론부터 말해보겠습니다. 뮤텍스는 락을 걸어서 임계구역으로의 접근을 막는 매커니즘을 가지고 있습니다. 우리가 자바에서 흔히 사용하던 synchronized 키워드가 바로 뮤텍스입니다. 세마포어는 신호를 주고받아서 임계구역으로의 접근을 막는 매커니즘을 가지고 있습니다. ..
잘 기억은 안나지만 2022년 여름 주말이었는데 지인들끼리 다같이 모여서 쿠팡이츠로 점심을 시켜먹으려고 했는데 서버가 내려가 주문이 안된 사태가 있었습니다. 여자친구가 당시 쿠팡이츠에서 일하고 있었고 사내톡으로 해당 문제가 교착상태 (DeadLock) 때문에 발생한 문제라고 판단하고 이내 두시간정도에 걸쳐서 문제를 해결했던 일이 생각납니다. 가장 매출이 잘 나오는 주말 점심에 이런 일이 터졌기 때문에 고객들은 부정적인 고객경험과 경쟁사에 고객을 뺏기는 상황이 발생했죠. 이처럼 데드락, 교착상태는 서비스를 운영함에 있어서 큰 문제가 될 수 있는 상황입니다. 오늘 시간에는 교착상태에 대해서 알아보고 왜 교착상태가 일어나는지, 해결하려면 어떻게 해야하는지에 대해서 알아보도록 하겠습니다. 교착상태 교착상태 (이..
이번 시간에는 프로세스 동기화에 대해서 알아보도록 하겠습니다. 프로세스 동기화란 OS에서 같은 메모리 공간을 공유하고 있는 프로세스들을 관리하기위한 방법입니다. 프로세스 동기화를 진행하게 되면 변수를 사용함으로써 데이터의 일관성을 유지하는데 도움이 됩니다. 프로세스 동기화를 하기위해 여러가지 방법이 있는데 이번 시간에 semaphore (이하 세마포어), mutex lock (이하 뮤텍스 락), hardware synchronization (이하 하드웨어 동기화)를 알아봅니다. 프로세스 동기화란? OS는 컴퓨터에서 모든 애플리케이션을 관리하는 소프트웨어이고 기본적으로 우리 컴퓨터에서 부드럽게 동작하는 것을 도와줍니다. 이러한 이유때문에 OS는 많은 일을 수행할 수 밖에 없습니다. 때로는 동시에 일을 수행..
동시성 문제와 Thread-safe를 고민하는 것은 개발자로서 정말 중요한 과제라고 생각됩니다. 서비스가 커지면 커질수록 멀티스레딩이 절실히 필요해질텐데 성능을 위해 멀티스레딩을 강요받았지만 동시성문제로 버그가 생겨버리면 참 골치아플 것 같습니다. 이번 시간에는 동시성문제와 Thread-safe 그리고 자바에선 어떻게하면 동시성문제를 해결할 수 있는지까지 알아봅니다. 동시성문제 동시성문제가 발생하는 코드는 한눈에 봐서는 알아차리기 쉽지 않습니다. 차라리 동시성문제가 발생하는 패턴을 외워두고 있다가 해당 패턴이 나오면 해결하는 것이 더 타당해보일 정도로 정말 알기 쉽지않습니다. 저는 프로젝트를 할 때 동시성문제에 대해 진지하게 고민하고 코드를 짜본 적은 없지만 어떤 상황이 동시성 문제가 발생하는지는 대강 ..
프로세스와 스레드의 차이에 대한 면접질문은 신입 개발자에게 단골 질문이라고 알려져 있습니다. 이 둘은 다른 듯 비슷해 보여서 헷갈리기 쉬운데 이번 포스팅에선 이 둘의 차이와 더 나아가 멀티프로세싱, 멀티스레딩과 더불어 이 둘을 언제 사용하면 좋을지까지 포스팅합니다. Process 프로세스는 실행된 프로그램의 인스턴스입니다. 우리가 프로그램을 실행할 때 이 프로그램이 직접적으로 실행되는 것이 아니라 프로그램을 실행하기 위해 필요한 스텝들을 거친 뒤 실행이 됩니다. 이렇게 실행을 위해 필요한 스텝들이 바로 프로세스 즉 과정입니다. 프로세스는 한번에 여러개의 일을 수행하기위해 다른 프로세스를 만들 수 있습니다. 이렇게 만들어진 프로세스들은 클론 프로세스 혹은 자식 프로세스라고 부르죠. 메인 프로세스는 부모 프..