Development/CS

신입 개발자를 위한 CS 면접 대비 질문 - 운영체제편

lovetan 2025. 1. 17. 02:26

1. 운영체제의 역할은 무엇인가요?

답변: 

운영체제는 하드웨어와 사용자 간의 인터페이스를 제공하는 소프트웨어로, 주요 역할은 다음과 같습니다.

  • 프로세스 관리: CPU 스케줄링, 프로세스 생성 및 종료, 동기화 등을 관리합니다.
  • 메모리 관리: 메모리 공간 할당, 해제, 가상 메모리 등을 지원합니다.
  • 파일 시스템 관리: 데이터를 저장하고 검색하기 위한 파일 시스템을 제공합니다.
  • 입출력 관리: 입출력 장치와의 통신을 관리합니다.
  • 보안 및 보호: 리소스에 대한 접근을 제어하여 데이터와 시스템을 보호합니다.

2. 멀티스레딩과 멀티프로세싱의 차이점은 무엇인가요?

답변:

  • 멀티스레딩: 하나의 프로세스 내에서 여러 스레드가 작업을 수행하며, 메모리 공간을 공유합니다. 스레드 간 통신이 빠르지만, 한 스레드에 문제가 생기면 전체 프로세스에 영향을 줄 수 있습니다.
    • 꼬리 질문: 멀티스레딩의 장점은 무엇이고, 언제 사용하면 좋을까요?
      • 멀티스레딩의 장점: 메모리 공유로 효율적이고, 빠른 통신이 가능합니다. 웹 서버나 게임 엔진처럼 병렬 작업이 필요한 경우 적합합니다.
  • 멀티프로세싱: 독립된 프로세스들이 작업을 수행하며, 각 프로세스는 별도의 메모리 공간을 가집니다. 안정적이지만, 프로세스 간 통신은 비교적 느립니다.
    • 꼬리 질문: 멀티프로세싱 환경에서 컨텍스트 스위칭이란 무엇인가요?
      • 컨텍스트 스위칭: CPU가 실행 중인 프로세스를 중단하고, 다른 프로세스를 실행하기 위해 현재 상태(레지스터, 프로그램 카운터 등)를 저장하고 복원하는 과정입니다.

3. 프로세스와 스레드의 차이점은 무엇인가요?

답변:

  • 프로세스: 독립적인 실행 단위로, 자체 메모리 공간을 가집니다.
    • 꼬리 질문: 프로세스 간 통신(IPC)의 방법에는 무엇이 있나요?
      • IPC 방법: 파이프, 메시지 큐, 공유 메모리, 소켓, 시그널 등이 있습니다.
  • 스레드: 프로세스 내의 실행 단위로, 동일한 메모리 공간을 공유합니다.
    프로세스는 무거운 작업에 적합하고, 스레드는 경량화된 작업에 적합합니다.
    • 꼬리 질문: 하나의 프로세스에서 스레드 간 충돌을 방지하려면 어떻게 해야 하나요?
      • 스레드 간 충돌 방지: 뮤텍스(Mutex), 세마포어(Semaphore), 모니터(Monitor) 같은 동기화 기법을 사용해 공유 자원에 대한 접근을 제어합니다.

+

프로세스 스레드

(참고자료: 완전히 정복하는 프로세스 vs 스레드 개념)

 


4. 교착 상태(Deadlock)가 발생하는 조건은 무엇인가요?

답변:
교착 상태가 발생하기 위한 네 가지 조건은 다음과 같습니다:

  1. 상호 배제(Mutual Exclusion): 자원은 하나의 프로세스만 사용할 수 있음.
  2. 점유 대기(Hold and Wait): 자원을 점유한 상태에서 다른 자원을 기다림.
  3. 비선점(No Preemption): 점유한 자원을 강제로 회수할 수 없음.
  4. 순환 대기(Circular Wait): 프로세스들이 자원을 순환적으로 대기.

꼬리 질문:

  • 교착 상태를 방지하는 방법에는 무엇이 있나요?
    • 교착 상태 방지 방법: 자원 요청 시 순서를 정해 순환 대기를 방지하거나, 자원을 점유하지 않은 상태에서 대기하도록 합니다.
  • 교착 상태와 무한정 대기(Starvation)의 차이는 무엇인가요?
    • 차이점: 교착 상태는 모든 프로세스가 대기 중이지만, starvation는 특정 프로세스가 낮은 우선순위 때문에 자원을 얻지 못하는 상황입니다.

5. CPU 스케줄링 알고리즘의 종류와 특징을 설명해보세요.

답변:

  1. FCFS (First Come First Serve): 먼저 도착한 프로세스를 먼저 처리. 단점은 대기 시간이 길어질 수 있음.
  2. SJF (Shortest Job First): 실행 시간이 가장 짧은 프로세스를 우선 처리. 최적의 알고리즘이지만 실행 시간을 예측하기 어려움.
  3. Round Robin: 프로세스에 동일한 시간 할당. 공정하지만 컨텍스트 스위칭 비용이 발생.
  4. Priority Scheduling: 우선순위가 높은 프로세스를 먼저 처리. 무한정 대기(Starvation) 문제 발생 가능.

