on my way

CS 스터디 01-4 전산기초: 운영체제 본문

Computer Science

CS 스터디 01-4 전산기초: 운영체제

wingbeat 2024. 10. 21. 18:13
반응형

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main

 

GitHub - JaeYeopHan/Interview_Question_for_Beginner: :boy: Technical-Interview guidelines written for those who started studying

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - GitHub - JaeYeopHan/Interview_Question_for_Beginner: :boy:...

github.com

 

 

운영체제 Link

  • 프로세스와 스레드의 차이
  • 스케줄러의 종류
    • 장기 스케줄러
    • 단기 스케줄러
    • 중기 스케줄러
  • CPU 스케줄러
    • FCFS
    • SJF
    • SRT
    • Priority scheduling
    • RR
  • 동기와 비동기의 차이
  • 멀티스레드
    • 장점과 단점
  • 프로세스 동기화
    • Critical Section
    • 해결책
  • 메모리 관리 전략
    • 메모리 관리 배경
    • Paging
    • Segmentation
  • 가상 메모리
    • 배경
    • 가상 메모리가 하는 일
    • Demand Paging (요구 페이징)
    • 페이지 교체 알고리즘
  • 캐시의 지역성
    • Locality
    • Caching line

1. 프로세스와 스레드의 차이

면접 질문: 프로세스와 스레드의 차이는 무엇인가요?

답변 스크립트:
프로세스는 실행 중인 프로그램을 말하며, 독립적인 메모리 공간(코드, 데이터, 힙, 스택)을 가지고 있습니다. 각 프로세스는 자신의 메모리 영역을 독점적으로 사용하며, 다른 프로세스와는 메모리를 공유하지 않습니다.

스레드는 프로세스 안에서 실행되는 작은 단위로, 프로세스 내의 자원을 공유할 수 있습니다. 같은 프로세스 내에 여러 스레드가 존재할 수 있으며, 스레드들은 코드, 데이터, 힙 영역을 공유하지만, 각자 독립적인 스택을 가지고 작업을 처리합니다. 즉, 여러 작업을 동시에 실행하면서도 메모리 사용을 효율적으로 관리할 수 있게 해줍니다.

 

부가 설명:

  • 프로세스는 각각 독립적인 메모리를 가지기 때문에, 자원 충돌 문제는 적지만, 컨텍스트 스위칭에 비용이 많이 듭니다.
  • 스레드는 프로세스 내에서 메모리를 공유함으로써 성능을 향상시키지만, 동기화 문제로 인해 자원 관리가 더 복잡해질 수 있습니다.

2. 스케줄러의 종류

면접 질문: 장기, 단기, 중기 스케줄러의 차이는 무엇인가요?

답변 스크립트:
스케줄러는 CPU 자원을 프로세스에게 할당하는 역할을 합니다. 세 가지 종류의 스케줄러가 있습니다:

  • 장기 스케줄러 (Long-term Scheduler): 어떤 프로세스를 메모리에 적재하여 실행할지 결정하는 스케줄러입니다. 프로세스를 메모리로 로드할 때 메모리 부족 문제를 해결하기 위해 역할을 하며, 시스템의 다중 프로그래밍 수준을 제어합니다.
  • 단기 스케줄러 (Short-term Scheduler): 준비 큐에 있는 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지를 결정합니다. 매우 빈번하게 작동하며, CPU의 효율적인 사용을 보장합니다.
  • 중기 스케줄러 (Medium-term Scheduler): 메모리가 부족할 때 일부 프로세스를 디스크로 이동시키는 역할을 합니다. 이를 스와핑이라고 하며, 메모리의 효율성을 높이기 위해 사용됩니다.

부가 설명:

  • 장기 스케줄러는 프로세스의 진입을 관리하며, 단기 스케줄러는 CPU 자원의 할당을 관리합니다. 중기 스케줄러는 메모리와 디스크 간의 자원 관리를 돕습니다.

3. CPU 스케줄러

FCFS (First Come First Served)

면접 질문: FCFS 스케줄링이란 무엇인가요?

