컴퓨터 구조 분야의 일곱 가지 위대한 아이디어
컴퓨터 구조 분야에서 사용되는 7가지 아이디어를 살펴보자. 이는 컴퓨터 구조 뿐만 아니라 다른 SW 분야에서도 활용할 수 있다.
1. 설계를 단순화하는 추상화
컴퓨터는 복잡하다. 그리고 시간이 갈수록 더 복잡해지고 있다. 복잡한 시스템을 설계하는 것은 생산성이 떨어지는 일이다. 그렇기 때문에 생산성을 높이기 위한 기술이 필요하다. HW와 SW의 생산성을 높이는 핵심 기술 중 하나는 추상화(abstracion)이다.
추상화를 사용하면 여러 수준에서 설계를 명시하게 된다. 하위 수준의 상세한 사항을 안 보이게 함으로써 상위 수준 모델을 단순화한다.
2. 자주 생기는 일을 빠르게
자주 생기는 일을 빠르게 만드는 것이 드물게 생기는 일을 빠르게 만드는 것보다 성능 개선에 도움이 된다. 당연한 말이다. 아이러니하게도 자주 생기는 일은 드물게 생기는 일보다 단순하여 성능을 개선하기 쉬운 경우가 많다.
자주 생기는 일이 무엇인지 알기 위해서는 세심한 실험과 측정이 필요하다.
3. 병렬성을 통한 성능 개선
컴퓨터 설계자들은 연산을 병렬적으로 실행하여 성능을 높이는 설계를 해 왔다.
4. 파이프라이닝을 통한 성능 개선
파이프라이닝(pipelining)은 컴퓨터 구조에서 많이 볼 수 있는 병렬성의 특별한 형태이다. 사람들이 줄지어 서서 물을 나르면 각자 양동이를 들고 왔다 갔다 하는 것보다 훨씬 빠르게 물을 나를 수 있다.
5. 예측을 통한 성능 개선
아무것도 안 하고 기다리는 것보다 무엇이라도 하고 잘못되면 그때 뒷수습을 하는게 더 나을 때가 있다. 무언가를 하기 위해서는 미래를 예측(prediction)해야 한다. 이것이 다섯 번째 아이디어다.
예측이 틀렸을 때 이를 복구하는 비용이 비싸지 않고 예측이 맞을 확률이 비교적 높은 경우, 확실해질 때까지 기다리는 것보다 추측해서 일단 시작하는 것이 평균적으로 더 빠를 수 있다.
6. 메모리 계층구조
프로그래머는 빠르고 크고 값싼 메모리를 원한다. 그렇지만 이 모든 것을 동시에 충족할 수는 없다. 속도, 용량, 비용 중 상충되는 요소가 존재한다. 예를 들어, 속도를 높이면 비용이 올라가고 비용을 낮추면 용량이 낮아지는 식이다.
컴퓨터 설계자들은 이렇게 상충되는 요구를 메모리 계층구조(hierarchy of memories)로 해결하고 있다. 최상위 계층에는 가장 빠르고, 가장 작고, 비트당 가격이 제일 비싼 메모리를 사용하고, 최하위 계층에는 느리지만 크고 비트당 가격이 제일 싼 메모리를 사용한다.
컴퓨터 구조 외에도 SW 전반적으로 이렇게 계층구조를 사용하여 상충되는 요구사항을 모두 충족하는 경우가 종종 있다.
7. 여유분을 이용한 신용도 개선
컴퓨터는 빠르기만 해서는 안 되고, 신뢰할 수 있어야 한다. 모든 물리 소자는 장애가 발생할 수 있으므로, 장애를 감지하고 장애가 난 소자를 대치할 수 있도록 여유분을 준비하면 컴퓨터의 신용도(dependability)를 개선할 수 있다.