기술면접 준비

프로세스와 쓰레드 면접 질문, 답변

Albosa2lol 2023. 11. 16. 01:53

📎 프로세스

  • 프로그램에 대해 설명해주세요.
    • 프로그램을 실행하기 위해서는 OS로부터 프로그램이 동작하는데 필요한 CPU, 메모리 등을 할당 받아야 합니다.
    • 프로그램이란 메모리에 올라가 있지 않고, 저장 장치에 저장 되어 있는 상태의 코드 파일을 의미합니다.
  • 프로세스에 대해 설명해주세요.
    • 디스크에 파일로 존재하던 프로그램이 메모리에 올라가서 실행되면 프로세스가 됩니다.
    • 프로세스란 실행중인 프로그램입니다.
  • 프로세스 문맥에 대해 설명해주세요.
    • 프로세스 문맥이란 프로세스가 어떤 상태에서 수행되고 있는지에 대한 정보입니다.
  • 문맥교환(context switch)에 대해 설명해주세요.
    • 문맥교환은 언제 발생하나요?
      • 타이머 인터럽트나 I/O 요청 시스템 콜이 들어왔을 때 발생합니다.
      • 일반적으로 한 프로세스의 타임 슬라이스가 끝날 경우 발생합니다. (라운드 로빈 방식)
    • 문맥 교환 발생 과정에 대해서 조금 더 상세히 설명해주세요.
      1. 사용자 프로세스가 CPU를 할당 받고 실행되던 중에, 타이머 인터럽트가 발생하면 CPU의 제어권은 운영체제에게 넘어가게 됩니다.
      2. CPU의 제어권을 가지게 된 운영체제는 원래 수행 중이던 프로세스의 문맥을 PCB에 저장하고 새롭게 실행시킬 프로세스에게 CPU 제어권을 이양합니다. 이 과정에서 원래 수행 중이던 프로세스는 준비 상태로 바뀌고, 새롭게 CPU를 할당받은 프로세스는 실행 상태가 됩니다.
    • CPU가 프로세스를 변경할 때, 이전의 프로세스 상태를 PCB에 저장하고, 새로운 프로세스의 저장된 상태를 복구하는 작업입니다.
  • 프로세스의 메모리 공간에 대해 설명해주세요.
    • Code는 실행할 프로그램 코드가 저장되며, CPU에서 수행되는 명령어를 저장하는 공간입니다.Heap은 동적 데이터가 저장되는 곳입니다.
    • Stack은 지역 변수와 인자, 함수의 리턴 주소가 저장되는 곳입니다. 함수 호출 시 프레임이 생성되고, 함수가 끝나면 반환됩니다.
    • Data는 정적 변수, 배열, 구조체 등이 저장되는 공간입니다.
    • 프로세스의 메모리 공간은 Code, Data, Heap, Stack 으로 이루어져있습니다.
  • 프로세스 제어블록(PCB)에 대해 설명해주세요.
    • PCB에는 어떤 정보가 담겨있을까요?
      • PID: 프로세스를 구분할 수 있는 식별자
      • 프로세스 상태: 준비 / 대기 / 실행 등 프로세스의 상태를 나타내는 정보
      • PC 레지스터: CPU가 다음으로 실행할 명령어를 가리키는 값
      • CPU 스케줄링 정보: 우선 순위, CPU 점유 시간 등에 대한 정보
    • 프로세스 제어 블록이란 프로세스를 실행하는 데 필요한 정보를 담고 있는 자료 구조입니다.
  • 멀티 프로세스에 대해서 설명해주세요.
    • 하나의 부모 프로세스가 여러 개의 자식 프로세스를 생성하는 구조이며 서로 독립적인 메모리 공간을 가지고 있습니다.
    • 예를들어 구글의 크롬 탭은 각각이 프로세스이며, 하나의 탭이 멈추더라도 다른 탭은 정상 작동합니다.
    • 멀티 프로세스는 하나의 프로그램에서 동시에 여러개의 프로세스를 실행하는 기술입니다.
  • 프로세스 수행 상태 변화 과정에 대해 설명해주세요.
    • 그 다음 ready 상태는 CPU를 할당 받아 실행 가능한 상태이고프로세스가 수행도중 I/O 요청을 하게되면, I/O 요청이 완료될때까지마지막으로 프로세스가 종료중인 상태를 terminated 상태라고 합니다.
    • 대기하는 상태인 block 상태가 됩니다.
    • CPU를 할당 받아 실제로 수행하는 상태는 running 상태입니다.
    • 최초 상태인 new는 프로세스가 생성중인 상태입니다.
  • 프로세스끼리 협력하는 방법에 대해서 설명해주세요.
    1. 메시지 전달 방식
    2. 프로세스는 다른 프로세스에게 전달할 메시지를 운영체제에게 시스템 콜 방식으로 요청해 전달합니다.
    3. 공유 메모리 방식
    4. 시스템 콜 방식을 통해 각 프로세스 간 공유하는 공간을 만들어, 프로세스 간 같은 공유 공간에 대해 읽고 쓸 수 있도록 합니다.
  • fork() 명령어에 대해 설명해주세요.
    • fork() 시스템콜을 통해 부모 프로세스의 내용을 그대로 복제한 자식 프로세스를 생성할 수 있습니다.
    • 이때 부모 프로세스와 자식 프로세스의 주소 공간은 각각 따로 갖지만, 주소 공간 내에는 동일한 공간을 갖습니다.
    • 유닉스에서 fork() 명령어는 새로운 프로세스를 생성하게 해주는 시스템 콜입니다.

