728x90
- 본 문서는 KOCW 의 [컴퓨터구조-영남대학교 최규상 교수님]의 강의를 보고 작성한 문서입니다.
Instruction Set
- 컴퓨터의 명령 목록
- 다른 컴퓨터는 다른 instruction set을 갖는다.
- 많은 공통점을 가진다.
- 많은 특징을 공유
- 초기의 컴퓨터는 단순한 instruction set을 가짐
- 많은 현대의 컴퓨터 역시 단순한 instruction set을 가짐
- 초기에서 현대 컴퓨터로 오는 사이에 많은 복잡한 instruction set 을 가졌다.
- 단순 - 복잡 - 단순의 형태로 발전하였다.
Instruction Set Architecture (ISA)
- 간단히 architecture 라고도 한다.
- 하드웨어와 소프트웨어 중에 가장 낮은(low) 레벨의 시스템 소프트웨어이자 운영체제이며 소프트웨어 사이의 인터페이스이다
- 필요한 정보를 machine에 준다.
- 필요한 정보를 instruction에 담아서 cpu, 하드웨어에 주면 하드웨어에서 instruction을 실행
- 같은 소프트웨어를 실행할 때 성능과 비용에 따라 다른 실행(Implementation)이 가능하다.
- 같은 소프트웨어를 여러 개의 cpu에서 실행할 수 있다는 뜻
- 같은 cpu = 같은 instruction set
- ABI(Application Binary Interface) : 기본 instruction set 과 operating system 인터페이스의 조합
- instruction set 의 사용자 부분과 응용 프로그래머가 사용하는 operating system 인터페이스의 조합으로 컴퓨터간 바이너리 이식성의 표준을 정의한다.
- ex) microsoft word 는 집의 컴퓨터에서도 실행되고 (window) 학교의 컴퓨터에서도 실행된다 (window)
The MIPS Instruction Set
- instruction set의 한 종류
- MIPS : Million Instructions Per Second 의 약어 & CPU의 이름
- 스탠포드 대학교에서 만들고 MIPS Technologies (www.mips.com) 에서 상용화
- 임베디드 시스템에서 많이 사용되고 있다.
- 최근에는 ARM 이라는 프로세스가 많이 사용되는 추세
- ARM과 MIPS 는 많은 특성을 공유
Arithmetic Operations (산술 연산)
- 더하기(add) 및 빼기(subtract), 피연산자(operand) 3개
- 두 개의 소스와 하나의 답
- ex) add a, b, c # a gets b + c
- 디자인 원칙 1 : 규칙성을 사용해서 간단하게 만든다
-
- 규칙성을 주면 구현이 간단하다
- 간단하게 만들어야만 낮은 가격으로 높은 성능이 가능하다.
-
- ex)
- C code
-
f = (g + h) - (i + j);
-
- Compiled MIPS code (어셈블리 형태)
-
t0, t1 : 레지스터의 No, 실제로는 g, h 의 형태가 아니라 모두 레지스터에서 연산이 이루어진다.add t0, g, h # temp t0 = g + h add t1, i, j # temp t1 = i + j sub f, t0, t1 # f = t0 - t1
-
- C code
Register Operands
- 산술 연산(Arithmetic instruction)에는 레지스터 피연산자(register operand)를 사용한다.
- MIPS 는 32 * 32 bit 레지스터 파일을 가진다
- 자주 액세스하는 데이터에 사용한다.
- 0부터 31까지 번호가 붙는다
- 32bit 데이터를 word 라고 부른다
- 어셈블러 이름
- 임시적인 값 : $t0, $t1, ..., $t9
- 저장 값 : $s0, $s1, ..., $s7
- 디자인 원칙 2 : 작을수록 더 빠르다
- main memory : millions of locations 에 비해 레지스터 : 32 * 32 bit
- 메인 메모리에 비해 굉장히 작다
- -> 레지스터의 경우 메인 메모리에 비해 약 1000배 가까이 빠르다
- ex)
- C code
-
f = (g + h) - (i + j); f, ..., j in $s0, ..., $s4
-
- Compiled MIPS code
-
add $t0, $s1, $s2 add $t1, $s3, $s4 sub $s0, $t0, $t1
-
- C code
Byte addresses
- 8bit = 1byte
- 대부분의 컴퓨터에서는 메모리를 바이트단위로 다룬다.
- Alignment restriction(정렬 제한) : 대부분의 컴퓨터 (32bit 프로세서) 메모리 address 가 word 단위로 맞춰진다
- 데이터를 워드에 어떤 방식으로 저장할 것인가?
- Big Endian : 맨 왼쪽 바이트를 워드 주소로 사용
- ex) IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA
- Little Endian : 맨 오른쪽 바이트를 워드 주소로 사용
- ex) Intel 80*86, DEC Vax, DEC Alpha (Windows NT)
- Big Endian : 맨 왼쪽 바이트를 워드 주소로 사용

