bit에 몸을 맡기다 (하드웨어에서의 버스)
CS:APP 1장의 중반부 내용은 시스템의 하드웨어 조직을 다루는데, 이쪽에서 버스에 대해 워낙 입맛대로 다이브를 쳤다가 새어 나간 이야기를 풀어본다. 버스에 한정 지은 이야기만 적음.
버스
메모리나 장치 사이에서 내용이 오고가는 통로를 버스라고 하는데, 이 버스의 크기는 클수록 컴퓨터 성능이 더 좋아진다고 여긴다. 사람으로 치면 폐활량의 개념이다.
그래서 왜 128비트 PC는 없는지 이야기한다면 지금 64비트로도 성능의 고점을 못찍었기 때문이다. 이론 상 64비트는 1800경 기가바이트까지 컨트롤이 가능하다. 우리집 컴퓨터도 이제 32GB RAM 끼웠는데..
Legacy Example
나는 학교 다닐 때 마이크로프로세서라는 과목을 들을 일이 있었는데 2003년의 DRAM을 다루는 내용이었다. 실제로 기술 문서를 들고와서 공부를 했었는데 너무 재밌었던 기억이 난다. 그래서 오래되었지만 근본 있는 버스의 예제는 나보다 늦게 태어난 게임기 NES, SNES를 이야기 해보겠다.
NES가 8비트 게임기로, 저 게임기 이름에 붙는 비트가 CPU의 워드 크기와 버스를 가리키는 개념이다. SNES 게임기로 오면서 비트 수가 두 배로 오르면서 많은 부분에 대해 체감이 있었겠지만 역시 체감되는건 그래픽일 것이다.
데이터 버스가 2배가 됨으로써 그래픽 상으로도 더 많은 발전을 이룬 구체적인 내용은
- 더 다채로운 색상 : 8비트에서의 동시 색상 표현 갯수는 상당히 제한적이었다. 16비트에 와서는 훨씬 풍부하고 화려한 색감 표현이 가능해졌다.
- 더 부드러운 움직임 : 더 많은 그래픽 데이터를 처리 할 수 있게 되니, 캐릭터의 움직임, 배경 스크롤도 부드러워졌다. 즉 체감 FPS의 상승
- 더 복잡한 배경 : 뒷 배경을 멀리있는 것은 천천히, 가까운것은 빠르게 넘기는 “다중 스크롤” 같은 기술이 등장하여 몰입감을 더 할 수 있었다.
어쨌든..
버스는 데이터가 오고가는 길일뿐만 아니라 물리적 와이어들의 집합이다. 컴퓨터 보드에는 PCB 트레이스로 구현된다.
대표적인 버스 형태는
- 데이터 버스 : CPU ↔ 메모리간 양방향으로 실제 정보 전달 역할이다.
- 주소 버스 : CPU → 메모리로 단방향으로 메모리 위치를 지정한다.
- 제어 버스 : 읽기/쓰기, 클럭, 인터럽트 신호를 전달하는데 의의가 있다.
버스는 공공자원이라 경쟁 상태에 들어갈 수도 있다. 이게 쓸게 없어서가 아니고 나중에 동시성 프로그래밍하는데 도움이 될 수 있기 때문이다. 어쨌든 각기 다른 주체가 버스를 동시에 쓰려다간 버스 상엔 뭔지 모르겠는 데이터가 적재되어버리고 이로 인해 의도 외의 동작이 발생하는 경우가 있었다.
현대에 와서는 버스가 메모리, I/O, 그래픽등 구분되어 있어 경쟁 상태에 들어갈 염려가 적다. 또 캐시 메모리 덕분에 버스 사용 빈도를 감소시키는 장치들도 마련되어있다.