Instruction And Memory

Reading time ~3 minutes

메모리와 명령어

메모리와 데이터는 컴퓨터의 메모리에 적재돼야 CPU가 사용할 수 있다. 명령어를 살펴보기 위해서는 ‘메모리의 속성’을 알아야한다. 메모리의 속성은 워드와 주소, 주소 지정 단위로 나타낼 수 있다.

Endian

여러 개의 연속된 대상을 1차원 공간에 배열하는 방식을 말하는데 예를 들어 32비트 컴퓨터의 경우 메모리 워드에 32개의 비트를 배열하는 방법이다. 다른 의미로는 4바이트를 배열하는 방법을 말한다. 일반적으로 4바이트를 어떻게 배열하느냐를 의미한다. 엔디언 방식에서 배열의 방식에 따른 성능 차이는 없다고 알려져 있으나, 컴파일된 실행파일을 다은 아키텍처로 이식할 때는 워드 내부의 비트나 바이트 배열의 순서에 따라 의미를 달리한다.

엔디언 방식에는 주로 ‘Big Endian’과 ‘Little Endian’ 방식을 사용한다. 빅 엔디언 방식은 왼쪽에서 오른쪽으로 바이트를 배열하는 것으로, 사람이 숫자를 쓰는 방법과 마찬가지로 큰 단위의 바이트가 앞자리에 위치한다. 이 방식에서는 MSB(Most Significant Bit) 가 포함된 바이트의 주소가 워드 주소가 된다. 이에 비해 리틀 엔디언 방식은 반대 방향으로 바이트를 배열하므로 작은 단위의 바이트가 앞자리에 위치해 각 워드의 LSB(Least Significant Bit) 가 포함된 바이트의 주소가 워드 주소가 된다.

Big, Little Endian

빅 엔디언 방식의 대표적인 예는 MIPS, IBM, Motorola, Sun를 비롯한 대부분의 RISC 아키텍쳐이며, 리틀 엔디언은 Intel, DEC 등이 있다.

빅 엔디언과 리틀 엔디언의 유래

빅 엔디언과 리틀 엔디언은 조너선 스위프트의 소설 ‘걸리버 여행기’에 나오는 소인국 릴리퍼트의 이야기 중 달걀의 뭉툭한 끝(big-end)을 먼저 깨는 사람과 뾰족한 끝(little-end)을 먼저 깨는 사람 사이의 격론에서 따온 이름이다.


주소 지정 방식

컴퓨터에서 연산을 수행하려면 메모리에서 필요한 데이터의 주소를 알아야한다. 필요한 데이터인 명령어는 피연산자 필드를 사용해 데이터의 위치에 대한 정보를 제공한다. 주소 지정 방식(addressing mode)은 명령어의 일부인 피연산자 필드를 사용하여 데이터가 실제 위치한 유효 주소 (effective address) 를 결정하는 방법이다. 피연산자 필드와 데이터 실제 위치의 관계를 나타내기 위해 다음과 같은 표기를 사용한다.

  • r : 피연산자 필드가 명시하는 레지스터 주소
  • a : 피연산자 필드가 명시하는 메모리 주소
  • ea : 참조되는 데이터를 포함하는 장소의 실제 주소, 즉 유효 주소
  • Reg[x] : 레지스터 x의 내용
  • M[x] : 메모리 x번지의 내용

0-단계 주소 지정방식

0-단계 주소 지정 방식은 데이터가 있는 위치를 파악하기 위해 특별한 과정이 필요없다. 즉시 주소 지정방식과 묵시 주소 지정방식으로 구분된다.

  1. 즉시 주소 지정
    • 피연산자 필드에 필요한 데이터가 직접 들어가 있는 방식이다.
  2. 묵시 주소 지정
    • 누산기 혹은 기타 정해진 장소에 데이터가 이미 저장되어 있는 방식이다.

1-단계 주소 지정방식

1-단계 주소 지정방식은 데이터의 위치를 확정하기 위해 주소 계산이나 읽기 연산 과정을 한 번 수행하는 방식이다. 데이터의 위치를 확정하기 위해 피연산자 필드에 필요한 데이터가 위치한 주소를 저장한다. 피연산자 필드에 저장된 주소는 레지스터의 주소나 메모리 주소일 수 있다. 이 필드 값을 활용해 필요한 데이터를 참조할 수 있다.

2-단계 주소 지정방식

