//구글콘솔 광고 추가가

명령어 집합구조( Instruction set architecture, ISA )

: CPU가 이해할 수 있는 기계어 명령어들의 집합

명령어 집합(구조)
: CPU의 언어인 셈이며, 명령어가 달라지면 명령어의 해석방식, 레지스터의 종류와 개수, 파이프라이닝의 용이성 등등
많은 것들이 달라진다.

- 소프트웨어와 하드웨어 사이의 약속이다 라고 볼 수도 있다.

- 하드웨어와 시스템 소프트웨어 사이의 인터페이스를 정의하며, 최하위 레벨의 프로그래밍 인터페이스로서 CPU가 실행할 수 있는 모든 명령어를 포함한다.

 

명령어 집합의 두 축 : CISC & RISC
CISC( Complex Instruction Set Computer )
: 복잡한 명령어 집합을 활용하는 CPU

- 복잡하고 다양한 명령어를 활용, 명령어의 형태와 크기가 다양한 가변길이 명령어를 활용.

- 다양하고 강력한 명령어를 활용, 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있음.

메모리를 최대한 아끼며 개발해야 했던 시절엔 인기가 좋았음.
BUT, 가변길이 명령어를 사용하므로 명령어 파이프라이닝이 불리하다는 치명적인 단점이 존재.
: 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기 까지의 시간이 일정하지 않음.
복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기 필요.
대다수의 복잡한 명령어는 사용 빈도가 낮음. 

일반적으로 하드웨어 스택(Stack)이 내장되어 있으며, 서브루틴의 return 주소나 파라미터, 지역변수 등을 저장하는 데 사용된다. 따라서 call, push, pop 같은 명령어를 통해 스택 데이터를 관리할 수 있다.

 

RISC( Reduced Instruction Set Computer )
: 명령어 집합의 수를 줄여 하드웨어 구조를 간단하게 만든 CPU

- 명령어의 종류가 적고, 짧고 규격화된 명령어 사용.

- 단순하고 적은 수의 고정 길이 명령어 집합을 활용.

 짧고 규격화된 명령어를 사용하여 명령어 파이프라이닝에 유리.
: 메모리 접근을 최소화하고 많은 범용 레지스터를 사용하므로 속도가 빠르며, 전력소모가 적고 가격이 저렴.
다만 명령어 종류가 CISC보다 적어서 더 많은 명령어로 프로그램을 동작시킴.

CISC와 달리 스택 관련 명령어가 존재하지 않기 때문에 서브루틴의 return 주소나 파라미터, 지역변수 등은 소프트웨어적으로 처리해야 한다.

 

CISC와 RISC 정리
CISC RISC
복잡하고 다양한 명령어 단순하고 적은 명령어
가변 길이 명령어 고정 길이 명령어
다양한 주소 지정 방식 적은 주소 지정 방식
프로그램을 이루는 명령어의 수가 적음 프로그램을 이루는 명령어의 수가 많음
여러 클럭에 걸쳐 명령어 수행 1 클럭 내외로 명령어 수행
파이프라이닝 하기 어려움 파이프라이닝 하기 쉬움

 

728x90
반응형
어떻게 시간을 알뜰살뜰하게 쓰면서 명령어들을 빠르게 처리할 수 있을까?
명령어 파이프라인
: 순차적으로 명령어를 처리함.
명령어 인출 >> 명령어 해석 >> 명령어 실행 >> 결과 저장 
-같은 단계가 겹치지만 않으면 CPU는 각 단계를 동시에 실행할수 있다. >> 동시에 여러 개의 명령어를 겹쳐서 실행

ex>>
명령어 1  인출 >> 해석 >> 실행 >> 저장
명령어 2                인출 >> 해석 >> 실행 >> 저장
명령어 3                              인출 >> 해석 >> 실행 >> 저장

명령어 파이프라인이 성능향상에 실패하는 경우, 제대로 병렬처리가 되지 않는 경우 >> 파이프라인 위험이라 함.
파이프라인 위험에는 데이터 위험, 제어 위험, 구조적 위험이 있다.

데이터 위험 명령어 간의 의존성으로 인해 아직 수행되지 않은 명령어의 결과값을 참조함으로써 발생하는 위험.
모든 명령어를 동시에 처리할 수는 없다.
(이전 명령어를 끝까지 실행해야만 비로소 실행 할 수 있는 경우)
제어 위험 프로그램 카운터의 갑작스로운 변화로 발생하는 위험.
구조적 위험  서로 다른 명령어가 같은 자원(ALU, 레지스터 등)에 접근함으로써 발생하는 위험
- 슈퍼 스칼라: CPU내부에 여러개의 명령어 파이프라인을 포함한 구조 (오늘날의 멀티스레드 프로세서)
: 이론적으로는 파이프라인 개수에 비례하여 처리 속도가 증가해야 하는데, 현실적으로는 관리해야 하는 파이프라인도 증가를 하고, 파이프라이 위험도의 증가도 있어서 파이프라인 개수에 비례하여 처리 속도가 증가하진 않음.

 

비순차적 명령어 처리( Out-of-Order Execution, OoOE)

:파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법. 

BUT, 아무 명령어가 순서를 바꿀 수는 없다. 전체 프로그램 실행 흐름에 영향이 없어야 함. 

728x90
반응형

+ Recent posts