패스잇

CS 기초

운영체제 면접 질문

프로세스와 스레드, 컨텍스트 스위칭, 스케줄링, 가상 메모리, 동기화 — 운영체제 면접은 자원을 어떻게 관리하고 동시성을 제어하는지를 봅니다. 핵심 개념을 모범답안과 함께 담았습니다.

총 21문제 · 기초 7 · 중급 7 · 심화 7 · 모범답안 포함

운영체제 면접 질문 — 기초

Q1 기초

운영체제(OS)의 개념을 정의하고, 사용자 또는 다른 소프트웨어를 위해 수행하는 핵심적인 역할 세 가지를 설명해 주세요.

힌트 · 자원 관리, 프로세스 관리, 파일 시스템 관리, 사용자 인터페이스 제공 등을 핵심 역할로 설명할 수 있습니다.

운영체제(OS)는 컴퓨터 하드웨어와 사용자 사이의 인터페이스 역할을 하는 핵심 소프트웨어입니다. 쉽게 말해, 컴퓨터를 켜면 가장 먼저 실행되어 하드웨어를 관리하고, 응용 프로그램이 실행될 수 있는 환경을 제공하는 프…

전체 모범답안 펼치기

운영체제(OS)는 컴퓨터 하드웨어와 사용자 사이의 인터페이스 역할을 하는 핵심 소프트웨어입니다. 쉽게 말해, 컴퓨터를 켜면 가장 먼저 실행되어 하드웨어를 관리하고, 응용 프로그램이 실행될 수 있는 환경을 제공하는 프로그램이라고 생각하시면 됩니다.

OS의 핵심적인 역할 세 가지는 다음과 같습니다.

첫째, 자원 관리입니다. CPU, 메모리, 저장 장치 등 한정된 하드웨어 자원을 효율적으로 관리하고, 여러 프로그램이 동시에 사용할 수 있도록 스케줄링합니다.

둘째, 프로세스 관리입니다. 프로그램의 실행 단위를 프로세스라고 하는데, OS는 프로세스를 생성, 실행, 종료하고, 프로세스 간의 통신을 지원합니다.

셋째, 파일 시스템 관리입니다. 데이터를 파일과 디렉토리 형태로 저장하고 관리하며, 사용자가 파일을 쉽게 찾고 접근할 수 있도록 체계적인 구조를 제공합니다. 이러한 역할들을 통해 OS는 사용자와 소프트웨어가 하드웨어의 복잡성을 몰라도 편리하게 컴퓨터를 사용할 수 있도록 추상화된 인터페이스를 제공합니다.

#자원 관리#추상화#인터페이스#프로세스 관리#커널

이 질문 단독 페이지 →

Q2 기초

운영체제의 핵심 구성 요소인 커널(Kernel)은 무엇이며, 시스템에서 어떤 중요한 기능을 담당하는지 설명해 주세요.

힌트 · 하드웨어와 소프트웨어 간의 인터페이스 역할을 하며, 프로세스, 메모리, 장치 관리 등의 핵심 기능을 담당합니다.

커널은 운영체제의 핵심이라고 할 수 있으며, 하드웨어와 소프트웨어 사이의 다리 역할을 합니다. 쉽게 말해, 컴퓨터의 모든 자원을 관리하고 제어하는 역할을 담당합니다.

전체 모범답안 펼치기

커널은 운영체제의 핵심이라고 할 수 있으며, 하드웨어와 소프트웨어 사이의 다리 역할을 합니다. 쉽게 말해, 컴퓨터의 모든 자원을 관리하고 제어하는 역할을 담당합니다.

커널의 주요 기능으로는 크게 프로세스 관리, 메모리 관리, 그리고 입출력(I/O) 관리가 있습니다. 프로세스 관리는 프로그램의 실행과 스케줄링을 담당하고, 메모리 관리는 시스템의 메모리를 효율적으로 할당하고 회수합니다. I/O 관리는 키보드, 마우스, 디스크 등 주변 장치와의 통신을 관리합니다.

사용자 프로그램은 직접 하드웨어에 접근할 수 없기 때문에, 커널이 제공하는 시스템 호출이라는 인터페이스를 통해 필요한 기능을 요청합니다. 커널은 이러한 요청을 받아 하드웨어를 제어하고 결과를 사용자 프로그램에 전달합니다. 즉, 커널은 하드웨어를 추상화하여 사용자 프로그램이 하드웨어의 복잡성을 몰라도 쉽게 사용할 수 있도록 돕습니다.

#프로세스 관리#메모리 관리#I/O 관리#시스템 호출#하드웨어 추상화

이 질문 단독 페이지 →

Q3 기초

컴퓨터 시스템에서 '프로세스(Process)'란 무엇을 의미하며, 프로그램과 어떤 차이가 있는지 구체적으로 설명해 주세요.

힌트 · 프로세스는 실행 중인 프로그램의 인스턴스이며, 프로그램은 정적인 파일인 반면 프로세스는 동적인 실행 단위입니다.

"네, 프로세스에 대해 설명드리겠습니다. 프로세스는 간단히 말해 '실행 중인 프로그램'이라고 할 수 있습니다. 프로그램은 디스크에 저장된 정적인 파일, 즉 명령어들의 집합일 뿐입니다. 예를 들어, 워드 프로세서 프로…

전체 모범답안 펼치기

"네, 프로세스에 대해 설명드리겠습니다. 프로세스는 간단히 말해 '실행 중인 프로그램'이라고 할 수 있습니다. 프로그램은 디스크에 저장된 정적인 파일, 즉 명령어들의 집합일 뿐입니다. 예를 들어, 워드 프로세서 프로그램 파일이 있다고 할 때, 이 파일을 더블 클릭해서 실행하면 워드 프로세서의 프로세스가 생성되는 것이죠.

