The instruction cycle (also known as the fetch–decode–execute cycle, or simply the fetch-execute cycle) is the cycle that the central processing unit (CPU) follows from boot-up until the computer has shut down in order to process instructions. It is composed of three main stages: the fetch stage, the decode stage, and the execute stage. 

In simpler CPUs, the instruction cycle is executed sequentially, each instruction being processed before the next one is started. In most modern CPUs, the instruction cycles are instead executed concurrently, and often in parallel, through an instruction pipeline: the next instruction starts being processed before the previous instruction has finished, which is possible because the cycle is broken up into separate steps.

Role of components
The program counter (PC) is a special register that holds the memory address of the next instruction to be executed. During the fetch stage, the address stored in the PC is copied into the memory address register (MAR) and then the PC is incremented in order to "point" to the memory address of the next instruction to be executed. The CPU then takes the instruction at the memory address described by the MAR and copies it into the memory data register (MDR). The MDR also acts as a two-way register that holds data fetched from memory or data waiting to be stored in memory (it is also known as the memory buffer register (MBR) because of this). Eventually, the instruction in the MDR is copied into the current instruction register (CIR) which acts as a temporary holding ground for the instruction that has just been fetched from memory.

During the decode stage, the control unit (CU) will decode the instruction in the CIR. The CU then sends signals to other components within the CPU, such as the arithmetic logic unit (ALU) and the floating point unit (FPU). The ALU performs arithmetic operations such as addition and subtraction and also multiplication via repeated addition and division via repeated subtraction. It also performs logic operations such as AND, OR, NOT, and binary shifts as well. The FPU is reserved for performing floating-point operations.

Summary of stages

Each computer's CPU can have different cycles based on different instruction sets, but will be similar to the following cycle:

 Fetch stage: The next instruction is fetched from the memory address that is currently stored in the program counter and stored into the instruction register. At the end of the fetch operation, the PC points to the next instruction that will be read at the next cycle.
 Decode stage: During this stage, the encoded instruction presented in the instruction register is interpreted by the decoder.
Read the effective address: In the case of a memory instruction (direct or indirect), the execution phase will be during the next clock pulse. If the instruction has an indirect address, the effective address is read from main memory, and any required data is fetched from main memory to be processed and then placed into data registers (clock pulse: T3). If the instruction is direct, nothing is done during this clock pulse. If this is an I/O instruction or a register instruction, the operation is performed during the clock pulse.
 Execute stage: The control unit of the CPU passes the decoded information as a sequence of control signals to the relevant functional units of the CPU to perform the actions required by the instruction, such as reading values from registers, passing them to the ALU to perform mathematical or logic functions on them, and writing the result back to a register. If the ALU is involved, it sends a condition signal back to the CU. The result generated by the operation is stored in the main memory or sent to an output device. Based on the feedback from the ALU, the PC may be updated to a different address from which the next instruction will be fetched.
Repeat cycle

In addition, on most processors interrupts can occur. This will cause the CPU to jump to an interrupt service routine, execute that and then return. In some cases an instruction can be interrupted in the middle, the instruction will have no effect, but will be re-executed after return from the interrupt.

Initiation
The cycle begins as soon as power is applied to the system, with an initial PC value that is predefined by the system's architecture (for instance, in Intel IA-32 CPUs, the predefined PC value is 0xfffffff0). Typically, this address points to a set of instructions in read-only memory (ROM), which begins the process of loading (or booting) the operating system.

Fetch stage
The fetch step is the same for each instruction:
 The CPU sends the contents of the PC to the MAR and sends a read command on the control bus
 In response to the read command (with address equal to PC), the memory returns the data stored at the memory location indicated by the PC on the data bus
 The CPU copies the data from the data bus into its MDR (also known as MBR; see Role of components section above)
 A fraction of a second later, the CPU copies the data from the MDR to the instruction register for instruction decoding
 The PC is incremented so that it points to the next instruction. This step prepares the CPU for the next cycle.

The control unit fetches the instruction's address from the memory unit.

Decode stage
The decoding process allows the processor to determine what instruction is to be performed so that the CPU can tell how many operands it needs to fetch in order to perform the instruction. The opcode fetched from the memory is decoded for the next steps and moved to the appropriate registers. The decoding is typically performed by binary decoders in the CPU's control unit.

Reading the effective address
This step evaluates which type of operation is to be performed. If it is a memory operation, the computer checks whether it's a direct or indirect memory operation:
 Direct memory operation – Nothing is done.
 Indirect memory operation – The effective address is read from memory.

If it is an I/O or register instruction, the computer checks its type and executes the instruction.

Execute stage

The CPU sends the decoded instruction as a set of control signals to the corresponding computer components. If the instruction involves arithmetic or logic, the ALU is utilized. This is the only stage of the instruction cycle that is useful from the perspective of the end-user. Everything else is overhead required to make the execute step happen.

See also
 Time slice, unit of operating system scheduling
 Classic RISC pipeline
 Cycles per instruction

References

Instruction processing
명령 주기(命令週期, )는 마이크로프로세서(CPU)가 메모리로부터 프로그램 된 한개의 기계어 명령어를 가져와 어떠한 동작을 요구하는지를 결정하고 명령어가 요구하는 동작들을 수행하는 과정이다. 컴퓨터의 기본적인 동작 순환이다. 한개의 기계어 명령어가 완료되면 다음 메모리의 기계어가 수행되므로 중앙 처리 장치(CPU)는 시동에서부터 컴퓨터가 꺼질 때까지 이러한 순환을 계속 되풀이한다. 따라서 이를 CPU 사이클이라고도 부른다. CPU의 동작을 하는 한 명령 주기는 계속 반복되어 전력을 소비한다. 전력소모를 줄이거나 기타 CPU를 멈출 필요가 있다면, 아이들모드(idle mode) 또는 슬립모드(sleep mode) 기계어 명령을 실행하면 CPU는 인터럽트가 들어올 때까지 멈추어 명령 주기를 멈추게 할 수 있다.

