[JSCODE] - OS 면접 스터디 2주차

@kdkdhoho · November 16, 2023 · 14 min read

📝 질문 리스트

프로그램에 대해 설명해주세요.

프로그램은 개발자가 프로그래밍 언어로 작성한 명령어들의 집합입니다.

프로그램의 특징으로는 디스크에 실행 파일 형식으로 저장되어 있다가, 사용자가 실행을 하면 운영체제에 의해 해당 파일을 메모리에 적재됩니다.

이를 프로세스라고 합니다.

프로세스에 대해 설명해주세요.

프로그램의 인스턴스입니다.

쉽게 말해, 디스크에 저장되어 있던 프로그램이 사용자에 의해 실행되면, 운영체제가 프로그램의 일부 명령어를 메모리에 적재를 하게 되고, 적재된 명령어들이 CPU에 의해 처리가 됩니다.

이렇게 해서 사용자가 실행한 프로그램이 프로세스로서 실행이 됩니다.

프로세스의 메모리 공간에 대해 설명해주세요.

프로세스의 메모리 공간은 크게 4가지로 나뉩니다.

텍스트(또는 코드) 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉩니다.

텍스트 영역은 프로그램의 명령어들이 저장되는 영역입니다. CPU는 이 부분의 명령어를 읽어 처리합니다.

데이터 영역은 주로 전역 변수나 정적 변수들이 저장되는 영역입니다.

스택 영역은 지역 변수나 함수 호출과 관련된 데이터가 저장되는 영역입니다.

힙 영역은 프로세스가 실행 중에 동적으로 메모리를 할당하고 해제하게 되는데, 그때 사용하게 되는 영역입니다. 자바 기준으로 말씀드리자면 객체의 인스턴스가 힙 영역에 저장된다고 할 수 있습니다.

쓰레드에 대해 설명해주세요.

프로세스의 실행 단위인 동시에, CPU가 처리할 수 있는 하나의 작업 단위입니다.

실행 중인 프로세스는 꼭 1개 이상의 쓰레드를 가집니다.

한 프로세스에 여러 쓰레드가 존재할 수 있으며, 이 쓰레드들은 같은 프로세스의 자원을 공유해서 사용할 수 있습니다.

쓰레드가 많을수록 처리하는 작업이 많아져서 효율이 증가한다고 생각할 수 있는데요. 사실, 이 쓰레드 간의 컨텍스트 스위칭이 빈번하게 일어나면 그 과정에서 오버헤드가 발생합니다. 따라서 많다고 해서 좋은 건 아닙니다.

프로세스와 쓰레드가 어떤 차이가 있는지 예시를 들어 설명해주세요.

프로세스가 식당이라고 한다면, 쓰레드는 요리사 또는 서버 또는 계산원이 될 수 있을 것 같습니다.

한 식당에서 고객의 요청에 의해 수행되어야 하는 작업이 주문받기, 요리, 음식 제공, 계산의 순이 될 것 같은데요. 이러한 하나의 작업 단위를 수행하는 사람이 분명히 존재해야 합니다. 따라서 이 하나의 작업 단위를 수행하는 사람을 쓰레드로 비유를 들 수 있을 것 같습니다.

쓰레드의 메모리 공간(스택, 데이터, 코드)에 대해 설명해주세요.

쓰레드는 각기 다른 작업 영역을 가집니다. 이 작업 영역은 스택 영역에 해당합니다. 이외에 나머지인, 코드, 데이터, 힙 영역에 경우는 같은 프로세스 내에서 함께 사용하게 됩니다.

이로 인해 발생할 수 있는 문제점이 있습니다. 바로, 동시성 문제인데요. 특히 데이터 영역의 경우 정적 변수들이 저장되어 있는데, 이 변수가 가변성을 띈다면 동시성 문제가 충분히 발생할 수 있습니다.

따라서 멀티 쓰레드 환경이라면 동시성 문제를 항상 고려해야 합니다.

프로세스 제어블록(PCB)에 대해 설명해주세요.

특정 프로세스에 대해 중요한 정보를 담고 있는 자료구조입니다. 운영체제가 프로세스를 관리하기 위해 프로세스 생성과 동시에 고유한 PCB를 생성합니다.

프로세스가 CPU에 할당되어 처리되는 도중에, CPU의 점유가 다른 프로세스로 넘어가게 된다면, 실행 과정에 대한 정보를 어딘가에 저장하고 있어야 합니다. 이때 그 어딘가가 PCB에 해당합니다.

  • PCB에는 어떤 정보가 담겨있을까요?

    • 프로세스 ID
    • 프로세스의 상태: new, ready, running, waiting, terminated
    • 프로그램 카운터: 프로세스가 다음에 실행할 명령어의 주소
    • CPU 레지스터
    • CPU 스케줄링 정보: 프로세스 우선순위, 스케줄 큐에 대한 포인터 등
    • 메모리 관리 정보: 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
    • 입출력 상태 정보: 프로세스에 할당된 입출력 장치들과 열린 파일 목록
    • 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정번호 등

쓰레드 제어블록(TCB)에 대해 설명해주세요.

쓰레드에 대한 정보를 저장하는 자료구조입니다.

쓰레드가 생성될 때, 운영체제는 각 쓰레드에 대한 TCB를 생성하고 업데이트하여 쓰레드의 상태를 추적합니다.