프로세스는 프로그램이 실행되기 위해 운영체제로부터 메모리 공간, CPU 시간, 파일 시스템 접근 권한 등 필요한 자원을 할당받은 동적인 실행 단위를 의미합니다. 따라서 같은 프로그램을 여러 번 실행하면 여러 개의 독립적인 프로세스가 생성될 수 있습니다. 각 프로세스는 자신만의 메모리 공간을 가지고 다른 프로세스의 메모리에 직접 접근할 수 없습니다. 이것이 프로그램과 프로세스의 가장 큰 차이점입니다."

#프로세스#프로그램#실행#메모리#자원

이 질문 단독 페이지 →

Q4 기초

프로세스 내에서 '스레드(Thread)'는 어떤 역할을 하며, 멀티스레딩이 필요한 주된 이유를 설명해 주세요.

힌트 · 스레드는 프로세스 내의 실행 흐름 단위로, 자원을 공유하며 병렬성을 높여 시스템 효율을 개선하기 위해 사용됩니다.

프로세스 내에서 스레드는 독립적인 실행 흐름의 단위입니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 각 스레드는 자신만의 실행 경로를 가지지만, 프로세스의 메모리 공간, 파일 핸들 등 자원을 공유합니다…

전체 모범답안 펼치기

프로세스 내에서 스레드는 독립적인 실행 흐름의 단위입니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 각 스레드는 자신만의 실행 경로를 가지지만, 프로세스의 메모리 공간, 파일 핸들 등 자원을 공유합니다.

멀티스레딩이 필요한 주된 이유는 동시성병렬성을 높여 시스템 효율을 개선하기 위해서입니다. 예를 들어, 사용자 인터페이스를 제공하는 애플리케이션에서 한 스레드는 사용자 입력을 처리하고, 다른 스레드는 백그라운드에서 데이터를 다운로드하는 작업을 동시에 수행할 수 있습니다. 이를 통해 사용자 경험의 응답성을 크게 향상시킬 수 있습니다. 또한, 멀티코어 프로세서 환경에서는 여러 스레드가 동시에 실행되어 실제 병렬 처리를 통해 작업 완료 시간을 단축할 수 있습니다. 스레드 간의 자원 공유는 프로세스 생성보다 훨씬 적은 오버헤드를 가지므로, 더 효율적인 자원 활용이 가능합니다.

#동시성#병렬성#자원 공유#문맥 교환#응답성

이 질문 단독 페이지 →

Q5 기초

운영체제가 프로세스를 관리할 때, 프로세스가 가질 수 있는 주요 상태(예: 생성, 준비, 실행, 대기, 종료)들에 대해 각각 설명해 주세요.

힌트 · 각 상태의 정의와 상태 전이 조건(예: CPU 할당, I/O 요청)을 간략하게 설명해야 합니다.

운영체제가 프로세스를 관리할 때, 프로세스는 여러 상태를 거치게 됩니다. 주요 상태로는 먼저 '생성(New)' 상태가 있습니다. 이 상태는 프로세스가 막 생성되어 운영체제에 의해 초기화되는 단계입니다.

전체 모범답안 펼치기

운영체제가 프로세스를 관리할 때, 프로세스는 여러 상태를 거치게 됩니다. 주요 상태로는 먼저 '생성(New)' 상태가 있습니다. 이 상태는 프로세스가 막 생성되어 운영체제에 의해 초기화되는 단계입니다.

다음은 '준비(Ready)' 상태입니다. 프로세스가 실행될 준비는 되었지만, CPU를 할당받지 못해 대기하는 상태입니다. 준비 큐에서 기다리다가 CPU를 얻으면 '실행(Running)' 상태로 전환됩니다.

'실행(Running)' 상태는 프로세스가 실제로 CPU를 할당받아 명령을 수행하는 상태입니다. 실행 중에 I/O 요청이나 인터럽트가 발생하면 '대기(Waiting)' 상태로 갈 수 있습니다.

'대기(Waiting)' 상태는 프로세스가 I/O 작업이 완료되거나 특정 이벤트가 발생하기를 기다리는 상태입니다. 이 기다림이 끝나면 다시 '준비(Ready)' 상태로 돌아가 CPU 할당을 기다립니다.

마지막으로 '종료(Terminated)' 상태는 프로세스가 실행을 마치거나 오류로 인해 종료된 상태입니다. 운영체제는 이 상태의 프로세스를 정리합니다.

#생성#준비#실행#대기#종료

이 질문 단독 페이지 →

Q6 기초

운영체제에서 'CPU 스케줄링'이 필요한 이유와 그 기본적인 목적은 무엇인지 설명해 주세요.

힌트 · 여러 프로세스가 CPU를 효율적으로 공유하고, 시스템 처리율을 높이며, 응답 시간을 최적화하기 위함입니다.

운영체제에서 CPU 스케줄링이 필요한 이유는 크게 두 가지입니다. 첫째, 여러 프로세스가 동시에 실행될 때 CPU라는 한정된 자원을 효율적으로 나누어 쓰기 위해서입니다. 만약 스케줄링이 없다면 특정 프로세스가 CPU…

전체 모범답안 펼치기

운영체제에서 CPU 스케줄링이 필요한 이유는 크게 두 가지입니다. 첫째, 여러 프로세스가 동시에 실행될 때 CPU라는 한정된 자원을 효율적으로 나누어 쓰기 위해서입니다. 만약 스케줄링이 없다면 특정 프로세스가 CPU를 독점하여 다른 프로세스들이 멈춰있는 상황이 발생할 수 있습니다.

둘째, 시스템의 전체적인 성능을 향상시키기 위함입니다. CPU 스케줄링은 프로세스들의 우선순위, 중요도, CPU 사용 시간 등을 고려하여 실행 순서를 결정함으로써, 전체 시스템의 처리량(throughput)을 높이고, 사용자에게 빠른 응답 시간(response time)을 제공하며, 모든 프로세스에게 공정한(fairness) 기회를 제공하는 것을 목표로 합니다. 즉, CPU를 최대한 활용하면서 사용자 경험을 개선하는 것이죠.

#프로세스#자원 활용#응답 시간#공정성#처리량

