Q1. 프로세스보다 스레드의 컨텍스트 스위칭이 더 빠른 이유는 무엇인가요?
스레드 컨텍스트 스위칭(Thread Context Switching)의 경우 프로세스 컨텍스트 스위칭(Process Context Switching)과 달리 MMU 새로운 주소 체계 바로보도록 수정하고 TLB 가상 메모리, 실제 메모리 저장된 캐시를 비우는 등의 메모리 주소 관련 작업을 하지 않고, CPU의 상태 정보만 바꿔주면 되기 때문입니다.
Q2. 스레드,프로세스,코어의 수는 많을수록 좋을까요?
스레드가 많으면 CPU 자원이 스레드 관리에 소모됩니다. 이로 인해 많은 스레드가 동시에 실행될 경우 메모리나 캐시, 락 등의 자원을 경쟁하게 되어 성능 저하나 데드 락이 발생할 가능성이 높아집니다.
프로세스가 많으면 메모리 사용량이 급격히 증가할 수 있습니다. 프로세스 간 통신이 필요할 경우 성능 저하가 발생할 수 있습니다. 무엇보다도 프로세스 간 컨텍스트 스위칭은 스레드 간 컨텍스트 스위칭보다 더 많은 오버헤드를 수반하기 때문에, 프로세스 수가 많아지면 시스템 성능이 저하될 수 있습니다.
코어가 많으면 CPU는 병렬 처리 성능을 향상시킬 수 있지만, CPU의 비용과 전력 소비가 증가할 수 있으며, 발열 관리도 더 복잡해집니다.
따라서 스레드, 프로세스,코어의 수가 많을수록 시스템 성능이 향상된다고 생각할 수 있지만, 실제로는 그렇지 않을 확률이 큽니다.
Q3. 시스템 콜이란 무엇인가요?
운영체제는 사용자가 실행하는 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지해 자원을 보호합니다. 왜냐하면, 프로그램이 CPU, 메모리, 하드 디스크에 마음대로 접근하고 조작할 수 있다면, 자원이 무질서하게 관리 될 수 있으며 한 프로그램의 실수가 전체 컴퓨터에 영향을 주기 때문입니다. 운영체제는 프로그램들이 자원에 접근하려 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호합니다.
사용자 모드는 운영체제 서비스를 제공받을 수 없는 실행 모드를 의미합니다. 이 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 하는데요. 말씀 주신 시스템 콜(System Call) 은 이때 운영체제 서비스를 제공받기 위한 요청을 의미합니다. 시스템 콜은 일종의 소프트웨어 인터럽트입니다. 시스템 콜을 발생시키는 명령어가 실행된다면, CPU는 현재까지의 작업을 백업한 뒤에 커널 영역 내에 시스템 콜을 수행하는 인터럽트 서비스 루틴을 실행한 이후, 다시 기존 실행하고 있었던 프로그램으로 복귀하여 실행을 계속합니다.
Q4. 디스크 접근 시간에 대해서 설명해주세요.
일반적으로 단일-헤드 디스크 시스템에서 특정 데이터 블록을 읽거나 쓰기 위해서는 헤드를 데이터가 존재하는 트랙으로 이동시키는 과정, 원하는 데이터가 저장된 섹터가 헤드 아래로 회전되어 올 때까지 기다리는 과정, 데이터를 전송하는 과정이 필요합니다. 그리고 이 모든 과정을 수행하는 데 걸리는 시간을 디스크 접근 시간(Disk Access Time) 이라고 합니다. 디스크 접근 시간은 탐색 시간, 회전 지연 시간, 데이터 전송 시간을 합쳐 계산할 수 있습니다.
Q5. 연속 메모리 할당 기법에 대해서 설명해주세요.
연속 메모리 할당 기법(Continuous Memory Allocation) 은 운영체제가 프로세스에 연속적인 메모리 공간을 할당하는 방법을 의미합니다. 연속 메모리 할당 기법을 사용하면, 하나의 프로세스는 메모리 주소 공간에서 연속적으로 존재하게 됩니다.
연속 메모리 할당 기법은 크게 가변 크기 메모리 할당과 고정 크기 메모리 할당이 존재하는데요. 고정 크기 메모리 할당은 물리적인 메모리 공간을 고정된 크기로 나누어 프로세스에 고정된 크기만큼 할당합니다. 반면, 가변 크기 메모리 할당 방식은 프로세스의 크기에 맞춰 동적으로 메모리를 할당합니다.
외부 단편화와 내부 단편화가 무엇인가요?
외부 단편화(External Fragmentation) 는 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해서 메모리가 낭비되는 현상입니다. 연속 메모리 할당 기법을 사용할 때 프로세스가 사용할 메모리 공간이 300MB라고 가정하겠습니다. 이때, 흩어져 있는 빈 공간들의 합은 300MB가 넘지만, 연속적인 300MB는 존재하지 않아 프로세스에 메모리를 할당하지 못하는 상황이 발생할 수 있습니다.
내부 단편화(Internal Fragmentation) 는 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되는 상황에서 메모리 공간이 낭비되는 상황을 의미합니다. 고정 크기 할당 방식에서 프로세스가 사용할 메모리 공간이 300MB이지만 실제로 할당된 공간은 500MB인 경우, 200MB가 낭비됩니다.
고정 크기 할당 방식은 고정된 크기만큼 프로세스에 공간을 할당하기 때문에 내부 단편화가 발생할 수 있습니다. 반면, 가변 크기 할당 방식은 필요한 크기만큼 프로세스에 할당하기 때문에 내부 단편화는 발생하지 않습니다. 단, 할당과 해제를 반복하다보면 외부 단편화가 발생할 수 있습니다.
Q6. 가상화에 대해 설명해주세요.
가상화(Virtualization) 란 하나의 물리적인 컴퓨팅 리소스를 논리적으로 분리하여 여러 개의 가상 리소스를 생성해 사용하는 기술을 의미합니다. 서버, 스토리지, 네트워크 등 다양한 IT 리소스를 가상화할 수 있으며, 클라우드 컴퓨팅에 핵심이 되는 기술 중 하나로 활용됩니다.
가상화가 왜 필요한가요?
- 서버를 가상화할 경우 물리 서버에 여러 가상 서버를 배치하여 하드웨어 리소스를 효율적으로 사용할 수 있습니다.
- 물리적인 하드웨어 수를 줄일 수 있어 초기 구축 비용 및 유지 관리 비용을 절감할 수 있습니다.
- 각 가상 리소스들은 격리되어 있어 하나의 가상 리소스에 장애가 발생해도 다른 가상 리소스에 영향을 미치지 않습니다.
- 가상 리소스를 필요에 따라 빠르게 생성하거나 삭제할 수 있어 인프라 운영이 유연해집니다.
- 가상 리소스는 소프트웨어 기반이기 때문에 장애 복구가 용이하고 가용성을 높일 수 있습니다.
VM과 컨테이너의 차이점을 알고 계신가요?
VM은 하이퍼바이저를 통해 호스트 시스템에서 다수의 게스트 OS를 동시에 실행하는 기술입니다. VM은 다양한 OS를 실행할 수 있고 높은 수준의 격리를 제공하지만, 게스트 OS를 포함하기 때문에 무겁고 성능이 느리다는 단점이 있습니다.
컨테이너는 호스트 OS의 커널을 공유하며, 컨테이너 이미지를 통해 애플리케이션을 실행하는 기술입니다. 컨테이너는 VM보다 가볍고 빠른 성능, 높은 확장성을 보이지만, 커널을 공유하기 때문에 보안에 취약할 수 있고 호스트 OS와 동일한 환경으로 구성해야 한다는 단점이 있습니다.
다양한 OS가 필요한 환경이거나 높은 격리 수준이 중요할 경우 VM을 사용하고, 빠른 배포와 확장이 필요한 클라우드 네이티브 환경이거나 마이크로서비스 아키텍처를 활용할 경우 컨테이너를 사용할 수 있습니다. 하지만 VM과 컨테이너는 서로 대체하는 기술이 아니기 때문에 VM 위에서 컨테이너를 실행하는 방식과 같이 목적에 따라 함께 활용할 수도 있습니다.
Q7. 멀티 프로그래밍과 멀티 태스킹의 차이는 무엇인가요?
멀티 프로그래밍은 단일 프로세스 시스템과 달리 하나의 프로세스가 IO 작업을 하게 되어 대기하게 되면, 다른 프로세스가 실행되어 CPU가 아무 일도 하지 않는 시간을 줄입니다. 멀티 프로그래밍의 주된 목적은 CPU 사용률을 극대화 하는데 있습니다.
멀티태스킹과 멀티프로그래밍은 동시에 여러 프로그램을 실행시킨다는 면에서 유사하지만, CPU 타임을 아주 짧게 쪼개서 CPU 타임 안에서 프로세스들이 서로 번갈아 가면서 실행될 수 있도록 했다는 점이 차이가 있습니다.
멀티태스킹은 프로세스의 응답 시간을 최소화 시키는데 목적입니다. 응답시간을 최소화 시킨다는 것은 사용자 입장에서 마치 정말 여러 프로그램이 동시에 실행되는 것 처럼 느껴지게 만듭니다. 아주 짧은 타임 슬라이스 안에서 여러 프로세스들이 교대로 실행이 되면서 즉각적인 응답을 보여줍니다.
멀티태스킹의 핵심은 타임 슬롯을 아주 짧게 쪼개서 프로세스들이 번갈아가며 실행을 하게 됨으로써 어떤 프로그램을 실행시키거나 어떤 동작을 했을 때 즉각적인 반응을 받을 수 있도록 하여 동시에 여러 프로그램이 실행되는 것과 같은 느낌을 주는 것 입니다.
이 페이지는 면접 준비를 위한 정리 페이지입니다.