본문 바로가기
Alchitecture

컴퓨터 하드웨어의 연산과 피연산자부

by 보라코끼리 2022. 1. 3.
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 (어셈블리 형태)
      • add t0, g, h  # temp t0 = g + h
        add t1, i, j  # temp t1 = i + j
        sub f, t0, t1 # f = t0 - t1
        t0, t1 : 레지스터의 No, 실제로는 g, h 의 형태가 아니라 모두 레지스터에서 연산이 이루어진다.

 

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

 

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)

 

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
  • 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

 

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