본문 바로가기

Software/Docs

[CPU] 인터럽트에 대하여..

인터럽트는 컴퓨터가 공통되는 작업을 하기 위해 호출하는 루틴. 프로그램의 실행 중에 외부의 장치 등에서 요구가 있으면 실행중의 프로그램을 일시 중단하고 요구에 따라 다른 처리를 착수하기 위해 만들어진 것.
인터럽트의 종류
하드웨어 인터럽트
예상할 수 없는 시기에 주변 장치에서 발생된 일에 대해서 주변 장치가 처리를 요청하는 경우. 주변 장치에 긴급 상황이나 CPU로 처리를 요구하여야 하는 상황이 발생되었을 때 그 상태를 CPU에 전달하는 통로가 INTR(Interrupt Request) 신호선이다.
 
마스터 8259 지원 슬레이브 8259 지원 동작기기
IRQ 0   타이머 0
IRQ 1   키보드 버퍼 풀(Full)
IRQ 2 IRQ 8 RTC
  IRQ 9 S/W 인터럽트 or 네트웍(Network)
  IRQ10 예비(Reserved)
  IRQ11 예비(Reserved)
  IRQ12 예비(Reserved)
  IRQ13 보조 프로세서 (Co-Processor)
  IRQ14 하드 디스크(Hard Disk)
  IRQ15 예비(Reserved)
IRQ3   직렬(Serial) 통신 포트 2
IRQ4   직렬(Serial) 통신 포트 1
IRQ5   병렬(Parallel) 통신 포트 2
IRQ6   플로피(Floppy) 디스크
IRQ7   병렬(Parallel) 통신 포트1
   
  Maskable 인터럽트
처리할 것인지, 말 것인지를 설정할 수 있는 인터럽트를 마스커블 (Maskable) 인터럽트라고 한다.
  Non Maskable 인터럽트
 

처리 여부를 묻지 않고 CPU가 무조건 처리하는 인터럽트. 예) 메모리 패리티 에러, I/O channel check

  인터럽트 컨트롤러(Interrupt Controller)
  주변 기기의 인터럽트를 받아들이기는 몇개의 인터럽트 입력 단자가 마련되어 있으며, CPU로 요청하기 위한 인터럽트 단자가 별도로 마련되어 있다. 주변 장치에서 발생된 인터럽트는 CPU로 바로 전달 되지 않고 일단 인터럽트 컨트롤러로 전달된다. 인터럽트 컨트롤러는 다시 CPU로 바로 전달되지 않고 일단 인터럽트가 발생되었는지를 묻는다. 이 때 인터럽트 컨트롤러는 발생된 인터럽트의 종류를 알려주게 되고 CPU는 인터럽트의 종류에 따라 인터럽트를 발생시킨 장치를 제어하게 된다. 8259 기능 중에 하나는 또다른 8259 컨트롤러를 연결하여 사용하는 방법을 캐스케이드(Cascade)라고 하는데 두 개의 8259를 이용하여 16개의 인터럽트가 지원된다.

소프트웨어 인터럽트
 

예상된 시기에 어떤 기능을 발휘하도록 하기 위해 인위적으로 인터럽트를 발생시키는 경우. 프로그램 처리 도중 비 정상적인 명령어로 인하여 인터럽트가 발생되는 경우. 하드웨어를 제어하기 위한 바이오스(BIOS)와 도스(DOS) 또는 윈도우(Window)라는 운영 프로그램(Operating System), 응용 프로그램(Application Program)으로 도스나 바이오스에 있는 기능을 이용하고자 할 때는 그 기능을 가지는 인터럽트를 호출하면 된다.

  예외(Exception)
  CPU 자체에서 프로그램 운영 오류시에 발생한다.
  1.2.2 바이오스 인터럽트
  바이오스에 있는 기능을 이용하여 호출된다. 예) 비디오, 키보드, 마우스, 디스켓, 프린터, serial port, joystick, memory, printer 등
  도스 인터럽트
  도스에 있는 기능을 이용시에 호출(도스를 통해서 하드웨어를 호출)

CPU와 8259A 인터럽트 처리
  IBM PC에서는 00부터 FF까지의 8비트의 CPU로 전달되는 인터럽트는 하드웨어와 소프트웨어 인터럽트를 망라하여 256가지의 인터럽트 중의 하나로서 인식된다. 인터럽트 백터 테이블이란 256가지 인터럽트에 대하여 각 인터럽트가 발생되었을 때 발생되었을 때 처리하는 프로그램이 있는 곳의 주소를 표로 만들어 저장하고 있는 곳으로서, 인터럽트가 발생되면 CPU는 이 표에 있는 테이블을 이용하여 처리하는 방법.
 
인터페이스 로직이 system bus interface에서 Interrupt Request를 활성화 한다.
Interrupt Controller(8259A)에 요청되거나, pending 된 인터럽트는 우선순위에 따라서 인식한다.
요청된 인터럽트는 가장 높은 레벨의 서비스를 CPU에게 인터럽트를 요청한다.
CPU는 8259A Interrupt Controller에게 INTA를 보낸다. 첫째로 우선순위는 멈춰지고, 서비스 latch의 레벨을 설정한다. 둘째로 INTA 8-bit pointer 값을 요구한다.
CPU 8-bit 포인터 값을 받는다. 포인터 값은 low memory table 인덱스로 이용한다. 서비스 될 특별한 레벨의 IP 와 offset 값으로 인터럽트-서비스 루틴을 가진다.
CPU는 IP와 Code Segment 값을 Fetch 하고, 현재 IP, code segment, flags을 stack에 저장하고, 새로운 IP, code segment 값으로 분기한다. 인터럽트 서비스 프로그램은 실행되지 않는다.
 
사용자 삽입 이미지
  CPU와 Interrupt Controller 인터럽트 처리