신비한 개발사전

I/O(입출력) 시스템 본문

CS

I/O(입출력) 시스템

jbilee 2024. 12. 26. 19:01

컴퓨터는 데이터를 입력 받거나 출력할 수 있다. I/O는 이러한 입력(input)과 출력(output)을 압축해서 부르는 표현이며, I/O 시스템은 컴퓨터의 데이터 입출력에 사용되는 모든 하드웨어 및 소프트웨어를 뜻한다. 기본적으로 컴퓨터와 입력이나 출력 통신이 가능한 기기를 통틀어 입출력 장치라고 한다.

 

사용자가 물리적으로 조작하는 마우스나 키보드 외에도 다양한 입출력 장치가 있다:

  • 데이터 저장 디스크
  • 네트워크 카드, 모뎀 등 데이터 송수신을 핸들링하는 장치
  • 사용자와 상호작용하는 장치: 모니터, 게임패드

I/O 시스템은 사용자와 컴퓨터 또는 외부 장치들 간의 상호작용에서 중간다리와 같은 역할을 한다. 입출력 장치는 물리적인 device와 전자적인 controller(장치 컨트롤러)로 구성되어있으며, controller 부분을 입출력 모듈이나 인터페이스라고도 한다.

 

장치 컨트롤러에는 장치 드라이버(device driver)가 명령어, 주소, 읽고 쓰는 데이터 등을 저장하는 4가지 종류의 레지스터(register)가 있다. 장치 컨트롤러는 하드웨어, 장치 드라이버는 소프트웨어로써 입출력 장치가 타 기기와 정보를 주고받을 수 있는 기능을 제공한다.

  • Data-in register: I/O 장치의 인풋 데이터를 저장
  • Data-out register: I/O 장치가 아웃풋으로 내보낼 데이터를 저장
  • Status(상태) register: 현재 명령어가 수행되었는지, 읽어올 바이트가 준비되었는지 등의 작업 상태를 저장
  • Control(제어) register: CPU에 전달할 명령어를 저장

CPU는 두가지 방식으로 I/O 레지스터에 접근할 수 있다:

  • Memory-mapped I/O (MMIO)
    • 메인 메모리의 주소 영역(address space)에 I/O 레지스터를 매핑하여 사용 (따라서 I/O가 차지하는 영역만큼 메모리 공간 감소)
    • 메모리에 접근하는 명령어와 I/O에 접근하는 명령어가 동일 (CPU에게는 메모리와 I/O가 동일한 외부기기로 간주됨)
    • 메모리와 시스템 버스를 공유
    • 메모리의 특정 영역을 I/O가 접근하도록 설계 필요 (영구 또는 임시로 설정할 수 있도록 설계)
  • Port-mapped I/O (PMIO) 또는 Isolated IO (IIO)
    • I/O를 위한 전용 주소 영역을 구분하여 사용, 이런 입출력 장치의 주소를 포트라고도 함 (I/O를 사용해도 메모리 공간이 감소하지 않음)
      *Addressing 능력이 제한된 CPU에서 장점으로 작용
    • 메모리에 접근하는 명령어와 I/O에 접근하는 명령어가 다름, 입출력 전용 명령어를 사용
    • Data bus, address bus는 메모리와 공유하고 control bus는 메모리와 I/O가 각각 갖고 있음
    • 더욱 복잡한 설계 필요

DMA

입출력 장치와 메모리 간에 데이터 교환이 있을 경우 (예: 하드디스크에 저장된 내용을 메모리에 불러와야 할 때) CPU가 전적으로 작업을 담당하게 되면 장치 컨트롤러—CPU, CPU—메모리 두 회에 걸쳐서 통신이 이루어지면서 CPU의 작업량도 늘어나게 된다. DMA(direct memory access)는 그런 CPU의 부담을 덜어주는 기능이다.

 

DMA는 CPU의 도움 없이 입출력 장치와 메모리가 직접적으로 통신할 수 있도록 한다. DMA 컨트롤러라고 하는 하드웨어에게 CPU가 입출력 작업을 명령하면 DMA 컨트롤러는 해당 작업을 수행하고, 작업이 완료되면 CPU에게 인터럽트를 보낸다.

 

데이터 이동에 사용되는 시스템 버스는 공용 자원이기 때문에 DMA 컨트롤러와 CPU가 동시에 시스템 버스를 사용할 순 없다. 따라서 DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을 때 이용하거나 CPU로의 승낙 하에 일시적으로 시스템 버스를 이용하게 되는데, CPU가 써야 할 때에 DMA 컨트롤러가 시스템 버스를 이용하는 것을 사이클 스틸링이라고 한다.

'CS' 카테고리의 다른 글

JSCODE 모의면접 스터디 참여 회고  (1) 2024.12.01
네트워크 라우팅  (0) 2024.11.28
공인 IP vs 사설 IP  (0) 2024.11.26
IP 주소  (0) 2024.11.25
TCP 프로토콜  (0) 2024.11.23