본문 바로가기
면접 질문/운영체제

[운영체제/OS] 동기화 문제 면접 질문 및 답변

by 그적 2024. 2. 1.
  • 동기화에 대해 설명해 주세요.
더보기

프로세스나 스레드가 자원을 공유하면서 작업하는데, 이때 어떤 자원에 대한 일관성을 보장해야 하는 것을 동기화라고 합니다. 하지만 어떤 프로세스가 먼저 실행되는가에 따라 결과가 달라지는 상황을 마주하는데, 이것을 동기화 문제라고 부릅니다.

 

  • 동기화 문제를 해결하기 위한 방법을 알고 계신가요?
더보기

동기화 문제를 해결하기 위한 방법은 세 가지가 있습니다. 첫 번째 뮤텍스, 뮤텍스는 Boolean 자료형을 사용해 임계영역에 대한 lock을 걸고 해제하는 방법입니다. 프로세스가 임계영역에 대한 lock이 해제되었는지 계속해서 확인하는 busy waiting 문제가 발생하여 CPU가 낭비됩니다. 두 번째 세마포어, 세마포어는 Integer 자료형의 세마포어 변수를 이용해 여러 개의 프로세스가 임계영역에 접근할 수 있는 방법입니다. 뮤텍스의 busy waiting 문제를 해결했으며,  세마포어 변수가 반환되면 대기 큐에서 프로세스를 깨우는 방식으로 진행됩니다. 마지막으로 모니터, 모니터는 앞에 뮤텍스, 세마포어와 다르게 유저 영역에서 지원하는 방식으로, synchronized 키워드를 붙여 스레드 동기화를 제공하고 있습니다.

 

  • 뮤텍스의 장단점에 대해 설명해 주세요.
더보기

뮤텍스는 Boolean 자료형을 이용해 임계영역에 들어가면 lock을 거는 방식으로 동기화를 제공합니다. 프로세스가 lock이 해제됐는지 계속해서 확인하는 busy waiting 문제를 갖고 있으며, 이로 인해 CPU가 낭비된다는 단점을 가지고 있습니다. 하지만 lock을 획득한 프로세스의 작업 시간이 짧을 경우에는 뮤텍스를 이용하는 것이 좋습니다.

 

  • 뮤텍스의 단점을 해결하기 위한 방법은 무엇이 있나요?
더보기

뮤텍스의 단점인 Busy Waiting 문제는 세마포어가 채택하고 있는 Block And WakeUp 방식을 사용함으로써 해결할 수 있습니다. 대기 큐에 lock을 획득하지 못한 프로세스를 저장시켜 두고, lock 획득이 가능할 때 큐에서 빼내는 방식으로 단점을 개선할 수 있습니다.

 

  • 세마포어의 장단점에 대해 설명해 주세요.
더보기

세마포어는 Integer 자료형의 세마포어 변수를 이용해 임계영역에 접근할 수 있는 프로세스의 수를 제어합니다. Block And WakeUp 방식을 채택해 뮤텍스에서 CPU를 낭비하는 단점을 해결했습니다. 하지만 임계영역을 사용하는 프로세스의 작업 속도가 짧을 경우에는 대기 큐에 저장하고 빼내는 비용이 더 클 수 있다는 단점을 가집니다. 또한, 대기 큐를 사용하기 때문에 큐에서 우선순위가 낮은 프로세스는 평생 자원을 할당받지 못하는 기아 상태가 발생할 수 있습니다.

 

  • 세마포어의 단점을 해결하기 위한 방법은 무엇이 있나요?
더보기

세마포어 단점 중 하나는 대기 큐에서 우선순위가 낮은 프로세스는 평생 자원을 할당받지 못하는 기아 상태가 발생할 수 있다는 것입니다. 이를 위해 큐에서 대기하는 시간이 길어질수록 우선순위를 점차 높여주는 에이징 방식을 채택하거나 대기 큐에 먼저 들어온 프로세스가 먼저 공유 자원을 사용할 수 있도록 FIFO 방식을 채택할 수 있습니다.

 

  • 모니터의 장단점에 대해 설명해 주세요.
더보기

모니터는 뮤텍스와 세마포어와 다르게 유저 영역에서 지원하는 동기화 방식입니다. 코드를 통해 추상화되어 있어 synchronized 키워드를 붙이면 동기화가 쉽게 이뤄지는 장점을 가지고 있습니다. 하지만 애플리케이션 코드에서 제공되는 것이므로 프로세스 동기화가 아닌 스레드 동기화로 제공되는 제한을 가지고 있습니다.

 

  • 임계영역이란 무엇이죠?
더보기

임계영역이란 공유된 자원을 사용할 수 있도록 지원하는 코드 영역입니다. 뮤텍스는 lock 획득 함수, lock 해제 함수를 선언해 임계영역에 진입할 수 있으며, 세마포어는 signal 함수, wait 함수를 선언해 임계영역에 진입해 공유 자원을 사용할 수 있습니다.

 

  • 뮤텍스와 세마포어를 비교해 설명해 주세요.
더보기

뮤텍스는 공유 자원에 접근할 수 있는 프로세스의 수가 단 하나이며, lock을 건 주체가 lock을 해제할 수 있습니다. 이에 반해 세마포어는 공유 자원에 접근할 수 있는 프로세스의 수가 여러 개이며, lock을 건 주체가 아니더라도 다른 프로세스가 lock을 해제할 수 있습니다. 이처럼 공유 자원에 접근할 수 있는 프로세스의 수와 lock을 해제할 수 있는 주체가 다르다는 차이가 있습니다.

 

  • 뮤텍스와 모니터를 비교해 설명해 주세요.
더보기

뮤텍스는 커널 영역에서 제공하는 동기화 방법이며, 모니터는 유저 영역에서 제공하는 동기화 방법입니다. 따라서 커널 영역에서 제공되는 뮤텍스는 모니터보다 무겁다는 특징을 가지고, 더 넓은 범위의 프로세스 동기화까지 제공할 수 있다는 특징을 가집니다. 이에 반해 유저 영역에서 제공되는 모니터는 뮤텍스보다 가볍다는 특징을 가지고, 더 좁은 범위의 스레드 동기화를 제공한다는 특징을 가집니다.

 

  • 뮤텍스와 세마포어가 존재하는데, 모니터가 필요한 이유가 무엇인가요?
더보기

애플리케이션 코드 상에서 동기화가 필요한 상황이 존재하기 때문에 모니터가 필요합니다. 구체적으로 하나의 객체에 대해 순서대로 실행되어야 하는 함수들이 존재한다면, 객체에 synchronzed 키워드를 붙이고 객체에 대한 작업이 끝난 후에 다른 함수가 진행되도록 할 수 있습니다.

 

  • 현대 컴퓨터는 어떠한 방식으로 동기화 문제를 해결했나요?
더보기

현대 컴퓨터는 대부분 세마포어를 이용하면서, 임계 영역의 길이가 짧아 컨텍스트 스위칭 비용에 드는 비용이 클 경우에는 때에 따라 뮤텍스를 이용하고 있는 것으로 알고 있습니다.

 

댓글