본문 바로가기
IT면접

[면접 준비-CS기초] 2. 운영체제

2021. 7. 17.
반응형

IT 기업 신입사원 면접에서 많이 질문하는 면접 질문 목록입니다. 이번 포스팅은 운영체제 관련 질문입니다. 운영체제 영역은 지원 분야에 상관없이 항상 나오는 단골 영역입니다. 운영체제의 정의부터 메모리 구조와 스레드, 프로세스까지 다양한 질문들로 구성해보았습니다. 

 

운영체제 면접 질문과 답변 정리

운영체제란?

운영체제는 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스를 담당하는 프로그램입니다. 프로그램 실행 환경과 필요한 자원을 제공 및 관리해주며, 여러 가지 서비스들을 제공합니다.

메모리란?

메모리는 컴퓨터에서 작업을 수행하기 위해 처리 대상이나 결과 등을 저장하기 위한 공간입니다.

메모리 구조

  • 메모리 구조는 Code, Data, Heap, Stack의 네 가지 영역으로 나누어져 있으며, 이들 각각을 세그먼트라고 합니다. 이중 Code와 Data 영역은 정적 세그먼트, Heap과 Stack 영역은 동적 세그먼트라고 합니다.
  • Code 영역은 실행할 프로그램의 코드가 저장되는 영역입니다. 프로세스가 종료될 때까지 유지되는 영역입니다.
  • Data 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역입니다. Code 영역과 마찬가지로 프로세스가 종료될 때까지 유지됩니다.
  • Heap 영역은 프로그래머가 동적으로 사용할수 있는 영역으로, Heap 영역에 메모리를 할당하는 것을 동적 할당이라고 합니다. Java에서는 Grabage Collector가 자동으로 메모리를 관리해줍니다.
  • Stack 영역은 지역 변수, 매개 변수, 복귀 주소 등이 저장되는, 프로그램이 자동으로 사용하는 임시 메모리입니다. 프로세스(스레드) 생성 시 생성되며, 종료 시 반환되는 영역입니다. 다른 영역들이 하위 영역부터 주소가 할당되는 것과는 달리, Stack 영역은 상위 영역부터 주소가 할당됩니다.

 

프로세스와 스레드

프로세스

프로세스는 메모리에 올라와 실행되고 있는 프로그램의 인스턴스입니다. 각각 독립적인 메모리 영역을 할당받으며, 다른 프로세스와 통신하기 위해서는 IPC(Inter-Process Communication)을 사용해야 합니다. 하나의 프로세스는 최소 1개의 스레드(메인 스레드)를 가지게 됩니다.

스레드

스레드는 프로세스 내에서 프로세스가 할당 받은 자원을 이용하는 실행 단위입니다.

프로세스 내에서 각각의 Stack 영역만 따로 할당받고, 나머지 영역은 서로 공유합니다.

 

멀티 프로세스와 멀티 스레드의 차이

  • 멀티 프로세스는 여러 개의 프로세스가 서로 협력적으로 일을 처리하는 것을 말합니다. fork를 통해 프로세스를 여러 개로 복제하여 사용하기 때문에, 서로 통신을 하기 위해서는 IPC를 사용해야 합니다. 따라서 context switching을 위한 오버헤드가 발생합니다.
  • 멀티 스레드는 하나의 프로세스 내에 여러개의 스레드를 생성하여 작업을 처리하는 것을 말합니다. 스레드는 서로 메모리를 공유하기 때문에 통신이 쉽고 자원을 효율적으로 사용할 수 있으며, context switching의 오버헤드를 줄일 수 있습니다. 그러나 하나의 스레드에 문제가 발생해도 프로세스에 영향을 주며, 자원을 공유하기 때문에 critical section 문제가 발생할 수 있습니다.

멀티 스레드 프로그래밍 작성 시 유의점

멀티 스레드 프로그램을 개발한다면, 다수의 스레드가 공유 데이터에 동시에 접근하는 경우 상호 배제 또는 동기화 기법을 통해서 동시성 문제 또는 데드락이 발생하지 않도록 주의해야 합니다.

 

Critical Section(임계 영역)

critical section은 한순간에 하나의 프로그램만 접근이 가능한 공유자원에 접근하는 코드 영역을 의미합니다. 프로세스가 공유 데이터를 액세스하고 있으면 해당 프로세스가 critical section 내에 있다고 표현하는데, 하나의 프로세스가 critical section 내에 있으면 다른 프로세스들이 접근하지 못하도록 상호 배제를 수행해야 합니다.

Context Switching(문맥 교환)

context switching은 현재 진행하고 있는 태스크의 상태를 저장한 뒤, 다음으로 진행할 태스크의 상태 값을 읽어서 적용하는 과정입니다.

 