📎 쓰레드

  • 쓰레드에 대해 설명해주세요.
    • 프로세스 내에서 레지스터와 스택만 따로 할당 받고 Code, Data, Heap 영역은 스레드끼리 공유합니다.
    • 프로세스 내에서 실행되는 여러 흐름의 단위입니다.
  • 쓰레드의 메모리 공간에 대해 설명해주세요.
    • 그렇기 때문에 쓰레드간 context switch는 적은 오버헤드를 갖습니다.
    • 쓰레드는 프로세스의 메모리 공간인 힙, 데이터, 코드 영역을 공유합니다.
  • 쓰레드 제어블록(TCB)에 대해 설명해주세요.
    • TCB에는 쓰레드 ID, 쓰레드 우선순위, 스케줄링 정보등을 저장하고 있습니다.
    • 쓰레드 제어블록은 프로세스의 PCB 처럼 각 스레드마다 운영체제가 문맥 정보를 담고 있는 자료구조 입니다.
  • 사용자 수준 쓰레드와 커널 수준 쓰레드의 차이를 설명해 보세요.
    • 사용자 수준 스레드란, 라이브러리를 통해 구현한 스레드를 의미합니다. 스레드와 관련된 모든 행위를 사용자 영역에서 하기 때문에, 커널은 사용자 수준 스레드의 존재를 알지 못하고 스레드 교환에 개입하지 않습니다.
    • 커널 수준 스레드란, 커널이 직접 생성하고 관리하는 스레드를 의미합니다.
  • 멀티 쓰레딩 프로그래밍 대해서 설명해주세요.
    • 쓰레드는 프로세스의 자원을 공유하기 때문에 fork로 인한 쓰레드 생성은 프로세스 생성보다 빠릅니다. (공유하는 부분을 제외한 부분만 복사하면 되기 때문 입니다.)하지만 쓰레드가 접근하는 공유 데이터에 대해 동기화 작업을 수행해야 합니다.
    • 또한 커널의 개입 없이 쓰레드간 통신을 할 수 있습니다.
    • 멀티쓰레딩은 프로세스로 해야하는 작업을 여러개의 쓰레드로 나누어서 수행하는 것을 말합니다.
  • 멀티 쓰레드 프로그래밍의 장단점을 설명해 주세요.
    • 장점
      • 프로세스 내에 있는 모든 스레드들이 프로세스의 자원을 공유하므로 자원 중복에 대한 낭비를 막을 수 있습니다.
      • 한 스레드가 입출력으로 인해 작업이 진행되지 않더라도, 다른 스레드가 작업을 이어서 할 수 있습니다.
    • 단점
      • 한 스레드에 문제가 생기면 전체 스레드에 영향을 미칩니다.
      • 공유 자원에 대한 동기화가 필요합니다.
    • 멀티 스레드 프로그래밍은 하나의 프로세스에서 여러 개의 스레드를 만들어 처리하는 프로그래밍 방식입니다.
  • 멀티 프로세스대신 멀티 쓰레드를 사용하는 이유가 뭔가요?
    • 프로세스 내에 있는 모든 스레드들이 프로세스의 자원을 공유하므로, 자원 중복에 대한 낭비를 막을 수 있습니다.
  • 멀티 쓰레드 프로그래밍에서 주의할 점이 있을까요?
    • 자원을 공유하기 때문에 Thread-safe하게 작성하여, 동시성 이슈가 발생하지 않도록 해야 합니다.
  • Thread-Safe하다는 의미와 그렇게 설계하는 방법을 설명해 주세요.
    • Thread-safe하다는 의미는, 여러 쓰레드가 동일한 자원에 접근하더라도 동시성 이슈가 발생하지 않는 것을 의미합니다.
    • Thread-safe하게 설계를 하려면, 기본적으로 불변 객체를 활용하는 것이 Thread-safe하게 설계할 수 있는 방법 중 하나라고 생각합니다. 그 외에 락을 통해 공유 자원에 접근할 스레드를 제한하는 방법이 있습니다.