특정 쓰레드가 CPU를 점유하여 처리되는 도중에, 다른 쓰레드로 점유가 넘어가게 되면, 기존 처리되던 쓰레드의 상태를 저장해야 합니다. 이때 저장하는 공간이 TCB입니다.

  • TCB에 포함되는 정보
  • 쓰레드 식별자
  • 쓰레드 상태
  • 프로그램 카운터
  • 스택 포인터
  • 레지스터 상태
  • 쓰레드 우선순위
  • 쓰레드의 할당된 자원 정보
  • 쓰레드의 스케줄링 정보

멀티 프로세스에 대해서 설명해주세요.

하나의 컴퓨터에서 여러 개의 독립적인 프로세스가 실행되는 것을 말합니다.

이때, 각 프로세스는 메모리에 각각의 독립적인 메모리 영역을 할당받게 됩니다.

프로세스가 많을수록 처리되는 프로그램의 수가 많아져서 좋은 게 아닐까하는 생각이 들 수 있지만, 쓰레드가 많을수록 좋은 게 아닌 것처럼 실행 결과가 좋지 않을 수 있습니다.

멀티 쓰레딩에 대해서 설명해주세요.

하나의 프로세스 내에 여러 개의 쓰레드가 동시에 실행되는 것을 의미합니다.

적절한 수의 쓰레드는 여러 작업을 이상없이 동시에 처리할 수 있지만, 너무 많은 수의 쓰레드는 컨텍스트 스위칭으로 인해 오히려 성능 저하가 발생할 수 있습니다.

프로세스 수행 상태 변화 과정에 대해 설명해주세요.

처음 프로세스가 메모리에 적재되기 전의 상태는 new입니다.

해당 프로세스가 메모리에 적재가 되고 실행대기 큐에 적재가 된 상태는 ready입니다.

해당 프로세스가 CPU에 할당되어 작업이 수행되면 running 상태입니다.

만약 해당 프로세스가 IO 작업을 요청하게 되면, 해당 IO 작업이 완료되기 전까지 대기하는 상태가 block 입니다.

해당 프로세스가 종료될 때, terminated 상태를 거쳐 완전히 종료하게 됩니다.

문맥교환(context switch)에 대해 설명해주세요.

A 쓰레드와 B 쓰레드가 동시에 처리될 때, CPU가 A를 처리하다가 B를 처리하게 될 때 발생하는 개념이 컨텍스트 스위칭입니다.

  • 문맥교환은 언제 발생하나요?

일반적으로 한 쓰레드의 타임 슬라이스가 끝난 경우 발생합니다.

또는 타이머 인터럽트나 IO 요청 시스템 콜이 들어올 때 발생합니다.

  • 문맥 교환 발생 과정에 대해서 조금 더 상세히 설명해주세요.

현재 처리하는 CPU가 쓰레드 A에서 B로 컨텍스트 스위칭이 일어난다고 가정해보겠습니다.

이때, 쓰레드 A의 진행 상태를 PCB 내지 TCB에 저장합니다. 그리고 운영체제는 쓰레드 B의 진행 상태를 PCB 또는 TCB에서 불러오고, 이를 CPU에게 할당합니다.

fork() 명령어에 대해 설명해주세요.

유닉스에서의 fork 명령어는 새로운 프로세스를 생성하도록 하는 시스템 콜입니다.

fork 시스템콜을 통해 부모 프로세스의 내용을 그대로 복제한 자식 프로세스를 생성할 수 있습니다.

이때 부모 프로세스와 자식 프로세스는 독립적으로 수행합니다.

프로세스끼리 협력하는 방법에 대해서 설명해주세요.

  1. 메시지 전달 방식 프로세스는 다른 프로세스에게 전달할 메시지를 운영체제에게 시스템 콜 방식으로 요청해 전달한다.
  2. 공유 메모리 방식 시스템 콜 방식을 통해 각 프로세스 간 공유하는 공간을 만든다. 이 공유 공간을 다른 프로세스에서 접근할 수 있도록 한다.

🤔 개인적인 궁금증

스택 메모리 영역 관련

자바의 정석에 따르면, “각 메서드를 위한 메모리상의 작업공간은 서로 구별된다”고 합니다. 동시에 쓰레드에 대해 학습했을 때, 각 쓰레드는 각기 다른 스택 영역을 가진다고 학습했습니다.

둘 다 결국, 메모리 관점에서 스택 영역에 각기 다른 작업 영역을 할당한다고 이해하면 될까요?

컨텍스트 스위칭 설명에 주로 프로세스 간의 교환이 설명되어 있는데, 쓰레드 간의 교환으로 나와있지 않은 이유? 그리고 사실상 쓰레드 간의 교환이 일어날텐데? 그리고 같은 프로세스의 쓰레드 간의 교환이 일어나면 PCB 말고 TCB에 저장하나?

🎯 피드백

  • 저번 주랑 많이 달라졌다. 두괄식이 좋았다.
  • 예시도 구체적이고 자세해서 굿
  • 소통도 많이 늘었다.
  • 저번 주에 비해 다 좋았다.
  • 래비덴큐
  • 멀티 쓰레드 적용 → 대용량 데이터, 배치 이때 멀티 쓰레드의 장점을 많이 느낀다.
  • 시선 처리
@kdkdhoho
Back to Basic