명령어 사이클이란 무엇일까?

박승우·2024년 6월 30일

자 예순 여섯 번째 키워드인 '명령어 사이클'을 알아 보았다.

메모리 관련 시리즈가 끝나고 새로운 키워드에 접어들어 상세하게 알아보았다.

명령어 사이클이 뭐에요?

명령어 사이클(command cycle)은 컴퓨터 프로세서가 명령어를 처리하는 과정에서 거치는 일련의 단계들을 말한다.

명령어 인출(Fetch) 단계

  • 프로그램 카운터(PC): 현재 실행할 명령어의 메모리 주소를 가지고 있다.
  • 메모리 접근: PC에 저장된 주소를 사용하여 메모리에서 명령어를 읽어온다.
  • 명령어 레지스터(IR): 인출된 명령어를 저장한다.
  • PC 증가: 다음 명령어를 가리키도록 PC를 증가시킨다. 일반적으로 PC는 명령어의 길이만큼 증가한다.

명령어 해독(Decode) 단계

  • 명령어 해독: IR에 저장된 명령어를 해독하여 오퍼코드(opcode)와 피연산자(operand)를 추출한다.
  • 제어 신호 생성: 명령어를 해독한 결과에 따라 제어 신호를 생성하여 CPU의 다른 부분들이 어떤 동작을 수행해야 하는지 결정한다.

실행(Execute) 단계

  • 연산 수행: 해독된 명령어에 따라 산술 연산, 논리 연산, 메모리 접근, 입출력 작업 등을 수행한다.
  • ALU 연산: 산술 논리 연산 장치(ALU)를 사용하여 연산을 수행한다.
  • 메모리 접근: 필요한 경우 메모리에서 데이터를 읽거나 쓴다.
  • 레지스터 작업: 레지스터 파일에서 데이터를 읽거나 쓴다.

결과 저장(Store) 단계

  • 결과 저장: 실행 결과를 목적지 레지스터나 메모리에 저장한다.

  • 상태 레지스터 갱신: 연산 결과에 따라 상태 레지스터(플래그 레지스터)를 갱신한다. 예를 들어, 결과가 0인지, 음수인지, 오버플로우가 발생했는지 등을 기록한다.

  • 갱신(Update) 단계
    프로그램 카운터 갱신 = 조건부 분기 명령어인 경우, 조건을 평가하여 PC를 새로운 주소로 설정한다. 그렇지 않으면 PC는 다음 명령어를 가리키도록 증가한다.

명령어 사이클의 세부 단계

  1. 인출(Fetch)
    PC → MAR (메모리 주소 레지스터)
    메모리 읽기 제어 신호
    메모리 → MBR (메모리 버퍼 레지스터)
    MBR → IR (명령어 레지스터)

  2. 해독(Decode)
    IR의 오퍼코드 부분 해독
    피연산자 주소 계산
    필요한 레지스터 읽기

  3. 실행(Execute)
    ALU를 통한 연산 수행
    메모리 접근 제어 신호 생성
    I/O 장치 제어 신호 생성

  4. 결과 저장(Store)
    ALU 결과 → 레지스터/메모리
    플래그 상태 갱신

  5. 갱신(Update)
    PC 조건부 갱신 (분기 명령어인 경우)
    다음 명령어를 위한 준비

명령어 파이프라인 (Instruction Pipeline)

현재, CPU에서는 이러한 명령어 사이클이 동시에 여러 단계에서 병렬로 실행될 수 있도록 파이프라인 구조를 갖추고 있다. 예를 들어, 한 명령어가 인출 단계에 있을 때, 이전 명령어는 해독 단계에 있을 수 있다.

  • 파이프라인의 각 단계
    1. IF (Instruction Fetch): 명령어 인출
    2. ID (Instruction Decode): 명령어 해독
    3. EX (Execute): 명령어 실행
    4. MEM (Memory Access): 메모리 접근
    5. WB (Write Back): 결과 저장

파이프라인 구조는 명령어 처리의 효율성을 극대화하지만, 명령어 의존성, 분기 명령어 등에 의해 성능이 저하될 수 있다. 이를 해결하기 위해 다양한 최적화 기법들이 사용된다고 한다.

결론 - 느낀 점

기사를 공부하면서 배웠던 내용중 일부 내용이 나와서 접근이 쉬웠다. 하지만 이런 파이프라인을 가지고 흐름을 가지는것을 깊숙하게 있었던 기억을 끄집어 내는 기분이었다.

profile
게임을 좋아하는 사람 입니다!

0개의 댓글