이 질문 단독 페이지 →

Q7 기초

'가상 메모리(Virtual Memory)'는 무엇이며, 이 기술이 시스템 메모리 관리에서 어떤 이점을 제공하는지 설명해 주세요.

힌트 · 실제 물리 메모리보다 큰 주소 공간을 제공하며, 메모리 보호 및 효율적인 메모리 사용을 가능하게 하는 기술입니다.

가상 메모리는 프로세스가 실제 물리 메모리보다 더 큰 메모리 공간을 사용하는 것처럼 보이게 하는 기술입니다. 각 프로세스에게 독립적인 가상 주소 공간을 제공하고, 이 가상 주소를 실제 물리 주소로 변환하는 방식으로…

전체 모범답안 펼치기

가상 메모리는 프로세스가 실제 물리 메모리보다 더 큰 메모리 공간을 사용하는 것처럼 보이게 하는 기술입니다. 각 프로세스에게 독립적인 가상 주소 공간을 제공하고, 이 가상 주소를 실제 물리 주소로 변환하는 방식으로 작동합니다.

가상 메모리의 가장 큰 장점은 다음과 같습니다. 첫째, 물리 메모리보다 큰 프로그램을 실행할 수 있게 해줍니다. 둘째, 각 프로세스가 독립적인 주소 공간을 가지므로 메모리 보호가 가능해집니다. 한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않도록 격리할 수 있습니다. 셋째, 메모리를 효율적으로 사용할 수 있습니다. 당장 사용하지 않는 페이지는 디스크의 스왑 공간에 저장해두고, 필요할 때 물리 메모리로 가져와 사용할 수 있습니다. 이를 통해 물리 메모리의 활용도를 높일 수 있습니다.

#가상 주소#물리 주소#페이지 테이블#메모리 보호#스왑 공간

이 질문 단독 페이지 →

읽기만으론 부족합니다 — 직접 말해보세요

패스잇 앱에서 운영체제 질문에 직접 답하면 AI가 1:1로 답변을 코칭합니다.

운영체제 면접 질문 — 중급

Q8 중급

프로세스와 스레드의 주요 차이점을 설명하고, 특정 애플리케이션 개발 시 어떤 기준으로 둘 중 하나를 선택할지 구체적인 시나리오를 들어 설명해보세요.

힌트 · 프로세스는 독립적인 자원을 가지며, 스레드는 프로세스 내에서 자원을 공유하는 실행 단위입니다. 자원 공유의 필요성과 오버헤드를 고려하여 선택합니다.

프로세스와 스레드의 가장 큰 차이는 자원 독립성입니다. 프로세스는 독립적인 메모리 공간과 자원을 할당받아 다른 프로세스와 완전히 분리되어 실행됩니다. 반면, 스레드는 프로세스 내에서 메모리, 파일 등의 자원을 공유하…

전체 모범답안 펼치기

프로세스와 스레드의 가장 큰 차이는 자원 독립성입니다. 프로세스는 독립적인 메모리 공간과 자원을 할당받아 다른 프로세스와 완전히 분리되어 실행됩니다. 반면, 스레드는 프로세스 내에서 메모리, 파일 등의 자원을 공유하며 실행되는 더 작은 실행 단위입니다.

어떤 것을 선택할지는 애플리케이션의 특성에 따라 달라집니다. 예를 들어, 이미지 편집 프로그램처럼 여러 이미지를 동시에 처리해야 하는 경우, 각 이미지를 별도의 프로세스로 처리하면 안정성이 높아집니다. 하나의 이미지 처리 과정에서 오류가 발생해도 다른 이미지 처리에는 영향을 주지 않기 때문입니다.

반면, 웹 서버처럼 많은 클라이언트 요청을 동시에 처리해야 하는 경우에는 스레드를 사용하는 것이 효율적입니다. 스레드는 프로세스보다 생성 및 컨텍스트 스위칭 비용이 저렴하여 더 많은 요청을 빠르게 처리할 수 있습니다. 자원 공유를 통해 메모리 사용량도 줄일 수 있습니다.

#프로세스#스레드#자원 공유#컨텍스트 스위칭#병렬성

이 질문 단독 페이지 →

Q9 중급

운영체제에서 컨텍스트 스위칭(Context Switching)이 발생하는 과정과 이로 인해 발생할 수 있는 성능상의 오버헤드에 대해 설명하고, 이를 최소화하기 위한 방법은 무엇이 있을까요?

힌트 · 현재 프로세스의 상태를 저장하고 다음 프로세스의 상태를 로드하는 과정이며, 이 과정에서 CPU 캐시 무효화 및 레지스터 저장/복원 비용이 발생합니다. 스레드 사용이나 효율적인 스케줄링으로 오버헤드를 줄일 수 있습니다.

컨텍스트 스위칭은 운영체제가 CPU를 다른 프로세스에게 넘겨주기 위해 현재 프로세스의 상태를 저장하고, 다음 프로세스의 상태를 복원하는 과정입니다. 이때 PCB(Process Control Block)에 레지스터 값…

전체 모범답안 펼치기

컨텍스트 스위칭은 운영체제가 CPU를 다른 프로세스에게 넘겨주기 위해 현재 프로세스의 상태를 저장하고, 다음 프로세스의 상태를 복원하는 과정입니다. 이때 PCB(Process Control Block)에 레지스터 값, 메모리 정보 등을 저장하고, 다음 프로세스의 PCB로부터 해당 정보를 로드합니다.

컨텍스트 스위칭은 CPU 캐시, TLB(Translation Lookaside Buffer) 무효화, 레지스터 저장/복원 등의 오버헤드를 발생시켜 성능 저하를 유발할 수 있습니다.

