01 CPU 칩과 시스템 버스
시스템 버스
; CPU와 메모리, 입출력 장치 간 정보를 교환하는 통로
- 시스템 버스는 CPU 칩에 있는 다양한 핀과 연결함
[1] CPU 칩
- CPU 칩에는 통신에 필요한 핀들이 있는데 입력이나 출력 중 하나만 가능한 핀도 있고, 입출력이 모두 가능한 핀도 있음
CPU 핀
; 주소, 데이터, 제어 세 가지 유형으로 나뉘며 유형 별로 묶어 버스라고 한다.
- 주소 버스(핀) : 명령을 인출 할 때 해당 명령의 메모리 주소를 출력하는 것
CPU 성능을 결정하는 변수
(1) 주소핀의 수(주소 버스 크기)
→ 주소핀의 수가 m개이면 메모리 주소를 최대 2^m개 지정 가능
(2) 데이터 핀의 수(데이터 버스 크기)
→ 데이터 핀의 수가 n개이면 명령 한 번으로 n비트 워드를 읽거나 쓰기 가능
데이터 핀이 많을 수록 CPU는 빠르지만, 비용이 많이 든다.
다양한 제어 핀
(1) 인터럽트 핀 : I/O 장치에서 CPU 쪽으로 연결하는 입력
→ I/O가 완료될 떄 I/O 제어기는 CPU에 인터럽트 신호를 보내 I/O 장치를 처리하도록 함
(2) 버스 중재 핀 : 장치 2개가 동시에 버스를 사용하지 못하도록 버스에서 트래픽을 조절하는 것
(3) 버스 제어 핀 : 대부분 CPU에서 버스 쪽으로 출력이며, CPU가 메모리를 읽거나 쓸 때 사용
[2] 시스템 버스
; 여러 장치 사이를 연결하는 통로로, CPU 내부에서 ALU와 데이터를 주고 받거나 CPU 외부에서 데이터를 메모리 또는 I/O 장치에 연결 가능
- 종류 : 주소 버스, 데이터 버스, 제어 버스
- 초기 PC : 단일 외부 버스 또는 시스템 버스로, 구리선 50-100개로 만들어짐
- 현대 PC : CPU와 메모리 사이를 연결하는 지정된 버스가 있고, I/O 장치 연결에 필요한 하나 이상의 다른 버스도 있음
- 메모리 버스와 I/O 버스가 각각 1개씩 있는 최소한의 시스템
일반적인 버스 구조
- 버스 : 굵은 선으로 표시
- 비트 수 : 버스 위에 짧게 대각선을 긋고 비트 수를 표시함
버스 프로토콜
; CPU 칩 내부를 설계할 때는 원하는 버스를 자유롭게 사용할 수 있지만, 다른 사람이 설계한 보드를 연결할 때는 외부 버스가 어떻게 작동되는지 정의하는 것
버스의 동작
; 버스에 연결하는 일부 장치는 능동적으로 버스 전송을 시작하고, 어떤 장치는 수동적으로 요청을 기다림
- 마스터 : 능동 장치⇒ CPU가 디스크 제어기에 블록 읽기 또는 쓰기를 명령하면 CPU는 마스터가 됨⇒ 메모리는 마스터가 될 수 없음
- ⇒ 디스크 제어기가 디스크 드라이브에서 읽은 워드를 메모리에 저장할 때 마스터로 동작
- 슬레이브 : 수동 장치⇒ CPU가 디스크 제어기에 블록 읽기 또는 쓰기를 명령하면 디스크 제어기는 슬레이브로 동작
ex) 마스터와 슬레이브의 예
버스 속도와 대역폭에 영향을 많이 주는 것
(1) 버스 폭 : 주소 버스선이 많을 수록 CPU가 직접 액세스 할 수 있는 메모리 양이 많아진다.
향후 확장을 고려하지 않으면 복잡하게 설계된다.
- 버스의 대역폭을 늘리는 방법1) 버스의 사이클을 짧게 할 경우 : 초당 전송 횟수가 많아짐2) 데이터 버스 폭을 넓힐 경우 : 한 번에 더 많은 비트 전송
- → 동시에 출발한 신호가 목적지에 도달하는 시간이 서로 다른 버스 스큐가 발생하여, 두 신호의 판독 값 사이에 미세한 차이 발생
- 다중화 버스; 주소선과 데이터 선을 따로 두지 않고 서로 공유함. 버스 동작 시작할 때는 주소선으로, 그 다음에는 데이터 선으로. ⇒ 비용과 버스 폭은 줄지만 시스템 속도는 느려짐
- 버스트 모드; 캐시 메모리 시스템을 지원함메모리는 지정된 주소에 워드를 제공한 후 다음 주소에서 워드를 제공하여 응답
- ex) 주소가 위치 i에 대해 전송되고 위치 i, i+1, i+2, i+3에 대한 데이터가 추가 주소 없이 전송됨
- 캐시의 한 선이 메모리에서 로드될 때 첫 번째 워드의 주소가 메모리로 전송
(2) 버스 타이밍 : 버스 타이밍 방식에 따라 동기식 버스와 비동기식 버스 구분 가능
- 비동기식 버스; 주 클록이 없다.
- 느린 장치와 빠른 장치를 혼합해서 버스를 공유할 수 있음
비동기식 버스보다 동기식 버스가 더 자주 쓰인다.
비동기식 방식이 구현이 어렵기 때문에!
비동기식은 소형 시스템에서 사용된다.
(3) 버스 중재 : 장치 2개 이상이 동시에 버스를 사용하지 못하게 충돌을 방지하는 것
- 중앙 집중 버스 중재; 일반적으로 많이 사용하는 방식
병렬 중재 방식
각 장치는 개별적으로 버스 요구(BRQ)와 버스 승인(BGT) 신호를 가짐 → 어느 마스터가 버스 요구를 했는 지 알 수 있음
우선순위 디코더 : 우선순위가 가장 높은 마스터 요구를 선택하고 승인 신호를 발생
직렬 중재 방식
BRQ와 BGT가 하나만 존재하고, 모든 마스터가 이용함 → 간단하고 저렴함
But, 얼마나 많은 장치가 버스 요구를 했는지, 누가 요구를 했는지 알 수 없음.
요구 유무만 인식 가능.
폴링 버스 중재 방식
연결된 버스 마스터의 주소를 발생하여 각 마스터에 버스를 사용할지 확인
버스 마스터의 응답에 따라 버스 승인을 하고 버스가 사용 중임을 설정
이때, 버스 마스터가 8개 연결되어 있으면 주소선은 3개가 필요(2^3=8)
- 분산 버스 중재 버스 중재기를 사용하지 않음 → 어떤 장치가 버스를 제어할 지 결정해야 하기 때문에 장치는 복잡해짐
02 버스의 실제 동작 예
[1] PCI 버스(== PCI 로컬 버스)
; 중앙처리장치와 주변장치를 연결하는 로컬 버스 규격
특징
- 주소를 전달하는 신호와 데이터를 전달하는 신호를 시분할 다중화하여 하나의 선을 가지고 전송하기 때문에 신호선의 수가 적음
- 32비트 또는 64비트 버스로 사용 가능
- 중앙처리장치와 버스 사이에 브리지 회로를 두어 중앙처리장치의 종류가 달라도 그에 대응하는 브리지 회로를 갖추기만 하면 어떤 중앙처리장치와도 연결 가능
- 버스 마스터링을 지원하여 중앙처리장치와는 독자적으로 작업 처리 가능
- 전송 속도가 서로 다른 여러 주변 장치가 접속해도 동영상 등의 멀티미디어 데이터를 우선적으로 처리 가능
PCI 버스의 문제점
(1) 대역폭이 528MiB/s로 빠르지만 메모리 버스에는 충분하지 않다.
(2) 이전 ISA 카드와 호환되지 않는다.
해결책 : 버스가 3개 이상인 컴퓨터로 설계하는 것(1990년대에 많이 사용 됨)
→ CPU가 특수 메모리 버스의 메모리와 통신 가능
→ ISA 버스를 PCI 버스에 연결할 수 있음
; 이 구조를 사용하는 PC에는 새로운 고속 주변 장치를 추가할 수 있는 빈 PCI 슬롯과 저속 주변 장치를 추가할 수 있는 ISA 슬롯이 하나 이상 있다.
- PCI 브리지 : CPU, 메모리, PCI 버스를 연결
- ISA 브리지 : PCI 버스를 ISA 버스에 연결하며, 하나 이상의 IDE 디스크도 지원
장점
- CPU가 독점적인 메모리 버스를 사용하여 메모리 대역폭이 극도로 큼
- PCI 버스는 SCSI 디스크, 그래픽 어댑터 등 고속 주변 장치를 위한 높은 대역폭을 제공
- 이전 ISA 카드도 사용 가능
cf) ISA 버스가 수명을 다하면서 생겨난 것 → AGP 버스
AGP 버스 : 풀 모션 비디오에 대한 수요 증가에 따라 그래픽 구동을 위해 생긴 버스
PCI 버스의 동작
PCI 버스의 모든 트랜잭션은 마스터와 슬레이브 사이에서 일어남
PCI가 64비트 주소와 64비트 데이터를 지원하지만 주소와 데이터 신호를 교대(멀티플렉스)로 지원하여 PCI 카드에 필요한 PCI 핀 수는 64를 유지
읽기 동작
- 사이클 1 : 마스터는 주소를 버스에 싣는다.
- 사이클 2 : 마스터는 주소를 제거하여 슬레이브가 버스를 사용할 수 있게 한다.
- 사이클 3 : 슬레이브는 요구된 데이터를 출력한다.
쓰기 동작
- 마스터가 주소와 데이터를 모두 입력하기 때문에 버스를 교대로 쓸 필요가 없다.
- 최소 트랜잭션은 3 사이클이고, 슬레이브가 3 주기로 응답할 수 없으면 대기 상태를 삽입한다.
PCI 버스의 중재
; 브리지 칩 중 하나에 내장된 중앙 집중식 버스 중재기를 사용한다.
모든 PCI 장치는 REQ#(버스 요구)와 GNT#(버스 승인)라는 전용 회선이 2개 연결되어 있다.
버스 요구
- CPU가 포함된 모든 PCI 장치는 REQ#를 입력하고 중재기가 GNT# 선에 응답할 때까지 기다림
- 응답이 발생하면 장치는 다음 주기에 버스를 사용 가능
버스 승인
; 하나의 장치에 대해서만 발생한다.
- 버스 마스터가 매우 긴 전송을 하고 다른 일부 장치가 버스를 요청한 경우, 중재기는 GNT#선을 무효화할 수 있음
- 무효화 신호를 인지하면 다음 사이클에서 버스를 해제함⇒ 버스 마스터가 하나만 예약되어 있을 때 효율성을 위해 매우 긴 전송을 허용하므로 경쟁 장치의 요구에 빠르게 응답 가능
알고리즘
; 라운드-로빈, 우선 순위 등 다양한 방법을 사용한다. PCI 사양에 따라 정의되어 있지 않다.
다만, 일부 장치가 오래 기다리지 않도록 해야 한다.
PCI 버스의 문제점
(1) 많은 입출력 장치가 PCI 버스보다 더 빨라져서, 버스 스큐, 전선 간 간섭, 커패시턴스 효과 등이 점점 악화된다.
- 단순 해결책 : 입출력 장치가 그래픽 카드, 하드 디스크, 네트워크 등 PCI 버스에 비해 더 빨라질 때마다 브리지 칩에 새로운 특수 포트를 추가하여 PCI 버스를 우회하도록 허용함→ 장기적인 해결책이 될 수 없음
(2) 카드가 크기 때문에 노트북과 모바일 장치에 적합하지 않다.
[2] PCI Express 버스
; PCI 버스의 문제를 보완한 것으로, 병렬 버스를 제거하고 고속 포인트-투-포인트 직렬 연결을 기반으로 설계한 버스
- CPU, 메모리, 캐시는 기존 방식으로 브리지 칩에 연결됨
- 각 입출력 칩에 스위치에 대한 전용 지점 간 연결이 있음연결은 쌍으로 구성되며, 하나는 스위치 입력에 다른 하나는 스위치 출력에 연결됨
PCI 버스와의 다른점
(1) 중앙 집중식 스위치와 멀티 드롭 버스
(2) 폭이 좁은 직렬 포인트-투-포인트 연결과 넓은 병렬 버스 사용
(3) PCI 버스는 워드 또는 워드 블록을 읽는 명령을 슬레이브에 보내는 반면, PCIe 모델은 다른 장치로 데이터 패킷을 보냄
(4) 패킷에 오류 감지 코드가 사용되어 PC 버스보다 높은 수준의 신뢰성 보장
(5) 칩과 스위치 사이의 연결이 시스템 파티션을 허용하기 위해 최대 50cm보다 길다.
(6) 장치가 실제로 다른 스위치일 수 있기 때문에 시스템을 확장할 수 있으므로 스위치 트리가 허용됨
(7) 장치가 실행 중일 때 시스템에 추가되거나 제거될 수 있음(핫 플러그 가능)
(8) 직렬 커넥터가 기존 PCI 커넥터보다 훨신 작기 때문에 장치와 컴퓨터를 더욱 작게 만들 수 있음
PCI와 PCIe의 단점
- 고속의 주변 장치를 컴퓨터에 연결하는 데에는 적합하지만, 키보드나 마우스 같은 저속 입출력 장치에는 너무 비쌈
- 새로운 장치를 추가하려면 비어 있는 ISA 및 PCI 슬롯을 사용하는데 이 과정이 어렵고 오류가 잦게 발생
- ISA 및 PCI 슬롯의 개수가 보통 2~3개로 매우 제한적
[3] USB
; 저속 입출력 장치를 컴퓨터에 연결하는 방법을 고안하다 나온 것
메인 버스에 연결된 루트 허브로 구성됨. 허브에는 입출력 장치 또는 확장 허브에 연결하여 더 많은 소켓을 제공할 수 있는 케이블용 소켓이 있어 USB 시스템의 구성 방식은 컴퓨터 내부의 루트 허브가 있는 트리 구조
케이블의 경우, 허브 소켓 2개를 실수로 연결하는 것을 방지하기 위해 허브 끝과 장치 끝의 커넥터가 다름
USB의 초기 목표
- 보드나 장치에 스위치나 점퍼를 설정할 필요가 없다.
- 새로운 입출력 장치를 설치하기 위해 케이스를 열지 않아도 된다.
- 모든 장치를 연결하는 데 한 종류의 케이블만 있어야 한다.
- 입출력 장치는 케이블에서 전원을 공급받아야 한다.
- 컴퓨터 하나에 장치를 최대 127개 부착할 수 있어야 한다.
- 시스템은 실시간 장치(예: 사운드, 전화)를 지원해야 한다.
- 컴퓨터를 실행하는 동안 장치를 설치할 수 있어야 한다.
- 새 장치를 설치한 후 재부팅할 필요가 없다.
- 새로운 버스 및 입출력 장치는 제조 비용이 저렴해야 한다.
⇒ USB는 위의 목표를 모두 충족함
USB 버전
(1) 1.0 버전 : 키보드와 마우스에 충분한 1.5Mbps의 대역폭을 가짐
(2) 1.1 버전 : 프린터, 디지털 카메라 및 기타 여러 장치에 충분한 12Mbps 속도로 실행됨
(3) 2.0 버전 : 외장 디스크 드라이브, 고화질 웹캠, 네트워크 인터페이스를 지원하기에 충분한 480Mbps의 장치를 지원 + 데이터용 2개, 전원 및 접지를 포함하여 전체 4개의 선으로 구성됨
(4) 3.0 버전 : 최대 5Gbps의 속도를 제공 + 2.0 버전에서 고속의 송신 및 수신을 위한 신호가 각각 2개씩 4개의 선이 추가됨(2.0 버전과 호환됨)
(5) 3.1 버전 : 2세대의 경우 10Gbps의 속도를 지원
(6) 3.2 버전 : 2세대 케이블의 경우 20Gbps 동작 가능
장치가 추가되는 과정
(1) 새 입출력 장치가 연결되면 루트 허브는 이벤트를 감지하고 운영체제를 인터럽트
(2) 운영체제는 장치를 검색하여 장치와 필요한 USB 대역폭의 양을 찾음
(3) 운영체제가 장치에 충분한 대역폭이 있다고 판단하면, 새 장치에 고유한 주소를 할당
(4) 주소 및 기타 정보를 장치 내부의 구성 레지스터에 다운로드
USB가 지원하는 전송 프레임
- 제어 프레임 : 장치를 구성하고 명령을 내리며 상태를 점검할 때 사용
- 동시성 프레임 : 정확한 시간 간으로 데이터를 보내거나 받아야 하는 마이크, 마우스, 스피커, 전화기 등 실시간 장치용 → 오류가 발생해도 재전송 안 함
- 벌크 프레임 : 프린터처럼 실시간 요구 사항이 없는 장치에 대량의 데이터를 전송할 때 사용
- 인터럽트 프레임 : USB가 인터럽트를 지원하지 않아서 필요함ex) 키를 누를 때마다 키보드가 인터럽트를 일으키는 대신, 운영체제는 보류 중인 키 입력을 수집하기 위해 50ms마다 폴링
03 입출력 장치 인터페이스
인터페이스 장치
: 모든 입력 및 출력 전송을 감독하고 동기화하기 위해 CPU와 주변 장치 사이에 있는 특별한 하드웨어 구성 요소
[1] 인터페이스 장치의 필요성
; 아래와 같은 CPU와 각 주변 장치에 존재하는 차이를 해결하기 위해
- 주변 장치는 전자-기계 장치 또는 전자-자기 장치가 결합된 것이 있으며, CPU 및 메모리는 전자 장치이다. 따라서 신호 값의 변환이 필요할 수 있다.
- 주변 장치의 데이터 전송 속도는 일반적으로 CPU의 전송 속도보다 느리기 때문에 동기화 방법이 필요할 수 있다.
- 주변 기기의 데이터 코드 및 형식은 CPU 및 메모리의 워드 형식과 다르다.
주변 장치와 데이터 전송 방법
(1) 프로그램 입출력
(2) 인터럽트 입출력
(3) 직접 메모리 액세스
[2] 프로그램 입출력
; 입출력 명령이 컴퓨터 프로그램으로 작성됨
- 각 데이터 항목 전송은 프로그램 명령에 따라서 시작됨
- 일반적으로 CPU 레지스터와 메모리에서 전송되고, 주변 장치를 지속적으로 검사해야 함
- 입출력 장치가 메모리에 직접 액세스 할 수 없음
장치에서 GPU로 데이터를 전송하고, GPU에서 메모리로 데이터를 전송하는 명령을 저장하는 입력 명령을 포함하여 CPU가 여러 명령을 실행해야 함
시스템 버스를 할당하는 방법
(1) 분리 입출력 : 입출력 장치와 메모리에 주소, 데이터, 제어 버스를 따로 둠. → 주소 공간과 명령이 모두 달라 단순하지만 더 많은 버스가 필요함
- 입출력 장치와 메모리가 데이터 버스와 주소 버스를 공통으로 사용하지만, 입출력을 위한 별도의 읽기 및 쓰기 제어선을 가지고 있음
- CPU는 명령을 해독한 후 I/O가 필요한 데이터라면 주소 버스에 주소를 싣고 입출력 읽기 또는 쓰기 신호를 제어선에 인가하여 CPU와 입출력 장치 사이에 데이터 전송을 할 수 있도록 함
- 메모리 주소와 입출력의 주소 공간이 분리되어 있음(입출력 주소 == 포트)
- 입출력과 메모리에 대해 서로 다른 읽기-쓰기 명령어가 있음
(2) 메모리 사상 입출력 : 입출력 장치와 메모리에 데이터와 주소는 공통 버스를 갖지만 제어 주소는 별도로 가짐
- 모든 버스가 공통으로 상요되며, 동일한 명령어 세트가 메모리 및 입출력에 동작
- 입출력이 메모리와 동일한 주소 공간에서 저장되므로 메모리 공간이 줄어드는 경향이 있음
[3] 인터럽트 I/O
; 인터럽트 구동 방식을 사용함으로써 I/O에 낭비되는 CPU 시간을 절약할 수 있음
- 인터럽트 기능 및 특수 명령을 사용하여 인터페이스에 모든 장치에서 데이터를 사용할 필요가 있을 때마다 인터럽트 요청 신호를 보내도록 알림
- 인터페이스는 장치를 계속 모니터링 → 전송 준비가 되었다고 판단되면 컴퓨터로 인터럽트 요청 신호 시작
- 외부 인터럽트 신호가 감지되면 CPU는 현재 수행 중인 작업을 잠시 중단하고 서비스 프로그램으로 분기하여 I/O 전송을 처리한 후 원래 수행하던 작업으로 되돌아감
프로그램 I/O와 인터럽트 I/O의 단점
(1) I/O 전송 속도는 프로세서가 장치를 테스트하고 서비스할 수 있는 속도에 따라 제한됨
(2) 프로세서가 I/O 전송 관리에 묶여 있음. 각 I/O 전송에 대해 많은 명령어가 실행되어야 함
[4] DMA
; 주변 장치가 메모리 버스를 사용하고 직접 통신하도록 허용하여 CPU가 개입하지 않고 데이터를 전송할 수 있는 데이터 전송 기술
- DMA 동안 CPU는 메모리 버스를 제어하지 못함
- DMA 제어기는 I/O 장치와 메모리 장치 간에 직접 전송을 관리하려고 버스를 인계받음
- 버스 요구(BRQ) : DMA 제어기가 버스 제어를 양보하도록 CPU에 요청하는 데 사용함
- 버스 승인(BGT) : CPU는 현재 명령의 실행을 끝낸 뒤 버스를 끊고 DMAC에게 버스 승인 신호를 보내어 버스를 사용할 수 있도록 함. DMA가 버스를 제어하면 데이터를 전송함.
블록 전송
; 데이터 전송이 완전히 끝난 후 버스를 반환하는 것으로 전송할 데이터의 바이트 개수를 레지스터에 저장하고, 한 바이트씩 전송될 때마다 감소하여 0이 되면 DMAC는 버스를 해제함
DMAC가 버스트 모드로 동작할 때, CPU는 데이터 전송이 지속되는 동안 정지됨
블록 전송이 실행되는 단계
(1) 버스 승인 요청
(2) 일반적으로 데이터를 CPU로 전송할 수 있는 속도보다 장치가 더 느리기 때문에 장치 전송 속도로 전체 데이터 블록을 전송함
(3) 버스의 제어권을 CPU에게 돌려줌
사이클 스틸
; 한 번에 한 단어씩 전송하고 버스 제어권을 CPU에 반환하는 것으로, CPU는 DMA I/O 전송이 메모리 사이클 하나를 훔칠 수 있도록 한 메모리 사이클 동안 작업을 지연 시킴
한 바이트가 전송될 때 장치가 다음 바이트를 병렬로 준비한다는 파이프 라인 개념을 따름
사이클 스틸이 실행되는 단계
(1) 한 바이트를 버퍼에 버퍼링함
(2) 디바이스에 전송할 1바이트(버스 승인 요청)가 있음을 CPU에 알림
(3) 바이트 전송(시스템 버스 속도에서)
(4) 버스 제어권을 다시 CPU로 반환
인터리브 모드(=인터럽트 DMA)
; 마이크로프로세서가 시스템 버스를 사용하지 않을 때 시스템 버스를 인계함
ex) 마이크로프로세서는 명령 또는 ALU 연산 디코딩과 같은 내부 연산을 수행할 때 버스를 사용하지 않음
주요 특징은 마이크로프로세서를 중지하지 않고 데이터 전송을 하는 것. 데이터 전송은 명령어 사이클당 1바이트
Uploaded by Notion2Tistory v1.1.0