본문 바로가기

OS

(3)
synchronous, asynchronous, blocking, non-blocking 동기, 비동기 그리고 블로킹, 논블로킹은 프로그램을 개발할 때 중요한 개념 중 하나이다. 기초 프로그래밍을 배우고 응용 파트인 병렬 프로그래밍을 익힐 때 나오는 개념이고 익히기 쉽지 않은 개념이기도 하다. 이번 기회에 개념을 확실히 잡아 나중에 힘든일을 겪지 않도록 하자. 동기와 비동기 개념과 블로킹과 논블로킹은 혼용하여 사용하는 경우가 있지만 엄연히 서로 다른 개념이다. 흔히 '동기' == '블로킹', '비동기' == '논블로킹'으로 헷갈리기도 합다. 하지만 실제로는 두 개념은 서로 크게 연관관계가 없는 별개의 개념이다. 동기/비동기는 작업을 수행하는 주체가 두 개 이상이어야 한다. 이 때 작업의 시간(시작, 종료 등)을 서로 맞춘다면 이를 동기라고 부르고, 서로 작업의 시간이 관계없다면 이를 비동기라..
Race Condition Race Condition? 이전의 글에서 Thread에 관련하여 작성하였다. 그 안에는 동기화와 관련된 내용도 있는데 본 글은 동기화를 할때 생기는 상황들에 대해서 설명해 보겠다. 먼저, 레이스 컨디션이란 두개 이상의 스레드나 프로세스가 하나의 자원을 두고 경쟁하는 상황을 말한다. 이를 해결하기 위해 임계영역을 생성해 하나의 자원에는 하나의 스레드만 접근할 수 있도록 동기화를 해준다. 세마포어 뮤텍스? 이때 동기화 방법에는 세마포어와 뮤텍스가 있는데, 둘의 가장 큰 차이는 동기화 대상의 개수이다. 세마포어인 경우 동기화의 대상이 여러개로 임계영역에 들어갈 수 있는 프로세스나 스레드의 개수를 카운트로 표시해 카운트 값에 따라 스레드나 프로세스가 임계영역에 접근할 수 있다. 반면 뮤텍스의 경우 임계영역에 ..
Thread & Process 우리는 스레드와 프로세스에 대해서 한번쯤은 들어봤을것이다. 하지만 막상 스레드가 무엇이고 프로세스가 무엇인지 누군가 물어본다면 정확한 개념을 이해하고 있지 않기 때문에 설명하기 막막할 것이다. 본문을 통해 스레드와 프로세스에 대해서 이해해보도록 하자. Process? 우리는 작업관리자를 키면 실행중인 프로세스가 어떠한 것들이 있는지 알 수 있다. 이를 통해 알 수 있듯이, 프로세스란 운영체제로 부터 자원을 할당받는 작업의 단위이다. 그렇다면 운영체제로 부터 어떤 자원을 할당 받는지 다음의 그림을 통해 보도록 하자. 그림을 보면 알 수 있듯이 하나의 프로세스는 코드, 데이터, 스택, 힙 이라는 자원을 운영체제로 부터 할당받는다. 각각 무슨 역할을 하는지 이름만 보고도 추론할 수 있는데 이를 간단하게 살펴보..