이러한 오버헤드를 줄이기 위해 다음과 같은 방법을 고려할 수 있습니다. 첫째, 스레드를 사용하여 컨텍스트 스위칭 비용을 줄일 수 있습니다. 스레드는 프로세스 내에서 자원을 공유하므로 컨텍스트 스위칭 비용이 더 적게 듭니다. 둘째, 스케줄링 알고리즘을 최적화하여 컨텍스트 스위칭 횟수를 줄일 수 있습니다. 예를 들어, 우선순위 스케줄링이나 Round Robin 스케줄링의 time slice 크기를 조정하여 불필요한 컨텍스트 스위칭을 줄일 수 있습니다. 셋째, CPU 캐시 효율성을 높이는 코드를 작성하여 캐시 미스율을 줄이는 것도 도움이 됩니다.

#PCB#레지스터#캐시#TLB#스케줄링

이 질문 단독 페이지 →

Q10 중급

교착상태(Deadlock)가 발생하는 4가지 필수 조건을 설명하고, 실제 시스템에서 교착상태를 예방하거나 회피하기 위한 대표적인 기법들을 제시해주세요.

힌트 · 상호 배제, 점유 및 대기, 비선점, 순환 대기 조건이 충족될 때 발생합니다. 은행원 알고리즘이나 자원 순서 할당 등의 기법이 있습니다.

교착 상태는 여러 프로세스가 서로 원하는 자원을 점유하고 놓아주지 않아, 모든 프로세스가 영원히 대기하는 상황을 말합니다. 발생 조건은 크게 네 가지입니다.

전체 모범답안 펼치기

교착 상태는 여러 프로세스가 서로 원하는 자원을 점유하고 놓아주지 않아, 모든 프로세스가 영원히 대기하는 상황을 말합니다. 발생 조건은 크게 네 가지입니다.

첫째, 상호 배제입니다. 자원은 한 번에 하나의 프로세스만 사용할 수 있어야 합니다. 둘째, 점유 및 대기입니다. 프로세스가 이미 자원을 가지고 있으면서, 다른 자원을 기다려야 합니다. 셋째, 비선점입니다. 프로세스가 사용 중인 자원을 강제로 빼앗을 수 없습니다. 넷째, 순환 대기입니다. 프로세스들이 서로 꼬리 물기 형태로 자원을 기다리는 상황입니다.

교착 상태를 예방하는 방법으로는 자원 순서 할당이 있습니다. 모든 자원에 고유한 순서를 부여하고, 프로세스가 순서대로 자원을 요청하도록 하는 것입니다. 회피 기법으로는 은행원 알고리즘이 있습니다. 시스템이 안전 상태를 유지하도록 자원 할당량을 조절하는 방식입니다. 자원 할당 그래프를 활용하여 교착 상태 가능성을 미리 탐지하는 방법도 있습니다.

#상호 배제#점유 대기#비선점#순환 대기#자원 할당 그래프

이 질문 단독 페이지 →

Q11 중급

가상 메모리(Virtual Memory)의 개념과 작동 원리를 설명하고, 실제 물리 메모리보다 큰 프로그램을 실행할 수 있게 하는 핵심적인 메커니즘은 무엇인지 구체적인 예시를 들어 설명해보세요.

힌트 · 물리 메모리의 제약을 극복하기 위해 디스크 공간을 활용하며, MMU를 통해 가상 주소를 물리 주소로 변환합니다. 필요한 부분만 메모리에 로드하고 나머지는 스왑 공간에 저장합니다.

가상 메모리는 물리 메모리보다 큰 프로그램을 실행할 수 있게 해주는 기술입니다. 각 프로세스에게 독립적인 가상 주소 공간을 제공하고, 실제로는 필요한 부분만 물리 메모리에 로드합니다.

전체 모범답안 펼치기

가상 메모리는 물리 메모리보다 큰 프로그램을 실행할 수 있게 해주는 기술입니다. 각 프로세스에게 독립적인 가상 주소 공간을 제공하고, 실제로는 필요한 부분만 물리 메모리에 로드합니다.

작동 원리는 이렇습니다. 프로그램은 가상 주소를 사용하고, MMU(Memory Management Unit)라는 하드웨어가 이 가상 주소를 물리 주소로 변환합니다. 이 변환 과정에서 페이지 테이블이라는 자료구조가 사용됩니다.

만약 프로그램이 접근하려는 페이지가 물리 메모리에 없다면, 페이지 폴트가 발생합니다. 이때 OS는 디스크의 스왑 공간에서 해당 페이지를 찾아 물리 메모리에 로드합니다. 이를 요구 페이징이라고 합니다.

예를 들어, 8GB RAM을 가진 시스템에서 10GB 크기의 게임을 실행한다고 가정해봅시다. 게임의 모든 부분을 RAM에 올릴 수 없지만, 가상 메모리 덕분에 현재 플레이어가 있는 지역, 필요한 텍스처 등 일부만 RAM에 로드하고 나머지는 스왑 공간에 저장하여 게임을 실행할 수 있습니다. 자주 사용하는 주소 변환은 TLB라는 캐시에 저장하여 성능을 향상시킵니다.

#가상 주소 공간#페이지 테이블#페이지 폴트#요구 페이징#TLB (Translation Lookaside Buffer)

이 질문 단독 페이지 →

Q12 중급

페이징(Paging) 기법이 가상 메모리 시스템에서 어떻게 작동하는지 설명하고, 페이지 테이블(Page Table)과 TLB(Translation Lookaside Buffer)의 역할 및 이들이 메모리 접근 속도에 미치는 영향에 대해 논해보세요.

힌트 · 가상 주소를 고정된 크기의 페이지로 나누고 물리 메모리의 프레임에 매핑합니다. 페이지 테이블은 매핑 정보를 저장하며, TLB는 이 변환 과정을 가속화하는 캐시 역할을 합니다.

페이징은 가상 메모리 시스템에서 메모리를 관리하는 중요한 기법입니다. 가상 주소 공간을 고정된 크기의 페이지로 나누고, 이 페이지들을 물리 메모리의 프레임에 매핑합니다.

전체 모범답안 펼치기

페이징은 가상 메모리 시스템에서 메모리를 관리하는 중요한 기법입니다. 가상 주소 공간을 고정된 크기의 페이지로 나누고, 이 페이지들을 물리 메모리의 프레임에 매핑합니다.