답변 스크립트:
FCFS는 가장 먼저 도착한 프로세스를 먼저 실행하는 스케줄링 방식입니다. 각 프로세스가 도착한 순서대로 CPU를 할당받습니다. 간단하지만, Convoy Effect라는 문제가 발생할 수 있습니다. 즉, 실행 시간이 긴 프로세스가 먼저 도착하면 나머지 프로세스들이 오래 기다려야 하는 문제가 있습니다.

SJF (Shortest Job First)

면접 질문: SJF 스케줄링이란 무엇인가요?

답변 스크립트:
SJF는 CPU 시간이 가장 짧은 프로세스에 우선순위를 주는 스케줄링 방식입니다. CPU가 짧은 작업을 먼저 처리함으로써 평균 대기 시간을 줄일 수 있지만, 실행 시간이 긴 프로세스가 너무 오래 대기하는 Starvation 문제가 발생할 수 있습니다.

SRT (Shortest Remaining Time First)

면접 질문: SRT 스케줄링은 무엇인가요?

답변 스크립트:
SRT는 SJF의 선점형 버전으로, CPU가 실행 중인 프로세스의 남은 시간이 더 긴 경우 새로운 프로세스가 도착하면 CPU를 선점합니다. 즉, 남은 시간이 더 짧은 작업이 있으면 현재 작업을 중단하고 새 작업을 처리합니다. 효율적이지만, 더 잦은 스케줄링이 일어나 CPU 오버헤드가 발생할 수 있습니다.

Priority Scheduling

면접 질문: 우선순위 스케줄링이란 무엇인가요?

답변 스크립트:
우선순위 스케줄링은 각 프로세스에 우선순위를 부여하고, 가장 높은 우선순위를 가진 프로세스가 CPU를 먼저 할당받습니다. 선점형비선점형 방식이 있으며, 우선순위가 낮은 프로세스가 오랫동안 실행되지 못하는 Starvation 문제가 발생할 수 있습니다. 이를 해결하기 위해 Aging 기법을 사용해 오래 기다린 프로세스의 우선순위를 점차 높여줍니다.

RR (Round Robin)

면접 질문: 라운드 로빈 스케줄링은 무엇인가요?

답변 스크립트:
라운드 로빈(RR)은 각 프로세스가 정해진 시간 동안만 CPU를 할당받고, 할당 시간이 지나면 준비 큐의 뒤로 이동하는 방식입니다. 할당 시간(Time Quantum)을 설정해 모든 프로세스가 공평하게 CPU를 사용할 수 있습니다. 할당 시간이 너무 크면 FCFS처럼 되고, 너무 작으면 오버헤드가 증가할 수 있습니다.


4. 동기와 비동기의 차이

면접 질문: 동기와 비동기의 차이는 무엇인가요?

답변 스크립트:
동기는 요청한 작업이 완료될 때까지 기다린 후에야 다음 작업을 진행하는 방식입니다. 즉, 작업을 순차적으로 처리하며, 요청 후 결과를 즉시 기다려야 합니다.

비동기는 요청한 작업이 완료되지 않아도 기다리지 않고, 다른 작업을 먼저 처리할 수 있는 방식입니다. 비동기 방식에서는 요청 후 다른 작업을 수행하다가, 작업이 완료되면 그때 결과를 처리합니다.

 

부가 설명:

  • 동기 방식은 직관적이지만, 효율이 떨어질 수 있습니다. 반면, 비동기 방식은 빠른 응답성을 제공하지만, 복잡한 로직 처리가 필요할 수 있습니다.

5. 멀티스레드

면접 질문: 멀티스레드의 장점과 단점은 무엇인가요?

답변 스크립트:
장점:

  • 자원의 효율적 사용: 스레드는 프로세스 내에서 자원을 공유하기 때문에 메모리 사용량이 줄어듭니다.
  • 응답성 향상: 하나의 스레드가 대기 상태에 있어도 다른 스레드가 작업을 계속 수행할 수 있습니다.
  • 병렬성: 멀티코어 시스템에서는 스레드를 병렬로 실행할 수 있어 성능을 극대화할 수 있습니다.

단점:

  • 동기화 문제: 여러 스레드가 동일한 자원에 접근하면 동기화 문제가 발생할 수 있습니다.
  • 디버깅 어려움: 스레드가 동시에 실행되기 때문에 디버깅이 어려워질 수 있습니다.

