백엔드 개발자를 위한 CS 면접 질문을 정리한 글입니다. 계속해서 추가될 예정입니다.
운영체제
- 프로세스와 스레드의 차이를 설명하세요.
프로세스는 실행 중인 프로그램이고, 쓰레드는 하나의 프로세스 내에 있는 실행 흐름입니다.
프로세스는 OS로부터 자원을 할당받고, 쓰레드는 프로세스로부터 자원을 할당받는다는 차이점이 있습니다.
- 컨텍스트 스위칭(문맥교환)에 대해 설명하세요.
컨텍스트 스위칭이란 CPU가 현재 실행 중인 프로세스에서 다른 우선순위가 높은 프로세스로 실행을 전환하는 것을 의미합니다. 전환하기 전에 실행 중이던 프로세스의 상태와 레지스터 값을 저장하기 때문에 전환하기 전의 프로세스로 돌아오더라도 처음부터 실행하는 것이 아니라 이어서 진행할 수 있습니다.
- 멀티 프로세스와 멀티 쓰레드의 특징에 대해 설명하세요.
멀티 프로세스는 OS에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 것입니다.
각 프로세스가 독립적인 메모리 공간을 가지기 때문에 메모리 사용량이 높고 프로세스 간 자원 공유가 복잡합니다.
하지만 하나의 프로세스가 비정상적으로 종료되더라도 다른 프로세스에 영향을 주지 않아 안정성이 높다는 장점이 있습니다.
멀티 쓰레드는 하나의 프로세스 안에 여러 개의 쓰레드가 있는 것을 의미합니다.
공유 메모리에 대해 쓰레드 간 자원 공유가 가능하므로 컨텍스트 스위칭 비용이 낮습니다.
하지만 하나의 쓰레드에 문제가 발생하면 다른 쓰레드들도 영향을 받아 전체 프로그램이 종료될 수 있으며, 또 동기화 문제가 발생할 수 있다는 단점이 있습니다.
- 멀티 쓰레드의 동시성과 병렬성을 설명하세요.
멀티 쓰레드의 동시성이란 멀티 작업을 위해 싱글 코어에서 여러 개의 쓰레드를 번갈아가며 실행하여 동시에 작업하는 것처럼 보이게 하는 것을 의미하고, 병렬성이란 멀티 작업을 위해 멀티 코어에서 한 개 이상의 쓰레드를 가진 코어들을 동시에 실행하는 것을 의미합니다.
- 멀티 쓰레드 환경의 주의사항
다수의 쓰레드가 공유 자원에 동시에 접근하는 경우 의도치 않은 값을 읽는다던가 하는 동기화 문제나 데드락 문제가 발생할 수 있어 주의해야 합니다.
- 선점형 스케줄링과 비선점형 스케줄링의 차이를 설명하세요.
선점형 스케줄링이란 CPU를 사용 중인 프로세스가 다른 프로세스에 의해 강제로 CPU를 양보해야 하는 스케줄링 방식입니다. 운영체제가 프로세스의 실행을 중간에 멈추고, 다른 프로세스에게 CPU를 할당할 수 있습니다. 사용자의 상호작용이 요구되는 시스템에서 빠른 응답이 필요할 때 유용하나, 프로세스 간의 문맥 전환이 자주 발생할 수 있어 시스템 부하가 증가할 수 있습니다.
비선점형 스케줄링은 한 번 CPU를 점유한 프로세스가 스스로 완료되거나 블록 상태에 도달하기 전까지는 CPU를 계속 점유하는 스케줄링 방식입니다. 즉, 다른 프로세스가 CPU를 차지하려면 현재 프로세스가 CPU를 자발적으로 반납해야 합니다. 이는 설계가 단순하고 프로세스 간의 충돌 관리가 쉬운 편이라는 장점이 있지만 높은 우선순위의 프로세스가 대기해야 하는 상황이 발생할 수 있어 실시간성을 요구하는 시스템에는 적합하지 않습니다.
- 교착상태와 기아상태의 해결방법에 대해 설명하세요.
교착상태는 둘 이상의 프로세스가 서로가 가진 자원을 기다리면서 영원히 실행을 진행하지 못하는 상황입니다. 예방, 회피, 탐지 및 회복을 통해 해결할 수 있습니다.
예방 방법으로는 상호 배제 예방, 비선점 예방, 점유와 대기 예방, 원형 대기 예방 방법이 있습니다.
회피는 교착상태가 발생할 수 있는지 미리 검사하여 발생할 가능성이 있다면 자원을 할당하지 않고 대기시키는 것을 말하며,
주기적으로 시스템의 할당 그래프를 분석하여 교착상태를 탐지하고, 이를 해결하기 위해 강제로 프로세스를 종료하거나 자원을 선점하여 할당된 자원을 회수(회복)할 수 있습니다.
기아상태는 특정 프로세스가 자원을 할당받지 못한 채 무한히 기다리는 상태를 말합니다. 자원을 기다리고 있지만, 다른 프로세스들이 계속 자원을 먼저 할당받아 자원을 얻지 못하는 상황입니다. 주로 우선순위 기반 스케줄링에서 우선순위가 낮은 프로세스가 무한정 기다리는 경우 발생합니다. 이를 해결하기 위해 시간이 지남에 따라 대기 중인 프로세스의 우선순위를 점차 높이는 방법이 있습니다.
- 콘보이 현상이란 무엇이고, 콘보이 현상이 발생할 수 있는 CPU 스케줄러 알고리즘은 무엇인지 설명하세요.
콘보이 현상은 프로세스 스케줄링에서 발생하는 성능 저하 현상으로, 처리 시간이 긴 작업이 CPU를 점유하고 있는 동안 처리 시간이 짧은 작업들이 대기하며 시스템 전체의 성능이 저하되는 상황을 의미합니다.
하나의 긴 작업이 다른 짧은 작업들의 진행을 막는 '병목' 역할을 하게 되어 전체적인 처리 속도가 느려집니다.
이는 마치 도로에서 느리게 가는 차량 뒤에 다른 차량들이 길게 줄을 서는 차량 행렬(콘보이)와 유사하기 때문에 콘보이 현상이라 불리우게 되었습니다.
콘보이 현상이 발생할 수 있는 CPU 스케줄러 알고리즘은 FCFS, SJF가 있습니다.
FCFS는 First-Come, First-Served로 먼저 도착한 프로세스가 먼저 CPU를 할당받는 방식입니다.
SJF는 Shortest Job First로 프로세스의 예상 실행 시간이 짧은 순서대로 CPU를 할당받는 방식입니다.
- 동기와 비동기의 차이(블로킹, 논블로킹)와 장단점에 대해 설명하세요.
동기와 비동기는 작업을 처리하는 방식에 대한 개념입니다.
동기 방식에서는 작업이 순차적으로 처리됩니다. 한 작업이 끝날 때까지 다음 작업이 실행되지 않으며, 요청한 작업이 완료될 때까지 호출한 측이 기다리는 방식입니다.
이러한 동기 방식의 장점은 단순하고 디버깅이 쉽다는 것이고, 단점은 시간이 오래 걸리는 작업이 있을 경우 비효율적이고 응답 속도가 느리다는 것입니다.
비동기 방식에서는 작업이 병렬적으로 처리됩니다. 작업을 요청한 후 그 결과를 기다리지 않고 즉시 다음 작업을 진행할 수 있으며, 작업이 완료되면 알림을 받는 방식입니다.
비동기 방식의 장점은 I/O 작업처럼 시간이 오래 걸리는 작업에서 자원 활용을 효율적으로 할 수 있고, 응답 속도가 빠르다는 것이고,
단점은 코드 흐름이 복잡하고 디버깅이 어렵다는 것입니다.
- 프로세스 동기화에 대해 설명하세요.
프로세스 동기화는 여러 프로세스나 스레드가 공유 자원에 동시에 접근하면서 데이터의 일관성이 깨지는 등의 문제를 방지하기 위해 프로세스 간의 실행 순서를 제어하거나 공유 자원에 대한 접근을 조정하는 것을 말합니다.
- 데드락에 대해 설명하세요.
데드락, 즉 교착상태는 둘 이상의 프로세스가 서로가 가진 자원을 기다리면서 영원히 실행을 진행하지 못하는 상황입니다. 예방, 회피, 탐지 및 회복을 통해 해결할 수 있습니다.
- 세마포어와 뮤텍스의 차이에 대해 설명하세요.
세마포어와 뮤텍스는 프로세스 동기화를 위한 도구입니다.
세마포어는 여러 개의 자원을 관리하거나 다중 접근이 필요한 경우에 사용되며, 주로 리소스 풀이나 네트워크 연결 관리와 같은 곳에서 사용됩니다. 반면에 뮤텍스는 단일 자원에 대한 상호 배제를 보장하며, 한 번에 하나의 프로세스/스레드만 자원에 접근해야 하는 경우에 사용된다는 차이가 있습니다.
- 임계 영역에 대해 설명하세요.
임계 영역은 여러 프로세스나 스레드가 동시에 접근해서는 안 되는 공유 자원을 다루는 코드 부분을 말합니다.
- 페이지 교체 알고리즘에 대해 설명해주세요.
페이지 교체 알고리즘은 운영체제가 메모리에 더 이상 페이지를 로드할 공간이 없을 때, 어느 페이지를 교체할지 결정하는 방법입니다.
- Thread-safe 하다는 의미와 설계하는 법을 설명해보세요.
여러 쓰레드가 동시에 실행될 때도 코드가 안전하게 작동함을 의미합니다. 즉, 동시성 문제가 발생하지 않고 예상대로 동작해야 합니다.
- 가상 메모리에 대해 설명해보세요.
가상 메모리는 실제 물리적 메모리의 크기와 상관없이, 프로그램이 더 큰 메모리 공간을 사용할 수 있게 해주는 기법입니다. 이를 통해 각 프로그램이 독립적인 메모리 공간을 사용할 수 있으며 메모리 관리 효율을 높입니다.
- 캐시의 지역성에 대해 설명해보세요.
지역성이란 프로그램이 메모리를 접근하는 방식에서 특정 패턴이 나타나는 현상을 의미합니다. 캐시는 이러한 패턴을 이용하여 메모리 접근 속도를 향상시킵니다.