페이지 테이블은 가상 페이지 번호와 물리 프레임 번호 간의 매핑 정보를 저장하는 테이블입니다. CPU가 가상 주소에 접근하려고 할 때, 페이지 테이블을 참조하여 해당 가상 페이지가 어떤 물리 프레임에 매핑되어 있는지 확인합니다. 만약 페이지 테이블에 해당 정보가 없다면 페이지 폴트가 발생하고, 운영체제는 디스크에서 해당 페이지를 가져와 물리 메모리에 로드합니다.

TLB는 페이지 테이블에 대한 캐시 역할을 합니다. 최근에 사용된 가상-물리 주소 변환 정보를 저장하여 페이지 테이블 접근 횟수를 줄이고 메모리 접근 속도를 향상시킵니다. TLB에 원하는 정보가 있다면 (TLB hit), 페이지 테이블을 거치지 않고 바로 물리 주소를 얻을 수 있어 메모리 접근 시간을 크게 단축할 수 있습니다. TLB miss가 발생하면 페이지 테이블을 참조해야 하므로 메모리 접근 시간이 늘어납니다.

#가상 메모리#페이지 테이블#TLB#페이지 폴트#주소 변환

이 질문 단독 페이지 →

Q13 중급

운영체제의 CPU 스케줄링 알고리즘 중 라운드 로빈(Round Robin)과 우선순위(Priority) 스케줄링의 특징과 장단점을 비교 설명하고, 각각 어떤 종류의 시스템 환경에 적합한지 예를 들어 설명해주세요.

힌트 · 라운드 로빈은 시분할 시스템에서 공평한 자원 분배에 유리하며, 우선순위 스케줄링은 중요 작업의 빠른 처리가 필요한 실시간 시스템에 적합합니다. 기아 현상 발생 가능성도 고려해야 합니다.

라운드 로빈 스케줄링과 우선순위 스케줄링은 CPU 스케줄링의 대표적인 알고리즘입니다.

전체 모범답안 펼치기

라운드 로빈 스케줄링과 우선순위 스케줄링은 CPU 스케줄링의 대표적인 알고리즘입니다.

라운드 로빈은 각 프로세스에 동일한 시간 할당량(타임 슬라이스)을 부여하고, 큐에 들어온 순서대로 CPU를 할당하는 방식입니다. 공정성이 높고 응답 시간이 비교적 빠르다는 장점이 있지만, 문맥 교환 오버헤드가 발생할 수 있고, 모든 프로세스에 동일한 중요도를 부여하기 때문에 특정 작업에 불리할 수 있습니다. 시분할 시스템이나 여러 사용자가 동시에 사용하는 환경에 적합합니다. 예를 들어, 웹 서버에서 여러 사용자의 요청을 처리할 때 라운드 로빈을 사용하여 각 요청에 공평하게 CPU 시간을 할당할 수 있습니다.

반면, 우선순위 스케줄링은 각 프로세스에 우선순위를 부여하고, 높은 우선순위의 프로세스부터 CPU를 할당하는 방식입니다. 중요도가 높은 작업을 빠르게 처리할 수 있다는 장점이 있지만, 낮은 우선순위의 프로세스가 CPU를 할당받지 못하는 기아 현상이 발생할 수 있습니다. 실시간 시스템이나 특정 작업의 중요도가 높은 환경에 적합합니다. 예를 들어, 항공기 제어 시스템에서 엔진 제어와 같은 중요한 작업에 높은 우선순위를 부여하여 즉각적으로 처리할 수 있도록 합니다. 기아 현상을 방지하기 위해 에이징 기법 등을 함께 사용하기도 합니다.

#라운드 로빈#우선순위 스케줄링#타임 슬라이스#기아 현상#응답 시간

이 질문 단독 페이지 →

Q14 중급

멀티스레드 환경에서 공유 자원에 대한 동시성 문제를 해결하기 위한 세마포어(Semaphore)와 뮤텍스(Mutex)의 차이점을 설명하고, 각각 어떤 상황에서 더 적합하게 사용될 수 있는지 구체적인 시나리오를 제시해주세요.

힌트 · 뮤텍스는 이진 세마포어의 한 형태로, 주로 임계 구역 보호에 사용됩니다. 세마포어는 자원의 개수를 나타내는 카운터를 사용하여 여러 개의 자원에 대한 접근을 제어할 수 있습니다.

세마포어와 뮤텍스는 모두 멀티스레드 환경에서 공유 자원에 대한 동시성 문제를 해결하기 위한 도구입니다. 가장 큰 차이점은 뮤텍스는 상호 배제(Mutual Exclusion)를 위한 잠금 메커니즘이고, 세마포어는 더…

전체 모범답안 펼치기

세마포어와 뮤텍스는 모두 멀티스레드 환경에서 공유 자원에 대한 동시성 문제를 해결하기 위한 도구입니다. 가장 큰 차이점은 뮤텍스는 상호 배제(Mutual Exclusion)를 위한 잠금 메커니즘이고, 세마포어는 더 일반적인 신호 메커니즘이라는 점입니다.

뮤텍스는 특정 스레드만이 잠금을 해제할 수 있습니다. 즉, 한 스레드가 뮤텍스를 획득하면 다른 스레드는 해당 뮤텍스를 획득할 수 없고, 획득한 스레드만이 해제할 수 있습니다. 주로 임계 구역을 보호하여 단 하나의 스레드만 접근하도록 보장할 때 사용합니다. 예를 들어, 파일에 데이터를 쓰는 작업을 여러 스레드가 동시에 수행하지 않도록 할 때 뮤텍스를 사용할 수 있습니다.

세마포어는 자원의 개수를 나타내는 카운터를 가지고 있습니다. 이 카운터 값을 통해 여러 스레드가 동시에 자원에 접근할 수 있도록 제어합니다. 세마포어는 다른 스레드가 해제할 수 있으며, 카운팅 세마포어는 여러 개의 자원에 대한 접근을 제어할 때 유용합니다. 예를 들어, 데이터베이스 연결 풀에서 사용 가능한 연결 수를 제한할 때 세마포어를 사용하여 동시에 접속할 수 있는 스레드 수를 제어할 수 있습니다.

