티스토리 뷰


이 포스트는 「"Computer Organization and Design -The hardware / software interface"

by Patterson and Hennessy, 5th edition, 2013.」 을 기반으로 작성했습니다.


What we will learn?

  • 어떻게 프로그램이 machine language로 번역되는지 (+ 어떻게 하드웨어는 프로그램을 실행하는지)
  • Hardware / Software interface
  • 프로그램 성능을 결정하는 요인 (+어떻게 성능향상을 할 것인가)
  • 하드웨어 성능 향상의 요인
  • pipelining과 parallel processing
  • 메모리가 어떻게 동작하는가

결과적으로 computer/CPU가 어떻게 동작하는지 컴퓨터 구조 강의를 통해 배우게 될 것이다.


그림 1.1

프로그램 은 [그림 1.1]과 같이 Applications software, Systems software, hardware로 크게 세 가지로 구성되어 있다. 

Application software는 HLL(High Level Language)로 작성된 소프트 웨어를 말한다. 우리가 흔히 사용하는 C, JAVA, Python 등으로 작성된 소프트웨어다.
Systems software에는 Compiler와 OS가 존재한다. Compiler는 HLL로 작성된 코드를 machine code로 번역해 주는 역할을 하며 OS는 input/output 관리, 메모리와 저장공간 관리, 스케쥴링 등의 작업을 수행한다.
Hardware는 processor, memory, I/O controller 등을 말한다.

HLL(High Level Language)에는 종류가 매우 다양하다. 우리는 프로그램의 목적에 따라 사용언어를 선택할 것이며 HLL은 사용자에게 Productivity와 portability를 제공한다. 즉 HLL은 인간이 읽고 쓸 수 있으며 어떤 CPU건 OS건 동일하게 사용이 가능하다. (EX. C로 작성된 코드는 Window에서나 Mac에서나 Linux에서나 동일하게 사용이 가능하다.)

HLL로 작성된 코드를 Compile 하게 되면 Assembly language로 번역이 된다. 어셈블리 언어는 쉽게 말하면 문자로 명령들을 담고 있다고 생각하면 된다. 예를 들어 HLL로 'A+B'라는 코드를 작성 후 컴파일하게 된다면 어셈블리 언어인 'ADD A, B'로 번역이 될 것이다. 어셈블리 언어까지는 인간이 읽고 쓸 수 있다.

어셈블리 언어를 실행시키기 위해서는 hardware가 이해할 수 있는 machine language로 바꿔야 한다. 이 작업을 assemble이라고 한다. 어셈블리 언어와 기계어는 1대 1 매핑이 된다.(어셈 100줄 = 기계어 100줄) 
machine language는 이진수(0,1)로 이루어져 있으며 인간이 읽고 쓰는 것이 불가능하다. 기계어는 데이터와 명령을 가지고 있다.

결과적으로 HLL에서 machine language로 바뀌는 과정은 아래 그림과 같다.

그림 1.2

 

위 과정을 요약하자면 HLL Code -> Assembly Code -> Machine Code가 된다.
다만 HLL은 어떤 CPU를 사용하건 동일하지만 어셈블리 언어와 기계어는 CPU의 제조사에 따라 다르게 번역될 수 있다. 왜냐하면 CPU를 제작할 때 컴파일러도 함께 제작하기 때문이다. 따라서 Intel CPU에서 번역한 어셈블리 언어와 AMD CPU에서 번역한 어셈블리 언어는 다를 수 있다. 
(다만 JAVA는 C와 작동 방식이 다르다. JAVA는 제조사 별로 JVM이 다르다.)


컴퓨터의 구성요소는 크게 5가지로 구분된다.

  • Datapath & Control
  • Memory
  • input/output

위 구성요소는 어떠한 컴퓨터에도(데스크톱, 서버, 임베디드 등) 동일하게 존재한다.

그림 1.3

 