Mutual Exclusion(상호 배제)

  • 상호 배제는 특정 자원을 한 순간에 하나의 프로세스만 사용할 수 있도록 하는 것입니다. (한 프로세스가 특정 데이터를 액세스 하는 동안 다른 모든 프로세스들이 해당 데이터를 액세스 할 수 없도록 하는 것) 공유자원을 안전하게 관리하기 위한 상호 배제를 달성하는 기법에는 세마포어와 뮤텍스가 있습니다.
  • 뮤텍스(Mutex: MUTual-EXclusion)
    • 뮤텍스는 locking 메커니즘을 이용하여 lock을 건 스레드만이 critical section을 나갈 때 lock을 해제할 수 있습니다.
    • 화장실이 1칸이고 열쇠를 이용해야 하는 경우. 화장실을 누가 사용 중이라 열쇠가 없다면 사용이 끝날 때까지 기다려야 함
  • 세마포어 (Semaphore)
    • 세마포어는 Signaling 메커니즘을 이용하는데, lock을 걸지 않은 스레드도 signal을 이용해 lock을 해제할 수 있습니다.
    • 세마포어의 카운트를 1로 설정하면 뮤텍스처럼 활용할 수 있습니다.
    • 화장실 1칸 이상이며, 바깥의 전광판에 비어있는 화장실 수를 띄워놓음. 화장실 들어갈 때 1 빼고 나올 때 1 증가시킴. 따라서 숫자가 0이면 기다려야 함.

데드락 (Deadlock)

데드락(교착상태)은 한정된 자원을 여러 프로세스가 사용하고자 할 때 발생하는 상황으로, 프로세스가 자원을 얻기 위해 영구적으로 기다리는 상태를 말합니다. 예를 들어 자원 A를 가진 프로세스 P1과 자원 B를 가진 프로세스 P2가 있을 때, P1이 B를 필요로 하고 P2가 A를 필요로 한다면 두 프로세스는 서로 자원을 얻기 위해 무한정 기다리는 데드락 상태에 빠지게 됩니다.

 

CPU 스케줄링 기법

하나의 프로세스가 CPU를 점유 중일 때, 다른 프로세스가 CPU를 차지할 수 있는 방식은 선점 스케줄링, 차지할 수 없는 방식은 비선점 스케줄링이라고 말합니다.

  • 선입 선처리 스케줄링 (FCFS: First-Come First-Served)
    • 가장 간단한 비선점 스케줄링 알고리즘으로, 프로세스들은 레디큐에 들어온 순서대로 CPU를 할당받습니다. 작업 완료 시간을 예측하기 용이하지만, 덜 중요한 작업이 중요한 작업을 기다리게 할 수도 있습니다.
  • 우선순위 스케줄링
    • 프로세스에게 우선순위를 부여하여 우선순위가 높은 순서대로 처리하는 방식입니다. 선점 방식과 비선점 방식 모두 가능합니다. (선점 방식을 사용할 때) 우선순위가 높은 프로세스들이 계속 들어오게 되면 낮은 우선순위의 프로세스들은 무한정 기다려야 하는 문제가 발생합니다. 이때 오랫동안 시스템에서 대기하는 프로세스들의 우선순위를 점진적으로 증가시키는 '에이징' 기법을 통해 이를 해결할 수 있습니다.
  • SJF (Shortest Job First)
    • 수행 시간이 가장 짧은 프로세스를 먼저 수행하는 비선점 스케줄링 방식으로, 평균 대기시간을 감소시킬 수 있습니다.
  • SRT (Shortest Remaining Time)
    • 수행 시간이 짧을 순서대로 프로세스를 수행하는 방식으로, SJF의 선점 방식입니다. 남은 수행 시간이 더 짧은 프로세스가 레디큐에 들어오면 그 프로세스가 바로 선점됩니다.
  • Round-Robin
    • time slice(시간 할당량)을 정해놓고, 레디큐는 순환 큐(circular queue)로 설계합니다. 프로세서 스케줄러가 준비 큐를 돌아가면서 한 번에 한 프로세스에, 정의된 시간 할당량만큼 프로세서를 제공합니다. 시간량 내에 끝마치지 못한 프로세스는 다시 레디큐의 맨 뒤에 들어가게 됩니다.(선점 방식). 시간 할당량이 너무 크면 단순한 FCFS와 다를게 없어지며, 너무 작으면 context switching이 자주 일어나 오버헤드가 커지게 됩니다.
  • 다단계 큐 (Multi-level Queue)
    • 레디큐를 여러 종류로 분할하여 사용하는 기법입니다. 각각의 큐는 자신만의 독자적인 스케줄링 알고리즘을 수행하며, 큐와 큐 사이에도 우선순위가 존재합니다.
  • HRN (Highest Response-Ratio Next)
    • 수행 시간과 대기시간을 모두 고려하여 우선순위를 결정하는 기법입니다.
    • (우선순위) = (수행 시간 + 대기시간) / (수행 시간)
728x90
반응형

댓글