명령 집합 아키텍처
Instruction set architecture기계코드 |
---|
일반적인 개념 |
지침들 |
컴퓨터 과학에서, 명령 집합 아키텍처(ISA)는 컴퓨터 아키텍처라고도 불리며, 컴퓨터의 추상적인 모델이다.중앙처리장치(CPU)와 같이 ISA에 의해 기술된 명령을 실행하는 장치를 구현이라고 합니다.
일반적으로 ISA는 지원되는 명령, 데이터 유형, 레지스터, 메인 메모리 관리를 위한 하드웨어 지원, 기본 기능(메모리 일관성, 어드레싱 모드, 가상 메모리 등) 및 ISA 구현 패밀리의 입출력 모델을 정의합니다.
ISA는 ISA의 구현에서 실행되는 머신 코드의 동작을 해당 구현의 특성에 의존하지 않는 방식으로 지정하며, 구현 간의 바이너리 호환성을 제공합니다.이를 통해 성능, 물리적 크기, 금전적 비용 등의 특성이 다르지만 동일한 머신 코드를 실행할 수 있는 ISA를 여러 번 구현할 수 있으므로 성능이 낮은 저비용 머신을 교체하지 않고도 비용이 높은 고성능 머신으로 교체할 수 있습니다.ftware. 또한 ISA 구현의 마이크로아키텍처를 진화시켜 새로운 고성능 ISA 구현으로 이전 세대의 구현에서 실행되는 소프트웨어를 실행할 수 있도록 합니다.
운영체제가 특정 ISA에 대해 표준적이고 호환되는 애플리케이션 바이너리 인터페이스(ABI)를 유지하고 있는 경우 머신 코드는 해당 ISA 및 운영체제의 향후 구현에서 실행됩니다.다만, ISA가 복수의 operating system의 실행을 서포트하고 있는 경우, 최초의 operating system이 다른 operating system용으로 작성된 머신 코드의 실행을 서포트하고 있지 않는 한, 1개의 operating system의 머신 코드가 다른 operating system으로 동작하는 것은 보증되지 않습니다.
ISA는 명령 또는 기타 기능을 추가하거나 더 큰 주소 및 데이터 값에 대한 지원을 추가하여 확장할 수 있습니다. 확장 ISA를 구현하면 이러한 확장 기능 없이도 ISA 버전의 머신 코드를 실행할 수 있습니다.이러한 확장을 사용하는 머신 코드는 해당 확장을 지원하는 구현에서만 실행됩니다.
ISA가 제공하는 바이너리 호환성은 ISA를 컴퓨팅의 가장 기본적인 추상 개념 중 하나로 만듭니다.
개요
명령 집합 아키텍처는 마이크로 아키텍처와 구별되며, 마이크로 아키텍처는 특정 프로세서에서 명령 집합을 구현하기 위해 사용되는 프로세서 설계 기술의 집합이다.마이크로아키텍처가 다른 프로세서는 공통 명령 세트를 공유할 수 있습니다.예를 들어 인텔 Pentium과 AMD Athlon은 x86 명령어세트의 거의 동일한 버전을 구현하고 있지만 내부 설계는 근본적으로 다릅니다.
특정 기계의 설계와는 다른 아키텍처의 개념은 시스템/360의 설계 단계에서 IBM의 Fred Brooks에 의해 개발되었습니다.
NPL[System/360] 이전까지 이 회사의 컴퓨터 설계자들은 기술을 선택하는 것뿐만 아니라 기능 및 아키텍처의 정교함을 추구함으로써 비용 목표를 달성할 수 있었습니다.이와는 대조적으로 SPRAID 호환성 목표는 광범위한 비용과 성능에 걸친 일련의 5개의 프로세서를 위한 단일 아키텍처를 상정하고 있습니다.5개의 엔지니어링 설계팀 중 누구도 비용 [1]: p.137 및 성능 목표를 달성하는 데 어려움을 덜 수 있는 방법으로 아키텍처 사양을 조정할 수 있을 것으로 기대하지 않았습니다.
Smalltalk, Java 가상 시스템 및 Microsoft 공용 언어 런타임과 같이 바이트 코드를 ISA로 지원하는 일부 가상 시스템은 일반적으로 사용되는 코드 경로의 바이트 코드를 네이티브 시스템 코드로 변환하여 이를 구현합니다.또한 이러한 가상 시스템은 해석에 따라 자주 사용되지 않는 코드 경로를 실행합니다(예: 적시 컴파일 참조).Transmeta는 이러한 방식으로 VLIW 프로세서에 x86 명령 세트를 구현했습니다.
ISA의 분류
ISA는 여러 가지 방법으로 분류할 수 있습니다.일반적인 분류는 아키텍처의 복잡성에 의한 것입니다.복잡한 명령 집합 컴퓨터(CISC)에는 많은 전문 명령이 있으며, 그 중 일부는 실제 프로그램에서만 거의 사용되지 않을 수 있습니다.RISC(Reduced Instruction Set Computer)는 프로그램에서 자주 사용되는 명령만 효율적으로 구현함으로써 프로세서를 단순화하고, 덜 일반적인 동작은 서브루틴으로 구현되며,[2] 결과적으로 발생하는 프로세서 실행 시간은 빈번하지 않은 사용으로 상쇄된다.
기타 유형으로는 VLIW(Very Long Instruction Word) 아키텍처, 밀접하게 관련된 LIW(Long Instruction Word) 아키텍처 및 EPIC(명시 병렬 명령 컴퓨팅) 아키텍처 등이 있습니다.이들 아키텍처는 명령어 문제와 스케줄링을 컴파일러에게 맡김으로써 RISC 및 CISC보다 적은 하드웨어로 명령어레벨의 병렬화를 이용하려고 합니다.
최소 명령 집합 컴퓨터(MISC) 및 단일 명령 집합 컴퓨터(OISC)와 같이 훨씬 덜 복잡한 아키텍처가 연구되었습니다.이것들은 이론적으로는 중요한 유형이지만 상용화되지는 않았다.
순서
기계어는 개별적인 문장 또는 명령으로 구성됩니다.프로세싱 아키텍처에서는, 특정의 명령으로 다음의 항목을 지정할 수 있습니다.
- opcode(실행할 명령) (추가, 복사, 테스트 등)
- 명시적 오퍼랜드:
이러한 간단한 명령어를 조합하여 순차적으로 실행하거나 제어 흐름 명령에 의해 지시된 대로 실행함으로써 보다 복잡한 조작이 구축됩니다.
명령 유형
많은 명령어 세트에 공통되는 조작의 예는 다음과 같습니다.
데이터 처리 및 메모리 조작
- 레지스터를 고정 상수 값으로 설정합니다.
- 메모리 위치 또는 레지스터에서 메모리 위치 또는 레지스터로 데이터를 복사합니다(기계 명령은 종종 이동이라고 하지만 용어는 잘못 전달됩니다).레지스터의 내용, 다른 메모리 위치의 내용 또는 계산 결과를 저장하거나 저장된 데이터를 검색하여 나중에 계산을 수행하는 데 사용됩니다.이들은 종종 로드 및 스토어 작업이라고 불립니다.
- 하드웨어 디바이스에서 데이터를 읽고 씁니다.
산술 연산 및 논리 연산
- 두 레지스터의 값을 추가, 빼기, 곱하기 또는 나눗셈하여 결과를 레지스터에 배치하고 상태 레지스터에 하나 이상의 조건 코드를 설정할 수 있습니다.
- 일부 ISA에서는 증가, 감소, 사소한 경우에는 피연산자 저장 및 가져오기.
- 예를 들어 한 쌍의 레지스터에서 대응하는 비트의 결합 및 분리를 취하고 레지스터에서 각 비트의 부정을 취하는 비트 연산을 수행합니다.
- 레지스터의 2개의 값을 비교합니다(예를 들어, 1개가 작은지, 같은지 확인).
- 부동 소수점 숫자에 대한 산술용 부동 소수점 명령입니다.
흐름 조작 제어
- 프로그램의 다른 위치로 분기하여 해당 위치에서 명령을 실행합니다.
- 특정 조건이 유지되면 조건부로 다른 위치로 분기합니다.
- 간접적으로 다른 위치로 분기합니다.
- 다른 코드 블록을 호출하고 다음 명령의 위치를 반환 지점으로 저장합니다.
코프로세서 명령
- 코프로세서로 데이터를 로드/저장하거나 CPU 레지스터와 데이터를 교환합니다.
- 코프로세서 조작을 실행합니다.
복잡한 순서
프로세서의 명령어 세트에는, 「복잡한」명령어가 포함되어 있는 경우가 있습니다.하나의 "복잡한" 명령이 다른 컴퓨터에서 많은 명령을 필요로 하는 작업을 수행합니다.이러한 순서는, 복수의 스텝을 밟거나, 복수의 기능 유닛을 제어하거나, 또는 그 외의 방법으로, 특정의 프로세서에 의해서 실장되고 있는 심플한 순서의 대부분보다 큰 스케일로 표시됩니다."복잡한" 명령의 예는 다음과 같습니다.
- 메모리(특히 스택)에서 여러 레지스터를 동시에 전송하거나 메모리(특히 스택)에서 전송한다.
- 대용량 메모리 블록 이동(예: 문자열 복사 또는 DMA 전송)
- 복잡한 정수 및 부동소수점 산술(예를 들어 제곱근 또는 로그, 사인, 코사인 등의 초월함수)
- SIMD 명령, 여러 동종 값에 대해 병렬로 연산을 수행하는 단일 명령, 아마도 전용 SIMD 레지스터에서
- 원자 테스트 및 세트 명령 또는 기타 읽기-수정-쓰기 원자 명령 수행
- 레지스터가 아닌 메모리에서 피연산자를 사용하여 ALU 연산을 실행하는 명령
복잡한 명령어는 RISC 명령어세트보다 CISC 명령어세트 내에서 더 일반적이지만 RISC 명령어세트에도 포함될 수 있습니다.RISC 명령어세트에는 일반적으로 메모리 오퍼랜드에 의한 ALU 연산이나 대용량 메모리블럭의 이동 명령이 포함되어 있지 않습니다만, 대부분의 RISC 명령어 세트에는, 동시에 복수의 데이터에 대해서 같은 산술 연산을 실행하는 SIMD 또는 벡터 명령이 포함되어 있습니다.SIMD 명령은 큰 벡터와 행렬을 최소 시간 내에 조작할 수 있습니다.SIMD 명령을 사용하면 사운드, 이미지 및 비디오 처리에 일반적으로 관여하는 알고리즘을 쉽게 병렬화할 수 있습니다.다양한 SIMD 구현이 MMX, 3DNow! 및 AltiVec과 같은 상호로 출시되었습니다.
명령 부호화
기존 아키텍처에서 명령에는 레지스터할 메모리의 내용을 추가하는 등의 동작을 지정하는 opcode와 레지스터, 메모리 위치 또는 리터럴 데이터를 지정할 수 있는 0 이상의 오퍼랜드 지정자가 포함됩니다.오퍼랜드 지정자는 의미를 결정하는 어드레싱 모드를 가질 수도 있고 고정 필드에 있을 수도 있습니다.다수의 마이크로코드 아키텍처를 포함하는 VLIW 아키텍처에서는 여러 개의 동시 연산 코드와 오퍼랜드가 하나의 명령으로 지정됩니다.
Transport Triggered Architecture(TTA; 트랜스포트 트리거 아키텍처)와 같은 일부 외부 명령 집합에는 오퍼랜드만 있습니다.
대부분의 스택 머신에는 "0-operand" 명령어 세트가 있으며, 이 명령어 세트에는 산술 연산과 논리 연산에는 피연산자 지정 필드가 없습니다. 스택에서 피연산자를 변수에 팝하는 평가 스택에 피연산자를 푸시하는 명령어만이 피연산자 지정자를 가집니다.명령 집합은 데이터 레지스터나 임의의 메인 메모리 셀이 아닌 표현식 스택에서만 작동하는 포스트픽스(폴란드어 역 표기법) 연산을 사용하여 대부분의 ALU 액션을 수행합니다.대부분의 산술식은 포스트픽스 [3]표기법으로 쉽게 번역할 수 있기 때문에 고급 언어를 컴파일할 때 매우 편리합니다.
조건부 명령에는 많은 경우 술어 필드가 있습니다.즉, 특정 조건을 부호화하여 동작을 실행하지 않는 것이 아니라 실행하도록 하는 비트입니다.예를 들어 조건이 참일 경우 조건부 분기 명령은 프로그램의 다른 부분으로 실행이 진행되며 조건이 거짓일 경우 전송 제어가 되지 않으므로 순차적으로 실행이 계속됩니다.또한 일부 명령 집합에는 조건부 이동이 있기 때문에 이동이 실행되며 조건이 true이고 실행되지 않은 경우 대상 위치에 저장된 데이터가, 조건이 false이면 대상 위치가 수정되지 않습니다.마찬가지로 IBM z/Architecture에는 조건부 저장소 명령이 있습니다.일부 명령어 세트에는 모든 명령어에 술어 필드가 포함되어 있습니다.이것을 분기 술어라고 부릅니다.
오퍼랜드 수
명령 집합은 명령에서 명시적으로 지정된 최대 피연산자 수로 분류할 수 있습니다.
(다음 예에서는 a, b 및 c는 메모리셀을 참조하는 (직접 또는 계산된) 주소이며 reg1 등은 머신레지스터를 참조합니다).
C = A+B
- 0-operand(주소가 제로인 머신), 이른바 스택머신:모든 산술 연산은 스택의 상위 1개 또는 2개의 위치를 사용하여 수행됩니다.
push a
,push b
,add
,pop c
.C = A+B
네 가지 지시사항이 필요합니다.스택 머신의 경우, "0-operand"와 "zero-address"라는 용어는 모든 명령에는 적용되지 않습니다.메모리에 액세스하기 위해 1-operand 푸시 및 팝 명령이 사용되기 때문입니다.
- 1개의 오퍼랜드(일명 어큐뮬레이터 머신)에는 초기 컴퓨터와 다수의 소규모 마이크로 컨트롤러가 포함됩니다.대부분의 명령에서는 암묵적인 어큐뮬레이터를 왼쪽 오퍼랜드(및 있는 경우는 행선지)로서 오른쪽 오퍼랜드(즉, 일정한 레지스터 또는 메모리 위치)를 1개 지정합니다.
load a
,add b
,store c
.C = A+B
세 가지 지침이 필요합니다.
- 2-operand: 많은 CISC 및 RISC 머신은 다음 카테고리에 속합니다.
- CISC:
move A
C에게, 그 다음에add B
C로 이동합니다.C = A+B
두 가지 지침이 필요합니다.이는 명확한 저장 지시 없이 결과를 효과적으로 '저장'한다.
- CISC - 대부분의 경우 머신은 명령당 하나의 메모리 오퍼랜드로 제한됩니다.
load a,reg1
;add b,reg1
;store reg1,c
; 여기에는 메모리 이동에 대한 로드/스토어 쌍이 필요합니다.add
result는 다음과 같이 다른 장소에 저장되는 증가입니다.C = A+B
또는 동일한 메모리 위치:A = A+B
.C = A+B
세 가지 지침이 필요합니다.
- RISC - 명시적인 메모리 부하가 필요한 경우의 순서는 다음과 같습니다.
load a,reg1
;load b,reg2
;add reg1,reg2
;store reg2,c
.C = A+B
네 가지 지시사항이 필요합니다.
- CISC:
- 3-operand를 통해 데이터 [4]재사용 개선:
- CISC : 다음 명령 중 하나가 됩니다.
add a,b,c
C = A+B
1개의 지시가 필요합니다.
- CISC : 또는 명령당2개의 메모리 오퍼랜드로 제한된 머신에서는
move a,reg1
;add reg1,b,c
;C = A+B
두 가지 지침이 필요합니다.
- RISC - 산술 명령어는 레지스터만 사용하므로 명시적인 2-operand 로드/스토어 명령이 필요합니다.
load a,reg1
;load b,reg2
;add reg1+reg2->reg3
;store reg3,c
;C = A+B
네 가지 지시사항이 필요합니다.- 2-operand 또는 1-operand와 달리, 이 경우 3개의 값 a, b 및 c는 모두 레지스터에서 재사용할 [4]수 있습니다.
- CISC : 다음 명령 중 하나가 됩니다.
- more operands: 일부 CISC 머신은 VAX "POLY" 다항식 평가 명령 등 3개 이상의 오퍼랜드(레지스터 또는 메모리액세스)를 허용하는 다양한 어드레싱 모드를 허용합니다.
3개의 오퍼랜드명령어 레지스터의 부호화에 필요한 비트의 수가 많기 때문에 16비트명령어를 가진 RISC 아키텍처는 Atmel AVR, TI MSP430 및 ARM Thumb 일부 버전 등의 2 오퍼랜드 설계입니다.32비트 명령을 사용하는 RISC 아키텍처는 보통 ARM, AVR32, MIPS, Power ISA 및 SPARC 아키텍처와 같은 3개의 오퍼랜드 설계입니다.
각 명령에서는 오퍼랜드의 수(레지스터, 메모리 위치 또는 즉시값)를 명시적으로 지정합니다.일부 명령어는 스택 상부에 저장되거나 암묵 레지스터에 저장되는 등 암묵적으로 하나 또는 양쪽 오퍼랜드를 제공합니다.피연산자 중 일부가 암묵적으로 지정될 경우 명령어로 지정할 필요가 있는 피연산자 수는 줄어듭니다.행선지 오퍼랜드가 행선지를 명시적으로 지정하는 경우는, 추가 오퍼랜드를 지정할 필요가 있습니다.따라서 명령어로 부호화된 오퍼랜드의 수는 논리연산 또는 산술연산을 위해 수학적으로 필요한 인수(아리티)의 수와 다를 수 있다.오퍼랜드는 명령의 "opcode" 표현으로 인코딩되거나 opcode 뒤에 값 또는 주소로 지정됩니다.
레지스터 압력
레지스터 압력은 프로그램 실행 중 임의의 시점에서 프리 레지스터의 가용성을 측정합니다.사용 가능한 레지스터가 많을 때는 레지스터 압력이 높기 때문에 레지스터 압력이 높을수록 레지스터 내용을 메모리에 자주 흘려야 합니다.아키텍처에서 레지스터 수를 늘리면 레지스터 압력은 감소하지만 [5]비용은 증가합니다.
Tumb와 같은 임베디드 명령어 세트는 레지스터 세트가 작기 때문에 레지스터 압력이 매우 높은 반면 MIPS와 Alpha와 같은 범용 RISC ISA는 레지스터 압력이 낮습니다.x86-64와 같은 CISC ISA는 레지스터 세트가 작아도 레지스터 압력이 낮습니다.이는 CISC ISA가 제공하는 [6]다양한 어드레싱 모드와 최적화(서브 레지스터 어드레싱, ALU 명령의 메모리 오퍼랜드, 절대 어드레싱, PC 상대 어드레싱, 레지스터 투 레지스터 유출 등)에 기인합니다.
지시 길이
명령의 크기 또는 길이는 마이크로컨트롤러에 따라서는4비트에서 VLIW 시스템에 따라서는 수백비트에 이르기까지 매우 다양합니다.퍼스널 컴퓨터, 메인프레임 및 슈퍼컴퓨터에서 사용되는 프로세서의 최소 명령 사이즈는 8 ~64비트입니다(또한 RISC에서는 모든 명령이 정확히 32비트입니다).x86에서 가능한 가장 긴 명령은 15바이트(120비트)[7]입니다.명령 집합 내에서 명령마다 길이가 다를 수 있습니다.일부 아키텍처, 특히 대부분의 RISC(Reduced Instruction Set Computers)에서 명령어는 고정 길이이며 일반적으로 해당 아키텍처의 단어 크기와 일치합니다.다른 아키텍처에서 명령어는 가변 길이, 일반적으로 바이트 또는 하프워드의 정수 배수를 가집니다.썸 익스텐션을 사용하는 ARM 등의 일부에는 혼합 변수 인코딩이 있습니다.이것은 2개의 고정, 통상은 32비트와 16비트의 인코딩으로, 명령어를 자유롭게 혼합할 수 없지만 브랜치(ARMv8의 예외 경계)로 전환할 필요가 있습니다.
RISC 명령어세트는 일반적으로 고정된 명령어 길이(종종 4바이트 = 32비트)를 가지며, 일반적인 CISC 명령어세트는 매우 다양한 길이(x86의 경우 1~15바이트)를 가질 수 있습니다.고정 길이 명령은 가변 길이 명령보다 처리하기가 몇 가지 이유로 덜 복잡하기 때문에(예를 들어 명령이 캐시 행 또는 가상 메모리 페이지 [4]경계에 걸쳐 있는지 확인할 필요가 없음), 따라서 속도에 맞게 최적화하기가 다소 쉽습니다.
코드 밀도
1960년대 초반의 컴퓨터에서는 메인 메모리는 비싸고 메인프레임에서도 매우 제한적이었다.제한된 메모리에 들어갈 수 있도록 프로그램 크기를 최소화하는 것이 대부분의 경우 핵심이었습니다.따라서 특정 작업을 수행하는 데 필요한 명령어 크기, 코드 밀도는 명령어 집합의 중요한 특성이었다.그것은 미니컴퓨터와 마이크로프로세서의 초기 기억력에 여전히 중요했다.오늘날 스마트폰 애플리케이션, 느린 인터넷 연결을 통해 브라우저에 다운로드되는 애플리케이션, 임베디드 애플리케이션용 ROM에서 밀도는 여전히 중요합니다.밀도가 증가하면 캐시 및 명령 프리페치의 효율성이 향상된다는 것이 일반적인 장점입니다.
코드 밀도가 높은 컴퓨터에는 프로시저 입력, 파라미터화된 반환, 루프 등의 복잡한 명령이 있는 경우가 많습니다(따라서 CISC라는 이름을 소급하여 사용).다만, 보다 전형적이거나 빈번한 「CISC」명령어는, 「추가」등의 기본적인 ALU 조작과 메모리내의 1개 이상의 오퍼랜드의 액세스(직접, 간접, 색인화등의 어드레싱 모드 사용)를 조합하는 것에 지나지 않습니다.특정 아키텍처는 메모리에 직접 2개 또는 3개의 오퍼랜드(결과 포함)를 허용하거나 자동 포인터 증가 등의 기능을 수행할 수 있습니다.소프트웨어로 구현된 명령어 세트에는 훨씬 더 복잡하고 강력한 명령이 포함될 수 있습니다.
메모리 서브시스템이 급속히 성장하던 시기에 RISC라는 명령 집합 컴퓨터가 처음으로 널리 구현되었습니다.코드 밀도를 희생하여 구현 회로를 단순화하고 클럭 주파수와 레지스터를 늘림으로써 성능을 향상시키려 합니다.단일 RISC 명령은 일반적으로 레지스터의 "추가" 또는 메모리 위치에서 레지스터로의 "로드"와 같은 단일 작업만 수행합니다.RISC 명령어 세트는 일반적으로 일정한 명령어 길이를 가지지만 일반적인 CISC 명령어 세트는 길이가 매우 다양합니다.다만, RISC 컴퓨터는, 통상, 소정의 태스크를 실장하기 위해서, 보다 많은, 보다 긴 명령어를 필요로 하기 때문에, 본질적으로 버스 대역폭이나 캐시 메모리를 최적으로 사용하지 않게 됩니다.
Tumb 나 AVR32 와 같은 특정의 임베디드 RISC ISA 는, 코드 압축이라고 불리는 테크놀로지에 의해서, 통상은 매우 높은 밀도를 나타내고 있습니다.이 기술은 두 개의 16비트 명령을 하나의 32비트 워드로 묶은 다음 디코드 단계에서 압축을 풀고 두 개의 [8]명령으로 실행합니다.
Minimal Instruction Set Computer(MISC; 최소 명령 집합 컴퓨터)는 일반적으로 스택머신의 한 형태이며, 여러 명령어를 하나의 머신 워드에 넣을 수 있습니다(8 ~32 ) 。이러한 종류의 코어는 구현에 실리콘이 거의 필요 없기 때문에 FPGA 또는 멀티코어 형태로 쉽게 구현할 수 있습니다.MISC의 코드 밀도는 RISC의 코드 밀도와 비슷합니다.작업에 [9][failed verification]더 많은 원시 명령어를 요구함으로써 명령 밀도의 증가를 상쇄할 수 있습니다.
코드 밀도를 개선하기 위한 메커니즘으로 실행 가능한 압축에 대한 연구가 진행되어 왔습니다.콜모고로프 복잡도의 수학은 이것의 도전과 한계를 설명한다.
표현
프로그램을 구성하는 명령어는 내부 숫자 형식(기계 코드)을 사용하여 지정되는 경우는 거의 없습니다.어셈블리 언어를 사용하여 프로그래머에 의해 지정되거나 컴파일러에 의해 고급 프로그래밍 언어에서 생성될 수 있습니다.
설계.
명령어 세트의 설계는 복잡한 문제입니다.마이크로프로세서의 역사에는 두 가지 단계가 있었다.첫 번째는 CISC(복잡한 명령어 집합 컴퓨터)로, 많은 다른 명령어를 가지고 있었다.그러나 1970년대에 IBM과 같은 곳에서 연구를 했고 세트의 많은 명령들이 제거될 수 있다는 것을 발견했다.그 결과 RISC(Reduced Instruction Set Computer)는 보다 작은 명령 집합을 사용하는 아키텍처입니다.명령어 세트가 심플하면 고속화, 프로세서 크기 감소, 소비전력 감소 등의 가능성이 있습니다.그러나 더 복잡한 집합은 공통 작업을 최적화하거나 메모리 및 캐시 효율성을 향상시키거나 프로그래밍을 단순화할 수 있습니다.
일부 명령 집합 설계자는 시스템 호출 또는 소프트웨어 인터럽트를 위해 하나 이상의 opcode를 예약합니다.예를 들어 MOS Technology 6502는 00, Zilog Z80은 8개의 코드 C7, CF, D7, DF, E7, EF, F7, FF를H[10] 사용하고H Motorola 68000은 A000 범위의 코드를 사용합니다.AFFFH
명령 세트가 Popek 및 Goldberg 가상화 [clarification needed]요건을 충족하면 고속 가상 머신의 구현이 훨씬 쉬워집니다.
메모리의 "프로그래밍되지 않은" 상태가 NOP로 [dubious ]해석될 경우 면역 인식 프로그래밍에서 사용되는 NOP 슬라이드는 구현하기가 훨씬 쉽습니다.
복수의 프로세서를 탑재한 시스템에서는 명령어세트에 「fetch-and-add」, 「load-link/store-conditional」(LL/SC), 또는 「atomic compare-and-swap」등의 서포트가 포함되어 있는 경우, 논블로킹 동기 알고리즘의 실장이 훨씬[citation needed] 쉬워집니다.
명령 집합 구현
주어진 명령어 세트는 다양한 방법으로 구현될 수 있습니다.특정 명령 집합을 구현하는 모든 방법은 동일한 프로그래밍 모델을 제공하며, 해당 명령 집합의 모든 구현은 동일한 실행 파일을 실행할 수 있습니다.명령어 세트를 구현하는 다양한 방법은 비용, 성능, 전력 소비, 크기 등을 서로 다른 단점으로 제공합니다.
프로세서의 마이크로아키텍처를 설계할 때 엔지니어는 애드더, 멀티플렉서, 카운터, 레지스터, ALU 등의 "유선" 전자회로 블록을 사용합니다.그런 다음 이 물리 마이크로아키텍처를 사용하여 ISA의 각 명령의 디코딩 및 시퀀싱을 기술하기 위해 어떤 종류의 레지스터 전송 언어가 자주 사용됩니다.이 설명을 구현하기 위한 제어 유닛을 구축하는 기본적인 방법은 두 가지가 있습니다(다만, 많은 설계에서는 중간 방법 또는 타협을 사용하고 있습니다).
- 일부 컴퓨터에서는 명령 집합의 완전한 디코딩과 시퀀싱(마이크로 아키텍처의 나머지 부분과 마찬가지로)을 "유선"으로 설계합니다.
- 다른 설계에서는 마이크로코드 루틴 또는 테이블(또는 둘 다)을 사용하여 이를 실현하고 있습니다.일반적으로 온칩 ROM 또는 PLA 또는 둘 다입니다(단, 역사적으로 별도의 RAM과 ROM이 사용되었습니다).Western Digital MCP-1600은 마이크로코드 전용 개별 ROM을 사용하는 오래된 예입니다.
일부 설계에서는 제어 장치에 유선 연결 설계와 마이크로 코드를 조합하여 사용합니다.
일부 CPU 설계에서는 쓰기 가능한 컨트롤 스토어를 사용합니다.이러한 스토어는 쓰기 가능한 RAM 또는 CPU 내부의 플래시(Rekursiv 프로세서 및 Imsys Cjip [11]등) 또는 FPGA(재구성 가능한 컴퓨팅)에 명령 세트를 컴파일합니다.
ISA는 인터프리터에 의해 소프트웨어로 에뮬레이트할 수도 있습니다.당연히 해석 오버헤드로 인해 에뮬레이터를 실행하는 하드웨어가 훨씬 더 빠르지 않는 한 에뮬레이터에서 직접 실행하는 프로그램보다 속도가 느립니다.오늘날 새로운 ISA 또는 마이크로아키텍처의 벤더는 하드웨어 구현이 준비되기 전에 소프트웨어 개발자가 소프트웨어 에뮬레이터를 이용할 수 있도록 하는 것이 일반적입니다.
대부분의 경우 구현의 세부 사항은 명령 집합에 대해 선택된 특정 명령에 큰 영향을 미칩니다.예를 들어, 많은 명령 파이프라인 구현에서는 명령당 하나의 메모리 로드 또는 메모리 저장만 허용되므로 로드 스토어 아키텍처(RISC)가 발생합니다.예를 들어, 명령 파이프라인의 초기 구현 방법은 지연 슬롯으로 이어졌습니다.
고속 디지털 신호 처리의 요구는 반대 방향으로 진행되어 특정 방식으로 명령을 구현해야 합니다.예를 들어 디지털필터를 충분히 빠르게 실행하려면 일반적인 DSP(Digital Signal Processor)의 MAC 명령에서는 명령어와 2개의 데이터 워드를 동시에 가져올 수 있는 일종의 Harvard 아키텍처를 사용해야 합니다.단일 사이클의 곱셈 누적 승수가 필요합니다.
「 」를 참조해 주세요.
- 명령 집합 아키텍처 비교
- 컴퓨터 아키텍처
- CPU 설계
- 압축 명령 집합
- 에뮬레이터
- 모의실험 장치
- 명령 집합 목록
- 명령 집합 시뮬레이터
- OVPSim 전체 시스템 시뮬레이터를 통해 C 및 표준 API를 사용하여 명령 세트를 작성/모델화/에뮬레이트할 수 있습니다.
- Register Transfer Language(RTL; 등록 전송 언어)
- 마이크로 오퍼레이션
레퍼런스
- ^ Pugh, Emerson W.; Johnson, Lyle R.; Palmer, John H. (1991). IBM's 360 and Early 370 Systems. MIT Press. ISBN 0-262-16123-0.
- ^ Crystal Chen; Greg Novick; Kirk Shimano (December 16, 2006). "RISC Architecture: RISC vs. CISC". cs.stanford.edu. Retrieved February 21, 2015.
- ^ Durand, Paul. "Instruction Set Architecture (ISA)". Introduction to Computer Science CS 0.
- ^ a b c John Coke의 IBM RISC 기술 진화 – IBM Journal of R&D, Volume 44, Number 1/2, p.48(2000)
- ^ Page, Daniel (2009). "11. Compilers". A Practical Introduction to Computer Architecture. Springer. p. 464. Bibcode:2009pica.book.....P. ISBN 978-1-84882-255-9.
- ^ Venkat, Ashish; Tullsen, Dean M. (2014). Harnessing ISA Diversity: Design of a Heterogeneous-ISA Chip Multiprocessor. 41st Annual International Symposium on Computer Architecture.
- ^ "Intel® 64 and IA-32 Architectures Software Developer's Manual". Intel Corporation. Retrieved 12 July 2012.
- ^ Weaver, Vincent M.; McKee, Sally A. (2009). Code density concerns for new architectures. IEEE International Conference on Computer Design. CiteSeerX 10.1.1.398.1967. doi:10.1109/ICCD.2009.5413117.
- ^ "RISC vs. CISC". cs.stanford.edu. Retrieved 2021-12-18.
- ^ Ganssle, Jack (February 26, 2001). "Proactive Debugging". embedded.com.
- ^ "Great Microprocessors of the Past and Present (V 13.4.0)". cpushack.net. Retrieved 2014-07-25.
추가 정보
- Bowen, Jonathan P. (July–August 1985). "Standard Microprocessor Programming Cards". Microprocessors and Microsystems. 9 (6): 274–290. doi:10.1016/0141-9331(85)90116-4.
외부 링크
- Wikimedia Commons 명령 집합 아키텍처 관련 미디어
- 텍스트 파일 프로그래밍:Bowen의 지시 요약 카드
- Mark Smotherman의 컴퓨터 설계 이력 페이지