1. 명령어 세트(Instruction Set) -> CPU 기능을 위해서 정의된 명령어들의 집합

  • CPU의 기능은 이들에 의해 결정된다.
  • 이들의 수와 종류는 CPU에 따라 많이 다르다.(아키텍처가 다르기 때문  ex. x86, amd64)


2. 명령어 세트 정의를 위해 결정되어야 할 항목


       operand : 컴퓨터에서, 연산에 필요하거나 연산으로 나타나는 수치를 통틀어 이르는 말(출처 : 네이버 백과사전)


    A. 오퍼랜드(operand)

        ① 오퍼랜드의 크기와 형태

        ② 정의 방법


    B. 오퍼랜드의 CPU 기억장소

        ① 스택(Stack)

        ② 범용 레지스터(GPR)

        ③ 누산기(Accumulator)


    C. 연산 명령어

        : CPU 명령어가 수행할 연산들의 수와 종류


    D. 오퍼랜드/명령어

        : 일반적인 명령어가 처리 가능한 오퍼랜드의 수


    E. 오퍼랜드의 위치

        ① CPU의 외부 혹은 내부

        ② Reg-to-Reg, Mem-to-Reg, Mem-to-Mem(-> 데이터를 주고 받는 경로를 의미함)



    2-1. 부연 설명

          여기서, operand의 CPU 기억장소와 명령어의 종류 및 형식, 명령어의 주소지정 방식에 대해서는 좀 더 설명할 것이 있다.


          A. operand의 CPU 기억장소

              1) stack architecture(CPU 초기 버전에 쓰임)

                 


                  간단한 명령어로 직관적으로 짤 수 있다는 장점이 있으나, 그러기엔 많은 코드를 써야는 단점이 존재한다.


              2) accumulator architecture


위와 마찬가지로 간단한 명령어로 직관적으로 짤 수 있고 내부 구조를 최소화 할 수 있는 장점이 있으나, 메모리 사용량이 높아지는 단점이 있다.


              3) General-Purpose Register architecture(GPR)


가장 보편적인 모델이라는 장점이 있지만, 명렁어의 길이가 길어지는 단점이 있다.



          B. 명령어의 종류

             1) 데이터 전송명령

                 : Reg-Reg, Reg-Mem, Mem-Mem 간에 데이터를 이동시키는 명령


             2) 산술 연산명령

                 : 2의 보수 및 부동소수점 수에 관한 덧셈, 뺄셈, 곱셈 및 나눗셈과 같은 기본적인 산술 연산 명령


             3) 논리 연산명령

                 : 데이터의 각 비트들 간에 대한 논리 연산 명령


             4) I/O(입출력) 명렁

                 : CPU와 External I/O 장치들 간의 데이터를 이동시키는 명령


             5) 프로그램 제어명령

                 : 각 명령어의 실행 순서를 변경하는 Branch 명령과 Subroutine call 및 return 명령



          C. 명령어의 형식

             ① 명령어는 CPU가 한 번에 처리할 수 있는 비트 수의 크기(word / cpu마다 다름)로 정의된다.

             ② 명령어를 구성하는 비트는 용도에 따라 몇개의 Field로 나누어진다.

             ③ 기본적으로는 op-code field와 operand field로 구성된다.

             ④ operand field는 컴퓨터의 처리 능력에 따라 여러 개의 operand field로 구성된다.



오퍼레이션 코드(op-code) : CPU에서 실행될 연산(load, store, add 등)을 지정

/

