[Interview] 면접 준비 7일차(스터디)

Kim Hyen Su·2024년 5월 29일

면접질문

목록 보기
8/27
post-thumbnail

면접준비

예상질문


운영체제란 무엇인가요?

  • 응용프로그램 및 사용자의 잘못된 동작으로 인한 컴퓨터 자원의 손상을 방지하며, 자원을 효율적으로 관리하기 위한 소프트웨어를 말합니다.
  • 전원을 누르면 운영체제가 먼저 실행되고, 운영체제가 하드웨어를 장악한 뒤 응용프로그램 실행이 가능합니다.
  • 컴퓨터 자원을 보호하기 위해 응용프로그램 및 사용자로부터 자원을 숨깁니다. 즉, 응용프로그램과 컴퓨터 자원 사이에 인터페이스 역할을 해줍니다.
  • 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어

커널이란 무엇인가요?

커널(kernal)이란, 운영체제의 핵심기능을 구현한 프로그램으로써, 운영체제의 성능은 커널에 의해 좌우됩니다.

유닉스 계열 커널 VS 윈도우 계열 커널(사용자 인터페이스)

유닉스 계열 커널 : 문자 사용자 인터페이스 기반인 '셸(shell)' 사용.
윈도우 계열 커널 : 그래픽 사용자 인터페이스 기반.

커널 내부는 다음과 같이 시스템 호출과 디바이스 드라이버로 구성되어 있습니다.

시스템 호출은 커널이 자원을 보호하기 위해 만든 인터페이스입니다. 컴퓨터 자원을 이용하기 위해서는 시스템 호출 인터페이스를 이용해야 접근 가능하며, 커널이 제공하는 시스템 관련 서비스를 모아 놓은 곳이며, 함수형태로 제공됩니다.

디바이스 드라이버는 커널과 하드웨어의 인터페이스를 말합니다. 시스템 호출과 달리 하드웨어 제작사 자체에서 제공하는 드라이버도 존재하여, 사용자가 사용 시 해당 디바이스 드라이버 소프트웨어를 직접 설치해야 사용이 가능합니다.

커널의 역할과 종류
커널의 역할
1. 프로세스 관리 - 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경 제공.

  1. 메모리 관리 - 프로세스에 작업 공간을 제공.

  2. 파일 시스템 관리 - 데이터를 저장하고 접근할 수 있는 인터페이스 제공.

  3. 입출력 관리 - 필요한 입력과 출력 서비스 제공.

  4. 프로세스 간 통신 관리 - 공동작업을 위한 각 프로세스 간 통신환경을 지원.

커널의 종류
(1) 단일형 구조 커널(monolithic architecture)
초창기 운영체제 구조.
커널의 핵심기능을 구현하는 모듈 하나로 구성.
장점 : 모듈이 하나로 되어 있어 통신 비용이 줄어 효율적인 운영이 가능.
단점
버그나 오류처리가 어렵다.
상호 의존도가 높아 기능 한 곳의 작은 결함이 시스템 전체의 문제로 확산될 수 있다.
다양한 환경의 시스템에 적용이 어렵다.
현대의 운영체제는 크고 복잡하여 단일형 구조를 적용하기 힘들다.

(2) 계층형 구조 커널(layered architecture)
단일형 구조의 발전된 형태.
비슷한 기능들을 묶어 모듈화하여 하나의 계층으로 만들고 계층간의 통신을 통해 운영체제를 구현하는 방식.
단일형 구조 커널보다 버그나 오류 처리가 쉽다.
오늘날 대부분의 운영체제가 이 구조로 이뤄져 있다.

(3) 마이크로 구조 커널(micro architecture)
등장 배경
다양한 하드웨어와 사용자의 요구 수용으로 크기가 점차 커짐에 따라 하드웨어 용량이 커지고 소스코드 량이 많아 오류 잡기가 어려워졌다.
운영체제에서는 가장 기본적인 기능만 제공하고 이외의 기능은 사용자 영역에서 구현되도록 한 형태.
각 모듈이 독립적으로 작동하기 때문에 하나의 모듈이 실패하여도 전체 운영체제에 영향을 미치지 못한다.
커널이 작고 이식이 쉬워 CPU 용량이 작은 시스템에도 적용이 가능하다.

프로세스와 스레드의 차이는 무엇인가요?

프로세스

  • 프로세스는 메모리 위에서 실행되는 프로그램을 말합니다.
  • 독립적인 메모리 영역을 할당받습니다.
  • 프로세스 간의 데이터 통신을 위해서는 IPC를 사용해야 합니다.
  • 프로세스는 최소 1개의 쓰레드를 가지고 있습니다.

스레드

  • 스레드는 프로세스 내에서 할당받은 자원을 이용해 동작하는 실행 단위를 말합니다.
  • 스레드는 프로세스 내 자원 중 Stack만 할당 받고, Code, Data, Heap 영역은 공유합니다.
    • Stack만 별도로 할당 받는 이유는 각 스레드에 독립적인 실행을 위해서이며, 함수 호출 시 데이터의 무결성을 해치지 않도록 하기 위해서입니다. 또한, 하나의 스레드가 종료되면 해당 스레드를 제거하여 메모리 누수를 방지해줍니다.
  • 스레드는 프로세스의 자원을 공유하기 때문에 별다른 통신없이 스레드간의 자원 공유가 됩니다.

멀티 프로세스와 멀티 스레드의 차이는 무엇인가요?

  • 멀티 프로세스는 여러 개의 프로세스들이 독립적인 메모리 공간을 가지고 동시에 실행되는 방식을 말합니다. 멀티 스레드는 하나의 프로세스 내에 여러개의 스레드가 메모리를 공유하며 실행되는 방식을 말합니다.

  • 멀티 프로세스는 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 미치지 않습니다. 하지만 ContextSwitching을 위한 오버헤드(캐시 초기화, 인터럽트 등)가 발생하며, 프로세스이므로 서로 간의 통신 비용이 크다는 단점이 있습니다.

  • 멀티스레드는 프로세스보다 생성 비용이 낮으며, 통신 비용이 낮습니다. 하지만 공유 자원으로 인해 스레드 간에 동기화 문제가 발생할 수 있다는 단점이 있습니다.

스레드마다 독립적으로 할당 받는 주소 공간에 대해서 설명해주세요.

CPU 스케줄러에 의해서 정해진 시간 내에 작업을 수행하지 못할 경우, 스레드가 어디까지 작업을 수행했는지 기억할 필요가 있습니다. 이를 위해서 PC 레지스터라는 공간에 수행했던 정보를 저장하며, 각 스레드마다 독립적으로 실행단위가 존재하므로 스레드마다 독립적으로 해당 공간을 할당합니다.

  • PC 레지스터에 대한 설명
    우선, 레지스터는 CPU 내 작은 저장공간을 의미하며, 데이터를 임시로 저장할 때 주로 사용됩니다. 대표적인 레지스터로는 PC레지스터와 SP 레지스터가 있습니다.

PC는 프로그램 카운터를 말하며, 다음으로 실행할 명령어의 주소를 저장하는 레지스터를 말합니다. 즉, 코드가 실행 중 다음 줄에 있는 코드를 수행한다고 가정하면 다음 줄의 주소가 PC 레지스터에 저장됩니다.

SP는 스택 포인터이며, 스택의 마지막 프로그램 요청 주소를 저장합니다. 스택에서 최상단의 주소를 가지고 있다라고 생각하면 간단합니다.

profile
백엔드 서버 엔지니어

0개의 댓글