'interrupt vs trap' 그리고 'software interrupt vs hardware interrupt'

오진호·2023년 3월 29일
0

trap과 interrupt는 어떻게 다를까?

Trap과 Interrupt는 모두 컴퓨터 시스템에서 중단되는 것을 의미하지만, 그 발생 원인과 처리 방식에서 차이가 있습니다.

Interrupt는 외부 장치 또는 소프트웨어 인터럽트 요청에 의해 발생합니다. 예를 들어, 하드웨어 인터럽트는 타이머나 I/O 디바이스에서 발생할 수 있고, 소프트웨어 인터럽트는 프로그램에서 특정한 시스템 호출을 실행하거나 예외 상황이 일어날 때 발생할 수 있습니다. Interrupt가 발생하면 현재 실행 중인 프로세스는 중단되고, 운영체제는 해당 Interrupt를 처리하는 Interrupt Handler를 호출하여 해당 작업을 수행합니다.

Trap은 프로세스 내부에서 예외 상황이 생겼을 때 발생합니다. 예를 들어, 0으로 나누기나 잘못된 메모리 참조와 같은 프로그램 에러가 발생하면 Trap이 발생합니다. Trap이 발생하면 운영체제는 현재 실행 중인 프로세스를 중단하고, 해당 Trap을 처리하는 Trap Handler를 호출하여 예외 처리 작업을 수행합니다.

요약하자면, Interrupt는 외부에서 발생하는 이벤트로 인해 운영체제에 의해 처리되는 중단, Trap은 프로그램 내부에서 발생하는 예외 상황으로 인해 운영체제에 의해 처리되는 중단입니다.

software interrupt

소프트웨어 인터럽트는 시스템 호출(system call)을 통해 발생하는 인터럽트입니다. 시스템 호출은 사용자 프로그램이 운영체제의 서비스를 요청하기 위해 사용하는 메커니즘으로, 파일 입출력, 메모리 할당 등의 작업을 수행할 때 사용됩니다.

시스템 호출은 사용자 프로그램에서 특정한 레지스터나 메모리 위치에 매개 변수(parameter)를 설정한 후, 운영체제에게 인터럽트를 요청하는 명령(instruction)을 실행함으로써 발생합니다. 이 때, 운영체제는 해당 인터럽트를 처리하기 위해 인터럽트 벡터(interrupt vector)를 사용하여 해당 인터럽트를 처리하는 루틴(interrupt handler)을 찾습니다.

시스템 호출은 일반적으로 유저 모드에서 실행되는 사용자 프로그램에서 발생합니다. 이러한 이유로 소프트웨어 인터럽트는 사용자 모드(user mode)에서 실행 중인 프로그램이 운영체제의 서비스를 요청할 때 사용되며, 이를 통해 운영체제와 사용자 모드 간의 상호작용을 가능하게 합니다.

시스템 호출은 대부분 운영체제에서 제공하는 라이브러리 함수를 통해 사용할 수 있습니다. 예를 들어, C언어에서는 <stdio.h>, <stdlib.h>, <unistd.h> 등의 헤더 파일을 통해 다양한 시스템 호출을 사용할 수 있습니다.

software interrupt 예시

소프트웨어 인터럽트는 일반적으로 운영체제에서 제공하는 서비스를 사용자 프로그램에서 호출할 때 발생합니다. 대표적인 예시로는 다음과 같은 것들이 있습니다.

  • 파일 입출력

    • 사용자 프로그램에서 파일 입출력을 수행할 때, 운영체제의 파일 시스템 서비스를 호출해야 합니다. 이 때, read(), write() 함수 등의 시스템 호출을 사용하여 운영체제의 파일 시스템 서비스를 호출할 수 있습니다.
  • 메모리 할당

    • 사용자 프로그램에서 동적 메모리 할당을 수행할 때, 운영체제의 메모리 관리 서비스를 호출해야 합니다. 이 때, malloc(), free() 함수 등의 시스템 호출을 사용하여 운영체제의 메모리 관리 서비스를 호출할 수 있습니다.
  • 네트워크 통신

    • 사용자 프로그램에서 네트워크 통신을 수행할 때, 운영체제의 네트워크 서비스를 호출해야 합니다. 이 때, socket(), connect(), send(), recv() 등의 함수를 사용하여 운영체제의 네트워크 서비스를 호출할 수 있습니다.
  • 시스템 정보 조회

    • 사용자 프로그램에서 운영체제의 시스템 정보를 조회할 때, 운영체제의 시스템 정보 서비스를 호출해야 합니다. 이 때, gethostname(), getuid(), getgid() 등의 함수를 사용하여 운영체제의 시스템 정보 서비스를 호출할 수 있습니다.

hardware interrupt

하드웨어 인터럽트(Hardware Interrupt)는 주변 기기나 하드웨어에서 발생한 이벤트에 의해 발생하는 인터럽트입니다. 하드웨어 인터럽트는 운영체제가 처리해야 할 이벤트가 발생한 경우, 운영체제의 처리가 필요한 상황에서 하드웨어나 주변 기기가 CPU에게 신호를 보내어 발생시키게 됩니다.

하드웨어 인터럽트는 다양한 종류가 있으며, 예를 들어 다음과 같은 상황에서 하드웨어 인터럽트가 발생할 수 있습니다.

하드웨어 인터럽트는 일반적으로 CPU의 하드웨어 인터럽트 핀을 사용하여 발생시키며, 이를 인식한 CPU는 현재 실행 중인 프로세스를 일시 중지하고, 해당 인터럽트를 처리하기 위해 운영체제의 인터럽트 핸들러(Interrupt Handler)로 제어를 이전합니다. 인터럽트 핸들러는 해당 인터럽트를 처리한 후, 이전에 실행 중이었던 프로세스나 새로운 프로세스를 실행하도록 제어를 반환합니다.

hardware interrupt 예시

  • 입출력 장치의 데이터 전송 완료

  • 타이머 인터럽트 (주기적으로 발생하여 일정 시간마다 시스템의 상태를 감시하거나 스케줄링 등을 수행)

  • 메모리 에러 (예: 페이지 폴트)

  • 전원 문제 (예: 전원 공급장치 문제)

profile
개발자 Bepi입니다

0개의 댓글