[ 개발 기본 지식 ] 프로세스, 스레드, 뮤텍스, 세마포어

sonny·2024년 9월 15일
0

개발 지식이 통통

목록 보기
3/11
post-thumbnail
분야상세지식
자료구조스택, 힙
알고리즘회귀호출, 인덱스, 정렬, 이진 검색
운영체제프로세스, 스레드, 뮤텍스, 세마포어
디자인패턴MVC 아키텍처
프로그래밍 언어네이티브 코드, 콜 바이 밸류, 콜 바이 레퍼런스
경험간단한 텍스트 기반의 게임 만들어보기

출처

세번 째 프로세스, 스레드, 뮤텍스, 세마포어에 대해 자세히 알아보자

운영체제에서 프로세스, 스레드, 뮤텍스, 세마포어는 컴퓨터가 여러 작업을 동시에 처리하고 자원을 효율적으로 관리하기 위해 사용되는 중요한 개념들이다. 하나씩 차근차근 정리한 것을 설명해 보려한다.

프로세스 (Process)

프로세스는 실행 중인 프로그램을 의미한다. 프로그램은 코드로 작성된 파일이지만, 이를 실행시키면 프로세스가 생성되어 컴퓨터의 메모리와 CPU를 사용하게 된다. 예를 들어, 우리가 컴퓨터에서 엑셀 프로그램을 실행하면 이 엑셀 프로그램이 하나의 프로세스가 되고 프로세스의 특징은 각각 독립적인 메모리 공간을 가지는데 즉, 한 프로세스가 사용하는 메모리나 자원은 다른 프로세스와 공유되지 않는다는 것이다. 알아보니 프로세스끼리 정보를 주고받으려면 별도의 통신 방법인 메시지 전달이나 공유 메모리를 사용해야 한다고 한다.

스레드 (Thread)

스레드는 프로세스 내에서 실제로 작업을 수행하는 작은 실행 단위인데, 하나의 프로세스는 여러 스레드를 가질 수 있다. 프로세스와 스레드의 차이점을 보자면 프로세스는 서로 독립적이지만 스레드는 하나의 프로세스 내에서 메모리와 자원을 공유한다. 예를 들어, 엑셀 프로그램 내에서 여러 스레드가 실행되어 문서 편집, 저장, 오류 검사 등을 동시에 처리할 수 있다. 스레드들은 같은 프로세스의 메모리를 공유하기 때문에 서로 빠르게 통신할 수 있지만, 동시에 여러 스레드가 같은 데이터를 변경하려고 하면 충돌이 발생할 수 있는 점을 염두해야한다.

뮤텍스 (Mutex)

뮤텍스는 여러 스레드가 동시에 접근할 수 없는 자원. 예를 들어 메모리 공간을 보호하기 위해 사용된다. 이를 통해 한 번에 하나의 스레드만 특정 코드나 데이터에 접근할 수 있도록 한다. 작동 방식의 경우 뮤텍스는 잠금(lock)과 해제(unlock)의 두 가지 상태를 가지는데, 스레드가 특정 자원에 접근하려면 먼저 뮤텍스를 잠금 (lock) 상태로 만든다. 다른 스레드들은 이 뮤텍스가 잠겨있는 동안 해당 자원에 접근할 수 없고 작업이 끝나면 뮤텍스를 해제(unlock)하여 다른 스레드가 자원에 접근할 수 있도록 한다.

비유하자면.. 뮤텍스를 방에 걸린 잠금장치로 생각해 볼 수 있겠다. 한 스레드가 방에 들어가면 문을 잠궈버리고 다른 스레드들은 들어갈 수 없다. 작업이 끝나고 나면 문을 열어 다른 스레드들이 들어갈 수 있게 하는 것. 좀 귀엽다.

여담으로 뮤텍스(Mutex)의 유래는 "Mutual Exclusion"의 줄임말이라고 한다. 번역 해보니 "상호 배제"를 의미한다. 뮤추얼 익스클루전.. 발음 어렵다

세마포어 (Semaphore)

세마포어는 뮤텍스와 비슷하지만 조금 더 일반적인 동기화 도구다. 여러 스레드가 자원에 접근하는 것을 조절하는 역할을 하는데 작동 방식은 세마포어는 내부에 정수 값을 가지고 있으며, 이 값을 통해 자원에 접근할 수 있는 스레드의 수를 제한한다고 한다. 예를 들어, 세마포어의 값이 3이라면 최대 3개의 스레드가 동시에 자원에 접근할 수 있다. 한 스레드가 자원에 접근하면 세마포어의 값이 줄어들고, 작업이 끝나면 값이 다시 증가한다. 비유하자면 세마포어를 영화관의 좌석으로 생각해보자. 좌석이 3개뿐이라면 최대 3명까지만 들어갈 수 있고, 좌석에 앉은 사람이 나가면 빈자리가 생겨 다른 사람이 들어올 수 있다.

세마포어는 원래 항해에서 신호를 전달하기 위한 기구를 의미하는 단어로, 그리스어 "semaphore"에서 유래되었다고 한다. 이는 "sign"과 "to carry"의 합성어로 신호를 전달하는 장치를 의미한다는데, 재미있는게 이탈리아어로 변역하면 신호등이 나온다.

뮤텍스와 세마포어의 차이점

뮤텍스는 한 번에 하나의 스레드만 접근할 수 있도록 한다. 이진 세마포어라고도 부르는데, 1개 이상의 스레드가 접근하면 안 되는 경우에 사용된다.
세마포어는 여러 스레드가 자원에 접근할 수 있는 수를 조절하고, 세마포어의 값이 여러 개일 수 있으며, 특정 개수의 스레드들이 동시에 자원에 접근할 수 있도록 한다.

요약 겸 예시로 보자면,

  • 프로세스와 스레드 : 집 (프로세스) 안에 여러 방 (스레드) 이 있다고 생각하자. 집들은 서로 독립적이지만, 집 안의 방들은 서로 연결되어 있다.
  • 뮤텍스 : 화장실 (자원) 을 사용하려면 문을 잠가서 다른 사람이 못 들어오게 한다. 이것이 뮤텍스의 역할이다.
  • 세마포어 : 화장실이 3칸이 있는 공중화장실 (자원) 이 있다고 하자. 3명까지는 동시에 사용할 수 있지만, 모두 사용 중일 때는 기다려야 한다. 이것이 세마포어의 역할이다.
profile
iOS 좋아. swift 좋아.

0개의 댓글