오퍼랜드(operand) : 연산을 실행하는 데 필요한 데이터 혹은 주소 값을 포함한다.


             1) op-code field의 비트 수

                CPU에서 수행될 연산 종류의 수에 따라 비트의 수가 결정된다. ex) 연산의 종류가 8가지 -> 8=2^3 이므로 3비트 필요

                ② 비트 수가 증가할수록 많은 연산의 정의가 가능하나, operand field 비트 수가 감소(-> 32bit cpu보다 64bit cpu가 더 좋은 이유)


             2) operand field의 비트 수

                operand의 종류에 따라 결정됨

                ② immediate value : 표현 가능한 수의 범위 결정

                ③ memory address : CPU가 직접 주소를 지정할 경우 기억장치 영역의 범위가 결정됨(ex. 10bit면 0~1023)

                ④ register no. : GPR의 수를 결정한다.


             3) 명령어 형식의 예

                A) 1-address instruction


                B) 2-address instruction(operand가 모두 레지스터인 경우)


@는 address, #은 immediate value를 의미함



                B-2) 2-address instruction(오퍼랜드 한 개만 레지스터인 경우)



※교수님께 여쭤보니 명령어의 경우 아키텍처별로 상이하기 때문에 LOAD R1, #100 같은 경우 상황에 따라 R1 <- M[R+100]도 맞고, R1 <- 100 도 맞다다고 하심. 그렇지만 대다수의 엔지니어들은 뒤의 표현이 맞다고 함



                C) 3-address instruction(모든 operand가 레지스터인 경우)


                C-1) 3-address instruction(operand 두 개는 레지스터인 경우)




          D. 명령어의 형식에 따른 실행 예제



             1) 1-address instruction


             2) 2-address instruction


             3) 3-address instruction


          E. 명령어 addressing mode 방식

              * 사용목적

                A) 정해진 명령어의 비트들은 그 수에 있어 매우 제한적

                B) 그 안에 오퍼랜드들만으로 메모리를 지정하는 것 또한 매우 제한적

                C) 더 큰 용량의 메모리에 접근하기 위해서는 직접/간접으로 다양한 방법이 요구됨

                D) 이러한 방법은 아키텍쳐마다 다름



Instruction-addressing mode-address-data  ->  간접

Instruction-addressing mode-data  ->  직접


              1) 즉치(immediate addressing mode)

                   


operand에 immediate 값이 들어있으므로 인출할 필요가 없다.


              2) 묵시적(implied addressing mode)


오퍼랜드가 없는 명령어나, 오퍼랜드가 1개인 명령어에 이용된다.



              3) 직접(direct addressing mode)


'데이터에 할당된 메모리가 커지면 제한적'이라는 단점을 가지고 있다. 이를 보완한 것이 뒤에 나올 간접 지정모드이다.


              4) 간접(indirect addressing mode)



              5) 레지스터(register addressing mode)


제일 좋아보이는데 안 쓰는 이유? 레지스터가 비싸기 때문...


              6) 레지스터 간접(register indirect addressing mode)



              7) 변위(displacement addressing mode)



                  A) relative addressing

                      레지스터에는 PC가, 다음 명령어의 주소는 주소 필드에(위의 imm), 유효 주소(위 memory의 data)에는 (다음 명령어 주소-PC)값이 저장됨.                       주소 비트를 절약할 수 있는 장점이 있다. 주로 branch 명령어에 사용됨(ex. jump)


                  B) indexed addressing



                     유효주소 data는 인덱스 레지스터의 내용 + 변위 값을, 레지스터는 인덱스 레지스터를, 주소 필드는 배열의 첫번째 값의 번지를 갖는다.

                     배열을 쓸 때 유용하다.


                  C) base-register addressing

                      베이스 레지스터의 내용과 변위를 더하여 유효 주소를 결정하는 방식(어디에 쓰이나 찾아보려고 했으나 찾기 어렵다)

'컴퓨터구조 > CPU' 카테고리의 다른 글

제어 유닛(Control Unit)  (0) 2016.11.05
레지스터  (0) 2016.11.05
내부구조(구성)  (0) 2016.11.05

3. 제어 유닛(Control Unit)

     ① 명령어 코드의 해독

     ② 마이크로프로그램 제어

     ③ 해독 후 명령어 실행에 필요한 각종 제어 신호들을 발생


         A. 제어유닛(마이크로프로그램 제어)의 구조


