본문으로 건너뛰기

시스템버스, I/O 및인터럽트(2)

1. I/O 장치의 접속 및 제어

컴퓨터 시스템에서 I/O 장치들은 CPU와 직접 접속되지 않으며, I/O 제어기(I/O controller) 라는 인터페이스 장치를 통해 시스템 버스에 연결됩니다. 이는 다음과 같은 여러 이유 때문입니다.

  • 다양한 제어 방식 및 CPU의 한계
    • "I/O 장치들은 종류에 따라 제어 방법이 서로 다르며, 그러한 제어 회로들을 CPU 내부에 모두 포함시키는 것이 불가능하기 때문에 CPU가 그들을 직접 제어할 수가 없음."
  • 속도 차이
    • "I/O 장치들의 데이터 전송 속도가 CPU의 데이터 처리 속도에 비하여 훨씬 더 느리고 속도가 서로 다르기 때문에, 고속의 시스템 버스와 I/O 장치들 사이에 직접 데이터를 교환하는 것은 불가능함."
  • 데이터 형식 불일치
    • "I/O 장치들과 CPU가 사용하는 데이터 형식의 길이가 서로 다른 경우가 많음."

I/O 제어기의 주요 기능

I/O 제어기는 이러한 문제들을 해결하며 다음과 같은 핵심 기능을 수행합니다:

  • I/O 장치의 제어와 타이밍 조정
  • CPU와의 통신 담당
  • I/O 장치와의 통신 담당
  • 데이터 버퍼링(data buffering) 기능 수행
  • 오류 검출

I/O 제어기의 내부 구성

I/O 제어기는 일반적으로 상태/제어 레지스터데이터 레지스터 를 포함합니다.

  • 상태/제어 레지스터: I/O 장치의 상태, 오류 검사 결과, 그리고 CPU가 보낸 I/O 명령 단어를 저장합니다. (내부적으로 두 개의 레지스터로 구성되지만 주소는 하나만 지정)
    • 상태 레지스터: I/O 장치의 상태 및 오류 검사 결과를 나타내는 비트들로 구성 (CPU가 읽기 동작 시 사용)
    • 제어 레지스터: CPU가 보낸 I/O 명령 단어를 저장 (CPU가 쓰기 동작 시 사용)
  • 데이터 레지스터: I/O 장치와 CPU 간에 실제 데이터가 전송되는 경로. 데이터 블록 전체를 한꺼번에 전송받아 처리할 수 있도록 '데이터 버퍼(data buffer)'로 대체될 수 있음

프로그램을 이용한 I/O (programmed I/O)

이는 CPU가 I/O 장치의 상태를 반복적으로 검사(폴링)하면서 I/O 동작을 처리하는 방식입니다.

  • 장점: 간단하며, 별도의 하드웨어가 필요하지 않습니다.
  • 단점: "CPU가 I/O 동작에 직접 관여해야 하므로, 그 동안에 다른 일을 하지 못함."

I/O 주소지정(I/O addressing) 방법

I/O 제어기 내의 레지스터들(데이터 레지스터, 상태/제어 레지스터)에 주소를 할당하는 방식은 크게 두 가지로 나뉩니다.

기억장치-사상 I/O (memory-mapped I/O)

  • 개념: "기억장치 주소 영역의 일부분을 I/O 제어기 내의 레지스터들의 주소로 할당하는 방식."
  • 특징: 프로그래밍에서 LOAD, STORE와 같은 기억장치 관련 명령어를 I/O 장치 제어에도 사용 가능. 별도의 I/O 제어 신호가 필요 없음.
  • 장점: "프로그래밍이 용이함 (사용 가능한 명령어들이 다양함)."
  • 단점: "기억장치 주소 공간이 감소함 (절반)."

분리형 I/O (isolated-I/O)

  • 개념: "I/O 장치 주소공간을 기억장치 주소 공간과는 별도로 할당하는 방식."
  • 특징: IN, OUT과 같은 별도의 I/O 명령어와 I/O 읽기/쓰기 신호가 필요합니다.
  • 장점: "I/O 주소공간으로 인하여 기억장치 주소 공간이 줄어들지 않음."
  • 단점: "I/O 제어를 위해 I/O 명령어들만 이용할 수 있으므로, 프로그래밍이 불편함."

2. 인터럽트를 이용한 I/O

**인터럽트-구동 I/O(interrupt-driven I/O)**는 "인터럽트 메커니즘을 이용함으로써, I/O 동작이 진행되는 동안에 CPU가 다른 작업을 처리할 수 있도록 하는 방식"입니다. 이는 프로그램된 I/O 방식의 단점(CPU가 I/O 작업에 묶이는 문제)을 보완합니다.

동작 순서

  1. CPU가 I/O 제어기에게 명령을 전송하고, CPU는 다른 작업을 수행합니다.
  2. 제어기가 I/O 장치를 제어하여 I/O 명령을 수행합니다.
  3. I/O 명령 수행이 완료되면, 제어기는 CPU로 인터럽트 신호를 전송합니다.
  4. CPU는 인터럽트 신호를 받는 즉시 원래의 프로그램으로 복귀하여 수행을 계속합니다.

인터럽트-구동 I/O의 구현 방법

여러 I/O 장치에서 동시에 인터럽트가 발생할 경우, CPU가 어떤 장치에서 인터럽트가 발생했는지 식별하고 적절하게 처리하기 위한 방법들입니다.

