CS/컴퓨터 구조론

컴퓨터 구조론 7장 [시스템 버스, I/O 및 인터럽트 / I/O 장치의 접속]

devrabbit22 2025. 4. 21. 11:08

I/O 장치란 컴퓨터 시스템에서 사용자 혹은 외부와의 정보 교환을 위한 장치들을 말하며 주변장치 라고도 한다.

디스크 드라이브, CD-ROM, DVD와 같은 보조 저장장치들과 디스플레이 모니터, 프린터 등이 모두 포함

I/O 제어

  • 각종 I/O 장치들은 시스템 버스를 통하여 CPU 혹은 주기억장치와 정보를 교환하게 된다.

I/O 장치들이 직접 시스템 버스에 접속되지 못하는 이유

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

따라서 I/O 장치들은 시스템 버스에 직접 접속되지 못하며, 위의 문제들을 해결해 줄 수 있는 인터페이스가 필요하다.

이러한 인터페이스의 역할을 하는 장치를 I/O 제어기라고 부른다. I/O제어기는 하드웨어 모듈이다.

각 I/O 제어기는 한 개 혹은 그 이상의 I/O 장치들의 동작을 제어하며, 그들과 CPU 및 주기억장치 간의 데이터 전송도 담당한다.

각 I/O 제어기의 주요 기능

  • I/O 장치의 제어와 타이밍을 조정한다.
  • CPU와의 통신을 담당한다.
  • I/O 장치와의 통신을 담당한다.
  • 데이터 버퍼링 기능을 수행한다.
  • 오류를 검출한다.

그러나 어느 한 제어기가 여러 종류의 I/O 장치들을 공통적으로 제어할 수 없다.

일반적으로 각 I/O 장치를 위한 별도의 제어기가 시스템 버스와의 인터페이스를 담당하도록 한다.

CPU는 프로그램을 수행하는 동안에 필요에 따라 하나 혹은 그 이상의 I/O 장치들과 데이터 교환을 한다.

이 때마다 CPU는 해당 I/O 제어기를 통해 데이터 입력/출력 동작을 수행하게 된다.

ex) CPU가 프린터로 데이터를 출력하는 동작

  1. CPU가 프린터 제어기에게 프린터의 상태를 검사하도록 요청한다.
  2. 제어기는 프린터의 상태를 검사하여 CPU에 알려준다. 이 때 프린터의 상태란 데이터를 받아 프린트할 준비가 되었는지, 혹은 다른 데이터를 프린트하는 중인지를 나타낸다.
  3. 프린터가 다음 데이터를 받아서 프린트 할 준비가 된 상태라면, CPU는 제어기에게 출력 명령과 데이터를 보낸다.
  4. 제어기는 프린트 동작을 위한 제어 신호와 함께 데이터를 프린터로 보낸다.

프린터 제어기의 내부 구성도

  • 상태/제어 레지스터는 내부적으로 두 개의 상태와 오류 검사 결과 등을 나타내는 비트들로 구성되어 있어서, CPU가 프린터으 ㅣ상태를 검사할 때는 그 주소를 이용하여 상태 레지스터의 내용을 읽게 된다.
  • CPU가 제어기에게 출력 명령을 보낼 때는 제어 레지스터에 해당 명령 단어를 쓰면 된다.
  • 프린터의 상태는 프린터 제어 회로를 통하여 프린터로부터 들어오는 상태 신호에 따라 상태 레지스터의 특정 비트 값으로 표시된다.
  • ex) 프린터가 다음 데이터를 받아서 출력할 준비가 된 상태라면 RDY비트가 '1'로 세트되고, 아직 이전에 받은 데이터를 프린트하는 중이라면 그 비트가 '0'으로 세트 된다. 따라서 위의 순서에서 1번과 2번은 CPU가 상태 레지스터의 내용을 읽어서 RDY 비트의 값을 검사함으로써 동시에 수행될 수 있다.
  • 3번 동작은 프린터가 준비된 상태인 경우에 CPU가 프린트 할 데이터를 데이터 레지스터에 쓰고, 프린트 동작을 지시하는 비트를 '1'로 세트한 명령 단어를 제어 레지스터에 쓰는 것으로서 수행된다.
  • CPU가 상태 레지스터로부터는 읽기만 하고, 제어 레지스터로는 쓰기만 하기 때문에 두 레지스터들에게 주소를 한 개만 지정해도 된다.
  • 그러나 데이터 레지스터에는 별도의 주소가 지정되어야 한다. 최근에는 프린트될 데이터가 블록 단위로 프린터 제어기로 이동되는데, 이 경우 레지스터 대신 데이터 버퍼 기능을 수행하는 RAM이 설치되며, 그 용량만큼의 주소 영역이 할당되어야 한다.
  • 프린트 동작의 마지막 단계로서, 프린터 제어기가 데이터를 프린터로 보내고 동시에 제어 신호도 발생함으로써 프린트 명령의 수행을 완료한다.
  • 프린터는 CPU에 비해 속도가 매우 느린 장치이기 때문에, 위의 순서에서 CPU가 프린터의 상태를 검사하는 1번과 2번 과정은 여러 번 반복되어야 할 것이다.

