입출력 장치를 수행하려면 CPU와 장치 컨트롤러가 정보를 주고 받아야한다.

장치 컨트롤러는 어떻게 CPU와 정보를 주고받을 수 있을까???

  1. 프로그램 입출력
  2. 인터럽트 기반 입출력
  3. DMA 입출력

프로그램 입출력 Programmed I/O

프로그램 입출력은 프로그램 속 명령어로 입출력장치를 제어하는 방법이다.

프로그램을 통해서 장치 컨트롤러의 제어 레지스터에 명령을 보내고 , 프로그램을 통해서 장치 컨트롤러의 상태 레지스터를 통해 상태를 확인하고, 프로그램을 통해서 장치 컨트롤러의 데이터 레지스터를 통해 백업할 메모리의 정보를 쓴다.

그런데 여기서 , CPU는 입출력 장치들의 주소를 어떻게 아는 걸까???

수많은 장치 컨트롤러의 레지스터

CPU 내부에 있는 레지스터들과는 달리 , CPU는 여러 장치 컨트롤러 속 레지스터들을 모두 알고있기란 어렵다고 한다.

이와 같은 명령어들은 어떻게 표현되고 메모리에 어떻게 저장이 되어 있을까??

메모리 맵 입출력 Memory-mapped I/O

메모리 맵 입출력은 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법이다.

즉, 메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간이 마치 하나처럼 합쳐져있다.

이 방법을 사용하게 되면 CPU는 메모리의 주소들이나 장치 컨트롤러의 레지스터들이나 모두 똑같이 메모리 주소를 대하듯 하면 된다.