컴퓨터 구조론 1장 [시스템의 구성]
CPU와 기억장치의 접속
CPU와 시스템 내의 다른 요소들 사이에 정보를 교환하는 통로가 되는 시스템 버스(System Bus)이다.
시스템 버스는 세 가지 하부 버스(Sub-Bus)들로 이루어진다.
시스템 버스 - CPU와 다른 요소들 간의 정보 교환 통로
주소버스
- 주소버스(Address bus)는 CPU가 외부로 발생하는 주소 정보를 전송하는 신호 선들의 집합이다.
- 각 주소선은 하나의 주소 비트를 전송하는 데 사용되며, 전체 주소 선들의 개수가 CPU와 접속될 수 있는 최대 기억장치 용량을 결정해준다.
- CPU가 발생하는 주소 비트들의 수를 주소 버스의 폭(Width)이라고 하는데, 만약 그 폭이 16바트라면, 최대 2^17 = 65,546개(즉, 64K개) 기억장소들의 주소를 지정해 줄 수 있다.
주소버스 - 주소 정보를 전송하기 위한 신호선들의 집합
데이터 버스
- 데이터 버스(Data Bus)는 CPU가 기억장치 혹은 I/O장치와의 사이에 데이터를 전송하기 위한 신호선들의 집합이다. 데이터 버스의 폭은 한 번에 전송할 수 있는 데이터 비트의 수를 결정해준다.
- ex) 데이터 버스가 32비트인 시스템에서는 CPU가 기억장치로부터 한번에 32비트씩 읽어올 수 있다.
제어 버스
- 제어 버스(Contril Bus)는 CPU가 시스템 내의 각종 요소들의 동작을 제어하는데 필요한 신호 선들의 집합이다.
- 제어 신호 선들의 수는 CPU에 따라, 혹은 시스템 구성에 따라 달라진다.
- 가장 기본적인 제어 신호들로는 기억장치 읽기/쓰기(memory read/write)신호와 I/O읽기/쓰기(I/O read/write)신호가 있다.
주소는 CPU에 의해 발생되어 기억장치와 I/O 장치로 보내지는 정보이기 때문에, 주소 버스는 단방향성(uni-directional)이다.
반면에 데이터 버스는 읽기와 쓰기 동작을 모두 지원해야 하므로 양방향 전송(bi-directional transfer)이 가능해야 한다.
- CPU가 데이터를 기억장치의 특정 장소에 저장하거나, 이미 저장되어 있는 내용을 읽는 동작을 액세스(Access)한다고 한다.
- 기억장치들은 액세스 되는 방식에 따라 여러가지로 분류될 수 있는데, 여기서는 반도체 기억장치들 중의 하나인 RAM(Random Access Memory)를 예로서 사용하기로한다.
- CPU가 주소 버스, 데이터 버스 및 제어 신호 선들을 통하여 기억장치와 접속된 모습을 보여주고 있다. CPU가 특정 기억 장소로부터 데이터를 읽고자 할 때 기억장치로 보내주어야 하는 정보는 주소와 읽기 신호이다. 그리고 데이터를 저장하려는 경우에는 해당 기억장소의 주소와 데이터 및 쓰기 신호를 보내주어야 한다. 따라서 CPU와 기억장치 사이에는 그러한 정보들의 전송 통로인 주소 버스, 데이터 버스 및 제어 신호선들이 접속되어야 한다.
- 이와 같이 접속된 상태에서 CPU가 기억 장치로 데이터를 쓰는 동작의 시간 흐름도(timing diagram)를 볼 수 있다.
- CPU는 데이터를 저장할 기억 장소의 주소와 저장할 데이터를 각각 주소버스와 데이터 버스를 통하여 보내면서 동시에 쓰기 신호를 활성화(Active)시킨다. 이 신호들은 모두 기억장치 쓰기 동작이 완료될 때까지 그대로 유지되어 있어야 한다. CPU가 주소와 데이터를 보낸 순간부터 저장이 완료될 때 까지의 시간을 기억장치 쓰기 시간(Memory Write Time)이라고 한다.
액세스 - 기억장치에 데이터를 쓰거나, 저장된 내용을 읽는 동작
기억장치 쓰기 시간 - CPU가 기억장치로 주소와 데이터를 보낸 순간부터 저장이 완료될 때 까지의 시간
CPU가 기억장치로부터 데이터를 읽는 동작의 시간 흐름도는 위와 같다.
- 이 동작을 위하여 CPU는 데이터가 저장되어 있는 기억장소의 주소를 주소 버스를 통하여 기억장치로 보내면서 동시에 읽기 신호를 활성화 시킨다. 그러면 일정 지연 시간이 경과한 후에 기억장치로부터 읽혀진 데이터가 데이터 버스 상에 실리며 CPU는 그 데이터 버스 인터페이스 회로(bus interface circuit)를 통하여 읽어들이게 된다.
- 여기서 지연 시간이란 주소를 해동(decode)하는데 걸리는 시간과 기억장치 내부에서 데이터를 인출하는데 걸리는 시간을 합한 시간이다.
- CPU가 주소를 발생한 시간부터 읽기 동작이 완료될 때까지의 시간을 기억장치 읽기 시간 이라고 한다.
- 각 버스의 신호를 중복적으로 표시한 이유는 여러 개의 선들이 0혹은 1의 값을 가진다는 것을 나타내기 위한 것.
기억장치 읽기 시간 - CPU가 기억장치로 주소를 보낸 순간부터 읽기 동작이 완료될 때까지의 시간.
CPU와 I/O장치의 접속
I/O장치에는 외부와의 데이터 입력 및 출력을 위한 각종 주변장치들이 포함된다.
보조 저장 장치들도 CPU가 직접 제어하거나 액세스하지 못하고 I/O 장치들과 마찬가지로 별도의 인터페이스 회로(interface circuit)혹은 제어기(controller)를 통하기 때문에 I/O 장치들과 같은 방법으로 CPU와 접속되어야 한다.
CPU가 키보드로부터 데이터를 읽어들이는 과정은 다음과 같다.
- 키보드의 어느 한 키(key)가 눌리면 그에 대응되는 8-비트(ASCII 코드), 7-비트(패리티비트) 데이터가 키보드 제어기로 전송되어 데이터 레지스터(data register)에 저장되며, 동시에 상태 레지스터(status register)의 지정된 비트가 세트된다.
- 이 비트는 입력 데이터가 준비되었다는 것을 가리키므로, 여기서는 입력 준비(In-RDY)비트라고 부르기로 한다.
- CPU는 데이터 입력을 원하는 시점에서 먼저 상태 레지스터를 읽어들여서 In-RDY비트가 1로 세트되어 있는지를 검사한다.
- 만약 세트되어 있다면, 즉시 데이터 레지스터의 내용을 CPU로 읽어들임으로써 데이터 입력 과정이 완료된다. 그러나 In-RDY비트가 세트되지 않았다면, CPU는 상태 레지스터의 내용을 읽고 검사하는 동작을 반복하면서 기다린다.
- 이러한 반복 검사 과정은 In-RDY 비트가 세트될 때까지 즉, 키가 눌러져서 데이터가 들어올 때까지 계속된다.
CPU가 데이터를 프린트 출력하는 과정도 유사하다.
- CPU는 데이터를 프린터로 보내기 전에 먼저 프린터 제어기 내의 상태 레지스터를 읽어서, 데이터 출력 준비(Out-RDY)비트를 검사한다.
- 이것은 프린터가 이전에 받은 데이터에 대한 프린트 동작을 완료하고 다음 프린트 동작을 시작할 준비가 되었는지를 검사하는 절차이다.
- Out-RDY 비트가 1로 세트된 것이 확인되면 CPU는 프린트할 데이터를 프린트 제어기의 데이터 레지스터로 쓰고 프린트 시작 신호를 보낸다. 그러면 제어기는 프린터의 하드웨어를 적절히 구동하여 그 내용을 프린트한다.
- 이 과정에서도, 만약 Out-RDY 비트가 세트되지 않았다면, CPU와 I/O장치 사이에서 임시 저장 장소 역할을 하기 때문에 데이터 버퍼(data buffer)라고 부르기도 한다.
- 이 버퍼의 용량을 수십 메가바이트 이상으로 늘려서 프린트할 데이터 파일 전체를 이동시킨다면, 프린트 동작에 대한 CPU의 개입을 줄일 수 있다.
하드디스크, SSD(Solid-State-Drive) 및 CD-ROM과 같은 보조 저장장치들도 각 장치를 위한 제어기를 통해 이와 유사한 방법으로 접속된다. 그러나 키보드의 경우에는 데이터가 바이트(8바이트) 단위로 전송되지만, 보조저장장치의 경우에는 블록(512바이트, 1024바이트 혹은 4096바이트)단위로 전송이 이루어지기 때문에 제어기 내에 적어도 한 블록 이상을 임시 저장할 수 있는 데이터 버퍼가 준비되어야 한다.
디스크 제어기들 중에는 디스크 상의 한 트랙(track)의 내용을 모두 저장할 수 있는 트랙 버퍼 혹은 그 이상의 용량인 디스크 버퍼(disk-buffer)를 가지고 있는 경우도 많이 있다.
CPU는 시스템에 접속되어 있는 I/O장치들을 직접 제어하지는 않지만, 각 장치의 제어기가 수행할 동작을 지정하는 명령(command)을 보내거나 상태 정보와 데이터를 주고 받을 수 있어야 한다.
CPU는 각 I/O 장치의 제어기를 구분하고 정보를 받을 수 있어야 한다.
그 방법은 각 제어기 내에 있는 상태 레지스터와 데이터 레지스터를 각각 한 단어 길이의 기억장치로 간주하고, 주소를 한 개씩 배정하는 것이다. 그렇게 되면 CPU는 그 레지스터들을 기억장치와 같은 방법으로 읽기 및 쓰기 동작을 수행할 수 있다. 즉, CPU 제어기 내부 레지스터들의 주소를 이용해 해당 I/O장치를 제어할 수 있게 되는 것이다.
주소 버스와 제어 신호들(I/O 읽기 신호와 쓰기 신호)이 I/O제어기들로 연결되는 것도 위의 이유 때문이다.
전체 시스템의 구성
CPU, 주기억장치 및 I/O장치들을 시스템 버스를 통해 접속하여 전체 컴퓨터 시스템을 구성한다.
컴퓨터 시스템이 수행할 수 있는 기능들을 주요 요소들과 연관시켜보면 아래와 같다.
- 프로그램 실행 : CPU가 주기억장치로부터 프로그램 코드를 읽어서 실행한다.
- 데이터 저장 : 프로그램 실행 결과로서 얻어진 데이터를 주기억장치에 저장한다.
- 데이터 이동 : 디스크나 SSD에 저장되어 있는 프로그램과 데이터 블록을 주기억장치로 이동한다.
- 데이터 입력 및 출력 : 사용자가 키보드를 통하여 보내는 명령이나 데이터를 읽어들인다. 또한 CPU가 처리한 결과 값이나 기억장치의 내용을 프린터(혹은 모니터)로 출력한다.
- 제어 : 프로그램이 순서대로 실행되도록 혹은 필요에 따라 실행 순서를 변경하도록 조정하며, 각종 제어 신호들을 발생한다.
CPU와 주기억장치에 비하여 보조저장장치나 I/O장치들은 속도가 낮고 전송 방식도 다르기 때문에 직접 시스템 버스에 접속하는 것에 어려움이 있다.
따라서 그러한 장치들을 위한 확장 버스(expansion bus) 개념이 개발되어 새로운 장치들을 쉽게 시스템에 추가하면서도 시스템 성능을 높일 수 있는 계층적 버스 구조(hierarchical bus structure)가 채택되고 있다.
Reference
(참고문헌: '컴퓨터구조론', 김종현 저, 생능출판사)