반응형
미리미리 정리할 걸~
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 방법
- Memory Mapped I/O
- 레지스터가 메모리와 같은 공간에 위치
- address decoder로 구별할 수 있다
- OS가 Address Translation 사용하여 커널만 접근 가능하도록 만들 수 있음
- ARM, MIPS 프로세서가 사용
- 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
- CPSR(Current Processor Status Register)을 해당 예외 모드의 SPSR(Saved Processor Status Register)에 저장한다.
- 현재 PC(Program Counter)를 해당 예외 모드의 LR(Link Register)에 저장한다.
- CPSR의 mode bit을 수정하고 예외 모드에 진입한다.
- 예외 처리 핸들러의 주소를 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]
- B <address>
ARM Interrupt Types
- Internal Interrupt
- SWI
- sw interrupt는 privileged os routine을 호출할 때 발생한다. 이때 user mode에서 privileged mode로 변경된다
- SWI
- External Interrupt
- IRQ
- 범용적으로 사용되는 interrupt
- 타이머가 이 interrupt를 사용하여 주기적으로 context switch
- FIQ보다 priority가 낮고, latency가 더 크다
- FIQ
- 보통 빠른 응답 속도를 요구하는 하나의 interrupt source에만 제공된다.
- e.g. DMA
- IRQ
ARM External Interrupt Occurrence
- Interrupt Status Register가 외부 디바이스에 할당되어 있다. 버퍼나 FIFO로 사용되는 다른 레지스터 또한 외부 장치와 CPU 간 데이터 송수신에 연관되어 있다.
- Interrupt Register는 IRQ, FIQ 신호를 생성하도록 계층적으로 구성되어 있다.
- IRQ나 FIQ가 발생하면 CPU는 다른 Interrupt를 비활성화하고, 모드를 IRQ나 FIQ로 변경한 뒤 Vector Table을 이용하여 브랜치한다
- Vector Table에서 프로그램은 Interrupt Handling Routine을 찾아 분기한다.
- Interrupt Handling Routine은 보통 두 부분으로 구성되어 있다: Top Half & Bottom Half
- Top Half에서 handling routine은 최대한 빨리 다음 interrupt를 받기 위해 필요한 최소한의 함수만을 수행한다.
- context 저장
- data를 외부 장치에서 다른 메모리 공간 buffer에 복사
- enable interrupt
- 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
반응형
'대학 수업' 카테고리의 다른 글
디지털 카메라, DCT, Quantization, Huffman Encoding - 임베디드 컴퓨터 구조 (0) | 2020.12.15 |
---|---|
Storage Devices, Flash Memory, SSD - 임베디드 컴퓨터 구조 (0) | 2020.12.15 |
I/O Device와 I/O 인터페이스 - 임베디드 컴퓨터 구조 (0) | 2020.12.14 |
Scratchpad Memory, Cache Locking - 임베디드 컴퓨터 구조 (0) | 2020.12.13 |
Virtual Memory, TLB, Cache Interacton - 임베디드 컴퓨터 구조 (1) | 2020.12.13 |