소년코딩

입/출력 장치(I/O Device)

데이터를 처리하기 위해서는 CPU가 접근해서 연산할 수 있도록 디스크 등의 외부 장치에 저장된 데이터를 메모리로 이동시켜야 한다.

  • 입력(Input): CPU 등 처리기가 주변 장치 레지스터로부터 주기억장치로 데이터를 복사하는 작업
  • 출력(Output): 입력과 반대로 주기억장치의 데이터를 주변장치 레지스터로 복사하는 작업

1. 입/출력 장치 구조

모든 입/출력 장치는 상태(Status), 명령(Command), 데이터(Data) 등의 세 개의 레지스터로 구성된 인터페이스를 제공한다.

  • 상태 레지스터: 입력 장치인 경우 데이터 레지스터에 데이터가 입력되어 있는가를 표시하고, 출력 장치인 경우 이전 데이터의 출력이 완료되었는가를 표시한다.
  • 명령 레지스터: '입력' 혹은 '출력'의 기본 명령과 기타 해당 장치 고유의 명령을 저장(write)함으로써 명령을 전달한다.
  • 데이터 레지스터: 입력된 데이터나 출력될 데이터를 보관한다.

입력의 경우 장치의 특성에 따라 동기적 입력과 비동기적 입력이 있다. 예를 들면 하드 디스크 장치는 명령 레지스터에 '입력' 명령이 주어졌을 때만 입력 작업을 진행하지만(동기적), 키보드 장치는 어느 때라도 키가 눌리면 해당 데이터를 입력시킨다(비동기적).

출력은 데이터 레지스터에 데이터를 기록한 후, 명령 레지스터에 '출력' 명령을 설정하면 진행되므로 언제나 동기적으로 이루어진다.

위와 같이 상태 레지스터, 명령 레지스터, 데이터 레지스터 등 인터페이스를 제공하는 입/출력 장티를 보통 장치 제어기(Device Controller)라 하고, 특정 장치 제어기의 인터페이스를 이용하여 입/출력을 처리하는 소프트웨어를 장치 구동기(Device Driver)라 부른다.

2. 입/출력 장치의 식별

입/출력은 CPU에 의해 실행되는 입/출력 장치 구동기에 의해 이루어진다. 즉, 장치 구동기는 장치 인터페이스인 상태/명령/데이터 레지스터에 대한 읽기/쓰기 작업으로 입/출력을 실현한다.

이때, 각 장치별로 고유 식별 위치 혹은 번호의 부여가 필요한데, 이를 입/출력 포트(I/O Port)라 부른다.

- 메모리 대응 입/출력(Memory Mapped I/O)

메모리 대응 입/출력은 입/출력 레지스터의 위치를 메모리 주소 영역의 일부에 대응시켜 CPU가 메모리 접근 방법과 같은 방법으로 입/출력 레지스터에 접근하는 방식이다.

즉, 입력 장치 레지스터에 대응된 특정 번지를 읽으면 해당 입력 장치의 대기 중인 입력 값을 얻게 되고, 출력 장치 레지스터에 대응된 특정 번지에 쓰면 출력 장치로의 출력이 이루어진다.

  • 입력 예)
    • load r1, 10 => 메모리 10번지에 대응된 입력 레지스터에서 CPU의 r1 레지스터로 읽음(입력)
    • save r1, 1000 => 입력된 데이터를 메모리 1000번에 저장
  • 출력 예)
    • load r1, 2000 => 메모리 2000번지의 데이터를 CPU의 r1 레지스터로 적재
    • Out r1, 20 => 적재된 데이터를 메모리 20번지에 대응된 출력 레지스터에 기록(출력)

메모리 접근과 입/출력을 위한 기계 명령어가 같으므로 개발자로서는 편리성이 있으나, 메모리 주소 영역의 일부를 메모리용으로 사용할 수 없다는 단점이 있다.

- 격리된 입/출력(Isolated I/O)

격리된 입/출력은 입/출력 포트의 식별 영역이 메모리 주소 영역과 분리된 방식이다. 예를 들어, 같은 10번지라 하더라도 메모리 10번지와 입/출력 포트 10번지는 전혀 다른 장소이다.

따라서, 메모리 접근을 위한 기계 명령어와 입/출력 포트 접근을 위한 기계 명령어가 따로 있어야 한다.

  • 입력 예)
    • load r1, 10 => 입/출력 포트 10번의 입력 레지스터에서 CPU의 r1 레지스터로 읽음(입력)
    • save r1, 1000 => 입력된 데이터를 메모리 1000번에 저장
  • 출력 예)
    • load r1, 2000 => 메모리 2000번지의 데이터를 CPU의 r1 레지스터로 적재
    • out r1, 20 => 적재된 데이터를 입/출력 포트 20번지의 출력 레지스터에 기록(출력)

시스템 버스 메커니즘이 복잡해지는 단점이 있지만, 메모리 공간을 충분히 사용할 수 있다는 장점이 있다.


입출력장치

'컴구 이야기' 카테고리의 다른 글

6. 훑어보는 CPU 스케줄링  (1) 2020.09.28
5. 훑어보는 프로세스와 스레드  (0) 2020.09.21
3. 훑어보는 인터럽트  (0) 2020.08.30
2. 훑어보는 컴퓨터 시스템 구조  (1) 2020.08.28
1. 훑어보는 운영체제  (0) 2020.08.16
댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기