Instruction Set Architecture
소프트웨어(시스템 소프트웨어)와 하드웨어 사이의 약속(인터페이스)
개발자들은 보통 high-level language로 코드를 짠다. 하지만 컴퓨터가 이를 이해하기 위해서는 어셈블러(high-level language → assembly language)와 컴파일러(assembly languabe → machine language)를 거쳐 low-level lanaguage로 번역되어야 한다. 이렇게 low-level language로 번역된 후에는 hw에게 명령을 내려줘야 하는데, 이 때 sw와 hw 사이를 연결해주는 것이 ISA이다.
즉, ISA는 소프트웨어와 하드웨어가 서로 통신할 수 있게 해주는 "명령어들의 집합"이다.
ISA 아래에 있는 micro architecture는 micro processor가 사용하는 명령어 처리 방식이다. micro processor는 우리가 아는 CPU라고 생각하면 된다.(과거와 비교했을 때 상대적으로 사이즈가 작아져서 micro가 붙었다고 한다.) 따라서 micro architecture 역시 CPU architecture의 맥락으로 이해하면 된다.
CPU architecture의 종류로는 CISC와 RISC가 있다.
(참고로 컴퓨터 구조에서 자주 등장하는 MIPS는 전형적인 RISC 아키텍쳐 위에서 사용될 수 있는 ISA이다.)
: ISA에 포함되는 명령어들이 종류로는 다음과 같은 것들이 있다.
산술 논리 명령어(add, sub) : ALU를 이용해 사칙연산/논리연산 등을 수행한다.
데이터 전송 명령어(load, store) : 메모리 간에 데이터를 전송한다.
실행 흐름 제어 명령어(branch, call, trap) : 조건에 따라 서로 다른 실행 흐름으로 분기한다.
부동 소수점 연산 명령어 : 부동소수점 실수의 연산을 수행한다.
: 각 명령어는 보통 opcode와 operand 로 구성된다.
opcode
: ADD, SUB와 같은 "명령의 종류"이다.
operand
: opcode가 연산을 수행하는 대상이다. opcode가 무엇인지에 따라 함께 오는 operand의 개수가 달라질 수 있다. operand로 흔히 쓰이는 것들로는 register , memory address , 상수 값 등이 있다.
: 명령어가 어느 위치에 있는 값을 읽고 써야하는지를 지정하는 방식이다. ISA마다, 명령어마다 가능한 addressing mode가 다를 수 있다.
register : 레지스터에 저장된 값을 접근할 때
ex) add r1, r2 : reg[r1] = reg[r1] + reg[r2]
immediate : 명령어 자체에서 상수 값을 읽어올 때
ex) add r1, 3 : reg[r1] = reg[r1] + 3
direct : 고정된 주소의 메모리를 접근할 때
ex) add r1, (1000) : reg[r1] = reg[r1] + mem[1000]
register indirect : 레지스터에 있는 주소의 메모리를 접근할 때
ex) add r1, (r2) : reg[r1] = reg[r1] + mem[reg[r2]]
displacement : 레지스터에 있는 주소에 일정 거리를 더한 주소의 메모리를 접근할 때
ex) add r1, 4(r2) : reg[r1] = reg[r1] + mem[reg[r2] + 4]
index : 레지스터에 있는 주소에 다른 레지스터 값에 해당하는 거리를 더한 주소의 메모리를 접근할 때
ex) add r1, (r2+r3) : reg[r1] = reg[r1] + mem[reg[r2] + reg[r3]]
Complex Instruction Set Computer
micro processor에게 명령을 내리는데 필요한 모든 명령어 셋을 갖추고 있는 processor이다. 따라서 복잡하고 기능이 많은 명령어로 구성되어있다.
과거에는 컴퓨터 메모리 용량이 크지 않아서 sw 프로그램의 용량을 줄이기 위해 하나의 명령어로 여러 작업을 수행하도록 했기 때문에 CISC를 많이 사용하였다.
[장점] 복합적이고 기능이 많기 때문에 하위 호환성이 좋다. 따라서 호환성이 절대적으로 필요한 PC 환경에서는 CISC를 사용하는 것이 좋다.
[단점] 하지만 트랜지스터 집적에 있어서 효율성이 떨어지기 때문에 성능 향상을 방해하는 요인이 될 수 있으며, 전력 소모가 크고, 속도가 느리고, 가격이 비싸다는 등의 단점이 있다.
[용도] 다양한 명령어들을 포함하고 있어 일반적으로 우리가 사용하는 범용 컴퓨터(general-purpose computer)의 CPU로 많이 사용된다.
Reduced Instruction Set Computer
CISC 내부에 갖추어진 모든 명령어들 중 불과 20%에 해당하는 명령어들만이 전체 80% 이상의 일을 처리한다. 따라서 CISC와 같이 필요한 모든 명령어 셋을 갖고 있는 것은 비효율적일 수 있다. 이를 극복하기 위해 등장한 것이 RISC이다.
[장점] RISC는 적은 수의 명령어들(사용 빈도가 높은 20%의 명령어들)로 구성된 processor이다. 따라서 CISC보다 더 빠른 속도로 동작할 수 있으며, 단순하고, 전력소모가 적고, 가격도 저렴하다.
[단점] 하지만 하드웨어가 간단한 대신 소프트웨어가 크고 복잡해졌으며, 하위 호환성이 부족하다는 단점이 있다.
[용도] RISC 구조는 파이프라인 중첩이 가능해서 같은 수의 명령어에 대해 적은 clock으로 처리가 가능하며 발열과 전력 소모도 줄일 수 있다. 따라서 임베디드 프로세서에서는 RISC 구조를 많이 사용한다. (MIPS, ARM)
안녕하세요.
"어셈블러(high-level language → assembly language)와 컴파일러(assembly languabe → machine language)"
이 부분에서 어셈블러와 컴파일러가 반대로 쓰였습니다.