한양과학기술고등학교

에듀테크 프로젝트 대시보드

버스 구조 — CPU와 부품들이 대화하는 방법

버스(Bus) — 부품들의 공용 통신 통로

CPU, 메모리, 입출력 장치는 서로 전선 다발로 연결되어 있어야 데이터를 주고받을 수 있다. 그런데 CPU와 메모리를 잇는 선, CPU와 키보드를 잇는 선, CPU와 디스크를 잇는 선을 전부 따로 깐다면 장치가 하나 늘어날 때마다 배선이 또 한 묶음씩 늘어나 메인보드 설계가 감당이 안 된다. 그래서 실제 컴퓨터는 모든 장치가 하나의 공용 통로(버스)를 함께 쓰도록 설계한다 — 시간을 나눠 쓰는 대신, 장치를 늘리고 싶으면 그냥 버스에 하나 더 꽂으면 된다. PCIe·USB 확장 슬롯이 가능한 이유이기도 하다. 앞서 폰 노이만 구조에서 "공용 버스" 자체는 이미 다뤘으니, 이 페이지에서는 그 버스 안에 실제로 무엇이 흐르는지를 파고든다.

왜 버스를 쓸까 — 개별 배선 vs 공용 버스

장치 3개를 연결한다고 하면 개별 배선은 전용선 3묶음이 필요하지만, 버스는 트렁크 하나에 장치를 탭(tap)으로 연결하면 끝난다. 장치가 30개가 돼도 버스는 여전히 하나다.

개별 배선 (Point-to-Point)
CPU 장치A 장치B 장치C
장치 N개 → 전용선 N묶음. 늘어날수록 배선이 폭증한다.
공용 버스 (Bus)
CPU 장치A 장치B 장치C
장치가 늘어도 트렁크(버스)는 하나 — 탭만 추가하면 된다.

버스의 3가지 종류

"버스"라고 뭉뚱그려 부르지만 실제로는 역할이 다른 세 다발이 나란히 지나간다. 아래 각 카드의 화살표 방향과 진하기가 그 버스의 성격이다.

주소 버스 Address Bus · 단방향
CPU 메모리 I/O 장치

CPU가 "어디에 접근할지" 주소를 실어 보낸다. 주소는 버스에 연결된 모든 장치에 도달하지만, 그 번지를 담당하는 장치만 반응한다(주소 디코딩).

32비트 주소버스 → 2³² = 4,294,967,296 바이트 = 4GB 주소 지정 가능
데이터 버스 Data Bus · 양방향
CPU 메모리 I/O 장치

실제 값이 오가는 통로. 읽기일 땐 장치→CPU, 쓰기일 땐 CPU→장치로 방향이 바뀌는 양방향 버스다.

64비트 데이터버스 → 64/8 = 8바이트를 한 번에 전송
제어 버스 Control Bus · 신호
CPU 메모리 I/O 장치

READ/WRITE, 클럭, 인터럽트 요청 같은 "무엇을 하라"는 신호. 대부분 CPU→장치지만 인터럽트처럼 장치→CPU로 가는 선도 섞여 있다.

R/W, CLK, INT, RESET, BUS-REQUEST 등 개별 신호선의 묶음

인터랙티브: 메모리 읽기 / 쓰기 트랜잭션

"CPU가 100번지의 값을 읽는다"는 한 문장 뒤에는 세 종류 버스가 순서대로 움직이는 4단계가 숨어 있다. 아래 버튼으로 READ/WRITE를 골라 한 사이클씩 재생해 보자.

CPU 대기 중 메모리 주소: — 값: — IDLE 다른 장치 (이번 트랜잭션엔 유휴) ADDR DATA CTRL 100

버스 폭과 성능

버스는 "선의 개수(폭)"가 곧 능력이다. 주소버스가 넓을수록 더 많은 메모리를, 데이터버스가 넓을수록 한 번에 더 많은 값을 다룬다.

최대 주소 지정 가능 메모리 (2n 바이트) 4 GB
한 클럭에 전송 가능한 데이터 (비트 ÷ 8) 8 바이트
// 주소버스 폭 n비트 → 표현 가능한 주소 개수 2^n → 곧 메모리 용량(바이트)
capacity_bytes = pow(2, n)

// 예: n = 32 (32비트 주소버스, 옛 32비트 OS의 한계였던 그 4GB)
capacity_bytes = pow(2, 32) = 4,294,967,296  // = 4GB

// 데이터버스 폭 m비트 → 한 번에 옮기는 바이트 수
bytes_per_transfer = m / 8
// 예: m = 64 → 8바이트, m = 128 (GPU 메모리 버스 등) → 16바이트

버스 중재 (Bus Arbitration)

버스는 공용이기 때문에 문제가 생긴다 — CPU, DMA 컨트롤러, 여러 코어가 동시에 버스에 신호를 실으면 전기 신호가 충돌해 값이 깨진다. 그래서 버스에는 항상 지금 누가 버스를 쓸 차례인지 결정하는 버스 중재기(Bus Arbiter)가 있다. 데이지 체인, 중앙 집중식 우선순위 방식 등 구체적인 알고리즘은 다양하지만 핵심 원칙은 하나 — 한 순간에 버스의 주인은 단 하나여야 한다는 것이다.

CPU: REQ → DMA 컨트롤러: REQ → 중재기 판단 → GRANT: DMA 컨트롤러
한 줄 정리 — 버스는 CPU·메모리·I/O가 공유하는 통로이며, 주소(어디에)·데이터(무엇을)·제어(무엇을 하라) 세 다발이 함께 움직여야 트랜잭션 한 번이 완성된다. 버스 폭이 넓을수록 더 많은 메모리·더 많은 데이터를 다루지만, 공용이기에 누가 먼저 쓸지 정하는 중재가 항상 필요하다.