맨위로가기

명령 주기

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

명령 주기(instruction cycle)는 중앙 처리 장치(CPU)가 명령을 실행하기 위해 수행하는 일련의 단계를 의미한다. CPU는 프로그램 카운터, 메모리 주소 레지스터, 메모리 데이터 레지스터, 명령어 레지스터, 제어 장치, 산술 논리 장치, 부동 소수점 장치 등의 회로를 사용하여 명령을 처리한다. 명령 주기는 일반적으로 인출, 해독, 유효 주소 계산, 실행 단계로 구성되며, 인터럽트가 발생할 수도 있다. 초기화 단계에서는 시스템 전원이 켜지면 프로그램 카운터가 초기화되어 운영 체제를 로드하는 과정을 시작한다.

더 읽어볼만한 페이지

  • 명령어 처리 - 멀티스레딩
    멀티스레딩은 프로세스 내에서 여러 스레드를 동시 실행하여 처리 능력을 향상시키는 기술로, 응답성 향상과 자원 공유 등의 장점이 있지만, 자원 간섭과 소프트웨어 복잡성 증가 등의 단점도 존재하며, 다양한 모델과 구현 방식, 스레드 스케줄러, 가상 머신 활성화 가능성 등을 고려해야 한다.
  • 명령어 처리 - 마이크로아키텍처
    마이크로아키텍처는 명령어 집합 아키텍처를 구현하는 프로세서의 구성 요소, 상호 연결, 작동 방식을 포괄하는 개념으로, 동일 ISA에서 반도체 기술 발전과 새로운 구조 및 회로를 통해 성능 향상을 가능하게 한다.
명령 주기
기본 정보
종류작동 주기
다른 이름인출-해독-실행 주기
개요
구성 요소명령 인출
디코딩
실행
필요에 따라 인터럽트
주기 단계
1. 명령 인출 주기PC → MAR
MAR → 메모리
메모리 → MDR
MDR → CIR
PC + 1
2. 명령 디코딩 주기CIR → CU
3. 실행 주기CU → ALU
구성 요소 설명
PC프로그램 카운터
MAR메모리 주소 레지스터
MDR메모리 데이터 레지스터
CIR현재 명령 레지스터
CU제어 장치
ALU산술 논리 장치

2. 사용되는 회로

명령이 순환하는 동안 CPU에 사용되는 회로는 다음과 같다.


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

3. 명령어 주기

명령어 주기는 컴퓨터 CPU가 한 번의 명령을 처리하는 과정을 말한다. 이 과정은 여러 단계로 나뉘며, 각 단계는 특정 작업을 수행한다. 명령어 주기는 명령어의 종류에 따라 조금씩 다를 수 있지만, 대부분 다음과 같은 단계를 거친다.

초창기 CISC 마이크로프로세서는 명령어 주기가 명확히 구분되었지만, RISC 아키텍처로 발전하면서 각 사이클이 단순화되는 경향을 보인다.

각 CPU는 명령어 집합에 따라 서로 다른 사이클을 가질 수 있지만, 일반적으로 다음과 같은 단계를 따른다.


  • '''인출(Fetch) 단계''': 프로그램 카운터(PC)에 저장된 메모리 주소에서 다음 명령어를 가져와 명령어 레지스터에 저장한다. 인출이 끝나면 PC는 다음 명령어를 가리키도록 업데이트된다.
  • '''해독(Decode) 단계''': 명령어 레지스터에 있는 명령어를 제어 장치(CU)가 해석한다.
  • '''유효 주소 계산(Effective Address Calculation) 단계''': 메모리 접근이 필요한 명령어의 경우, 실행 단계에서 사용할 실제 메모리 주소를 계산한다.
  • '''실행(Execute) 단계''': 제어 장치가 해독된 정보를 바탕으로 CPU의 관련 기능 장치에 제어 신호를 보내 명령어가 요구하는 작업을 수행한다.
  • '''사이클 반복''': 위 과정이 반복된다.


대부분의 프로세서에서는 인터럽트가 발생할 수 있다. 인터럽트는 CPU가 인터럽트 서비스 루틴을 실행하도록 하고, 완료 후 원래 작업으로 복귀하게 한다.

3. 1. 인출 (Fetch) 단계

프로그램 카운터(PC)에 저장된 주소를 메모리 주소 레지스터(MAR)로 복사한다. 제어 버스를 통해 메모리에 읽기 명령을 보낸다. 메모리는 해당 주소에 저장된 데이터를 데이터 버스를 통해 메모리 버퍼 레지스터(MDR)로 보낸다. MDR에 저장된 데이터를 명령어 레지스터(CIR)로 복사한다. PC 값을 증가시켜 다음 명령어의 주소를 가리키게 한다.[1]

인출 단계는 각 명령어에 대해 동일하며, 다음과 같이 이루어진다.

1. CPU는 PC의 내용을 MAR로 보내고 제어 버스에 읽기 명령을 보낸다.[1]

2. 읽기 명령(주소는 PC와 같음)에 대한 응답으로 메모리는 PC가 가리키는 메모리 위치에 저장된 데이터를 데이터 버스를 통해 반환한다.[1]

3. CPU는 데이터 버스의 데이터를 MDR(MBR이라고도 함)로 복사한다.[1]

