본문 바로가기
Computer Science/Operating System

Interrupt, I/O Device

by Gofo 2021. 4. 5.

Interrupt and Exception

본 노이만 구조는 instruction들을 순차적으로, 동기적으로 실행한다.

그러나 실제 상황에서는 비동기적으로 발생하는, 즉 주기적으로 발생하지 않는 이벤트들을 처리해야한다.

이러한 이벤트들을 interrupt라고 한다.

 

Synchronous, Asynchronous

  • Synchronous
    • 프로그램이 작성됬을 때 부터 예정된 일
    • 예층가능하고, deterministic이다.
    • 포인터의 잘못된 주소 참조 등
  • Asynchronous
    • 미리 예정되어있지 않아서 예측 불가능한 것이다.
    • 네트워크 에러 등

 

Interrupt, Exception

Interrupt나 exception은 순차적으로 실행되는 instruction들의 흐름을 깨고 실행되는 asynchronous 이벤트들이다.

 

Interrupt와 execption의 구분은 architecture마다 다르다.

Intel 80x86 microprocessor에서는 synchronous interrupt을 exception로, asynchronous interrupt을 interrupt로 설정한다.

ARM processor는 7개의 exepction을 정의한다.

Data abort, Fast interrupt, Request, Prefetch abort, Software interrupt, Reset, Undefined instruction이 그것이다.

 

주된 구분 기준은 다음과 같다.

  • interrupt
    • 외부의 I/O device가 발생시키는 이벤트
    • timers, NIC, hard drive 등
  • exception
    • 내부에서 작업을 수행하다가 부딪혀서 발생되는 이벤트
    • 주소 오류, overflow, instruction exception 등

 


Interrupt Vector Table

메모리상에 interrupt 종류 별로 interrupt handler가 정의되어있는 자료구조이다.

각 entry는 interrupt vector라고 하고, interrupt handler의 주소를 담고 있다.

 

Processor architecture마다 개념은 동일하지만 이를 구성하는 방식은 다르다.

 

ARM Vector Table

0~1C까지 exepction이 발생하면 분기해야 할 정보가 들어있다.

각 entry는 execption handler에 대한 주소를 담고 있어서 재분기된다.

 

RESET은 전원인가 혹은 물리적 reset이 발생했을 때 발생한다.

RESET이 발생하면 CPU는 0번지로 jump하게 되고 부팅과 관련된 코드로 다시 jump하여 reset exception handler을 수행한다.

 

SWI는 프로그래머가 고의로 exception이 발생한 경우이다.

코드 중 exception을 만나면 SWI로 jump하고 다시 재분기하여 SWI exception handler을 수행한다.

 


I/O Device와 Interrupt

IRQ (Interrupt ReQuest)

Hardware device controller가 가지고 있는 핀(pin)의 종류 중 하나이다.

각 pin들을 통해서 CPU는 데이터나 address를 주고 받을 수 있다.

 

CPU는 주로 1~2개의 interrupt request pin을 가지고 있다.

Interrupt request pin에는 I/O 장치가 연결되어있다.

연결되어있는 I/O 장치가 신호를 보내면 CPU는 해당하는 장치에 대한 interrupt를 인지하고, interrupt vector table로 jump해서 해당하는 interrupt handler를 실행한다.

 

 

PIC (Programmable Interrupt Controller)

CPU는 보통 1~2개의 IRQ를 가진다.

그런데 컴퓨터는 많은 I/O device가 필요하기 때문에 중계하는 매개체가 필요하다.

이를 위해서 PIC(programmable interrupt controller)를 사용한다.

 

PIC는 interrupt-driven system에서 다른 I/O 장치들에 대한 대표성을 가지고 CPU에 연결되며, 전반적인 manager 역할을 수행한다.

 

PIC는 다수의 interrupt pin들을 가지고 있다.

PIC에는 다수의 I/O 장치들이 연결되고, PIC가 CPU의 interrupt pin에 직접 연결된다.

이를 통해서 CPU는 IRQ pin의 수보다 더 많은 여러 개의 I/O 장치들을 연결할 수 있다.

 

Intel 8259A PIC

대표적인 PIC의 예는 intel 8259A PIC 이다.

8259A에는 8개의 IRQ pin이 존재하기 때문에 최대 8개의 I/O 장치들을 연결할 수 있다.

 

그러나 보통 8개 만으로는 모든 I/O 장치들을 연결할 수 없기 때문에 8259A 여러개를 직렬로 연결해서 사용한다.

8259A에는 다른 8259A가 연결되는 구조로 이루어진다.

 


CPU의 구현(C Code)

간단하게 C code로써 CPU의 기능을 구현한 것이다.

실제 CPU는 훨씬 복잡하다.

 

Interrupt를 제외하고는 CPU는 무한히 반복하는 3줄의 instruction으로 볼 수 있다.

memroy에서 instruction을 읽고, 그 instruction을 실행하고, CP를 증가시킨다.

이는 본 노이만 모델을 의미한다.

 

여기에 interrupt가 발생하면, PC 값을 저장하고 interrupt vector table로 jump하게 된다.

이후 실행되는 instruction은 interrupt의 종류에 따라서 달라진다.

while(1) {
    IR = memory[PC];		// fetch
    execute(IR);			// execute
    PC = PC + 1;			// PC ++
    if(InterruptRequest) {	// interrupt
        memory[0] = PC;		// save current PC
        PC = memory[1];		// jump to vector table
    }
}; 

 

'Computer Science > Operating System' 카테고리의 다른 글

Process, PCB(Process Control Block)  (0) 2021.06.16
User Mode, Kernel Mode  (0) 2021.06.16
컴퓨터 구조와 프로그램 실행  (0) 2021.04.03
Fundamental Concepts of OS  (0) 2021.03.24
History of Computers and OS  (0) 2021.03.18

댓글