2-단계 주소 지정방식은 데이터의 유효주소를 확정하기 위해 주소 계산이나 읽기 연산 과정을 두 번 수행한다. 이 방식은 데이터가 메모리에 저장되므로 많은 데이터의 위치를 명시할 수 있다.

  1. 레지스터 간접 주소 지정
    • 피연산자 필드가 레지스터 주소를 명시하며, 레지스터의 내용이 데이터를 위한 메모리의 주소를 명시한다.
    • eg = Reg[r]
      
  2. 메모리 간접 주소 지정
    • 레지스터 간접 주소 지정과 비슷하게 피연산자 필드가 메모리 주소를 명시하고 메모리 주소에 있는 값이 데이터이다.
    • eg = M[a]
      
  3. 변위 주소 지정
    • 명령어에 포한된 2개의 피연산자 필드를 이용해 데이터가 있는 메모리의 주소를 확정하는 방식으로, 색인 주소 지정과 베이스 주소지정이 있다.
    • eg = Reg[r] + a
      
  4. PC 상대 주소 지정
    • 베이스 레지스터로 프로그램 계수기를 사용하는 베이스 주소 지정의 특별한 경우이다. 변위 주소를 명시할 피연산자 필드 하나만 있으면 된다. 피연산자 필드에는 오프셋이 들어가 있다.
    • eg = PC + a
      

명령어 집합

하드웨어가 이해할 수 있는 어휘를 의미하는 명령어 집합은 복잡도에 따라 크게 CISCRISC로 나뉜다.

CISC

초기의 컴퓨터의 발전 문제

  • 메모리가 매우 고가이고 속도가 느림
  • 프로그래밍 기술의 발전이 느려 소프트웨어 개발이 어려움

당시에는 메모리 용량을 적게 차지하는 프로그램을 구성할 수 있어야 좋은 아키텍쳐였다. 코드의 밀도를 높이고 소규모 라인의 프로그램으로 많은 작업을 수행하기 위해 강력한 명령어를 집합에 추가하는 추세였다. 또한 소프트웨어 개발 비용도 만만치 않아 강력한 고급 프로그래밍 언어도 개발되더라도 이를 지원하기 위해 복잡한 명령어를 추가한 설계가 주를 이뤘다. 이와 같은 강력한 모델의 명령어 집합 구조를 CISC (complex instruction set computer) 라고 한다.

높은 코드 밀도와 강력한 명령어를 추구하려면 가변 명령어 형식을 사용할 수 밖에 없었다. 이 가변 명령어 형식은 많은 종류의 주소 지정방식을 동반하고, 연산 부호를 해독할 때 가지 명령어의 길이를 알 수 없다. 따라서 CISC 구조를 사용하면 명령어를 효율적으로 인출할 수 없고 데이터의 전송 효율도 나빠진다.

RISC

연구에 의하면 CISC 구조의 강력한 연산과 복잡한 주소 지정방식의 사용 빈도가 매우 낮으며, 일부 데이터 형식은 거의 사용되지 않는 것으로 알려졌다. 더군다나 복잡한 연산은 CPU 설계가지 영향을 미치고 데이터를 가져오는 방식에도 영향을 미치며, 제어 장치의 구성과 구현에 영향을 미치게 된다. 복잡한 명령어를 사용함으로써 간단한 명령어의 해석까지 오래 걸리게 만들며 실행시간도 증가시켰다.

이런 문제점을 인식하고 이러한 복잡한 명령어들을 포함하는 것이 바람직한지 설계자들은 의문을 품었고, 다른 각도에서 접근하기 시작했다.

  1. 단순 명령어
    • 전형적으로 하나의 사이클 내에 실행되기 때문에 실행 속도가 빠르다.
  2. 짧은 사이클 시간
    • 단순 명령어를 실행하는데 데이터 경로가 간단하므로 한 싸이클의 시간은 짧다.
  3. 적재, 저장 구조
    • 적재 및 저장 명령어를 통해서만 메모리에 접근이 허용된다.
  4. 고정 길이 명령어
    • 명령어의 길이가 고정되어 있어 fetch 과정이 빠르다.
  5. 단순 명령어 형식
    • 명령어를 빠르게 해독 할 수 있다.
  6. 제한된 종류의 주소 지정 방식
    • 유효 주소를 계산하는데 속도를 향상시킬 수 있다.
  7. 하버드 아키텍쳐

CISC RISC 비교

comparison 출처 : slideshare - Flashdomain

Dooray!

Dooray CalDav, IMAP 사용법 Continue reading

Vue.js

Published on February 10, 2018

Java_tuning5

Published on March 06, 2017