4. 1초의 몇 분의 1 후에 CPU는 MDR의 데이터를 명령어 해독을 위해 명령어 레지스터로 복사한다.[1]

5. PC가 증가하여 다음 명령어를 가리킨다. 이 단계는 다음 사이클을 위해 CPU를 준비한다.[1]

3. 2. 해독 (Decode) 단계

해독 단계에서, 제어 장치(CU)는 명령어 레지스터(CIR)에 있는 명령어를 해독한다.[1] 제어 장치는 이 과정에서 산술 논리 장치(ALU) 및 부동 소수점 장치(FPU)와 같은 CPU 내의 다른 구성 요소로 신호를 보낸다.[1] ALU는 덧셈, 뺄셈, AND, OR, NOT, 비트 연산 같은 연산을 수행하고,[1] FPU는 부동 소수점 연산을 수행한다.[1]

메모리에서 가져온 opcode는 다음 단계를 위해 디코딩되어 해당 레지스터로 이동된다.[1] 디코딩은 일반적으로 CPU의 제어 장치에 있는 이진 디코더에 의해 수행된다.[1] 이 과정을 통해 프로세서는 어떤 명령을 수행해야 하는지, 그리고 명령 수행에 필요한 피연산자가 몇 개인지 결정한다.[1]

3. 3. 유효 주소 계산 (Effective Address Calculation) 단계

메모리 접근이 필요한 명령어의 경우, 실행 단계에서 사용할 실제 메모리 주소인 유효 주소를 결정하는 단계이다. 이 단계에서는 명령어의 종류를 평가하고, 메모리 연산인 경우 유효 메모리 주소를 계산한다. 컴퓨터 아키텍처에 따라 다양한 주소 지정 방식을 사용하여 유효 주소를 찾는다.

유효 주소를 찾는 일반적인 방법은 다음과 같다.

방법설명
명령의 필드에서 직접 가져옴명령어에 포함된 주소 값을 그대로 사용
기계 레지스터에서 가져옴레지스터에 저장된 값을 유효 주소로 사용
명령 필드와 기계 레지스터 값을 더함명령어 필드의 값과 레지스터 값을 더하여 유효 주소 계산
명령 필드와 두 개의 기계 레지스터 값을 더함명령어 필드의 값과 두 개의 레지스터 값(일반적으로 기본 주소와 인덱싱 값)을 더하여 유효 주소 계산
간접 모드위의 방법 중 하나로 찾은 주소에서 메모리를 읽어 유효 주소를 가져옴[3]



일부 명령어는 사용할 주소를 직접 포함할 수 있지만, 많은 경우 명령어의 필드 값과 레지스터에 저장된 값을 결합하여 유효 주소를 계산해야 한다.[3]

3. 4. 실행 (Execute) 단계

CPU의 제어 장치는 해독된 명령어를 바탕으로 CPU의 각 기능 장치에 제어 신호를 보내 필요한 작업을 수행한다. 이러한 작업에는 레지스터에서 값을 읽어 산술 논리 장치(ALU)로 전달하고, ALU에서 산술 또는 논리 연산을 수행한 후, 결과를 다시 레지스터에 기록하는 것이 포함된다.

ALU가 연산에 참여하는 경우, 제어 장치에 조건 신호를 다시 보낸다. 연산 결과는 주 메모리에 저장되거나 출력 장치로 전송될 수 있다. ALU의 피드백에 따라 프로그램 카운터(PC)는 다음 명령어를 가져올 다른 주소로 업데이트될 수 있다.

명령어에 산술 또는 논리 연산이 포함된 경우, 산술 논리 장치(ALU)가 사용된다. 이 단계는 최종 사용자의 관점에서 유용한 명령 주기의 유일한 단계이며, 그 외 모든 것은 실행 단계를 수행하기 위한 부가적인 작업이다.

3. 5. 인터럽트 (Interrupt)

대부분의 프로세서에서 인터럽트가 발생할 수 있다. 인터럽트는 CPU가 현재 실행 중인 명령어를 중단하고, 특정 서비스 루틴(interrupt service routine)을 실행하도록 하는 메커니즘이다. 인터럽트 처리가 완료되면, CPU는 중단되었던 명령어로 복귀하여 실행을 계속한다. 어떤 경우에는 명령어가 중간에 인터럽트될 수 있으며, 명령어는 아무런 효과가 없지만 인터럽트에서 반환된 후에 다시 실행된다.

4. 초기화 (Initiation)

시스템에 전원이 공급되는 즉시 첫 번째 명령 주기가 시작되며, 시스템 아키텍처에 의해 미리 정의된 초기 프로그램 카운터(PC) 값을 갖는다. 예를 들어, 인텔 IA-32 CPU에서 미리 정의된 PC 값은 `0xfffffff0`이다. 일반적으로 이 주소는 읽기 전용 메모리(ROM)의 일련의 명령을 가리키며, 이는 운영 체제를 로드(또는 부팅)하는 프로세스를 시작한다.[2]

참조

[1] 웹사이트 Pipelining https://cs.stanford.[...] 2019-06-26
[2] 웹사이트 Instruction Fetch Execute Cycle http://www.cs.montan[...] 2012-10-14
[3] 웹인용 ARM and Thumb-2 Instruction Set Quick Reference Card http://infocenter.ar[...] 2015-06-20



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com