반응형
이 카테고리에서 설명하는 ISA의 모든 예시는 MIPS ISA를 Follow함을 밝힙니다.
ISA란?
- 프로그래머와 하드웨어 사이의 일종의 "Contract"
- 명령어의 동작을 정의한다.
- 시스템의 visible state를 정의한다.
- 명령어에 따라 state가 어떻게 변화되는지를 정의한다.
- Instruction은 기계어로 번역된다.
- 프로그램(머신 코드)의 경우 메모리에 저장되어 읽혀지고, 쓰여진다.
- stored-program concept이며, 폰노이만 아키텍처를 일컫는다.
- 때문에, ISA가 다른 바이너리 파일을 한 컴퓨터가 실행시킬 수 없다.
Instruction Categories & Instruction Format에 대해
- Computational
- Load / Store
- Jump and Branch
위 그림은 각 포맷에 따라 32비트 명령어를 각 비트 별로 자른 모습이다. 각 필드는 다음을 의미한다.
- op (6비트) : 동작을 구체화하는 비트
- rs (5비트) : 첫 번째 source operand의 레지스터 파일의 주소
- rt (5비트) : 두 번째 source operand의 레지스터 파일의 주소
- rd (5비트) : 결과의 목적지인 레지스터 파일의 주소
- shamt (5비트) : shift 연산을 진행 할 때 얼마나 shifting 할 지 결정하는 shift amount
- funct (6비트) : opcode에 더해서 더 특정해서 동작을 구체화하는 비트
-> 다 더해서 32비트 (4바이트)
Design Principle 1) 심플하게 디자인하라
- Regularity가 실행을 좀 더 심플하게 만든다.
- 단순함이 lower cost로 더 높은 performance를 만들 수 있다.
- Arithmetic example
- C code
- f = (g+h) - (i+j)
- Compiled MIPS Code
- add t0, g, h # temp t0 = g + h
- add t1, i, j # temp t1 = i + j
- sub f, t0, t1 # f = t0 - t1
- MIPS는 32 x 32 비트 레지스터를 사용한다.
- C code
Design Principle 2) 작은 것이 빠르다
- MIPS ISA의 경우 32개의 레지스터로 사용을 제한한다.
- Register naming
- $t0, ... $t9 : temporary value 저장
- $s0, ... $s7 : saved variable 저장
- 더 많은 레지스터 파일의 location은 오히려 더 느려진다.
- Register의 특징
- 다른 메모리들보다 빠르다 (cache, memory)
- 컴파일러에게 사용하기 쉽다.
- 변수들을 hold 하고 있을 수 있다.
- 기본적인 메모리 Operating
- 연산 동작을 수행하기 위해 value를 메모리에서 읽어와서 register에 저장한다.
- 저장된 register의 값을 메모리로 store한다.
- 메모리의 경우 byte addressed 이다.
- MIPS의 경우 Big Endian이다.
- MSB가 word의 least address인 경우이다.
Design Principle 3) 일반적인 case를 빠르게 만들어라
- 변화를 최소한으로 가져가야한다.
- 이 때의 변화란, 각 instruction이 다르게 들어올 때마다 각자 처리 방식이 존재하여 다르게 동작한다면 cost가 그때 그때 달라 performance가 안 좋아질 수 있다는 것을 말한다.
- 즉각적인 동작은 load operation을 생략할 수 있다.
- e.g ) addi $s3, $s3, 4
- 이 명령어의 경우, 마지막 자리에 레지스터 파일의 주소를 넣는 것이 아닌 상수 4를 넣음으로써 추가적인 isntruction을 피했다. (MIPS의 경우 제공)
- 이 때의 변화란, 각 instruction이 다르게 들어올 때마다 각자 처리 방식이 존재하여 다르게 동작한다면 cost가 그때 그때 달라 performance가 안 좋아질 수 있다는 것을 말한다.
Register vs Memory
- register는 메모리의 접근 속도보다 빠르다.
- 메모리에서 load하고 store하는 것은 더 많은 명령어의 수행을 필요로 한다.
- 실행 시간 증가 -> bad !
- 따라서 컴파일러는 가능한 많이 register를 사용해야 한다.
Sign Extension in MIPS
- 같은 숫자를 표현하더라도 더 많은 비트를 사용한다.
- e.g ) addi $s1, $s2, 100의 경우
- 100을 16비트가 아닌 32비트로 extension하여 표현한다.
- 이 때 그냥 왼쪽 비트를 계속 쭉 복사해서 확장한다.
- 0000 0010 => 0000 0000 0000 0010
다음 포스팅은 MIPS ISA가 Encoding 할 때 사용하는 3가지 포맷인 R, I, J Format에 대해 자세히 다뤄보도록 하겠습니다.

반응형
'Computer Science > CS 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조]Instruction Set Architeture (MIPS) - 2 (0) | 2024.06.24 |
---|---|
[컴퓨터구조]Compuer Architecture - Performance (0) | 2024.06.22 |
RAID의 정의와 종류 (1) | 2023.11.13 |
하드디스크와 플래시 메모리에 대하여 (0) | 2023.11.10 |
RAM의 특징과 종류 / 메모리 보호 기법 (0) | 2023.11.10 |