도입 (내 생각 정리)
ISA라는 용어를 처음 접하게 되면 아마 가장 많이 보게되는 정의는
“ISA란 마이크로프로세서가 인색해서 기능을 이해하고 실행할 수 있는 기계어 명령어를 말한다.” 일 것이다. 난 이 문장으로 처음 ISA를 접했을 때 전혀 이해할 수 없었다. 내가 공부한 방식으로 ISA를 정의해보면
ISA의 영어 뜻을 해석해보면 “명령어의 집합인 아키텍쳐”라고 해석이 된다.
아키텍쳐의 영어 뜻은 “건축학”을 의미한다고 한다.
컴퓨터 아키텍쳐(컴퓨터 구조)에서의 아키텍쳐는 컴퓨터 시스템의 하드웨어 구조를 말한다.
이를테면 1.에서 설명한 CPU, 메모리, 디스크와의 관계 또는 기계적 구조 또는 이를 설계한는 방법들을 두루두루 의미한다고 생각한다.
아키텍쳐란 어떠한 “구조” “형식”을 의미한다. 아래는 예시를 들어 작성하였는데 이해가 안될 것이다. 하지만 이 글을 모두 읽고 아래 문장을 다시 읽는다면 아키텍쳐의 뜻을 보다 명확하게 이해할 수 있을 것이다. 지금은 가볍게 흘려 읽자..
예를 들어 MIPS는 32bit I-format, J-format과 같은 기계어를 저장하는 형식을 나타내는데 이를 MIPS 아키텍쳐라고 한다.
1. ISA의 개념과 MIPS의 개념
ISA란 마이크로프로세서가 인색해서 기능을 이해하고 실행할 수 있는 기계어 명령어를 말한다. 라고 뻔한 정의로 일단 시작한다. 이 정의는 너무 포괄적이고 추상적이다. 가장 원시적인 생각부터 ISA를 정의해보자.
ISA는 기계어 명령어 0과1이다. 근데 어떠한 형식을 가지는 기계어이다.
이러한 형식에는 RISC(Complex Instruction Set Computer) 형식과 CISC(Reduced Instruction Set Computer) 형식이 있다.
이러한 RISC의 대표적인 모델이 ARM, MIPS이다.
CISC의 대표적 모델은 Intel x86이 있다. 우리가 사용하는 윈도우 기반의 컴퓨터는 CISC 형식을 따르는 Indel x86이라는 기계어 명령어를 저장하는 아케텍쳐를 사용하여 CPU에서 이를 처리한다.
하지만 컴퓨터공학과 학생들이 처음 컴퓨터 구조를 배우는 입장에서 가장 흔하게 사용되는CISC 형식의 Intel x86인 ISA 아키텍쳐로 바로 어셈블리어를 공부한다면 힘들것이다.
따라서 상대적으로 쉬운 구조인 MIPS 형식을 통해 ISA 아키텍쳐를 공부하고 MIPS 형식을 우리가 작성하는 high level 명령어를 어셈블리언어로 바꾸고 그것이 메모리, 디스크, CPU에서 어떻게 동작하는 지를 연관지어 보는 것이 ISA 공부의 시작이라고 할 수 있다.
아래 표를 보자.
Type | format | |||||
R | opcode (6) | rs (5) | rt (5) | rd (5) | shamt (5) | funct (6) |
I | opcode (6) | rs (5) | rt (5) | immediate (16) | ||
J | opcode (6) | address (26) |
위 그림은 32bit로 기계어를 저장하는데 서로 다른 3가지 형태가 있다. 위 틀(문법)에 맞게 2진수 명령어에 해당하는 기계어를 배치하는 것이 MIPS 방식이다.
이것을 풀어서 설명하면 우리가 작성한 명령어를 2진수의 명령어인 기계어 자체를 일단 ISA라고 하는데 ISA는 2진수 명령어를 저장하는 형식을 내포하고 있는 말로 그 형식 중 하나인 RISC 형식이 있고 RISC 중에서 MIPS 아키텍쳐로 저장하고 있다는 것을 의미한다.
여기까지 정리된 내용으로 우리는 아래의 글을 이해할 수 있다.
우선 MIPS 어셈블리 언어란 MIPS ISA 아케텍쳐를 따르는 어셈블리 언어를 말하는 것이다.
high level 언어로 작성된 명령어는 컴파일러에 의해 어셈블리 언어로 바뀌게 되고 이 어셈블리 언어는 한 명령당 32bit인 MIPS 아키텍쳐를 따른다. MIPS 아키텍쳐를 따르는 명령어를 CPU가 처리하게 된다.
위 그림에서 기계어 명령어가 MIPS 구조를 따를지 intel x86구조를 따를지 등에 대한 ISA에 관한 설명이 없다면 우리는 high level 언어를 어떠한 ISA를 따르는 어셈블리언어로 만들 수 없게 되고 결국 하드웨어인 CPU로 이어질 수 없게 되는 것이다. 그래서 소프트웨어와 하드웨어 중앙에 인터페이스역할을 하는 것이 ISA다 라고 정리하는 것이다.
2. 아래 표의 분석
Application |
Algorithm |
Programming Langauge |
Assembly Langauge |
Machine Code |
Instruction Set Architecture |
Micro Architecture |
Gates/Registers |
Devices(Transistores) |
Physics |
노란색 영역은 Software 영역이고 회색영역은 Hardware 영역이며 빨간색의 ISA는 그 중재역할을 한다.
1) Application
어플리케이션은 우리가 사용하는 자바 eclipse, VScode등 과 같은 어플리케이션을 의미한다고 생각하자.
2) Algorithm과 Programming Language
자바, 파이썬, C언어와 같은 high level언어로 작성된 코드를 의미한다.
3) Assembly Language
high level언어로 작성된 코드를 컴파일러를 통해 나온 결과가 Assembly Language이다.
4) Machine code
어셈블리 언어는 기계어 바로 직전 단계의 언어로 하나의 어셈블리 문장은 하나의 2진수 명령어와 1대1 대응한다. 즉 명령어가 있으면 그 명령어를 우리가 알아 볼 수 있는 문장으로 바꾼 것이 어셈블리 언어이다.
5) ISA
하드웨어와 소프트웨어 사이 인터페이드 역할이다.
즉, 좁은 의미의 ISA는 하드웨어와 우리가 만드는 소프트웨어의 대화를 위한 언어라고도 생각할 수 있다. 운영체제는 이개념을 기반으로 하드웨어와 소프트웨어를 이어주게 된다. 이 ISA를 기반으로 하여, 프로세서의 관리와 하드웨어의 배치를 통해서 컴퓨터구조를 설계한다.
6) Micro 아키텍쳐
이것은 CPU 아키텍쳐라고도 하는데 CPU가 명령어를 어떻게 수행하는지에 대한 구조적 방식을 뜻하는 단계이다.
'전공 > 컴퓨터 구조' 카테고리의 다른 글
5. CPI 계산과 CPU time 구하기 (0) | 2021.12.27 |
---|---|
6. Processor Design (0) | 2021.10.29 |
4. Calling Convention(Caller-save, Callee-save, Hybrid) (0) | 2021.10.07 |
3. MIPS 문법 정리 (0) | 2021.10.07 |
1. 프로그램의 번역과 실행 과정 (0) | 2021.10.07 |