본문 바로가기
Computer Science/Computer Architecture

Program Execution

by Gofo 2021. 3. 18.

32-bit System의 구조

아래는 간단하게 나타낸 processor와 memory의 구조이다.

 

CPU(processor)에는 ALU와 여러 범용 레지스터, PC, IR 등이 존재한다.

  • ALU
    • Arithmetic and Logic Unit
    • 산술과 논리 연산을 담당한다.
  • 범용 레지스터 in 32-bit
    • R0 ~ R31까지가 그것이다.
    • 연산 중 발생한 데이터를 임시로 저장한다.
  • PC
    • Program Counter
    • 다음에 실행할 instruction의 위치를 담고 있다.
    • 전원이 인가되면 초기화되는데, 여기서는 편의상 0으로 초기화 됨을 나타내었다.
  • IR
    • Instruction Register
    • 현재 실행되거나 디코딩되고 있는 명령을 보관하는 특수 목적 레지스터이다.

 

Memory에는 program과 data가 저장되어 있고, instruction과 data는 32bit(4byte) binary로 이루어져있다. 이를 RISC style이라 한다.

Memory에 저장되어있는 data들의 위치를 나타내기 위해서 address를 사용하는데, 32bit system에서는 32bit address을 사용한다.

Binary로 이루어져있지만 인지의 편의성을 위해 hex와 assembly code로 나타내었다.

32-bit system의 구조 추상화

 


Program Execution

프로그램의 실행은 instruction의 실행의 연속이다.

Instruction의 실행은 3단계를 통해 이루어진다.

  • Fetch : 메모리에 가서 instruction 가져온다.
  • Decode : 가져온 instruction을 해독한다.
  • Execute : 해독한 instruction을 수행한다.

결국 Computer는 Fetch-Decode-Execute machine으로 볼 수 있다.

 

Instruction의 실행은 다른 unit들과의 동기를 맞추기 위해 한 clock 안에서 수행이 완료된다.

Instruction이 끝나면 register의 상태는 변한다.

 


1. Instruction Fetch

Instruction을 실행하기 위한 첫 단계로, 메모리에 가서 실행할 instruction의 내용을 가져온다.

  1. Processor가 실행할 instruction의 주소를 memory로 read를 요청한다.
    실행할 insturction의 주소는 PC(Program Counter)에 저장되어있다.
  2. Memory는 해당 주소에 있는 instruction을 반환한다.
  3. 읽은 instruction의 내용을 IR(Instruction Register)에 저장하고,
    PC를 다음에 실행할 instruction 주소로 바꿔준다.(PC을 증가시킨다.)

 


2. Instruction Decode

IR에 저장되어있는 읽어온 instrcution을 해독(decode)하는 과정이다.

Processor의 control logic에서 수행한다.

 

예제에서 읽어온 <pre>LD R0, R31(+0)</pre>은 다음과 같이 decode된다.

<pre>LD, R0, R31(0) // 메모리에서 instruction을 load 한다.

      R0 ← M[ R31 + 0]

      R0 ← M[ 1000 0000]</pre>

=> 해석 결과 : "memory address 1000 0000을 읽고, R0 register에 복사한다."

 


3. Instruction Execute

Decoded된 instruction을 수행하는 과정이다.

 

 


Instruction 실행 완료 후

Instruction이 실행 완료 되면 register의 값이 변화한다.

  • PC : 0000 0000 → 0000 0004
  • R2 ← 1000 0000

 


이후 instruction 실행

앞과 마찬가지로 Fetch - Decode - Execute의 단계를 거치며 실행하게 된다.

 

  • <pre>LD R1, R31(+4)</pre>
    • address (R31 + 4)의 값을 load해서 R1에 넣는다.

 

  • <pre>ADD R2. R0, R1</pre>
    • (R0) + (R1)의 값을 R2에 넣는다.

 

  • <pre>ST R2, R31(+8)</pre>
    • (R31 + 8)의 값을 불러와서 R2에 담겨있는 주소에 저장한다.(Memory store)

 

댓글