방식개념장점단점
다중-인터럽트각 I/O 제어기와 CPU 사이에 별도의 인터럽트 요구(INTR) 선과 인터럽트 확인(INTA) 선을 접속CPU가 인터럽트를 요구한 장치를 쉽게 찾아낼 수 있음하드웨어가 복잡, I/O 장치 수가 CPU의 인터럽트 요구 입력 핀 수에 의해 제한
데이지-체인CPU의 INTA 출력 선을 I/O 제어기들에 직렬로 접속, 인터럽트 장치가 고유 ID(벡터) 전송하드웨어가 간단함 (INTR/INTA 신호선 각각 1개)우선순위 낮은 장치가 오랫동안 대기(starvation)
소프트웨어 폴링CPU가 TEST I/O 선으로 각 I/O 제어기의 인터럽트 플래그를 순서대로 검사우선순위 변경이 용이처리 시간이 오래 걸림

3. 직접 기억장치 액세스 (DMA, Direct Memory Access)

DMA는 "CPU의 개입 없이 I/O 장치와 기억장치 사이에 데이터를 전송하는 방식"으로, 사이클 스틸링(cycle stealing)이라고도 불립니다. 이는 주로 "주기억장치와 보조저장장치(HDD, SSD 등) 사이의 블록-단위 데이터 전송에 주로 사용됨"니다.

DMA의 필요성

대량의 데이터를 I/O 장치와 기억장치 간에 전송할 때, CPU가 매번 개입하는 것은 비효율적이며 시스템 성능 저하를 야기합니다. DMA는 이 문제를 해결합니다.

DMA 처리 순서

  1. CPU가 DMA 제어기(DMA controller)로 I/O 장치 주소, 연산 종류(쓰기/읽기), 주기억장치 시작 주소, 전송될 데이터 단어 수 등의 명령을 전송합니다.
  2. DMA 제어기는 CPU로 버스 요구(BUS REQ) 신호를 전송하여 시스템 버스 사용 권한을 요청합니다.
  3. CPU가 DMA 제어기로 버스 승인(BUS GRANT) 신호를 전송하여 버스 사용을 허가합니다. 이 때 CPU는 잠시 버스 사용을 중단하고 내부 작업을 수행합니다.
  4. DMA 제어기는 CPU 개입 없이 주기억장치와 I/O 장치(예: 디스크 제어기) 사이에 직접 데이터를 전송합니다. 이 과정에서 "각 데이터에 대하여 번을 두 번 반복(주기억장치 <-> DMA 제어기 & DMA 제어기 <-> 디스크 제어기 데이터 저장) 시스템 버스 두 번 사용"합니다.
  5. 모든 데이터 전송이 완료되면, DMA 제어기는 CPU로 INTR 신호를 전송하여 작업 완료를 알립니다.

DMA의 문제점 및 해결책

  • 버스 사용량 증가: 각 데이터 전송 때마다 시스템 버스를 두 번씩 사용함 → 시스템 성능 저하
    • 해결책: I/O 버스(I/O bus)를 사용하여 한 개의 DMA 제어기가 다수의 I/O 장치들을 지원함으로써 시스템 버스 사용량을 줄일 수 있음
  • DMA 제어기의 한계: I/O 장치들은 종류와 속도가 다양하고 제어 방법도 복잡하기 때문에 간단한 DMA 제어기로 모든 I/O 장치를 효율적으로 지원하는 데 한계가 있음 (특히 대용량 데이터 버퍼링 필요)
    • 해결책: I/O 프로세서(IOP, I/O processor) 또는 I/O 채널(I/O channel) 사용

IOP의 구성 요소

  • I/O 제어 프로그램(OS의 I/O device driver 프로그램)을 수행할 수 있는 프로세서
  • 데이터 블록을 임시 저장(버퍼링)할 수 있는 용량의 지역 기억장치 (local memory)
  • 시스템 버스 인터페이스 및 버스 마스터 회로
  • I/O 버스 중재 회로

IOP는 CPU로부터 I/O 명령을 받으면, 자체적으로 I/O 작업을 처리하고 CPU는 다른 작업을 계속 수행할 수 있도록 하여 시스템의 전반적인 효율성을 크게 향상시킵니다.


요약

컴퓨터 시스템의 I/O 처리 방식에 대한 핵심 개념들을 다루었습니다.

  • I/O 장치 접속: I/O 제어기를 통해 CPU와 다양한 I/O 장치 간의 비동기적 통신 및 데이터 형식 불일치를 해결합니다.
  • I/O 주소지정: 기억장치-사상 I/O와 분리형 I/O 두 가지 방식으로 I/O 제어기 레지스터에 주소를 할당합니다.
  • 인터럽트 기반 I/O: CPU가 I/O 작업 중에도 다른 작업을 수행할 수 있도록 하는 효율적인 방법으로, 다중-인터럽트, 데이지-체인, 소프트웨어 폴링 등의 구현 방식이 있습니다.
  • DMA: CPU의 개입 없이 대량의 데이터를 기억장치와 I/O 장치 간에 직접 전송하는 방식으로, 시스템 성능을 향상시키며, 복잡한 I/O 처리를 위해 I/O 프로세서(IOP)가 사용될 수 있습니다.