[ComputerScience] 입출력 기법
입출력 기법
입출력 기법(I/O, Input/Output)은 CPU와 메모리 외부의 장치(저장장치, 키보드, 마우스, 네트워크, 프린터 등) 간 데이터 전송을 효율적으로 처리하는 방법을 의미합니다.
장치 컨트롤러
장치 컨트롤러(Device Controller)는 CPU와 입출력 장치 사이의 통신을 중개하는 하드웨어입니다.
모든 입출력장치는 고유한 컨트롤러를 가지고 있으며, 이를 통해 컴퓨터 내부와 데이터를 교환합니다.
장치 드라이버
장치 드라이버(Device Driver)는 운영체제 커널에 포함된 소프트웨어 모듈로, 장치 컨트롤러와 운영체제 사이의 인터페이스 역할을 합니다.
운영체제는 드라이버를 통해 장치와 통신하며, 장치별 세부 명령을 직접 알 필요 없이 통일된 방식으로 I/O 요청을 처리할 수 있습니다.
입출력 기법
프로그램된 입출력
프로그램된 입출력(Programmed I/O)은 CPU가 프로그램 명령어를 통해 직접 장치 컨트롤러와 상호작용하는 방식입니다.
CPU가 장치 상태를 계속 확인해야 하므로 비효율적입니다.
I/O 주소 공간 방식
- 고립형 입출력(Isolated I/O)
- 메모리와 입출력 장치의 주소 공간을 분리하는 방식
- 메모리 맵 입출력(Memory-mapped I/O)
- 메모리와 입출력 장치가 동일한 주소 공간을 공유하는 방식
인터럽트 기반 입출력
인터럽트 기반 입출력(Interrupt-driven I/O)는 장치가 준비되면 CPU에 인터럽트 신호를 보내어 처리하는 방식입니다.
CPU는 I/O를 기다리지 않고 다른 작업을 수행하다가 인터럽트가 발생하면 즉시 관련 루틴을 실행합니다.
프로그래머블 인터럽트 컨트롤러
프로그래머블 인터럽트 컨트롤러(PIC, Programmable Interrupt Controller)는 여러 장치 컨트롤러에 연결되어 다중 인터럽트를 처리하기 위한 하드웨어 입니다.
PIC는 하드웨어 인터럽트 요청들의 우선순위를 결정한 뒤, CPU에게 지금 처리해야 할 인터럽트를 선택하고, 나머지를 대기시킵니다.
NMI(Non-Maskable Interrupt)같은 특수한 인터럽트는 우선순위 제어 대상이 아닙니다.
일반적으로 2개 이상의 계층으로 구성되어있습니다.
DMA 입출력
DMA(Direct Memory Access)는 CPU를 거치지 않고 입출력 장치와 메모리 사이에서 직접 데이터를 전송하는 방식입니다.
CPU 입장에서는 DMA 컨트롤러에게 입출력 작업 명령을 내리고, 인터럽트만 받으면 되기 때문에 입출력 부담을 크게 줄일 수 있습니다.
대량 데이터 전송에서 효율적입니다.
DMA 입출력을 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요합니다.
DMA 컨트롤러는 시스템 버스에 직접 연결되고, 입출력장치들의 장치 컨트롤러들은 입출력 버스와 연결됩니다.
동작 과정은 다음과 같습니다.
- CPU가 DMA 컨트롤러에 입출력 작업(장치 주소, 연산 종류, 메모리 주소 등)을 명령
- DMA 컨트롤러가 CPU 대신 장치 컨트롤러와 상호작용하며 작업 수행
- 작업 완료 후 DMA 컨트롤러가 CPU에 인터럽트를 발생시켜 알림
사이클 스틸링
사이클 스틸링(Cycle Stealing)은 DMA 컨트롤러가 메모리 접근을 위해 시스템 버스를 잠시 차지하는 방식입니다.
CPU와 DMA 컨트롤러는 동시에 버스를 사용할 수 없으므로, CPU가 버스를 사용하지 않는 순간에 사용하거나, CPU가 시스템버스 사용을 양보하게 됩니다.
입출력 버스의 종류
컴퓨터에서 CPU와 주변 장치를 연결하는 통로를 버스(Bus)라고 합니다.
버스는 크게 전통적인 병렬 버스와 최근의 고속 직력 버스로 나눌 수 있습니다.
ISA
ISA(Industry Standard Architecture)는 1980년대 IBM PC에서 사용된 초기 표준 버스입니다.
8비트, 16비트 데이터 전송을 지원합니다.
속도가 느려서 지금은 거의 쓰이지 않습니다.
PCI
PCI(Peripheral Component Interconnect)는 1990년대 널리 사용된 범용 버스입니다.
32비트, 64비트 데이터 전송을 지원합니다.
그래픽 카드, 사운드 카드, 네트워크 카드 등 확장 카드 연결에 사용합니다.
병렬 버스 방식으로, 속도 한계가 존재합니다.
PCI-X
PCI-X(PCI eXtended)는 PCI의 개선형으로, 서버/워크스테이션 중심입니다.
64비트 확장과 더 높은 클럭을 지원했습니다.
PCIe에 밀려 사라졌습니다.
PCIe
PCIe(Peripheral Component Interconnect express) 버스는 PCI라는 입출력 버스의 발전된 형태입니다.
오늘날 메인보드에서 가장 널리 사용되는 입출력 버스입니다.
직렬 방식으로 동작하고, 레인을 병렬로 묶어 확장이 가능합니다.
SSD, GPU, 네트워크 인터페이스 카드 등 다양한 입출력장치를 고속으로 연결할 수 있습니다.
세대별(Gen3, Gen4, Gen5)로 대역폭이 지속적으로 확대됩니다.
AGP
AGP(Accelerated Graphics Port)는 그래픽 전용 버스로 1990 ~ 2000년대 초반에 사용됐습니다.
PCIe 등장으로 사라졌습니다.
USB
USB(Universal Serial Bus)는 가장 보편적인 범용 직렬 버스입니다.
키보드, 마우스, 외장 저장장치, 스마트폰 등 연결이 가능합니다.
버전별로 속도가 다릅니다.
- USB 2.0(480Mbps)
- USB 3.x(5 ~ 20Gbps)
- USB 4(40Gbps)
SATA
SATA(Serial ATA)는 HDD, SSD, ODD 같은 저장장치 연결에 사용됩니다.
NVMe(PCIe 기반) SSD에 밀려 점차 사용이 줄어들고 있습니다.
SCSI / SAS
SCSI(Serial Attached SCSI)는 서버와 스토리지 장치에서 사용됩니다.
다수의 저장장치를 연결할 수 있습니다.
SCSI는 병렬 방식이고, SAS는 이를 직렬화한 발전형으로, 고성능 서버 저장장치에서 사용합니다.
댓글남기기