#세마포어#뮤텍스#상호 배제#카운팅 세마포어#이진 세마포어

이 질문 단독 페이지 →

운영체제 면접 질문 — 심화

Q15 심화

NUMA(Non-Uniform Memory Access) 아키텍처 환경에서 애플리케이션의 메모리 접근 성능을 최적화하기 위한 OS 수준의 고려사항과 구체적인 전략에 대해 설명해 주십시오. 특히, 메모리 할당 정책과 스케줄링 관점에서 어떤 최적화 기법을 적용할 수 있을까요?

힌트 · `numactl`과 같은 도구를 활용한 프로세스-메모리 바인딩, 페이지 마이그레이션 정책, 그리고 캐시 일관성 유지를 위한 OS의 역할을 중심으로 설명해야 합니다.

NUMA 환경에서 애플리케이션 성능 최적화는 핵심입니다. OS 수준에서 가장 중요한 건 NUMA 인식입니다. 프로세스가 실행되는 CPU 코어와 가장 가까운 메모리 노드에 데이터를 할당하는 로컬 메모리 할당이 기본입니…

전체 모범답안 펼치기

NUMA 환경에서 애플리케이션 성능 최적화는 핵심입니다. OS 수준에서 가장 중요한 건 NUMA 인식입니다. 프로세스가 실행되는 CPU 코어와 가장 가까운 메모리 노드에 데이터를 할당하는 로컬 메모리 할당이 기본입니다.

이를 위해 numactl 같은 도구를 사용해서 프로세스와 메모리 노드를 바인딩할 수 있습니다. 예를 들어, 특정 프로세스를 0번 노드에서 실행하고, 메모리도 0번 노드에 할당하도록 지정하는 거죠.

스케줄링 측면에서는 CPU affinity를 활용합니다. 특정 프로세스를 특정 CPU 코어에 고정시켜서, 메모리 접근 거리를 최소화하는 겁니다.

만약 프로세스가 여러 노드의 메모리에 접근해야 한다면, 페이지 마이그레이션 정책을 고려해야 합니다. 자주 사용되는 페이지를 프로세스가 실행되는 노드로 옮겨서 성능을 향상시킬 수 있습니다. 물론, 캐시 일관성 유지는 OS의 중요한 역할입니다.

#NUMA 인식#로컬 메모리 할당#CPU affinity#페이지 마이그레이션#스케줄링 정책

이 질문 단독 페이지 →

Q16 심화

리눅스 커널의 Completely Fair Scheduler(CFS)는 공정성을 유지하면서도 처리량을 극대화하기 위해 어떤 핵심적인 원리들을 적용하고 있습니까? 특히, `vruntime`과 레드-블랙 트리를 활용한 스케줄링 큐 관점에서 CFS의 동작 방식을 심층적으로 설명해 주십시오.

힌트 · `vruntime`의 계산 방식, 각 태스크의 가상 실행 시간 관리, 그리고 레드-블랙 트리를 통한 효율적인 다음 실행 태스크 선택 과정을 중심으로 답변하십시오.

Completely Fair Scheduler(CFS)는 공정성과 처리량 극대화를 위해 몇 가지 핵심 원리를 사용합니다. 가장 중요한 것은 vruntime이라는 가상 실행 시간 개념입니다. 각 태스크는 CPU를 사용…

전체 모범답안 펼치기

Completely Fair Scheduler(CFS)는 공정성과 처리량 극대화를 위해 몇 가지 핵심 원리를 사용합니다. 가장 중요한 것은 vruntime이라는 가상 실행 시간 개념입니다. 각 태스크는 CPU를 사용한 시간에 비례하여 vruntime이 증가하는데, 이 값이 작을수록 더 높은 스케줄링 우선순위를 갖습니다.

CFS는 모든 태스크를 레드-블랙 트리에 저장하여 스케줄링 큐를 관리합니다. 레드-블랙 트리는 균형 잡힌 트리 구조이므로, vruntime이 가장 작은 태스크(즉, 다음에 실행될 태스크)를 O(log n) 시간 안에 효율적으로 찾을 수 있습니다.

스케줄러는 항상 레드-블랙 트리에서 가장 왼쪽 노드(가장 작은 vruntime을 가진 태스크)를 선택하여 실행합니다. 태스크가 실행되면 vruntime이 증가하고, 다시 레드-블랙 트리에 삽입되어 자신의 위치를 찾습니다. 이러한 과정을 통해 CFS는 모든 태스크에게 공정한 CPU 시간을 할당하면서도 전체 시스템의 처리량을 높입니다. CFS는 나노초 단위의 정밀도로 작동하여 매우 세밀한 스케줄링이 가능합니다.

#vruntime#가상 시간#레드-블랙 트리#스케줄링 클래스#나노초 단위 정밀도

이 질문 단독 페이지 →

Q17 심화

시스템의 물리 메모리가 고갈될 위기에 처했을 때, 리눅스 OOM Killer는 어떤 기준으로 프로세스를 선택하여 종료시키며, OOM Killer의 동작 방식이 애플리케이션의 안정성과 가용성에 미치는 영향은 무엇입니까? OOM Killer의 동작을 제어하거나 회피할 수 있는 OS 수준의 설정 및 설계 기법에 대해 논하시오.

힌트 · `oom_score`, `oom_score_adj`를 통한 우선순위 제어, `overcommit_memory` 설정, 그리고 메모리 할당 실패 시 애플리케이션의 견고한 처리 방안을 포함해야 합니다.

네, 말씀하신 질문에 대해 답변드리겠습니다.

전체 모범답안 펼치기

네, 말씀하신 질문에 대해 답변드리겠습니다.

