본문 바로가기

대학 수업

I/O Commands, ARM Interrupt - 임베디드 컴퓨터 구조

반응형

미리미리 정리할 걸~

I/O Commands

  • I/O 디바이스는 I/O 컨트롤러에 의해 제어된다
    • 데이터 송/수신
    • 소프트웨어와 동시 작업
  • Command Register
    • 디바이스에 명령을 내리기 위해 사용
    • 메모리이며 주소로 접근할 수 있음
    • state machine과 비슷함 (0: idel, 1: receive, ...)
  • Status Register
    • 현재 디바이스의 상태, 에러를 표시하는 메모리
    • CPU에 디바이스의 상태를 알려주는 역할
  • Data Register
    • 데이터를 송/수신하기 위한 메모리
    • 해당 영역의 데이터를 CPU로 전송

I/O Register Mapping 방법

  1. Memory Mapped I/O
    • 레지스터가 메모리와 같은 공간에 위치
    • address decoder로 구별할 수 있다
    • OS가 Address Translation 사용하여 커널만 접근 가능하도록 만들 수 있음
    • ARM, MIPS 프로세서가 사용
  2. I/O Instruction
    • I/O 레지스터에 접근하는 Instruction을 분리한다
    • 커널 모드에서만 접근 가능
    • Intel, AMD 프로세서가 사용

polling vs interrupt

  • polling:
    • CPU가 주기적으로 디바이스 상태를 읽고 쓰는 방식
    • ready면 operation, error면 handler 실행
    • 디바이스가 idle인 경우에는 CPU Resource 낭비
    • 작고 low-performance 장치에서 자주 사용되는 방식
      • 실행 시점이 예측 가능함
      • 하드웨어 구성이 저렴함
  • interrupt
    • 이벤트가 발생할 때마다 디바이스가 CPU에 interrupt
    • CPU는 interrupt가 발생할 때마다 interrupt handler를 통해 작업을 처리한다
    • Exception과 같은 방식으로 제어
      • 그러나 명령어 끝나고 예외 들어가는 것과 달리 명령어 실행과 동기화 되어있진 않음 (언제든 interrupt 가능)
      • 명령어 실행 도중에 handler를 호출한다
      • 정보를 통해 interrupt를 일으킨 장치를 구분한다
    • Priority Interrupt
      • Interrupt를 처리하는 도중 다른 interrupt가 발생할 수도 있다
      • 이때 순차적으로 처리할 수도 있으나 interrupt 간 우선순위를 두고 우선순위대로 실행하는 것도 가능

ARM의 Exception/Interrupt

  • Exception은 순차적인 명령어 실행 순서를 무시하는 상황
    • ARM core가 리셋되었을 때 (Reset)
    • Instruction Fetch가 실패했을 때 (Prefetch Abort)
    • Data Fetch가 실패했을 떄 (Data Abort)
    • Instruction Decode 시 정의되지 않은 명령어였을 떄 (Undefined Instruction)
    • SW Interrupt가 실행되었을 때 (SWI)
    • External Interrupt가 실행되었을 때 (FIQ/IRQ)

Exception Procedure

  1. CPSR(Current Processor Status Register)을 해당 예외 모드의 SPSR(Saved Processor Status Register)에 저장한다.
  2. 현재 PC(Program Counter)를 해당 예외 모드의 LR(Link Register)에 저장한다.
  3. CPSR의 mode bit을 수정하고 예외 모드에 진입한다.
  4. 예외 처리 핸들러의 주소를 PC에 Load하고 Vector Table을 통해 핸들러로 브랜치한다.

ARM Vector Table

  • 예외 발생 시 ARM Core가 위 Addrerss Table을 보고 해당하는 지점으로 이동한다.
  • Common Branch Instruction 다음과 같은 형태로 이동한다.
    • B <address>
      • LDR pc, [pc, #offset]
    • LDR pc, [pc, #-0xff0]
    • MOV pc, #immediate
    • LDR rn [pc, #offset to literal pool] ; load register n with one word from address [pc + offset]

ARM Interrupt Types

  • Internal Interrupt
    • SWI
      • sw interrupt는 privileged os routine을 호출할 때 발생한다. 이때 user mode에서 privileged mode로 변경된다
  • External Interrupt
    • IRQ
      • 범용적으로 사용되는 interrupt
      • 타이머가 이 interrupt를 사용하여 주기적으로 context switch
      • FIQ보다 priority가 낮고, latency가 더 크다
    • FIQ
      • 보통 빠른 응답 속도를 요구하는 하나의 interrupt source에만 제공된다.
      • e.g. DMA

ARM External Interrupt Occurrence

  1. Interrupt Status Register가 외부 디바이스에 할당되어 있다. 버퍼나 FIFO로 사용되는 다른 레지스터 또한 외부 장치와 CPU 간 데이터 송수신에 연관되어 있다.
  2. Interrupt Register는 IRQ, FIQ 신호를 생성하도록 계층적으로 구성되어 있다.
  3. IRQ나 FIQ가 발생하면 CPU는 다른 Interrupt를 비활성화하고, 모드를 IRQ나 FIQ로 변경한 뒤 Vector Table을 이용하여 브랜치한다
  4. Vector Table에서 프로그램은 Interrupt Handling Routine을 찾아 분기한다.
  5. Interrupt Handling Routine은 보통 두 부분으로 구성되어 있다: Top Half & Bottom Half
  6. Top Half에서 handling routine은 최대한 빨리 다음 interrupt를 받기 위해 필요한 최소한의 함수만을 수행한다.
    • context 저장
    • data를 외부 장치에서 다른 메모리 공간 buffer에 복사
    • enable interrupt
  7. Bottom Half에서는 interrupt handling routine이 데이터를 처리하고, handling이 끝나면 원래 프로그램으로 돌아온다.

I/O Data Transfer

  • Polling and Interrupt-Driven I/O
    • CPU가 Memory와 I/O 간 데이터를 전송함
    • High-Speed Device의 경우 병목 발생함
  • Direct Memory Access(DMA)
    • OS가 데이터 시작 주소를 메모리에 전달
    • I/O Controller가 자동으로 메모리에서 데이터 전송 (혹은 수신)
    • Completion or Error 상태가 되면 Controller가 Interrupt를 건다

Serial Communication

  • 한 번에 한 비트 씩 데이터를 보낸다
  • 병렬 방식보다 throughput이 높음
  • 특히 거리가 멀리 떨어져 있는 경우
  • read나 write 같은 추가적인 control signal이 필요하지 않음
  • Serial Protocols
    • PCI Express
    • Firewire
    • USB

Parallel Communication

  • 멀티 비트를 병렬적으로 전송
  • 정확하게 Align 되어서 전송되어야 함
  • 각 bit 간 Edge를 맞춘다는 게 매우 힘듬 (노이즈, 거리 문제)
  • 내부적으로 칩이나 회로 보드가 있어야 한다
  • Parallel Protocols
    • PCI bus
    • ARM bus
반응형