버스·핸드셰이크·중재
주소·데이터·제어와 동기·비동기 전송을 구분하고 중재의 우선순위·공정성을 추적합니다.
CPU와 DMA가 같은 메모리에 접근하려면 누구의 요청을 먼저 처리할지 정해야 합니다. 버스는 여러 구성 요소의 통신 규약과 전송 경로를 설명하는 개념입니다. 현대 시스템의 모든 연결이 하나의 공유 병렬 버스인 것은 아닙니다.
무엇을 어디로 언제 보내는가
교육용 시스템 버스는 주소(어느 위치), 데이터(무슨 값), 제어(읽기·쓰기·완료 등)로 역할을 나눕니다. 데이터 폭이 32비트이고 한 전송에 4바이트를 옮기며 초당 1억 번 전송한다면 이론 데이터량은 4×10⁸바이트/초입니다. 실제 유효 대역폭은 제어·대기·경합 때문에 작을 수 있습니다.
주소 폭이 넓다는 것은 식별 가능한 주소가 많다는 뜻이고 데이터 폭이 넓다는 것은 한 번에 옮기는 데이터 폭과 관련됩니다. “32비트 버스”라는 말만으로 두 가지를 모두 확정하지 않습니다.
동기와 핸드셰이크
동기 전송은 공통 클록과 정해진 타이밍에 의존합니다. 비동기 전송에서는 준비·승인 같은 핸드셰이크로 서로의 준비 상태를 확인할 수 있습니다. 단순 스트로브 신호만 보낸다면 상대가 실제로 받았는지 추가 확인이 없을 수 있습니다.
요청-승인 4단계 교육용 규약은 ①송신자가 데이터를 안정시키고 request=1 ②수신자가 데이터를 받은 뒤 acknowledge=1 ③송신자가 request=0 ④수신자가 acknowledge=0입니다. 새 전송을 시작하기 전에 이전 규약을 마칩니다. 실제 회로에서는 신호 동기화·설정·유지 시간도 필요합니다.
중재와 계층
중재(arbitration)는 동시에 요청한 주체 중 전송 권한을 받을 주체를 고릅니다. 고정 우선순위 방식에서는 우선순위가 높은 주체가 계속 요청하면 낮은 주체가 기다릴 수 있습니다. round-robin은 다음 선택 위치를 돌려 여러 요청자의 차례를 분배합니다. 데이지 체인은 확인 신호가 장치 순서로 전파돼 배치 순서가 우선순위에 영향을 줄 수 있습니다. 중앙·분산 중재는 누가 결정을 맡는지로 구분합니다.
빠른 CPU·메모리 경로와 느린 주변장치 경로를 계층화하면 모든 장치가 하나의 전송 속도에 묶이는 문제를 줄일 수 있습니다. 브리지·어댑터는 서로 다른 전송 규칙과 경로를 연결합니다. PCIe 같은 점대점 연결을 옛 공유 버스의 한 선으로 똑같이 설명하지 않습니다.
독립 문제: 누가 기다리는가
A·B·C가 항상 요청하고 한 차례에 한 전송만 허용합니다. 고정 우선순위 A>B>C와, A부터 시작하는 round-robin의 첫 여섯 선택을 쓰세요. 이어 request가 내려가지 않은 상태에서 다음 데이터를 바꾸면 4단계 규약에 어떤 문제가 생기는지 설명하세요.
힌트
고정 우선순위는 다음 차례를 기억하지 않습니다. round-robin은 지난 선택의 다음 위치를 기억합니다.
풀이
고정 우선순위는 A·A·A·A·A·A, round-robin은 A·B·C·A·B·C입니다. 전자는 B·C가 무한히 기다릴 수 있습니다. 이전 request를 마치지 않고 데이터를 바꾸면 수신자가 어느 전송의 데이터를 받았는지 모호해지고 중복·누락 위험이 생깁니다. 규약의 각 단계와 데이터 유지 조건을 지켜야 합니다.
공정한 선택이 모든 요청의 같은 완료 시간을 보장하지는 않습니다. 전송 길이와 대기도 영향을 줍니다. 다음 인터럽트는 전송 완료 같은 사건이 CPU 실행에 들어오는 과정입니다.