CS 기초 · 중급
멀티스레드 환경에서 공유 자원에 대한 동시성 문제를 해결하기 위한 세마포어(Semaphore)와 뮤텍스(Mutex)의 차이점을 설명하고, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 시나리오를 제시해주세요.
힌트 · 뮤텍스는 이진 세마포어의 한 형태로, 주로 임계 구역 보호에 사용됩니다. 세마포어는 자원의 개수를 나타내는 카운터를 사용하여 여러 개의 자원에 대한 접근을 제어할 수 있습니다.
세마포어뮤텍스상호 배제카운팅 세마포어이진 세마포어
모범답안
세마포어와 뮤텍스는 모두 멀티스레드 환경에서 공유 자원에 대한 동시성 문제를 해결하기 위한 도구입니다. 가장 큰 차이점은 뮤텍스는 상호 배제(Mutual Exclusion)를 위한 잠금 메커니즘이고, 세마포어는 더 일반적인 신호 메커니즘이라는 점입니다.
뮤텍스는 특정 스레드만이 잠금을 해제할 수 있습니다. 즉, 한 스레드가 뮤텍스를 획득하면 다른 스레드는 해당 뮤텍스를 획득할 수 없고, 획득한 스레드만이 해제할 수 있습니다. 주로 임계 구역을 보호하여 단 하나의 스레드만 접근하도록 보장할 때 사용합니다. 예를 들어, 파일에 데이터를 쓰는 작업을 여러 스레드가 동시에 수행하지 않도록 할 때 뮤텍스를 사용할 수 있습니다.
세마포어는 자원의 개수를 나타내는 카운터를 가지고 있습니다. 이 카운터 값을 통해 여러 스레드가 동시에 자원에 접근할 수 있도록 제어합니다. 세마포어는 다른 스레드가 해제할 수 있으며, 카운팅 세마포어는 여러 개의 자원에 대한 접근을 제어할 때 유용합니다. 예를 들어, 데이터베이스 연결 풀에서 사용 가능한 연결 수를 제한할 때 세마포어를 사용하여 동시에 접속할 수 있는 스레드 수를 제어할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 운영체제 면접 질문
- 가상 메모리(Virtual Memory)의 개념과 작동 원리를 설명하고, 실제 물리 메모리보다 큰 프로그램을 실행할 수 있게 하는 핵심적인 메커니즘은 무엇인지 구체적인 예시를 들어 설명해보세요.
- 페이징(Paging) 기법이 가상 메모리 시스템에서 어떻게 작동하는지 설명하고, 페이지 테이블(Page Table)과 TLB(Translation Lookaside Buffer)의 역할 및 이들이 메모리 접근 속도에 미치는 영향에 대해 논해보세요.
- 운영체제의 CPU 스케줄링 알고리즘 중 라운드 로빈(Round Robin)과 우선순위(Priority) 스케줄링의 특징과 장단점을 비교 설명하고, 각각 어떤 종류의 시스템 환경에 적합한지 예를 들어 설명해주세요.
- NUMA(Non-Uniform Memory Access) 아키텍처 환경에서 애플리케이션의 메모리 접근 성능을 최적화하기 위한 OS 수준의 고려사항과 구체적인 전략에 대해 설명해 주십시오. 특히, 메모리 할당 정책과 스케줄링 관점에서 어떤 최적화 기법을 적용할 수 있을까요?
- 리눅스 커널의 Completely Fair Scheduler(CFS)는 공정성을 유지하면서도 처리량을 극대화하기 위해 어떤 핵심적인 원리들을 적용하고 있습니까? 특히, `vruntime`과 레드-블랙 트리를 활용한 스케줄링 큐 관점에서 CFS의 동작 방식을 심층적으로 설명해 주십시오.
- 시스템의 물리 메모리가 고갈될 위기에 처했을 때, 리눅스 OOM Killer는 어떤 기준으로 프로세스를 선택하여 종료시키며, OOM Killer의 동작 방식이 애플리케이션의 안정성과 가용성에 미치는 영향은 무엇입니까? OOM Killer의 동작을 제어하거나 회피할 수 있는 OS 수준의 설정 및 설계 기법에 대해 논하시오.