[그림 1.3]에서 Interface의 부분이 SW와 HW를 경계 짓는 부분이다. 우리는 이 Interface를 통하여 실제 컴퓨터 내부에서 어떻게 프로그램이 동작하는지 알지 못해도 프로그램을 하드웨어에서 실행할 수 있게 한다.
우리가 프로그램을 제작할 때마다 hardware의 요소들을 파악하고 고려해야 한다면 프로그램을 하나 제작하는 것이 굉장히 어려울 것이다. 그러나 우리는 제공되는 interface를 통하여 더욱 쉽게 제작할 수 있다.

Interface에는 대표적으로 Instruction Set Architecture(ISA)가 존재한다. 
ISA는 하드웨어와 Low-level software 간의 interface 역할을 하며 동일한 ISA내에서 다양한 프로그램을 제작할 수 있다.
즉, ISA가 같다면 하드웨어의 요소(트랜지스터의 개수, 회로 등)가 변하더라도 개발자는 그런 것들을 고려하지 않고 프로그램 제작이 가능하다. 다만, 정착된 ISA로 인하여 새로운 기술의 발전을 막을 수 있다는 단점이 있다.


그림 1.4

[그림 1.4]에 나온 것처럼 4개의 비행기가 존재할 때 가장 우수한 성능의 비행기는 어떤 것일까?

우리는 이 질문에 대답을 하려면 가장 먼저 우수한 성능이 무엇인지에 대해 정의를 내려야 할 것이다.
누군가는 승객 정원이 성능의 기준일 수 있고, 누군가는 비행기의 속도가 성능의 기준일 수 있다.

예를 들어 성능의 기준을 스피드로 잡았다고 하자. 그러면 speed가 가장 높은 BAC/Sud Concorde가 가장 우수한 성능의 비행기 일까? 이것 역시 1명당 스피드로 계산할지, 수용 가능 인원 당 스피드로 계산할지 다시 정의를 내려야 한다.
만약 450명의 승객을 이동해야 한다면 BAC/Sud Concrde보단 Boeing 747이 더 우수한 성능을 낼 것이다.

이처럼 컴퓨터의 성능 역시 다양한 관점에서 정의가 가능하다.
우리는 크게 Throughput vs Respose Time vs something else로 살펴볼 것이다.

Response time은 '하나의 작업에 소요되는 시간'을 말한다.
Throughput은 '작업의 개수/작업당 소요시간'을 말한다. 즉, 한 번에 처리할 수 있는 작업의 양이 많고 처리 속도가 빠르다면 Throughput은 증가하게 될 것이다.

Response time과 Throughput에 대한 이해를 바탕으로 아래 질문에 답을 해보자.

그림 1.5

1. 컴퓨터의 프로세서를 더욱 빠른 버전으로 교체할 때 response time과 throughput은 어떻게 될까?
2. 프로세서를 더 추가하면 어떻게 될까?

1번. response time이 줄어들며(속도가 빨라짐) 그에 따라 throughput은 증가하게 된다. 즉 둘 다 성능이 향상할 것이다.
2번. response time은 그대로이지만 동시에 처리할 수 있는 작업의 개수가 많아지므로 throughput은 증가할 것이다.
그러나 이것 역시 다르게 생각하면 우리가 하나의 큰 작업을 나눠서 처리할 수 있다면 response time 역시 줄어드게 될 것이다. 따라서 실제 컴퓨터 시스템에서는 1,2번의 경우 둘 다 성능을 향상할 것이다. (자세한 설명은 아래 그림 참고)

그림 1.6

 

+컴퓨터 성능에 영향을 미치는 요인

  • 알고리즘 (연산 횟수를 결정한다.)
  • 프로그램 언어, 컴파일러, Architecture (각 연산당 실행되는 명령의 수 결정)
  • 프로세서, 메모리 시스템 (명령들이 실행되는 속도 결정)
  • I/O 시스템 (I/O 연산이 실행되는 속도)

Lecture Note #2에선 성능 비교방법과 CPU에 대해 살펴볼 것이다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함