기계어 명령어 하나를 실행하기 위해 최대 4개의 단계가 필요하며, 각 단계는 CPU의 클럭 신호에 동기되어 동작한다. 각 단계는 각각 몇개의 클럭 펄스가 필요하며, 각 마이크로프로세서마다 다르다. 하나의 명령어를 실행하기 위해 단계적으로 나뉜 과정이 한 사이클이 된다. 각 단계는 마이크로코드의 프로그램과 제어회로인 마이크로시퀀서(microsequencer)에 의해 실행된다. RISC는 각 단계가 단순화되어 있지만, 블럭 전송 명령어(메모리 블럭 전송)이 존재하는 CPU가 있으므로 마지막 사이클에서 다량의 데이터 전송이 되는 경우도 있다. 이런 경우 많은 클럭이 필요하다. CISC에는 없는 기능이다.

초기의 마이크로프로세서(4004, 8080, Z80, 6800, ...)는 한개의 기계어 명령어의 명령 주기가 완료될 때까지 다음 명령을 읽지 않았다. 그러나 발전과정에서 속도를 높이기 위해 한개의 명령어가 완료되기 전에 다음 명령어를 읽는 프리페치(pre-fetch)을 하고 연속적으로 요구동작을 하도록 동작한다. 보통 메모리의 기계어 코드가 끝나면 다음 번지의 메모리 기계어 명령어가 실행되므로 PC레지스터(Program Counter,또는 IP 레지스터라고도 함)를 사용하여 다음 명령어를 미리 읽는다. 그러나 조건 점프명령(인텔 x86의 JEQ, ARM의 BEQ 명령어)은 다음 주소로 점프하지 않을 수도 있으므로 다시 페치해야 한다. 인텔의 80486, ARM 등의 CPU에서 프리페치를 사용한다.

사용되는 회로 

명령이 순환하는 동안 CPU에 사용되는 회로는 다음과 같다:
 프로그램 계수기 (PC) - 다음에 실행할 명령어에 대한 메모리 주소를 추적하는 증분 계수기이다.
 기억 장치 주소 레지스터 (MAR) - 다음에 실행할 명령어의 메모리에 있는 주소를 보관한다.
 기억 장치 데이터 레지스터 (MDR) - 메모리로부터 페치(fetch)되어 cpu가 처리할 준비가 된 데이터나 메모리에 저장되어 대기 중인 데이터를 보관하는 양방향 레지스터이다.
 현재 명령어 레지스터 (CIR) - 메모리로부터 페치(fetch)되는 명령어를 일시적으로 보관하는 영역이다.
 제어 장치 (CU) - 데이터 소스 레지스터와 특별한 산술 명령과 같은 기계 자원을 선택하여 CIR의 프로그램 명령을 디코딩하고 이러한 자원의 활성화를 도와 준다.
 산술 논리 장치 (ALU) - 수치 및 논리 연산을 수행한다.

명령 주기 

명령 주기는 명령어에 따라 특성이 다르므로 4개의 명령어 주기를 다 필요하지 않는 경우도 있다. 초기의 CISC 마이크로프로세서는 다음의 명령주기가 확연히 구분된다. RISC로 발달하면서 명령어의 단순화하면서 각 사이클을 단순화하는 경향이 있다.

각 컴퓨터의 CPU는 서로 다른 명령어 집합에 기반하여 각기 다른 사이클을 지니고 있으나 다음과 비슷한 순환을 가진다 (이 주기는 계속 반복된다):
 명령어 페치
첫 번째 단계인 명령어 페치 단계를 페치 사이클(fetch cycle)로 부른다. 이 단계는 각 명령에 동일한 작업을 수행한다. 페치 사이클은 opcode를 포함하는 명령어(instruction word)로부터 명령(instruction)을 처리한다.
 명령어 디코딩
두 번째 단계는 디코딩으로 부른다. 메모리로부터 페치된 opcode는 다음 단계를 위해 디코딩되며 적절한 레지스터로 이동된다.
 유효한 주소 읽기
세 번째 단계인 유효한 주소 읽기는 어떠한 명령인지를 결정하는 단계이다. 이것이 메모리 명령이라면 이 컴퓨터 단계에서 직접 메모리 명령인지 간접 메모리 명령인지를 확인한다:
 직접 메모리 명령 - 아무것도 처리하지 않는다.
 간접 메모리 명령 - 유효 주소를 메모리로부터 읽어들인다.
이것이 입출력 명령이나 레지스터 명령이라면 컴퓨터는 이에 대한 종류를 확인하고 명령을 실행한다.
 명령 실행
네 번째 단계는 실행 사이클이다. 이 단계는 각 명령에 따라 변동된다.
실행 사이클의 첫 번째 단계는 프로세스-메모리(Process-Memory)이다. 데이터는 CPU와 입출력 모듈 사이를 오고간다.
그 다음 단계는 데이터-프로세싱(Data-Processing)이며 데이터 참조에서 논리 명령뿐 아니라 수치 명령도 이용한다. 그 다음 단계는 중심 변경(Central alteration)으로, 점프(jump) 명령과 같은 명령의 연속이다. 마지막 단계는 다른 모든 단계에서 나온 모든 명령을 아우른다.

같이 보기 
 중앙 처리 장치(CPU)
 마이크로프로세서
 마이크로아키텍처
 명령어 집합
 액세스

각주

참조 
 

명령어 처리