Cute Running Puppy

cs/[cs] 기술면접준비

[운영체제] 면접 예상 질문 & 답변 모음 - 인터럽트(interrupt)

R.silver 2024. 3. 27. 14:03
반응형

2. 인터럽트가 무엇인지 설명해 주세요

 

인터럽트는 cpu의 작업을 방해하는 신호로 명령어 사이클이 끊어지는 상황을 의미합니다.

  • 명령어 사이클: 하나의 명령어를 처리하는 정형화된 흐름

인터럽트는 동기 인터럽트와 비동기 인터럽트로 구분할 수 있습니다

  • a. 동기 인터럽트
    • 예) cpu가 실행하는 프로그램상의 오류
    • CPU에 의해 발생하는 인터럽트로 예외 (exception)이라고 부릅니다.
  • b. 비동기 인터럽트
    • 예) cpu가 요구한 작업을 마친 입출력 장치가 보내는 완료 알림
    • 예) 입출력 장치가 입력을 받은 후 이를 처리하기 위한 입력 알림
    • 주로 입출력 장치에 의해 발생하는 인터럽트로 하드웨어 인터럽트라고 부릅니다.

2-1. 인터럽트는 어떻게 처리하나요

 

인터럽트 신호가 발생했을 때 cpu는 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인합니다.

인터럽트를 받아들일 수 있다면, cpu는 현재 작업을 백업하고, 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행합니다.

인터럽트 서비스 루틴이 끝나면 cpu는 백업해 둔 작업을 복구하여 실행을 재개합니다.

 

하드웨어 인터럽트 처리 순서

  1. 입출력장치가 cpu로 인터럽트 요청 신호를 보냅니다.
  2. 실행 사이클이 끝나고 명령어 인출 전 cpu 인터럽트 여부를 확인합니다.
  3. 인터럽트 요청을 확인하고, 인터럽트 플래그를 통해 현재 인터럽트를 받아들일 수 있는지 확인합니다.
  4. 인터럽트를 받아들일 수 있다면 cpu는 현재 작업을 백업합니다.
  5. 인터럽트 벡터를 참조하여 인터럽트 서비스 루틴을 실행합니다.
  6. 인터럽트 서비스 루틴이 끝나면 백업해 둔 작업을 복구하여 실행을 재개합니다.

인터럽트 요청 신호

인터럽트를 요청하는 신호입니다.

인터럽트 요청을 수용하기 위해서는 플래그 레지스터의 인터럽트 플래그가 활성화되어 있어야 합니다.

 

인터럽트 플래그

하드웨어 인터럽트를 받아들일지 결정하는 플래그입니다.

인터럽트 플래그가 비활성화되어 있다면 인터럽트 요청이 무시됩니다.

그러나 정전, 하드웨어 고장으로 인한 인터럽트 등 막을 수 없는 인터럽트는 우선순위가 높아 플래그에 관계없이 인터럽트가 받아들여집니다.

 

인터럽트 서비스 루틴 (ISR)

인터럽트를 처리하기 위한 프로그램으로 인터럽트를 처리하는 방법이 담겨 있습니다.

인터럽트 핸들러라고도 불립니다.

cpu가 인터럽트를 처리한다는 것은 인터럽트 서비스 루틴을 실행하고 이전작업으로 다시 돌아온다는 것을 의미합니다.

 

인터럽트 벡터

인터럽트 서비스 루틴을 식별하기 위한 정보입니다.

인터럽트 벡터로 서비스 루틴의 시작 주소를 알 수 있습니다.


2-2. Polling 방식에 대해 설명해 주세요.

 

루프를 계속 돌며 시그널이 들어왔는지 확인하는 방식입니다.

구현이 쉽지만, 신호가 들어올 때까지 루프를 돌기에 시스템 자원을 많이 사용합니다.

바쁜 대기라고도 부릅니다.


2-3. HW / SW 인터럽트에 대해 설명해 주세요.

 

하드웨어 인터럽트

하드웨어 인터럽트는 주로 입출력 장치에 의해 발생하는 인터럽트를 의미합니다.

비동기 방식으로 작동됩니다.

 

소프트웨어 인터럽트

소프트웨어 인터럽트는 프로그램 코드 혹은 운영체제의 명령어로 발생하는 인터럽트를 의미합니다.

시스템 콜(system call), 트랩(trap)은 소프트웨어 인터럽트의 일종입니다.

동기화 방식으로 작동됩니다.


2-4. 동시에 두 개 이상의 인터럽트가 발생하면, 어떻게 처리해야 하나요?

 

동시에 인터럽트가 발생하면 cpu는 인터럽트 우선순위를 기준으로 인터럽트를 처리합니다. 이때, 선점형 방식으로 동작합니다.

 

인터럽트 처리 절차

  1. 인터럽트 요청 중 가장 높은 우선순위를 가진 인터럽트를 식별합니다.
  2. 현재 작업 중인 작업의 상태를 저장합니다.
  3. 우선순위 순서대로 인터럽트 서비스 루틴 혹은 인터럽트 핸들러가 실행됩니다.
  4. 인터럽트 처리 중 더 높은 우선순위의 인터럽트가 발생한다면 해당 인터럽트가 처리됩니다. (중첩 인터럽트 처리)
  5. 인터럽트 처리가 모두 완료되었다면 이전에 저장한 작업을 복원하여 작업을 재개합니다.

참고한 레포지터리 

VSFe/Tech-Interview (github.com)

 

GitHub - VSFe/Tech-Interview

Contribute to VSFe/Tech-Interview development by creating an account on GitHub.

github.com

 

반응형