ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

버스 (Bus)

 
 

컴퓨터의 고속도로: 버스(Bus)

CPU, 메모리, 주변 장치가 아무리 빠르더라도 서로 데이터를 주고받을 “길”이 없다면 성능은 나오지 않습니다. 버스(Bus)는 컴퓨터 구성 요소 간에 데이터·주소·제어 신호를 전달하기 위해 공통적으로 사용되는 통로입니다.
특히 서버/백엔드 성능 문제의 상당수는 “CPU가 느린 게 아니라, 데이터가 이동하는 경로(버스/메모리 계층)에서 대기”하는 형태로 나타납니다.

백엔드 관점 한 줄
“버스”를 이해하면 캐시 미스, 메모리 병목, I/O 지연 같은 문제를 단순 추측이 아니라 “데이터 이동 경로”로 설명할 수 있습니다.


1. 시스템 버스 (System Bus)

전달하는 정보의 종류에 따라 3가지로 구분됩니다.

시스템 버스는 CPU가 메모리/입출력 장치와 통신할 때 사용하는 기본 통로이며, 일반적으로 주소 버스(Address), 데이터 버스(Data), 제어 버스(Control)로 나뉩니다.

① 주소 버스 (Address Bus)
CPU가 메모리나 I/O 장치의 위치(주소)를 지정하기 위한 통로입니다. 보통 단방향(CPU → 외부)입니다.
주소 버스 폭이 n비트라면, 표현 가능한 주소는 최대 2n개입니다. (예: n=32라면 232 주소 공간)

② 데이터 버스 (Data Bus)
명령어/데이터를 실제로 실어 나르는 통로이며 양방향(CPU ↔ 메모리/I/O)입니다.
흔히 말하는 “32비트/64비트”는 (아키텍처 맥락에 따라) 데이터 처리 단위와 관련이 있고, 데이터 버스 폭은 한 번에 옮길 수 있는 데이터량과 연결됩니다.

③ 제어 버스 (Control Bus)
CPU가 다른 구성 요소에 제어 신호(read/write, interrupt, acknowledge 등)를 보내거나 반대로 상태 신호를 받는 통로입니다.
데이터/주소만으로는 “무엇을 하라”를 표현할 수 없기 때문에, 제어 버스가 전체 통신을 성립시킵니다.

구분 전달하는 것 대표 예시
주소 버스 어느 위치를 볼지 0x1000 번지, 특정 I/O 레지스터 주소
데이터 버스 무엇을 옮길지 명령어, 변수 값, 디스크에서 읽은 블록
제어 버스 어떻게 처리할지 Read/Write, Interrupt Request, ACK

2. 버스가 작동하는 실제 과정(메모리 읽기)

메모리에서 값을 읽는 순간, 주소/제어/데이터 버스는 “협업”합니다. 아래는 CPU가 특정 주소의 데이터를 읽는 과정을 신호 관점으로 단순화한 시나리오입니다.

  • 🚀 STEP 1. 주소 버스(Address): CPU가 “이 주소가 필요하다”는 주소 값을 내보냅니다.
  • 📢 STEP 2. 제어 버스(Control): CPU가 “읽기(Read)” 신호를 보냅니다. (그리고 필요한 타이밍 신호/상태 확인)
  • 📦 STEP 3. 데이터 버스(Data): 메모리(또는 캐시)가 해당 주소의 데이터를 데이터 버스에 실어 CPU로 전달합니다.
  • STEP 4. 완료(Ack/완료 신호): 전송이 끝나면 완료 상태가 반영되고 CPU는 다음 단계로 진행합니다.

핵심 인사이트
“주소를 지정하고(Read), 데이터를 받는다”는 동작은 단순해 보이지만, 실제로는 캐시/메모리 컨트롤러/버스 중재 같은 계층이 개입합니다.
그래서 서버 성능 문제는 “연산이 느리다”보다 “데이터가 늦게 온다”로 설명되는 경우가 많습니다.

3. 버스 폭(Bus Width)과 대역폭(Bandwidth)

도로의 차선이 많을수록 교통량이 늘어나듯, 버스 폭은 “한 번에 얼마나 옮길 수 있나”를 결정합니다. 다만 실제 성능은 폭뿐 아니라 클럭(주파수), 프로토콜 오버헤드, 동시 접근(중재)의 영향을 함께 받습니다.

구분 설명
데이터 버스 폭 한 번에 전송 가능한 비트 수(폭). 대역폭은 “폭 × 주파수(대략)”로 직관을 잡을 수 있습니다.
주소 버스 폭 CPU가 지정할 수 있는 최대 주소 공간. n비트면 최대 2n개 주소를 표현합니다.

백엔드 실무에서 자주 나오는 연결
대규모 트래픽 서버에서 병목이 생길 때, CPU 사용률이 낮은데도 느리다면 “버스/메모리 대기”를 의심할 수 있습니다.
대표적으로 캐시 미스가 많아 DRAM 접근이 늘거나, NUMA 환경에서 원격 메모리 접근이 증가하면 지연이 커질 수 있습니다.

4. 백엔드 개발자 관점: 버스/데이터 이동이 병목이 되는 순간

  • 캐시 미스 증가: CPU가 데이터를 못 찾고 메모리로 내려가며 대기 시간이 커짐
  • 락 경쟁/공유 쓰기: 여러 코어가 같은 캐시 라인을 두고 경쟁 → 코히어런시 트래픽 증가
  • I/O 경로 혼잡: NIC/스토리지 같은 장치가 PCIe/컨트롤러를 통해 데이터 이동 → 지연/큐잉 발생
  • 메모리 대역폭 포화: 처리량이 늘어날수록 DRAM 대역폭이 먼저 한계에 도달할 수 있음

실전 사고 프레임
“느리다”를 만났을 때 CPU 사용률만 보지 말고,
CPU가 계산 중인지 vs 데이터를 기다리는 중인지(메모리/I/O 대기)를 먼저 분리해보면 진단 속도가 빨라집니다.

🎓 연결 고리 정리

앞서 배운 MAR(메모리 주소 레지스터)는 “지금 접근할 주소”를 담고 주소 버스로 연결됩니다.
MBR(메모리 버퍼 레지스터)는 메모리에서 오가는 “데이터”를 잠시 담는 버퍼이며(일부 교재에서는 MDR로도 부릅니다), 데이터 버스와 연결됩니다.
그리고 제어장치제어 버스를 통해 읽기/쓰기 같은 제어 신호를 내리고, 상태 신호를 받아 전체 흐름을 조율합니다.

즉, MAR → Address Bus, MBR(MDR) → Data Bus, Control Unit → Control Bus로 매핑해두면 “CPU가 메모리를 어떻게 건드리는지”가 한 장면으로 정리됩니다.

728x90