[컴퓨터 구조] CPU / 명령어 사이클( Instruction Cycle )

2024. 4. 18. 23:18Computer Science/컴퓨터 구조

1) CPU란

Central Processing Unit, 중앙 처리 장치를 의미하며 내부적으로는 제어 장치, ALU, 레지스터로 구성되어 있습니다. 컴퓨터의 두뇌 역할을 맡아 명령어를 실행시킵니다.

 

사람의 편리성을 위해 프로그램이 소스코드로 작성되고, 이러한 소스코드는 명령어들의 집합으로 이루어집니다. 메모리에서 명령어를 가져오고 CPU에서 처리한 후 결과를 다시 메모리에 저장하는 방식으로 동작되죠. 이 과정을 빠르게 반복하면 프로그램을 '실행'한다고 표현할 수 있겠네요.  CPU 의 속도를 결정짓는 요인을 clock이라고 합니다. 이 clock은 진동을 발생시키는 칩에 의해 생성되며 Hz라는 단위를 사용하며, 1초당 발생하는 진동수를 의미합니다. 한번의 진동은 하나의 명령어를 실행시키는 Trigger 역할을 하기 때문에, Hz가 높을수록 빠르게 명령어들을 처리할 수 있겠죠? 따라서 CPU의 성능을 따질 때 이러한 진동수(속도)가 주인공이 됩니다.

 

2) 구성 요소

제어 장치( Control Unit )

제어 장치는 명령어를 해독하고 이를 실행하기 위한 제어 신호를 발생시켜 데이터 흐름을 제어합니다. CPU 내부의 모든 동작은 제어 신호에 의해 처리된다고 해도 과언이 아니죠.

 

레지스터( Register )

CPU 내부에 있는 전용 메모리라고 생각하시면 됩니다. 매우 작은 크기를 가지며, 연산할 값이나 명령어 등 필요한 정보들은 잠깐 저장하는 데 사용하기 때문입니다. 제어 신호를 통해 PC 레지스터에 다음 메모리 주소를 읽고 그곳에 있는 명령어를 레지스터에 저장하거나 ALU의 연산결과를 저장하는 등 필요에 따라 다양한 레지스터가 존재합니다.

 

주기억장치(메모리)가 있는데 왜 레지스터가 또 필요하냐구요? 그것은 메모리에서 명령어를 꺼내올 때 소요되는 물리적인 시간이 상대적으로 크기 때문입니다. 따라서, 바로 처리할 명령어를 CPU 내부의 레지스터에 저장함으로써 빠르게 해결할 수 있는거죠. 

 

대표적인 레지스터를 4가지만 알아보겠습니다.

Program Counter (PC) 다음에 실행할 명령어가 들어있는 메모리 주소를 저장
Memory Address Register (MAR) PC로부터 전달받은 메모리 주소 저장, 현재 실행중인 명령어나 데이터가 저장된 메모리 주소
Memory Buffer Register (MBR) 데이터 또는 명령어를 메모리로부터 가져오거나 다시 옮겨갈 때 일시적으로 저장하는 레지스터, 기억레지스터라고도 불림
Instruction Register (IR)  명령어가 저장되는 레지스터 

 

ALU( Arithmatic and Logical Unit )

산술 연산과 논리 연산을 담당하는 산술논리연산장치 입니다. 연산을 위한 가산기, 부호기 등 논리회로로 구성되어 있습니다. 제어 신호에 의해 데이터 레지스터에 저장된 데이터들을 산술 연산 또는 논리 연산하고 그 결과를 누산기 레지스터에 저장한다. 

 

 

2) CPU 동작 과정

위에서 CPU는 명령어를 하나씩 처리해가면서 프로그램을 실행시킨다고 했습니다. 그렇다면 명령어를 처리하는 과정은 어떻게 되는지 조금 더 상세하게 알아보겠습니다.

 

우선 명령어를 처리하는 과정은 인출(Fetch) 사이클과 실행(Execution) 사이클로 나눌 수 있습니다.

명령어 Fetch Cycle

t0 : PC -> MAR, 다음 접근할 메모리 주소를 가져옵니다.

t1 : MAR -> MBR / PC = PC + 1, MAR에 저장된 주소에 접근하여 명령어를 MBR에 저장하고 PC를 +1 증가시킵니다.

t2 : MBR -> IR, 불러온 명령어를 IR에 저장합니다.

 

명령어 Execution cycle

1. 데이터 Load

t0 : IR -> MAR, IR의 operand에 있는 주소 값을 MAR에 저장

t1 : MAR -> MBR, 불러온 데이터를 MBR에 저장

t2 : MBR -> AC, ALU 내부 레지스터인 AC에 저장

 

2. 데이터 Store 

t0 : IR -> MAR, 저장할 주소를 MAR에 저장

t1 : AC -> MBR, 연산 결과를 MBR에 저장

t2 : MBR -> MAR, MBR에 저장된 값을 MAR에 저장된 주소에 저장

 

3. 데이터 Add

t0 : IR -> MAR, 더할 데이터가 저장된 주소 저장

t1 : MAR -> MBR, 해당 데이터 MBR에 저장

t2 : AC + MBR -> AC, 기존 데이터가 저장된 AC와 더할 데이터가 저장된 MBR을 더하고 AC에 업데이트

 

이외에도 operand 가 가리키는 addr의 명령어로 jump하여 다른 프로그램의 명령어를 실행하는 jump cycle과 프로그램 실행 중간에 중단시키는 인터럽트 사이클 등이 있습니다.

 

각각의 시간 타임은 하나의 clock을 의미합니다. 즉 위의 예시에선 인출과 Execution cycle이 각각 3개의 clocks을 소모한다는 것을 의미합니다.