본문 바로가기
💻 Computer Science/컴퓨터 구조

[컴퓨터 구조] - 입출력 장치 (I/O Device)

by shineast_ 2023. 2. 11.

컴퓨터 하드웨어는 크게 중앙처리장치(CPU), 메인 메모리(기억 장치), 입출력 장치로 나뉘며 이들은 모두 버스(Bus)로 연결되어 있습니다. 이번 포스팅에서는 입출력 장치에 대해서 알아보겠습니다.



입출력 장치 (I/O Device)

포트(Port)는 컴퓨터와 외부의 다른 장비를 연결할 수 있게 하는 통로를 말합니다. 기본적으로 직렬 포트와 병렬 포트로 나눌 수 있습니다.

  • 직렬 포트: 한 번에 하나의 신호를 전달할 수 있고, 보통 저속의 장치와 연결된다.
  • 병렬 포트: 여러 비트의 신호를 동시에 전달할 수 있고, 직렬 포트에 비해서 고속 인터페이스를 제공한다.
  • USB: 컴퓨터와 주변 기기를 연결하는데 쓰이는 입출력 표준 가운데 하나, 직렬/병렬 포트의 많은 부분을 대체한다. 

입력 장치

입력 장치는 외부의 데이터를 컴퓨터의 CPU나 주기억 장치로 입력할 때 사용하는 장비입니다.

  • 키보드
  • CD / DVD 등의 광디스크
  • 하드 디스크
  • SSD
  • USB 저장장치
  • 마우스
  • 카메라

출력 장치

출력 장치는 CPU나 주기억 장치의 데이터를 외부로 옮길 때 사용하는 장비입니다.

  • 모니터
  • 프린터
  • 스피커
  • 하드 디스크
  • CD / DVD 등의 광디스크
  • USB 저장장치

입출력 장치의 제어 방식

속도가 빠른 CPU가 느린 입출력 장치를 기다리는 것은 비효율적이기에 입출력 제어기(I/O Controller)를 통해 입출력 장치를 제어합니다. 

CPU에 의한 입출력 제어

CPU에 의한 입출력 방식은 입출력의 전체적인 과정을 CPU가 수행하는 것입니다. 다음의 2가지 방식으로 CPU 입출력의 전체 과정을 통제합니다.

  • 프로그램에 의한 방법: 현재 수행되는 프로그램이 I/O를 직접 수행하는 방식입니다. 입출력 장치의 모든 과정을 CPU가 담당하기에 CPU의 효율이 떨어질 수 있습니다. 
  • 인터럽트에 의한 방법: 프로그램 명령 중 입출력 명령이 있으면 CPU가 입출력 동작의 시작을 명령하고 다른 작업으로 전환합니다. 인터럽트가 발생하면 관련 인투럽트 처리 루틴을 수행하여 CPU는 입출력 과정을 종료합니다. 인터럽트에 관해서는 아래에서 조금 더 자세히 살펴보겠습니다.

DMA(Direct Memory Access) 방식

DMA는 별도의 I/O 컨트롤러가 입출력 장치와 메인 메모리 사이의 데이터 통신을 수행하는 방식으로, CPU의 효율성을 더욱 높일 수 있는 방법입니다. I/O 컨트롤러는 CPU로부터 입출력의 모든 사항을 위임 받아 수행하는데 상대적으로 속도가 빠른 장치와 대량의 데이터를 입출력할 때 사용되는 방식입니다. DMA 방식의 입출력 절차는 다음과 같습니다.

  1. 사용자 프로그램 또는 운영체제가 데이터의 전송을 요구한다.
  2. CPU는 DMA 제어기의 레지스터들에게 "I/O 장치의 주소", "데이터가 있는 주기억 장치의 시작 주소", "DMA 시작 명령", "입출력하고자 하는 데이터의 양" 등의 정보를 전송한다.
  3. DMA 제어기가 입출력 동작을 시작하며, 사이클 스틸 방식을 이용하여 데이터를 전송한다. 그때, CPU는 다른 작업들을 수행한다.
  4. 입출력 동작이 종료되면 DMA 제어기는 CPU를 인터럽트한다.

채널에 의한 I/O

I/O를 위한 특별한 명령어를 I/O 프로세서에 수행하도록 하여 CPU 관여 없이 입출력을 제어하는 전용 프로세서를 사용하는 방식입니다. DMA 방식과는 다르게 한 개의 인스트럭션에 의해 여러 개의 블록을 입출력할 수 있습니다.

기억 장치-사상 입출력

메모리 주소의 일정 범위를 지정하여 장치 레지스터에 매핑하여 메인 메모리의 읽기/쓰기와 동일한 인스트럭션을 사용해 보다 편리한 입출력 장치 접근을 제공하는 방식입니다. 고속의 응답 시간을 가지는 장치에 적합한 방식입니다.


인터럽트 (Interrupt)

인터럽트란 CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능입니다. 단일 CPU로는 한 순간에 하나의 일 밖에 처리할 수 없기에 우선 순위를 따져 더 급한 일을 처리해야 할 떄 대처할 수 있는 방법입니다. 인터럽트의 처리 과정은 다음과 같습니다.

  1. 기존의 작업을 수행하던 중 인터럽트가 발생하면, 현재 컴퓨터가 수행하는 일을 중단하고 현재 컴퓨터의 상태를 보관한다.
  2. 해당하는 인터럽트를 처리하기 위한 인터럽트 서비스 루틴을 수행한다.
  3. 인터럽트 처리 후 저장되었던 이전 작업 상태를 복구하고 이전 작업 수행을 재개한다.

인터럽트는 다양한 종류가 있는데 일반적으로 사용되는 것들은 다음과 같습니다.

  • 외부 인터럽트: 입출력 장치, 타이밍 장치, 전원 등의 외부적인 요인에 의해 발생하는 인터럽트
  • 내부 인터럽트: 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트

인터럽트 우선순위

하나의 CPU에 다수의 인터럽트가 발생하는 경우, 우선 순위를 정해 하나씩 처리해야 합니다. 이를 인터럽트 우선순위라고 합니다. 다음의 순서대로 중요한 인터럽트가 우선적으로 처리되어야 합니다.

  1. 전원 공급의 이상
  2. CPU의 기게적인 오류
  3. 외부 신호에 의한 인터럽트
  4. 입출력 전송 요청 및 전송 완료, 전송 오류
  5. 프로그램 검사 인터럽트
  6. 수퍼바이저 호출(SVC 인터럽트)

인터럽트 우선 순위를 결정하는 방법은 소프트웨어적인 방법과 하드웨어적인 방법으로 나뉩니다.

  • 소프트웨어적인 방법(폴링(Polling)): CPU가 모든 제어기에 연결된 TEST I/O 선을 이용하여 인터럽트를 요청한 장치를 검사하는 방법입니다. INTR 선에 올린 요청 플래그를 차례대로 검사해 해당하는 인터럽트 서비스 루틴을 수행하는 소프트웨어적인 방식입니다.
  • 하드웨어적인 방법(벡터 인터럽트(Vector Interrupt)): 인터럽트를 요청할 수 있는 장치에 버스를 직렬 또는 병렬로 연결하여 인터럽트 요청 장치의 번호를 CPU에게 알리는 방식입니다.

반응형

댓글