프로그램을 이용한 I/O의 흐름도

  • CPU가 반복적으로 I/O 장치의 상태를 검사하면서 I/O 동작을 처리하는 방식을 '프로그램을 이용한 I/O' 혹은 '프로그램된 I/O'라고 부른다. 
  • 이 방식은 간단하며 별도의 하드웨어가 필요하지 않은 장점이 있다.
  • 단점으로는 CPU가 I/O 동작에 전적으로 개입해야 하기 때문에 그 동안 다른 일을 하지 못한다.

I/O 주소지정

  • 시스템 버스를 통해 접속된 I/O 장치들에는 각각 두 개씩의 주소가 할당된다.
  • 하나는 데이터 레지스터의 주소이고, 다른 하나는 상태/제어 레지스터의 주소이다.

이러한 I/O 레지스터들의 주소를 지정하는 두 가지 방법

  1. 기억장치-사상 I/O
    • I/O 제어기 내의 레지스터들에게 기억장치 주소 영역의 일부분을 할당하고, 기억장치와 같은 방법으로 액세스하는 방식
    • 기억장치와 I/O 레지스터들을 액세스할 때 동일한 기계 명령어들을 사용할 수 있따.
    • CPU로부터 발생되는 기억장치 읽기 신호와 쓰기 신호를 이용해, I/O 장치에 대한 읽기와 쓰기도 수행할 수 있다.
    • 이 방식에서는 I/O 레지스터들에 대한 주소로서 기억장치 주소 공간의 일부를 할당하기 때문에 깅거장치를 위한 주소 공간이 그만큼 감소하게 된다.
      기억장치-사상 I/O에서의 주소 공간 할당
    • ex) 주소 비트들이 10비트인 시스템에서 주소 지정이 가능한 전체 기억 장소들의 수는 1024개이다.
    • 그러나 기억장치-사상 I/O 방식이 사용되면 그 수가 절반으로 줄어든다.
    • 0번지부터 511번지까지의 상위 512개 주소들은 기억장치에 할당, 512~ 1023번지까지의 하위 512개의 주소들은 I/O 장치에 할당된다.
    • 이와 같이 기억장치 주소 공간이 절바으로 줄어드는 것이 기억장치-사상 I/O 방식의 주요 단점이다.
    • 기억장치-사상 I/O 방식을 이용한 프린트 제어 프로그램의 예
    • 데이터 레지스터 주소 = 512번지상태 레지스터 최하위 비트 = RDY 비트로 사용
    • 제어 레지스터 최상위 비트 = 프린트 시작(start) 비트로 사용
    • 상태/제어 레지스터 주소 = 513번지
    • 이 방식에서는 프로그램에서 보는 바와 같이 I/O 레지스터들에 대하여 읽기 및 쓰기를 할 때도 그들을 기억장치와 동일하게 취급하여, 기억장치 액세스에 시용하는 명령어들인 LOAD 및 STOR 명령어를 사용할 수 있다.
  2. 분리형 I/O
    • I/O 장치들에 별도의 I/O 주소 영역을 지정하고, I/O 전용 명령어들을 이용하여 액세스 하는 방식
    • 이 방식을 사용하는 시스템에서는 I/O 레지스터들을 액세스할 때는 반드시 별도의 명령어들, 즉/ I/O 전용 명령어들을 사용해야 한다. 그리고 이러한 I/O 명령어들이 수행될 때는 액세스 동작이 기억장치에 대한 것인지 I/O 장치에 대한 것인지를 구분할 수 있도록 I/O 읽기(I/O RD)와 I/O 쓰기(I/O WR) 신호가 CPU로부터 발생되어야 한다.
    • 분리형 I/O 방식을 이용한 프린터 제어 프로그램의 예
    • I/O 장치의 데이터 레지스터 주소 = 0번지
    • 상태/제어 레지스터 주소 = 1번지
    • CPU가 데이터 및 상태/제어 레지스터의 내용을 읽는 동작은 I/O 전용 명령어인 IN addr 명령어를 이용하여 수행하고, I/O 레지스터로 쓰는 동작은 OUT addr 명령어를 이용하여 수행하였다. 즉, I/O 제어를 위해서는 그 두 명령어들만 이용해야 하기 때문에 프로그래밍이 불편해지는 것이 이 방식의 단점이다.
    • 그러나 이 방식을 사용하는 경우에는 I/O 주소 공간이 기억장치 주소 공간과는 별도로 지정될 수 있는 장점이 있다.
    • ex) 주소 비트의 수가 10개라면, 기억장치 주소와 I/O 주소가 각각 1024개씩 할당될 수 있다.

분리형 I/O에서의 주소 공간 할당


Reference

컴퓨터 구조론 개정 5판

https://velog.io/@chocaprio/07%EC%9E%A5-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%B2%84%EC%8A%A4-IO-%EB%B0%8F-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8

 

07장 시스템 버스, I/O 및 인터럽트

7.1 시스템 버스 시스템 버스 : 컴퓨터 시스템의 구성 요소들을 상호 연결해주는 중심 통로 7.1.1 시스템 버스의 조직 버스 : 구성 요소들간에 교환할 각종 정보들을 전송하는 선들로 구성 시스템

velog.io

https://m.blog.naver.com/ben4109/222300015530

 

컴퓨터 구조 - I/O 장치와 데이터 전달기법

I/O 장치가 시스템 버스에 직접 접속되지 못하는 이유 1. I/O 장치들은 종류에 따라 제어 방법이 서로 ...

blog.naver.com