<Control Unit(=micro-program control)의 구조>


             1) 명령어 해독기

                 ① 명령어 레지스터(IR)로부터 읽혀진 op-code를 해독한다.

                 ② 해독된 연산을 실행하기 위한 마이크로서브루틴의 시작 주소를 결정한다.


             2) 제어 주소 레지스터

                 ① 다음 번에 실행할 마이크로명령어의 주소 정보가 저장되는 레지스터이다.

                 ② 주소는 제어 기억장치의 위치를 말함.


             3) 제어 기억장치

                 : 마이크로명령어들로 이루어진 마이크로프로그램을 저장하는 내부 기억장치이다.


             4) 제어 버퍼 레지스터

                 : 제어 기억장치로부터 읽혀진 마이크로명령어를 일시적으로 저장하는 레지스터이다.


             5) 서브루틴 레지스터

                 : 마이크로프로그램에서 서브루틴이 호출되는 경우에 현재의 제어주소 레지스터(CAR) 내용을 일시적으로 저장하는 레지스터이다.


             6) 순서제어 모듈

                 : 마이크로명령어의 실행 순서를 결정하는 회로들의 집합이다.


         B. 제어 유닛의 기능

             1) 명령어 코드의 해독

             2) 해독 후 명령어 실행에 필요한 각종 제어 신호들을 발생

                 A) 마이크로명령어(micro)

                     ① 명령어 사이클의 각 주기에서 실행되는 마이크로-연산에 대응되는 비트들로 이루어진 단어

                     ② 이들은 모든 datapath의 제어신호를 명시

                     ③ 다음에 수행될 또 다른 마이크로 명령어를 결정한다.

                     ④ 제어 단어(control word)라고도 함


                 B) 마이크로코드

                     : 마이크로 명령어 형식에 따라 각 필드에 2진수로 이루어진 비트패턴


                 C) 마이크로프로그램

                     ① 마이크로 명령어의 집합 

                     ② 명령어 해석기

                     ③ 이것은 하드웨어 변경 없이 컴퓨터 시스템 제어의 수정 가능


                 D) 마이크로서브루틴(microsubroutine)

                     ① 공통 루틴(common routine)

                     ② 마이크로 명령어의 그룹 -> 인출, 실행 ...

                     ③ 하드웨어 비용 감소




이로써 CPU의 구성 요소인 레지스터와 제어 유닛의 구성과 기능에 대해 알아보았다.

CPU의 동작 과정은 그 안에서 동작하는 명령어에 대해서 알아야 하기 때문에 다음 게시글부터는 명령어에 대해 알아보도록 하자

'컴퓨터구조 > CPU' 카테고리의 다른 글

명령어  (0) 2016.11.09
레지스터  (0) 2016.11.05
내부구조(구성)  (0) 2016.11.05

이 바로 전에 포스팅했던 'CPU의 내부구조'에서 나왔던 ALU를 건너뛰고 레지스터를 바로 설명하는 이유는 ALU는 '산술 연산을 한다' 정도가 중요하지 그 안에 어떤 구성요소가 있는지는 아직까지 중요하지 않아보인다. 그러기에 나중에 연산 작업이 나올 때 등장할 것이고, ALU를 건너뛰고 레지스터의 구성부터 설명을 시작하려고 한다.

대체적으로 이 CPU 부분은 '어떤 것이 어떤 역할을 한다' 구분해서 설명하기가 까다로운 것이 구성요소 모두가 상호작용을 하기에 모든 것을 한 글로 설명하자니 너무 길어질 것 같아서 내용이 많은 부분만 조금씩 잘라서 하나씩 설명하려고 한다.