리눅스 OOM Killer는 시스템 메모리가 부족할 때 프로세스를 강제 종료하여 시스템을 보호하는 역할을 합니다. 종료 대상 선정 기준은 주로 oom_score라는 값인데, 이 값은 프로세스의 메모리 사용량, 실행 시간, 권한 등을 종합적으로 고려하여 계산됩니다. oom_score가 높을수록 종료될 가능성이 커집니다.

OOM Killer는 시스템 전체의 안정성을 확보하지만, 중요한 애플리케이션이 예기치 않게 종료될 수 있어 가용성에 영향을 미칠 수 있습니다.

OOM Killer의 동작을 제어하기 위해 oom_score_adj 값을 조정할 수 있습니다. 이 값을 낮추면 해당 프로세스의 종료 우선순위를 낮출 수 있습니다. 또한, /proc/[pid]/oom_adj 파일을 직접 수정하여 프로세스별 OOM 점수를 조절할 수도 있습니다.

OS 수준에서는 vm.overcommit_memory 설정을 통해 메모리 할당 정책을 변경할 수 있습니다. 애플리케이션 수준에서는 메모리 할당 실패를 감지하고 graceful shutdown을 수행하여 데이터 손실을 최소화하는 것이 중요합니다. 예를 들어, 메모리 할당에 실패했을 때 예외를 처리하고, 현재 상태를 저장한 후 안전하게 종료하는 방식을 고려할 수 있습니다.

#OOM 점수#oom_score_adj#메모리 압박#가용성#graceful shutdown

이 질문 단독 페이지 →

Q18 심화

ZFS나 Btrfs와 같은 Copy-on-Write(CoW) 파일 시스템은 기존 저널링 파일 시스템과 비교했을 때 데이터 무결성, 스냅샷, 데이터 보호 측면에서 어떤 근본적인 장점과 단점을 가집니까? CoW 파일 시스템의 내부 동작 원리를 설명하고, 대규모 데이터 환경에서 CoW 파일 시스템을 효과적으로 활용하기 위한 설계 전략을 제시해 주십시오.

힌트 · 블록 복사 및 메타데이터 업데이트 방식, 스냅샷 생성의 효율성, 쓰기 증폭(Write Amplification)과 같은 성능 저하 요인을 중심으로 비교 설명하고, 적절한 사용 사례를 언급해야 합니다.

CopyonWrite(CoW) 파일 시스템은 데이터 무결성, 스냅샷, 데이터 보호 측면에서 기존 저널링 파일 시스템보다 몇 가지 장점을 가집니다. CoW는 데이터를 덮어쓰는 대신 새로운 블록에 기록하고, 메타데이터를…

전체 모범답안 펼치기

Copy-on-Write(CoW) 파일 시스템은 데이터 무결성, 스냅샷, 데이터 보호 측면에서 기존 저널링 파일 시스템보다 몇 가지 장점을 가집니다. CoW는 데이터를 덮어쓰는 대신 새로운 블록에 기록하고, 메타데이터를 업데이트하는 방식으로 작동합니다. 이 덕분에 체크섬을 통해 데이터 손상을 감지하고 복구하기 용이하며, 스냅샷 생성 시 변경된 블록만 복사하므로 매우 효율적입니다. 또한, 원자적인 쓰기 연산을 보장하여 시스템 충돌 시에도 데이터 일관성을 유지할 수 있습니다.

하지만 CoW는 쓰기 증폭(Write Amplification)이라는 단점도 있습니다. 작은 변경 사항이 여러 블록에 쓰기를 유발하여 성능 저하를 일으킬 수 있습니다.

대규모 데이터 환경에서 CoW 파일 시스템을 효과적으로 활용하려면, SSD와 같은 빠른 저장 장치를 사용하고, 데이터 중복 제거 및 압축 기술을 적용하여 쓰기 증폭을 최소화해야 합니다. 또한, RAID-Z와 같은 기술을 사용하여 데이터 가용성을 높이는 것이 좋습니다. 예를 들어, 데이터베이스 서버의 경우, CoW 파일 시스템을 사용하여 정기적인 스냅샷을 생성하고, 장애 발생 시 빠르게 복구할 수 있습니다.

#Copy-on-Write#체크섬#스냅샷#RAID-Z#트리 구조

이 질문 단독 페이지 →

Q19 심화

리눅스 커널의 다양한 I/O 스케줄러(예: Noop, Deadline, CFQ, MQ-deadline)는 각각 어떤 특성과 목표를 가지고 있으며, 특정 워크로드(예: 데이터베이스, 웹 서버, 가상화 환경)에서 최적의 성능을 얻기 위해 어떤 I/O 스케줄러를 선택하고 튜닝해야 하는지 구체적인 근거와 함께 설명해 주십시오.

힌트 · 각 스케줄러의 요청 병합, 재정렬 전략, 그리고 NVMe와 같은 고속 저장 장치 환경에서의 MQ-deadline의 중요성을 강조하며, 워크로드별 특성을 고려한 선택 가이드라인을 제시해야 합니다.

리눅스 I/O 스케줄러는 디스크 I/O 요청 순서를 결정하여 성능을 최적화합니다. Noop은 가장 단순하며, 요청을 먼저 들어온 순서대로 처리합니다. Deadline은 읽기/쓰기 요청에 마감 시간을 부여하여 기아 현…

전체 모범답안 펼치기

리눅스 I/O 스케줄러는 디스크 I/O 요청 순서를 결정하여 성능을 최적화합니다. Noop은 가장 단순하며, 요청을 먼저 들어온 순서대로 처리합니다. Deadline은 읽기/쓰기 요청에 마감 시간을 부여하여 기아 현상을 방지하며, CFQ는 각 프로세스에 공정한 I/O 시간을 할당합니다.

최근에는 NVMe와 같은 고속 저장 장치에 최적화된 MQ-deadline이 중요해졌습니다. MQ-deadline은 멀티 큐를 사용하여 병렬성을 높이고, 높은 처리량을 제공합니다.