Memory Operands
- 메인 메모리는 합성 메모리에 사용된다
- Arrays, structures, dynamic data
- 산술 연산 적용
- 메모리에서 레지스터로 데이터를 로딩해야한다
- 연산의 결과를 레지스터에서 메모리로 저장해야 한다
- 메모리는 바이트 단위로 액세스한다
- 각각의 주소는 8비트 바이트를 식별한다.
- 워드 단위로 메모리에 정렬된다
- 주소는 4의 제곱으로 된다
- MIPS 는 Big Endian 이다
- 가장 큰 바이트에 가장 작은 워드의 주소 저장
- Little Endian : 가장 작은 바이트에 가장 작은 워드의 주소 저장
- ex 1)
- C code
-
g = h + A[8]; g in $s1, h in $s2, base address of A in $s3
-
- Compiled MIPS code
- index 8 requires offset of 32
- 4 bytes per word
-
lw $t0, 32($s3) # load word add $s1, $s2, $t0
- index 8 requires offset of 32
- C code
- ex 2)
- C code
-
A[12] = h + A[8]; h in $s2, base address of A in $s3
-
- Compiled MIPS code
- index 8 requires offset of 32
-
lw $t0, 32($s3) # load word add $t0, $s2, $t0 sw $t0, 48($s3) # store word
- C code
Registers vs Memory
- 레지스터는 메모리보다 액세스 속도가 빠르다
- 메모리에 있는 데이터의 연산은 값을 로드하고 연산 후 다시 메모리에 저장하는 방식이다
- Load-Store Architecture
- ex) MIPS
- 실행을 위해 더 많은 명령어를 필요로 한다
- 컴파일러는 레지스터를 반드시 사용하는데 이 때, 효율적으로 잘 사용할수록 메모리를 액세스하는 횟수가 줄어든다.
- 레지스터 최적화는 매우 중요하다
Immediate Operands
- 하나의 operand 가 상수값을 가지는 것
-
addi $s3, $s3, 4
-
- 뺄셈에서 음수는 불가능하다
-
addi $s2, $s1, -1
-
- 디자인 원칙 3 : 일반 케이스를 빠르게 만든다
- 작은 상수는 일반적이다
- immediate operand 는 load instruction의 수를 줄여준다
The Constant Zero
- MIPS 레지스터 0 ($zero)가 정수 0이다
- 상수 연산에 유용하다
- ex) move between registers
-
add $t2, $s1, $zero -> $t2 = $s1 + $zero => s1의 값을 t2로 옯길 수 있다
728x90
'Alchitecture' 카테고리의 다른 글
| 프로시저의 6가지 실행 단계 (0) | 2022.01.05 |
|---|---|
| ISA와 MIPS (0) | 2022.01.04 |
| 전력 장벽과 멀티코어, 성능 벤치마크 (0) | 2021.12.31 |
| 컴퓨터의 성능 (0) | 2021.12.30 |
| 프로세서와 메모리 그리고 성능 (0) | 2021.12.29 |