김기현
Chapter08

입출력장치

장치 컨트롤러와 장치 드라이버

장치 컨트롤러

입출력장치는 컴퓨터에 직접 연결되지 않고 장치 컨트롤러라는 하드웨어를 통해 연결됨

이유

  • CPU와 입출력장치 간의 통신 중개
  • 오류 검출
  • 데이터 버퍼링

➡️ 데이터 버퍼링 : 전송률이 빠른 CPU와 전송률이 느린 입출력장치를 버퍼라는 임시 저장 공간을 이용해 전송률을 비슷하게 맞추는 방법

장치 컨트롤러 : 실제론 더 복잡하지만 간략하게 데이터 레지스터 + 상태 레지스터 + 제어 레지스터

장치 드라이버 : 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을수 있게 하는 프로그램


다양한 입출력 방법

프로그램 입출력

프로그램 입출력 : 프로그램 속 명령어로 입출력장치를 제어하는 방법

  1. CPU가 제어 레지스터에 명령 전송
  2. 입출력장치가 작업 수행
  3. 입출력장치가 상태 레지스터에 현재 상태를 계속 업데이트하여 표시
  4. CPU가 상태 레지스터를 읽어 입출력장치의 상태 확인
  5. CPU가 데이터 레지스터에 데이터를 씀

프로그램 입출력 방식

메모리 맵 입출력:
메모리에 접근하기 위한 주소 공간입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 입출력 방식

장점
  • 같은 주소 공간을 사용하여 작업 속도가 빠름
  • 메모리와 입출력장치에 같은 명령어를 사용 가능
단점
  • 입출력장치가 메모리보다 느리기 때문에 효율성 저하
  • 메모리 주소 공간의 일부를 입출력장치에 할당해야 되므로 사용 가능한 메모리 감소

고립형 입출력 :
메모리를 위한 주소 공간입출력장치를 위한 주소 공간을 분리하는 입출력 방식

장점
  • 별도의 주소 공간을 사용하므로 작업이 효율적
  • 작업을 위한 더 큰 메모리 공간 제공
단점
  • 분리된 공간을 사용해 명령어가 제한적
  • 메모리형 입출력보다 작업 속도가 느림

인터럽트 기반 입출력

인터럽트 기반 입출력 : 인터럽트를 기반으로 하는 입출력

장치 컨트롤러 입출력 작업을 마침 ➡️ CPU에게 인터럽트 요청 신호 보냄 ➡️ CPU는 하던 일을 백업하고 인터럽트 서비스 루틴을 실행

여러 인터럽트가 동시에 발생했을 경우?: NMI ➡️ 우선순위 높은 인터럽트부터 순서대로 하나씩 처리, 인터럽트를 처리하기 위해 PIC를 사용

PIC: 여러 장치 컨트롤러에 연결되어 하드웨어 인터럽트 요청들의 우선순위를 판별하여 CPU에 해결 순서를 제시하는 장치

과정
  1. PIC가 장치 컨트롤러에서 인터럽트 요청 신호 승인
  2. PIC가 우선순위를 판별한뒤 CPU에 처리해야 할 인터럽트 요청 신호를 보냄
  3. CPU는 PIC에 인터럽트 확인 신호를 보냄
  4. PIC는 데이터 버스를 통해 CPU에 인터럽트 벡터를 전송
  5. CPU는 인터럽트 벡터를 통해 요청을 확인하고, 해당 장치의 인터럽트 서비스 루틴을 실행

DMA 입출력

DMA 입출력: 직접 메모리에 접근할 수 있는 기능, 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요함

과정
  1. CPU는 DMA 컨트롤러에 입출력장치의 주소, 수행할 연산, 메모리의 주소 등 정보로 입출력 작업을 명령
  2. DMA 컨트롤러가 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업 수행
  3. 작업이 끝나면 CPU에 인터럽트를 걸어 작업 완료를 알림

‼️ 시스템 버스는 하나의 장치만 사용 가능하므로 CPU와 DMA 컨트롤러가 동시 사용 불가

➡️ 사이클 스틸링 : DMA 컨트롤러가 시스템 버스를 이용할때 CPU가 버스 사용을 일시정지 시키는 현상


입출력 버스

입출력 버스 : DMA 컨트롤러와 장치 컨트롤러들을 연결해주는 버스

➡️ DMA가 시스템 버스를 사용하면 그동안 CPU가 버스를 사용하지 못하므로 사용 빈도를 줄이기 위함

⭐️ 대표적으로 PCI,PCIe