- 컴퓨터 시스템을 구성하는 주요 요소인 CPU, 주기억장치 및 입출력장치들은 시스템 버스를 통하여 서로 접속된다.
시스템 버스
시스템 버스의 조직
시스템 버스에 접속되는 모든 요소들은 버스를 통하여 상호간에 정보(프로그램 코드, 데이터, 제어 명령 등)를 교환하고, 동작 시간을 조정하기 위한 클록 신호도 전송한다.
버스는 많은 수의 전기 도체 선들로 구성되는데, 일반적으로 소형 컴퓨터에서는 50개에서 100개 정도이고 중형급 시스템에서는 그 이상이다.
시스템 버스를 구성하는 선(line)들의 수는 한 번에 전송하는 데이터 비트들의 수와 기억장치 주소 비트들의 수 및 제어 신호들의 수에 따라 결정된다.
이 선들은 기능에 따라 세 가지 버스들로 나누어지며, 각 버스는 전송되는 정보의 종류를 나타내는 이름을 가지고 있다.
- 데이터 버스(data bus)
- 주소 버스(address bus)
- 제어 버스(control bus)
데이터 버스
- 시스템 요소들 간의 데이터 전송에 사용되는 선들의 집합
- CPU가 기억장치로부터 한 번에 8비트씩 읽어온다면 필요한 버스 선의 수는 8개가 필요하며, 32비트씩 읽어오는 시스템에서는 32개로 구성된다.
- 데이터는 CPU와 기억장치, CPU와 I/O 장치, 및 기억장치와 I/O 장치 사이에 양방향으로 전송되기 때문에, 데이터 버스는 양 방향 전송(bidirectional transfer)를 지원할 수 있어야 한다.
주소 버스
- CPU가 기억장치나 I/O 장치를 액세스할 때 주소 비트들을 전송하는 데 사용되는 선들의 집합
- CPU가 기억장치로 (혹은 기억장치로부터) 데이터 쓰기(혹은 읽기) 동작을 할 때, 해당 기억 장소를 지정하기 위한 주소를 전송하는 선들의 집합이다.
- CPU가 I/O 장치를 사용할 때도 주소가 필요하므로 각 I/O 장치로도 주소 버스가 연결되어야 한다.
- 주소는 CPU에 의해서만 발생되기 때문에 단방향 전송(unidirectional transfer) 기능만 있으면 된다.
- 주소 버스의 폭은 CPU가 주소지정 할 수 있는 전체 기억장치 용량을 결정해준다.
- ex) 16-비트 주소 버스로 주소를 지정할 수 있는 기억 장소들의 수는 2^16 = 65,536(즉, 64K)개, 24비트인 경우에는 2^24 = 16,777,216(즉, 16M)개가 된다.
- CPU가 발생하는 주소 비트의 수에 따라 직접 주소지정 될 수 있는 기억장치의 최대 용량이 결정되는 것이다.
- 그 용량은 주소지정 단위에 따라 달라진다.
- 단어의 길이가 32비트(4바이트)인 시스템에서 만약 주소지정이 바이트 단위로 이루어진다면 16-비트 및 24-비트 주소의 경우에 최대 기억장치 용량은 각각 64Kbyte 및 16Mbyte가 된다.
- 만약 주소지정이 각 기억장소마다 한 단어씩 저장되는 단어 단위라면, 최대 기억장치 용량은 각각 그 네배인 256Kbyte 및 64Mbyte가 된다.
제어 버스
- 제어 신호(control signal)들을 전송하기 위한 선들의 집합
- 제어 버스를 구성하는 제어 신호 선들은 각각 고유의 기능을 가지고 있다.
- 시스템의 구성과 동작에 따라 제어 신호의 종류와 수도 달라지게 된다.
- CPU가 기억장치 및 I/O 장치와 데이터를 교환하는 데 필요한 제어 신호들
- 기억장치 쓰기(memory write) 신호 : 지정된 기억장소에 데이터가 쓰여지게(저장되게) 한다.
- 기억장치 읽기(memory read) 신호 : 지정된 기억장소의 데이터를 읽어서 버스에 실리게 한다.
- I/O 쓰기(I/O write) 신호 : 지정된 I/O 장치로 데이터가 출력되게 한다.
- I/O 읽기(I/O read) 신호 : 지정된 I/O 장치로 데이터를 읽어서 데이터 버스에 실리게 한다.
- 시스템 버스에 접속되는 요소들 중에서 버스 사용의 주체가 되는 요소들을 버스 마스터(bus master)라고 한다.
- 일반적인 컴퓨터에서는 CPU와 I/O 제어기 등이 버스 마스터가 되며, 뒤에서 설명할 동기식 버스(synchronous bus)를 사용하는 시스템에서는 기악장치 모듈도 버스 마스터가 될 수 있다.
- 이들은 서로 간의 정보를 교환하기 위해 공통의 시스템 버스를 사용한다.
- 어느 한 순간에 한 개의 버스 마스터만 시스템 버스를 사용할 수 있기 때문에, 두 개 또는 그 이상의 마스터들이 동시에 버스를 사용하고자 할 때는 순서대로 사용하도록 버스 중재(bus arbitration)를 해주어야 하낟.
- 이 동작을 사용하기 위한 제어 신호들
- 버스 요구(bus request) 신호 : 버스 마스터가 버스 사용을 원하고 있다는 것을 나타낸다.
- 버스 승인(bus grant) 신호 : 버스 사용을 요구한 마스터에게 사용을 허가한다는 것을 나타낸다.
- 버스 사용중(bus busy) 신호 : 현재 어떤 마스터가 버스를 사용하고 있는 중이라는 것을 나타낸다.
- 버스 중재를 위한 이 신호들은 중재 방식에 따라 한 개 또는 여러 개로 구성되며, 이러한 신호 선들의 집합을 별도로 중재 버스(arbitration bus)라고 부르기도 한다.
- CPU와 I/O 장치 간의 비동기적 동작을 지원하는 인터럽트 매커니즘을 위한 제어 신호들
- 인터럽트 요구(interrupt request) 신호 : 어떤 I/O 장치가 인터럽트를 요구하고 있다는 것을 나타낸다.
- 인터럽트 확인9interrupt acknowledge) 신호 : CPU가 인터럽트 요구를 인식했다는 것을 나타낸다.
- 이 신호 선들의 수는 시스템의 인터럽트 매커니즘에 따라 달라지는데, 이들의 집합을 별도로 인터럽트 버스(interrupt bus)라고 부르기도 한다.
- 그 외의 제어 신호들
- 버스 클록(bus clock) : 동기식 버스에서 버스 동작들의 시작 시간을 일치시키기 위하여 제공되는 공통 클록 신호이다.
- 리셋(reset) : 모든 시스템 요소들의 동작을 초기화시키는 신호이다.
- 버스의 속도를 나타내는 버스 대역폭(bus bandwidth)은 버스를 통하여 단위 시간당 전송할 수 있는 데이터 량을 가리키는데, 이것을 버스 클록의 주파수에 의해 결정된다.
- ex) 버스 클록의 주파수가 50MHz(클록 주기 :20ns)이고 데이터 버스의 폭이 64비트(8바이트)라면, 버스 대역폭은 8X(50X10^6) = 400[Mbytes/sec]가 된다.
- 이 버스를 통하여 초당 4억 바이트의 데이터가 전송될 수 있다.
시스템 버스의 기본 동작
버스 상에서의 모든 동작들은 쓰기 동작과 읽기 동작으로 구분될 수 있다.
쓰기 동작의 순서
- 버스 마스터가 버스 사용권을 획득한다.
- 버스를 통하여 주소와 데이터 및 쓰기 신호를 보낸다.
읽기 동작의 순서
- 버스 마스터가 버스 사용권을 획득한다.
- 주소와 읽기 신호를 보내고, 데이터가 전송되어 올 때까지 기다린다.
시스템 버스에서 모든 버스 동작들이 발생하는 시간이 공통의 버스 클록을 기준으로 결정되는 버스를 동기식 버스(synchronous bus)라고 부른다. 그와는 달리, 버스 동작들의 발생 시간이 다른 버스 동작의 발생 여부에 따라 결정되는 비동기식 버스asynchronous bus)도 있다.
아래의 예시는 CPU가 기억장치로부터 데이터를 읽어오는 경우 기억장치 읽기 동작의 시간 흐름도이다.
- 동기식 버스에서 기악장치로부터 데이터를 읽어오는 과정은 위와 같다.
- 버스 클록의 첫 번째 주기 동안에 CPU가 주소와 읽기 제어 신호를 기억장치로 보낸다. 이때, 버스 동작의 시작을 알리는 신호가 함께 보내지기도 한다.
- 두 번째 주기 동안에 기억장치에서 데이터 인출 동작이 일어나며, 세번째 주기에서 기억장치가 인출된 데이터를 버스를 통하여 CPU로 전송한다. 이와 함께 기억 장치는 전송 확인 신호를 보내며, 이 신호를 받은 CPU는 자신이 요청한 데이터가 버스에 실려있다는 것을 알고 받아들이게 된다.
- 기억장치에서 데이터가 인출되는 데 걸리는 시간이 버스 클록의 주기와 같은 것으로 가정하였다. 만약 기억장치 액세스 시간이 클록의 한 주기보다 더 길 경우에는 그만큼 더 많은 주기가 경과한 후에 기억장치가 데이터와 확인 신호를 보내게 되며, CPU는 그 동안 기다려야 한다.
- 동기식 버스는 인터페이스 회로가 간단하다는 장점이 있다. 그러나 버스 클록의 주기가 가장 오래 걸리는 버스 동작의 소요 시간을 기준으로 정해저야 하기 때문에, 클록 주기보다 더 짧은 시간이 걸리는 버스 동작의 경우에는 동작이 완료된 후에도 다음 주기가 시작될 때까지 기다려야 하는 단점이 있다.
비동기식 버스(asynchronous bus)
- 버스 클록을 사용하지 않으며, 버스 동작들의 발생 시간이 다른 관련 동작의 발생에 따라 결정되는 버스
- 비동기식 버스에서는 기억장치 읽기 동작이 다음과 같은 순서로 수행된다.
- CPU는 버스 상에 주소와 읽기 신호를 싣고, 신호가 안정될 때까지 잠시 기다린 후에, 주소와 제어 신호가 보내졌음을 알리기 위하여 마스터 동기 신호(master synch signal : MSYN)를 보낸다. 그러면 기억장치는 주소를 받아서 데이터를 인출한 다음에, 데이터를 버스에 싣고 슬레이브 동기 신호(slave synch signal: SSYN)를 보냄으로써 응답하게 된다.
- CPU는 SSYN 신호를 받은 즉시 데이터를 버스로부터 받아들이고, 주소와 읽기 신호 및 MSYN 신호를 제거한다. MSYN 신호가 제거되는 것은 CPU가 데이터를 받아들였다는 것을 나타내므로, 기억장치도 SSYN 신호를 제거함으로써 읽기 동작이 완료된다.
- 그와 같이 비동기식 버스에서는 각 버스 동작이 완료되는 즉시, 연관된 다음 동작이 발생되므로 동기식 버스에서와 같이 낭비되는 시간이 없다. 그러나 이러한 연속적 동작들을 처리하기 위한 인터페이스 회로가 복잡해지는 단점이 있다.
일반적으로 소규모 컴퓨터시스템에서는 비동기식 버스를 사용하며, 중형급 이상의 시스템에서는 하드웨어가 더 간단한 동기식 버스를 사용한다.
Reference
컴퓨터 구조론 개정 5판
07장 시스템 버스, I/O 및 인터럽트
7.1 시스템 버스 시스템 버스 : 컴퓨터 시스템의 구성 요소들을 상호 연결해주는 중심 통로 7.1.1 시스템 버스의 조직 버스 : 구성 요소들간에 교환할 각종 정보들을 전송하는 선들로 구성 시스템
velog.io