꼬리 질문:

      • SJF 스케줄링에서 실행 시간을 예측하는 방법은 무엇인가요?
        • 실행 시간 예측: 이전 실행 시간의 평균값을 계산하여 예측(예: 지수 가중 이동 평균 사용).
      • Round Robin의 시간 할당(Time Quantum)을 잘못 설정하면 어떤 문제가 발생하나요?
        • Time Quantum 문제: 너무 짧으면 컨텍스트 스위칭 비용 증가, 너무 길면 FCFS와 유사하게 작동해 대기 시간이 길어질 수 있습니다.

6. 가상 메모리란 무엇인가요?

답변:
가상 메모리는 물리적 메모리보다 큰 프로그램을 실행할 수 있도록 디스크 공간을 활용하는 기술입니다. 주요 기능은 다음과 같습니다:

  • 페이지 교체를 통해 필요한 메모리만 로드.
  • 메모리 낭비를 줄이고, 효율적인 프로세스 실행을 지원.

꼬리 질문:

  • 페이지 폴트(Page Fault)는 무엇이고, 이를 최소화하려면 어떻게 해야 하나요?
    • 페이지 폴트: 필요한 페이지가 메모리에 없을 때 발생하며, 디스크에서 데이터를 로드해야 하는 상황입니다. 최소화를 위해 적절한 페이지 교체 알고리즘을 사용해야 합니다.
  • 스왑(Swap) 영역의 역할은 무엇인가요?
    • 스왑 영역: 물리적 메모리가 부족할 때 디스크를 임시 저장소로 사용하는 공간입니다.

7. 페이징과 세그멘테이션의 차이점은 무엇인가요?

답변:

  • 페이징: 메모리를 고정 크기(페이지)로 나누어 관리하며, 외부 단편화는 발생하지 않지만 내부 단편화는 발생할 수 있음.
  • 세그멘테이션: 메모리를 가변 크기(세그먼트)로 나누며, 사용자의 논리적인 뷰를 반영합니다. 외부 단편화가 발생할 수 있음.

꼬리 질문:

  • 내부 단편화와 외부 단편화의 차이는 무엇인가요?
    • 단편화 차이: 내부 단편화는 고정된 메모리 할당으로 인한 미사용 공간, 외부 단편화는 가변 크기 할당으로 인한 작은 빈 공간입니다.
  • 페이지 테이블의 크기를 줄이기 위한 기법에는 무엇이 있나요?
    • 페이지 테이블 최적화: 다단계 페이지 테이블(Multi-level Paging)이나 해시 기반 페이지 테이블을 사용할 수 있습니다.

8. 시스템 콜(System Call)이란 무엇인가요?

답변:
시스템 콜은 프로그램이 운영체제의 서비스를 요청하기 위해 사용하는 인터페이스입니다. 예를 들어, 파일 열기, 읽기/쓰기, 프로세스 생성 등이 있습니다.

 

꼬리 질문:

  • 시스템 콜의 동작 과정은 어떻게 되나요?
    • 동작 과정: 응용 프로그램이 시스템 콜을 요청하면, 트랩 명령을 통해 커널 모드로 전환되어 운영체제가 요청을 처리합니다.
  • 사용자 모드와 커널 모드의 차이는 무엇인가요?
    • 모드 차이: 사용자 모드는 제한된 리소스 접근만 허용하며, 커널 모드는 운영체제의 모든 기능에 접근 가능합니다.

9. 페이지 교체 알고리즘의 종류를 설명해보세요.

답변:

  1. FIFO (First In First Out): 가장 먼저 들어온 페이지를 교체.
  2. LRU (Least Recently Used): 가장 오랫동안 사용하지 않은 페이지를 교체.
  3. Optimal: 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체. 이론적으로 가장 효율적.
  4. Clock: FIFO를 개선하여, 페이지에 사용 여부를 기록하는 방식.

10. 동기(Synchronous)와 비동기(Asynchronous)의 차이점은 무엇인가요?

답변:

  • 동기: 작업이 순차적으로 실행되며, 한 작업이 완료될 때까지 대기.
  • 비동기: 작업이 병렬로 실행되며, 완료를 기다리지 않고 다음 작업을 수행.
    동기는 단순하지만 지연이 발생할 수 있고, 비동기는 복잡하지만 성능이 뛰어납니다.

꼬리 질문:

  • 비동기 작업에서 콜백(callback)과 프로미스(Promise)의 차이는 무엇인가요?
    • 콜백과 프로미스 차이: 콜백은 함수를 매개변수로 전달해 실행하지만, 프로미스는 더 직관적이고 체이닝이 가능하며 에러 처리가 간편합니다.
  • 동기 방식이 선호되는 상황은 언제인가요?
    • 동기 방식 선호 상황: 데이터 일관성이 중요한 경우(예: 트랜잭션)나, 결과 순서가 중요할 때 동기를 사용합니다.