명령어의 컴퓨터 내부 표현 거의 모든 명령어가 레지스터를 사용하기 때문에 레지스터 이름을 숫자로 매핑하는 규칙이 있어야 합니다. MIPS에서는 레지스터 $0에서 $7까지는 레지스터번호 16~23번까지로, $t0에서 $t7까지는 번호 8에서 15번까지 매핑합니다. MIPS 어셈블리 언어를 기계어로 변환 예) add $t0, $s1, $s2 다음 어셈블리 명령어의 실제 MIPS언어 버전을 십진수와 이진수 형태로 표현하라. 십진수 표현은 다음과 같습니다. 명령어의 각 부분을 필드(field)라 부릅니다. 처음과 마지막 필드는 더셈에 사용할 첫 번째 레지스터 번호, 세 번째 필드는 두 번째 피연산자 레지스터 번호를 나타냅니다. 네 번째 필드는 계산 결과가 들어갈 레지스터의 번호입니다. 이 명령어에서 다섯 번째 ..
컴퓨터 하드웨어에게 일을 시키려면 하드웨어가 알아들을 수 있는 언어로 말을 해야합니다. 컴퓨터 언어에서 단어를 명령어(instruction)이라 하고 그 어휘를 명령어 집합(instruction set)이라 합니다. 이번 장에서는 실제 컴퓨터의 명령어 집합을 살펴봅니다. 이 글에서 사용할 명령어 집합은 MIPS를 택했는데, MIPS는 1980년대 이후에 설계된 명령어 집합들을 대표할 만한 것 중 하나입니다. 2장 마지막 쯤에 MIPS 말고도 널리 쓰이는 명령어 집합이 있는데 간단히 살펴볼 예정입니다. 1. ARMv7은 MIPS와 유사합니다. 최근 엄청나게 많은 ARM프로세서가 제조되어 세계에서 가장 많이 쓰이는 명령어 집합이 되었습니다. 2. Intel x86은 PC와 포스트PC시대 클라우드 컴퓨터 모두..
예를 들어 우리가 C언어를 작성하고 있다고 합시다. 이 C언어는 어떤 동작을 통해 컴퓨터에 전달될까요? C code f = (g+h) - (i+j)가 있다면, Compiled ARM code ADD t0, g, h ; temp t0 = g+h ADD t1, i, j ; temp t1 = i+j SUM f, t0 ,t1 ; f = t0-t1 으로 구성됩니다. ARM는 아래의 그림과 같이 16x32bit의 레지스터로 구성됩니다. 32비트 크기의 플립플롭이 16개 배열되어있는 구조이고, 32bit의 데이터를 우리는 word라 부릅니다. 어떤 연산을 할때, 메모리또는 레지스터로 부터 값을 로드하여 정보를 가져오고 이값을 연산한 후, 레지스터 또는 메모리에 다시 저장합니다. 메모리는 어떻게 구성되어 있을까요? 메..
하드웨어 설계자나 소프트웨어 설계자 모두 계층적으로 컴퓨터 시스템을 만들고 있다. 이 방법은 하위 계층의 세부 사항이 상위 계층에서는 보이지 않도록 한다. 이 추상화의 위대한 아이디어는 오늘날의 컴퓨터 시스템을 이해하는 데 필수적이다. 하지만 이것이 설계자는 한 가지 계층만 알면된다는 뜻은 아니다. 아마 가장 중요한 추상화의 예는 하드웨어와 하위 소프트웨어 간의 인터페이스일 것이다. 이것을 명령어 집합 구조(ISA)라 한다. 명령어 집합을 고정 시키면 동일한 소프트웨어를 실행시키면서도 가격과 성능이 서로 다른 여러 가지 구현이 가능하다. 반면에 이 인터페이스의 변경이 필요한 신기술을 받아들이기 어렵게 만드는 역효과도 있다. 실제 프로그램의 실행시간을 척도로 사용하면 믿을 만한 성능 판정 및 보고가 가능하..
이 절에서는 많은 사람들이 공통적으로 잘못 알고 있는 부분에 대해 설명한다. 함정 : 컴퓨터의 한 부분만 개선하고 그 개선된 양에 비례해서 전체 성능이 좋아지리라고 기대하는 것. 어떤 컴퓨터에서 100초 걸리는 프로그램이 있는데, 그중 80초는 곱하기 계산에 소요된다고 가정하자. 이 프로그램이 5배 빠르게 실행되게 하려면 곱셈 속도를 얼마나 개선해야 하는가? 개선 후의 프로그램 실행시간은 Amdahl의 법칙으로 알려진 다음 식으로 표현할 수 있다. 개선 후 실행시간 = (개선에 의해 영향을 받는 실행시간 / 개선의 크기) + 영향을 받지 않는 실행시간 이 문제의 경우 개선 후 실행시간 = 80/n + 20이다. 5배 성능 개선을 원하므로 개선 후 실행시간은 20초가 되어야한다. 20초 = 80/n + 2..
이번 글에서는 Intel Core i7을 예로 들어서 성능 및 전력의 측정 방법을 설명한다. SPEC CPU 벤치마크 실행시키는 프로그램들의 집합이 바로 작업부하(workload)가 될 수 잇다. 따라서 두 컴퓨터 시스템을 평가하려면 두 컴퓨터에서 같은 작업부하의 실행시간만 비교하면된다. 그러나 대부분의 사용자는 이런 상황에 있지 않다. 그러므로 보통은 성능을 측정하기 위해 만들어진 프로그램의 집합, 즉 벤치마크(benchmark)를 사용해서 성능을 평가한다. 벤치마크는 사용자의 실제 작업부하에 대한 성능을 잘 반영할 것으로 생각되는 프로그램들로 구성된 작업부하이다. 앞서 지적한 바와 같이 자주 생기는 일을 빠르게 하기 위해서는 어떤 일이 자주 생기는지를 정확하게 예측할 필요가 있으며ㅡ 따라서 벤치마크는..
전력한계 문제는 마이크로프로세서 설계에 극적인 변화를 가져왔다. 밑의 그림은 데스크톱 마이크로 프로세서의 프로그램 응답시간 개선 추세를 보여준다. 단일프로세서에서 한 프로그램의 응답시간ㅇ르 계속 줄여나가는 대신, 칩에 여러 개의 프로세서를 집적한 마이크로프로세서를 생산하였는데, 이는 응답시간보다는 처리량 개선에 더 효과가 있다. 회사들은 프로세서를 "코어"라고 부르고 그러한 마이크로프로세서를 멀티코어 마이크로프로세서라고 불렀다. 그러므로 "쿼드코어"마이크로프로세서는 4개의 프로세서 즉 4개의 코어를 포함한 칩을 의미한다. 오늘날에는 응답시간을 현저히 개선하려면 다중 프로세서의 장점을 살리도록 프로그램을 재작성해야한다. 나아가 새로운 마이크로프로세서에서 더 빠르게 실행되는 이득을 누리기 위해서는 코어의 수..
어떻게 성능을 측정하는 것이 가장 좋은 방법이며 성능 측정 방법의 한계는 무엇인지를 확실히 이해하는 것이 매우 중요합니다. 성능의 정의 컴퓨터 사용자 개인의 입장에서는 응답시간(response time) : 작업 개시에서 종료까지의 시간 즉, 실행시간(execution time)이 중요할 것이다. 그러나 데이터센터 관리자에게는 처리량(throughput)혹은 대역폭(bandwidth) : 일정시간 동안 처리하는 작업의 양이 더 중요하다. 성능의 측정 시간은 컴퓨터 성능의 가장 기본적인 척도이다. 같은 작업을 최단 시간에 실행하는 컴퓨터가 가장 빠른 컴퓨터이다. 시간은 우리가 재는 방법에 따라 여러 가지로 정의할 수가 있다. 제일 쉽게 생각할 수 있는 것은 응답시간, 경과시간(elapsed time)이라 ..
프로세서와 메모리는 믿기 어려울 정도로 빨리 개선되어 왔습니다. 밑의 표가 그 사실을 보여주고 있습니다. 이러한 기술은 컴퓨터가 어떤 일을 할 수 있으며 얼마나 빨리 발전할 것인가를 결정짓는 요소이기 때문에, 컴퓨터 전문가라면 집적회로에 대한 기초적인 내용을 알고있어야 합니다. 트랜지스터(transistor)는 한 마디로 전기로 제어되는 ON/OFF 스위치입니다. 집적회로는 수십,수백 개의 트랜지스터를 칩 하나에 집적시킨 것입니다. 트랜지스터 숫자가 수백 개에서 수백만 개까지 늘어난 경이적인 증가를 표현하기 위하여 초대규모(very large scale)라는 형용사를 덧붙여 초대규모집적회로(VLSI)라는 용어를 만들었습니다. 어떻게 집적회로를 만드는지를 이해하기 위해 맨 처음부터 시작합시다. 실리콘(si..
" 케이스를 열고 " 이제까지 프로그램 밑에서 동작하는 소프트웨어를 살펴보았으니 컴퓨터 케이스를 열고 그 아래에 있는 하드웨어에 대해 살펴봅시다. 모든 컴퓨터의 하드웨어는 데이터 입력, 데이터 출력, 데이터 처리, 데이터 저장의 네 가지 기본 기능을 수행합니다. 컴퓨터의 주요 구성 요소 중에는 마이크 같이 입력장치(input device)와 스피커 강튼 출력장치(output device)가 있다. 입력장치는 컴퓨터에 데이터를 공급하고, 출력장치는 사용자에게 계산 결과를 보여 주는 역할을 한다. ★ 컴퓨터의 고전적 구성 요소 다섯 가지는 입력, 출력, 메모리, 데이터패스(datapath), 제어유닛이다. 이 중 뒤의 2개를 합쳐서 프로세서라고 부르기도 한다. 밑의 그림은 컴퓨터의 표준 구성을 보여 주는 그..