본문 바로가기

Linux(Centos or RHEL)/RHEL 기초

인터럽트?

아래의 블로그를 참조하여 글을 작성하였습니다.

 

http://rousalome.egloos.com/9971347

https://velog.io/@codemcd/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8Interrupt-3ek4aww0xj

https://coding-factory.tistory.com/353

 

 

인터럽트(interrupt)란 사전적인 의미로는 "방해하다", "중단시키다", "차단하다" 등의 의미가 있습니다. 하던 일을 멈추게 하는 무엇인가가 갑자기 발생하는 상황을 의미합니다. 일상에서의 예를 들면, 책을 읽는 도중 갑자기 전화가 와서 읽던 책을 덮어 놓고 전화를 받는 상황이 있습니다.

 

리눅스에서도 이런 인터럽트 방식을 사용하여 여러 가지 처리를 합니다. 예를 들면 키보드의 자판을 입력하였을 경우 리눅스 커널은 하던 일을 잠시 멈추고 키보드로부터의 인터럽트를 처리합니다. 다른 예시로는, 리눅스 커널의 시간을 측정하기 위해 사용되는 하드웨어 타이머가 있습니다.

[http://wiki.kldp.org/Translations/html/The_Linux_Kernel-KLDP/tlk7.html]

 

 

이러한 인터럽트는 주로 세 가지 종류로 분류됩니다. 하드웨어 인터럽트, 소프트웨어 인터럽트, 내부 인터럽트(예외)가 있습니다.

[https://qastack.kr/unix/17998/what-are-software-and-hardware-interrupts-and-how-are-they-processed]

 

 

하드웨어 인터럽트

하드웨어 인터럽트는 디스크, 네트워크 카드, 키보드, 시계 등과 같은 하드웨어 장치에서 발생합니다. 각 장치 또는 장치 세트에는 고유의 IRQ (Interrupt ReQuest)가 있어서 어떤 장치가 몇 번 IRQ를 사용해야 하는지 규정이 되어 있기도 하고, 그러지 않은 경우도 있습니다.

하드웨어 인터럽트는 CPU에 직접 인터럽트를 요청합니다. 그러므로 하드웨어 인터럽트를 처리하는 도중 다른 하드웨어 인터럽트에 의해서 인터럽트 될 수 있습니다.

[https://pastime0.tistory.com/entry/IRQInterrupt-Request-%EB%9E%80]

[http://www.linuxlab.co.kr/docs/7-7.htm]

[https://prayer15.tistory.com/entry/IRQ-%EB%B2%88%ED%98%B8%EB%9E%80]

 

 

 

소프트웨어 인터럽트

소프트웨어 인터럽트는 하드웨어 인터럽트와 매우 유사하게 처리됩니다. 그러나 현재 실행 중인 프로세스에서만 생성할 수 있습니다. 그리고 소프트웨어 인터럽트는 커널과만 통신합니다. 그러므로 해당 프로세스가 인터럽트를 요청하지 못하는 상태일 경우(현재 실행 중이지 않은 상태)에는 인터럽트가 지연될 가능성이 있습니다.

TCP/IP 프로토콜의 처리, SCSI 프로토콜의 처리, 단말 제어 처리, I/O 요청 등등이 있습니다.

 

 

내부 인터럽트

내부 인터럽트는 프로그램을 수행하는 도중에 발생하는 예외상황을 주로 처리하며, 트랩(Trap)이라고도 부릅니다.

0으로 나누기가 발생한 경우, OverFlow 또는 UnderFlow가 발생한 경우, 프로그램에서 명령어를 잘못 사용한 경우, 부당한 기억장소의 참조와 같은 프로그램상의 오류가 발생할 때 발생하는 인터럽트입니다.