부가 설명:
멀티스레드를 사용하면 성능을 향상시킬 수 있지만, 동기화 문제를 적절히 처리해야만 안정적인 프로그램을 만들 수 있습니다.


6. 프로세스 동기화

면접 질문: 프로세스 동기화란 무엇인가요? 그리고 Critical Section 문제를 해결하는 방법은?

답변 스크립트:
프로세스 동기화는 여러 프로세스나 스레드가 동시에 공유 자원에 접근할 때, 일관성을 유지하기 위한 방법입니다. Critical Section(임계 영역)은 공유 자원에 접근하는 코드 부분으로, 여러 프로세스가 동시에 실행하면 데이터가 꼬이거나 충돌이 발생할 수 있습니다.

 

해결책:

  • Mutex (상호 배제): 하나의 프로세스만 Critical Section에 접근하도록 하여 동시에 실행되지 않도록 막습니다.
  • Semaphore (세마포어): 카운팅과 바이너리 세마포어를 사용해 여러 프로세스가 동시에 Critical Section에 접근하지 못하도록 조절합니다.
  • Monitor (모니터): 고급 언어에서 제공되는 동기화 기법으로, 개발자가 동기화를 직접 구현하지 않고 추상화된 동기화 메커니즘을 사용합니다.

7. 메모리 관리 전략

면접 질문: 메모리 관리 전략에는 어떤 것들이 있나요?

답변 스크립트:
메모리 관리 전략은 프로세스가 메모리를 효율적으로 사용할 수 있도록 돕는 방법입니다.

  • 페이징(Paging): 물리 메모리를 고정된 크기의 블록인 프레임으로 나누고, 논리 메모리도 같은 크기의 페이지로 나누어 관리합니다. 외부 단편화 문제를 해결할 수 있지만, 내부 단편화가 발생할 수 있습니다.
  • 세그멘테이션(Segmentation): 프로그램을 논리적 단위인 세그먼트로 나누어 관리하며, 가변 크기의 메모리 블록을 할당합니다. 외부 단편화 문제가 발생할 수 있습니다.

부가 설명:
페이징은 고정 크기의 메모리 블록을 사용하므로 외부 단편화를 줄일 수 있지만, 내부 단편화가 발생할 수 있습니다. 반면, 세그멘테이션은 가변 크기의 메모리 블록을 사용하므로 논리적인 메모리 관리를 제공하지만, 외부 단편화가 발생할 수 있습니다.


8. 가상 메모리

면접 질문: 가상 메모리란 무엇이며, 그 역할은 무엇인가요?

답변 스크립트:
가상 메모리는 물리 메모리보다 큰 프로그램도 실행할 수 있도록 지원하는 기법입니다. 프로그램이 사용하는 메모리를 논리적 주소 공간으로 제공하며, 실제로는 필요한 부분만 물리 메모리에 적재해 실행됩니다. 덕분에 여러 프로그램을 동시에 실행할 수 있으며, 메모리 부족 문제를 해결할 수 있습니다.

Demand Paging (요구 페이징): 필요할 때만 페이지를 메모리에 적재하는 기법으로, 메모리 사용을 최적화하는 데 기여합니다.

 

페이지 교체 알고리즘:

  • FIFO: 먼저 들어온 페이지를 먼저 교체합니다.
  • LRU (Least Recently Used): 가장 오랫동안 사용되지 않은 페이지를 교체합니다.

9. 캐시의 지역성

면접 질문: 캐시의 지역성(Locality)이란 무엇인가요?

답변 스크립트:
캐시의 지역성은 프로그램이 데이터를 접근할 때, 일정한 패턴이 있다는 가정을 기반으로 합니다.

  • 시간 지역성 (Temporal Locality): 최근에 참조한 데이터는 다시 참조될 가능성이 높습니다.
  • 공간 지역성 (Spatial Locality): 인접한 메모리 위치의 데이터가 자주 참조됩니다.

부가 설명:
캐시 메모리는 이러한 지역성의 특성을 활용해 데이터를 미리 가져와 빠르게 처리할 수 있도록 하며, 적중률(hit rate)을 높여 성능을 개선합니다.

Caching Line: 캐시의 저장 단위를 캐싱 라인이라고 하며, 데이터를 블록 단위로 저장하여 효율적으로 메모리 접근을 관리합니다.

 

반응형