컴퓨터구조론#14
LeeMir, 31 May 2021
제7장 시스템버스, I/O 및 인터럽트(이어서)
I/O 장치의 접속
- I/O 제어
- I/O 장치가 시스템 버스에 직접 접속되지 못하는 이유
- 시스템 버스는 고속이고 Data Format이 일정한데 비해 I/O장치는 저속에 Data Format과 Control 회로가 다 다름
- 따라서 I/O 제어기를 사용해야 함
- 상태/제어 레지스터
- 내부적으로 두 개의 레지스터로 구성되지만 주소는 하나만 지정되는 레지스터들
- 상태 레지스터 : I/O 장치의 상태와 오류 검사 결과 등을 나타내는 비트들로 구성
- 제어 레지스터 : CPU가 보낸 I/O 명령 단어를 저장
- CPU가 읽기 동작을 하면 상태 레지스터를 읽고, CPU가 쓰기 동작을 하면 제어 레지스터를 씀
- 프로그램을 이용한 I/O
- CPU가 반복적으로 I/O 장치의 상태를 검사하면서 I/O 동작을 처리하는 방식
- 폴링이라고도 부름
- 간단하며, 별도의 하드웨어가 필요하지 않음
- CPU가 I/O 동작에 직접 관여해야하므로, 그 동안 다른 일을 하지 못함
- I/O 장치가 시스템 버스에 직접 접속되지 못하는 이유
- I/O 주소 지정
- 기억장치-사상 I/O
- 기억장치 주소 영역의 일부분을 I/O 제어기 내의 레지스터들의 주소로 할당하는 방식
- 프로그래밍이 용이하지만 기억장치 주소 공간이 절반으로 감소함
- 프로그래밍에서 사용한 기억장치 관련 명령어들을 I/O 장치 제어에도 사용 가능함
- 기억장치인지 I/O장치인지 구분하는 방법은 주소를 보고 함
- ex) LOAD, STORE 등
- 기억장치 읽기, 쓰기 신호를 I/O 읽기, 쓰기 신호로 사용해 별도의 I/O 제어 신호가 필요하지 않음
- 기억장치 주소 영역의 일부분을 I/O 제어기 내의 레지스터들의 주소로 할당하는 방식
- 분리형 I/O
- I/O 장치 주소공간을 기억장치 주소 공간과는 별도로 할당하는 방식
- 기억장치 주소공간이 줄어들지는 않으나 프로그래밍은 불편함
- I/O 제어를 위해서 기억장치와는 별도의 I/O 명령어 사용
- 별도의 I/O 읽기, 쓰기 신호 필요
- I/O 장치 주소공간을 기억장치 주소 공간과는 별도로 할당하는 방식
- 기억장치-사상 I/O
인터럽트를 이용한 I/O
- 인터럽트-구동 I/O
- 인터럽트 매커니즘을 이용함으로써, I/O 동작이 진행되는 동안에 CPU가 다른 작업을 처리할 수 있도록 하는 방식
- 구현 방식
- 다중-인터럽트 방식
- 데이지-체인 방식
- 소프트웨어 폴링 방식
- 다중-인터럽트 방식
- 각 I/O 제어기와 CPU 사이에 별도의 인터럽트 요구 선(INTR)과 인터럽트 확인 선(INTA)을 접속하는 방법
- CPU가 인터럽트를 요구한 장치를 쉽게 찾아낼 수 있음
- 모든 연결된 I/O 장치들에 대해 별도의 인터럽트 요구 선과 확인 선이 있어야해 회로가 복잡하고, 접속 가능한 I/O 장치들의 수가 CPU의 인터럽트 요구 입력 핀의 수에 의해 제한됨
- 데이지-체인 방식
- CPU로부터 발생되는 INTA 출력 선을 I/O 제어기들에 직렬로 접속하는 방식
- 인터럽트를 요구한 I/O 장치는 AIn 입력을 받는 즉시 인터럽트 벡터를 데이터 버스를 통해 CPU로 전송
- 만약 AIn 입력을 받은 I/O 장치가 인터럽트를 요구하지 않은 상태라면, 그 입력을 다음 장치로 통과시킴
- 하드웨어가 간단하지만, 우선순위가 낮은 장치들이 서비스를 받지 못하고 매우 오랫동안 기다려야 하는 Starvation이 발생할 수 있음
- 소프트웨어 폴링 방식
- CPU가 모든 I/O 제어기들에 접속된 Test I/O 선을 이용해 인터럽트를 요구한 장치를 검사하는 방식
- INTA 대신 Test I/O 신호를 이용해 각 I/O 장치의 인터럽트 플래그가 세트되어 있는 지를 검사
- 검사하는 순서는 I/O 장치의 우선순위를 따름
- 우선순위의 변경이 용이하지만, 처리 시간이 오래 걸림
- CPU가 모든 I/O 제어기들에 접속된 Test I/O 선을 이용해 인터럽트를 요구한 장치를 검사하는 방식