워크로드에 따라 선택이 달라집니다. 데이터베이스는 낮은 지연 시간이 중요하므로 Deadline이나 MQ-deadline이 적합하며, 웹 서버는 CFQ를 통해 여러 프로세스에 공정한 I/O를 제공할 수 있습니다. 가상화 환경에서는 게스트 OS 간의 I/O 간섭을 줄이기 위해 CFQ나 MQ-deadline을 고려할 수 있습니다. 튜닝 시에는 각 스케줄러의 파라미터를 조정하여 워크로드에 맞게 최적화해야 합니다. 예를 들어, deadline 스케줄러의 read_expire나 write_expire 값을 조정할 수 있습니다.

#I/O 스케줄러#Noop#Deadline#CFQ#MQ-deadline

이 질문 단독 페이지 →

Q20 심화

Read-Copy Update(RCU)는 다중 코어 환경에서 읽기 중심의 데이터 구조에 대한 동시성 제어를 위해 널리 사용되는 기법입니다. RCU의 동작 원리(읽기 측, 쓰기 측)를 상세히 설명하고, 기존 락 기반 동기화 방식과 비교했을 때 RCU가 제공하는 성능상의 이점과 한계점은 무엇인지 논해 주십시오.

힌트 · `grace period`, `quiescent state`의 개념, 읽기 스레드의 락 획득 없이 데이터 접근 가능, 쓰기 스레드의 복사-수정-교체 전략, 그리고 쓰기 오버헤드와 메모리 소비 증가를 중심으로 설명해야 합니다.

ReadCopy Update(RCU)는 읽기 작업이 매우 빈번한 상황에서 락 없이 동시성을 확보하는 기법입니다. 읽기 측에서는 락 획득 없이 공유 데이터에 접근하며, 쓰기 측에서는 데이터를 직접 수정하지 않고 복사본…

전체 모범답안 펼치기

Read-Copy Update(RCU)는 읽기 작업이 매우 빈번한 상황에서 락 없이 동시성을 확보하는 기법입니다. 읽기 측에서는 락 획득 없이 공유 데이터에 접근하며, 쓰기 측에서는 데이터를 직접 수정하지 않고 복사본을 만들어 수정 후 원자적으로 교체합니다.

RCU의 핵심은 'Grace Period'인데, 이는 모든 읽기 스레드가 공유 데이터에 대한 접근을 완료하는 시점을 의미합니다. Grace Period가 지나면 이전 데이터에 대한 참조가 없다고 판단하고 안전하게 메모리를 해제할 수 있습니다.

락 기반 방식과 비교했을 때 RCU는 읽기 성능이 월등히 뛰어납니다. 락 획득/해제 오버헤드가 없기 때문입니다. 하지만 쓰기 작업 시 복사본 생성 및 교체에 따른 오버헤드가 발생하고, Grace Period 동안 이전 데이터를 유지해야 하므로 메모리 사용량이 증가하는 단점이 있습니다. 또한, 쓰기 작업이 지연될 수 있다는 점도 고려해야 합니다. 따라서 읽기 비율이 압도적으로 높은 경우에 RCU가 효과적입니다.

#Read-Copy Update#스핀락#메모리 배리어#Grace Period#쓰기 측 지연

이 질문 단독 페이지 →

Q21 심화

사용자 공간(User Space) 애플리케이션이 시스템 호출(System Call)을 통해 커널 공간(Kernel Space)의 서비스를 이용하는 전체 과정을 상세히 설명해 주십시오. 특히, 시스템 호출 트랩(trap) 발생부터 커널 내부의 핸들러 처리, 그리고 결과 반환까지의 메커니즘을 CPU 모드 전환과 보호 링(Protection Ring) 개념을 포함하여 기술하시오.

힌트 · `syscall` 명령, 인터럽트 벡터 테이블, 커널 스택, 레지스터를 통한 인자 전달 및 결과 반환, 그리고 사용자/커널 모드 전환의 보안적 의미를 포함하여 설명해야 합니다.

네, 사용자 공간 애플리케이션이 시스템 호출을 통해 커널 서비스를 이용하는 과정을 설명드리겠습니다.

전체 모범답안 펼치기

네, 사용자 공간 애플리케이션이 시스템 호출을 통해 커널 서비스를 이용하는 과정을 설명드리겠습니다.

애플리케이션이 특정 기능을 수행하기 위해 시스템 호출을 요청하면, syscall (또는 유사한) 명령어를 실행합니다. 이 명령어는 CPU에 트랩(trap)을 발생시켜 CPU 모드를 사용자 모드에서 커널 모드로 전환합니다.

트랩이 발생하면 CPU는 인터럽트 벡터 테이블(Interrupt Vector Table)을 참조하여 해당 시스템 호출을 처리할 커널 내 핸들러의 주소를 찾습니다. 이때 보호 링(Protection Ring)이 작동하여 사용자 공간의 코드가 커널 영역에 직접 접근하는 것을 방지합니다.

시스템 호출에 필요한 인자들은 레지스터나 스택을 통해 커널에 전달됩니다. 커널 핸들러는 전달받은 인자를 바탕으로 요청된 작업을 수행하고, 결과를 다시 레지스터나 스택에 저장합니다.

작업이 완료되면 CPU 모드는 다시 사용자 모드로 전환되고, 애플리케이션은 시스템 호출의 결과를 받아 작업을 계속 진행합니다. 이러한 과정은 사용자 공간의 애플리케이션이 커널의 보호된 자원에 안전하게 접근할 수 있도록 보장합니다.

#시스템 호출#트랩 (Trap)#CPU 모드 전환#보호 링 (Protection Ring)#커널 핸들러

이 질문 단독 페이지 →

함께 보면 좋은 CS 기초 면접 질문

← 전체 면접 질문 카테고리 보기

보유한 운영체제 질문은 이게 전부가 아닙니다

패스잇 앱에는 직무별 면접 질문 수천 개와 모범답안이 담겨 있습니다. AI 모의면접으로 직접 답하고, 약점을 분석받아 보세요.