✏️ [OS] 뮤텍스 락, 세마포란 뭘까 그리고 그 차이점은?

박상민·2024년 3월 20일
0

CS Interview

목록 보기
14/16
post-thumbnail

들어가기 전에

동기화(synchronization)란?
동시다발적으로 실행되는 프로세스들은 공동의 목적을 올바르게 수행하기 위해 서로 협력하며 영향을 주고 받기도 한다. 이렇게 협력하여 실행되는 프로세스들은 실행 순서와 자원의 일관성을 보장해야 하기에 반드시 동기화되어야 한다.

프로세스 동기화

  • 프로세스들 사이의 수행 시기를 맞추는 것을 의미한다.
    • 실행 순서 제어: 프로세스를 올바른 순서대로 실행하기
    • 상호 배제: 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기

프로세스의 동기화는 어떻게 이루어질까?
어떻게 해야 임계 구역에 오직 하나의 프로세스만 진입하게 하고, 올바른 실행 순서를 보장할 수 있을까?

이를 위해 동기화를 위한 대표적인 도구인 뮤텍스 락, 세마포를 알아보자

뮤텍스 락(Mutex lock)

임계 구역 문제와 이를 해결하기 위한 동기화를 옷 가게에서 탈의실을 이용하는 것에 비유하겠다.

옷 가게에서 마음에 드는 옷이 있으면 손님은 탈의실에 들어가서 옷을 입어볼 수 있다. 이때 탈의실에는 한 명의 인원만 들어갈 수 있다. 손님들은 탈의실이라는 자원을 이용하고 탈의실 안에는 손님 한 명씩만 들어올 수 있으니, 손님은 '프로세스', 탈의실은 '임계 구역'이라고 할 수 있다.

만일 밖에서 탈의실에 사람이 있는지 없는지 알 수 없는 상황이라면 어떻게 탈의실이 이용중임을 알 수 있을까?
우선 탈의실을 열어 보고 자물쇠가 걸려있다면 탈의실에 사람이 있다고 판단하고 기다린다.
이때 자물쇠 기능을 코드로 구현한 것이 뮤텍스 락(Mutex lock)이다.
즉, 뮤텍스 락은 동시에 접근해서는 안되는 자원에 접근하지 않도록 만드는 도구, 다시 말해 상호 배제를 위한 동기화 도구이다.

임계 구역에 진입하는 프로세스는 '내가 지금 임계 구역에 있음'을 알리기 위해 뮤텍스 락을 이용해 임계 구역에 자물쇠를 걸어둘 수 있고, 다른 프로세스는 임계 구역이 잠겨 있다면 기다리고, 잠겨 있지 않다면 임계 구역에 진입할 수 있다.

세마포(Semaphore)

세마포는 뮤텍스 락과 비슷하지만, 조금 더 일반화된 방식의 동기화 도구이다.
뮤텍스 락은 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이다. 즉, 탈의실이 하나 있는 경우를 가정하고 만든 동기화 도구이다. 하지만 탈의실이 여러 개 있는 상황처럼 공유 자원이 여러 개 있을 경우 (각 공유 자원에는 하나의 프로세스만 진입이 가능할지라도) 여러 개의 프로세스가 각각 공유 자원에 접근이 가능해야 한다.

예를 들어 옷가게에 탈의실이 세 개 있다고 가정하자. 여전히 하나의 탈의실에는 한 사람만 들어갈 수 있지만 이 경우에는 세 명이 동시에 탈의실을 이용할 수 있다.

이처럼 세마포는 공유 자원이 여러 개 있는 상황에서도 적용이 가능한 동기화 도구이다.

뮤텍스 락, 세마포란 뭘까 그리고 그 차이점은?

뮤텍스 락
상호배제, 제어되는 섹션에 하나의 스레드만 허용하기 때문에, 해당 섹션에 접근하려는 다른 스레드들을 강제적으로 막음으로써 첫번재 스레드가 해당 섹션을 빠져나올 때까지 기다리는 것 (대기열(큐) 구조라고 생각하면 됨)

세마포
운영체제에서 공유 자원에 대한 접속을 제어하기 위해 사용되는 신호 공유자원에 접근할 수 있는 최대 허용치만큼만 동시에 사용자 접근 가능 스레드들은 리소스 접근 요청을 할 수 있고, 세마포어는 카운트가 하나씩 줄어들게 되며 리소스가 모두 사용중인 경우(카운트=0) 다음 작업은 대기를 하게 된다

차이점

  • 세마포는 뮤텍스 락이 될 수 있지만, 뮤텍스 락은 세마포가 될 수 없음
  • 세마포는 소유 불가능하지만, 뮤택스 락은 소유가 가능함
  • 동기화의 개수가 다름

출처
Tech Interview for developer
혼자 공부하는 컴퓨터 구조 + 운영체제

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글