2014년 3월 21일 금요일

CPU는 어떻게 동작하는가?(How does the CPU work?)

CPU가 어떻게 생겼는지 좀 이해들이 되었는지 모르겠다. 단순하게 설명하기엔 너무 복잡하고, 복잡하게 설명하면 알아먹기 어려운 것이 CPU의 구성이 아닌가 싶다. 다양한 내부 구성요소를 갖고 있는 CPU는 어떻게 동작하는 것일까?

CPU가 동작한 다는 것은 우리가 지시한 명령어와 데이터의 집합, 즉, 프로그램을 실행시킨다는 것을의미한다. 그렇다면 CPU가 동작을 하기위해서는 명령어나 데이터를 프로그램으로부터 가져와야한다. 프로그램은 컴퓨터에서 실행될 때 주메모리에 적재되어 실행되므로, CPU는 주메모리에 적재되어있는 프로그램에서 명령어나 데이터를 가져와서 CPU가 이해할 수 있는 형태로 해석하고, 해당 동작을 실행하여 생성된 결과를 저장함으로써 하나의  명령어에 대한 동작 사이클(머신사이클: machine cycle)을 마무리 한다. 이러한 동작을 반복적으로 수행함으로서 프로그램에서 지정한 작업을 처리할 수 있다. 이러한 과정을 순서대로 정리하면 다음과 같다.

  1. Fetch: 메모리에서 명령어를 가져오는 단계
  2. Decode: 명령어를 ALU나 FPU가 이해할 수 있도록 해독하는 단계
  3. Execution: ALU나 FPU가 주어진 연산을 처리하는 단계
  4. Store: 연산처리 결과를 메모리에 저장하는 단계


이렇게 순차적으로 머신사이클이 반복된다면 하나의 명령을 처리하는데 기본적으로 4단계가 걸리는 것이며, 하나의 코어만 존재하는 CPU는 다음 명령을 수행하기 위해서는 4단계가 지나가길 기다려야 한다. 그렇지만 오늘날과 같이 멀티코어를 탑재하고 있는 CPU는 동시에 여러개의 명령어를 처리할 수 있기 때문에 메모리로부터 명령어를 가져오는 효과적인 방식이 필요한데, 대표적으로 파이프라이닝(Pipelining) 방식이 널리 사용된다.

아래 그림은 파이프라이닝이 없는 단일 코어 CPU의 명령어 실행동작과 파이프라이닝으로 동작하는 쿼드코어 CPU의 명령어 실행 동작을 나타내고 있다.

출처: Understanding Computer Today and Tomorrow
이렇게 파이프라이닝과 같은 방식으로 머신사이클을 처리하는 이유는 여러개의 코어가 동시에 동작하여 작업을 재빨리 처리하도록 만드는 것이다. 하지만 여러개의 코어에서 동시에 작업을 처리하기 위해서는 프로그램을 만들때 여러개의 작은단위의 작업으로 나눠서 동시에 처리할 수 있도록 만들어줘야 한다. 때로는 반드시 순차적으로 처리해야하는 작업이 있다면, 순차적인 작업이 처리될 동안 다른 코어들은 작업진행을 못하고 쉴 수 밖에 없을 것이다.
  • 파이프라인은 우리가 바다에서 파도타기를 하는 사람들이 파도가 말려서 마치 파이프처럼 생긴 곳을 멋지게 서핑하면서 빠져나오는 것처럼 명령어를 수행하는 머신사이클이 서로 말려서 처리되는 것과 같은 것이다. 




댓글 없음:

댓글 쓰기