2. 레지스터(Register Set)

   ① CPU 내부의 다양한 레지스터들의 집합

   ② 액세스 속도가 기억장치 중에서 가장 빠르다.

   ③ (용량이)제한적이다.

 

   A. 특수기능레지스터(SPR)

      1) Program Counter(PC)

         ① 다음에 인출할(= 다음에 진행할 명령어) 주소값을 가지고 있는 레지스터

         ② 각 명령어가 인출된 후에는 자동적으로 일정 크기(명령어 길이 : 워드)만큼 증가한다.

         ③ 분기(Branch) 또는 조건(Conditional) 명령어가 실행되는 경우에는 해당 명령어가 있는 목적지 주소값으로 갱신된다.

 

      2) Accumulator(AC)

         ① 처리할 데이터를 일시적으로 저장하는 레지스터

         ② 레지스터의 길이 : CPU가 한 번에 처리할 수 있느 데이터 비트수(워드의 길이)

 

      3) Instruction Register(IR) : 가장 최근에 지정된 주소 번지의 주기억장치로붵 CPU로 인출된 명령어 코드가 저장되는 레지스터

 

      4) Stackpointer Register(SP)

          : 이미 메모리에 설정된 stack의 시작 번지의 주소값을 가지고 있으며, 스택에 정보가 쌓이거나 줄어듦에 따라 그 값이 증가/감소하는 레지스터

 

      5) Memory Address Register(MAR)

          : 다음 번에 일출될 명령어의 주소정보는 PC(Program Counter)에 있고, 현재 CPU 내부로 부러올 명령어의 주소값을 메모리로 전달되기 전에

            그것을 일시적으로 저장하는 레지스터(주소값이 CPU 밖으로 나갈 때 임시로 들리는 문)

 

      6) Memory Data Register(MDR) : 주기억장치로부터 Read/Write(읽혀지거나 쓰여질) 데이터를 일시적으로 저장하는 레지스터

 

   B. 범용레지스터(GPR)

'컴퓨터구조 > CPU' 카테고리의 다른 글

명령어  (0) 2016.11.09
제어 유닛(Control Unit)  (0) 2016.11.05
내부구조(구성)  (0) 2016.11.05

CPU : Central Processing Unit의 약자

사람으로 말하면 두뇌라고 얘기할 수 있다. (정확히 말하면 기억장치, 그래픽카드 등을 포함한 여럿을 포함해야 두뇌라고 볼 수 있다.)


아무리 좋은 메모리가 있고, 좋은 그래픽카드가 있다고 하더라도 두뇌가 없으면 식물인간처럼 아무 것도 할수가 없다.

이처럼, CPU는 그만큼 중요한 존재이기에 컴퓨터에서 가장 복잡하다고 볼 수 있는 요소이다.


공부하는 전공자의 입장에서 조금씩이나마 내용을 정리하는 뜻에서 글을 올려보려고 한다.



<상명대 박병수 교수님의 강의자료 中>


이번 게시글에서는 CPU의 기능이 어떻게 동작하는지보다는 어떻게 구성되어 있는지에 대해 설명하도록 하겠다.


컴퓨터 설계에 앞서 CPU의 구조를 먼저 살펴보자.


CPU는 기본적으로



1. 산술논리연산장치(Arithmetic and Logic Unit : ALU)


2. 레지스터(Register Set)

   1) Program Counter(PC)

   2) Accumulator(AC)

   3) Instruction Register(IR)

   4) Stackpointer Register(SP)

   5) Memory Address Register(MAR)

   6) Memory Data Register(MDR)


3. 제어 유닛(Control Unit)


4. CPU 내부 버스(CPU Internal Bus)



이렇게 구성이 된다.


각 구성들이 어떤 역할을 하는지는 다음 번 게시글부터 차근차근 하나씩 설명해 나가겠다.


'컴퓨터구조 > CPU' 카테고리의 다른 글

명령어  (0) 2016.11.09
제어 유닛(Control Unit)  (0) 2016.11.05
레지스터  (0) 2016.11.05

+ Recent posts