본문 바로가기
CS/컴퓨터구조

중앙 처리장치(CPU)

by chogigang 2023. 11. 10.

컴퓨터의 5대 기능 가운데 제어와 연산을 실행하는 중앙처리장치(cpu)를 들어가 봅시다

 

 

 

제어를 담당하고 있으며 이 부분을 제어장치 또는 제어기구 라고 합니다 실행되는 명령의 어드레스를 근거로 주기억장치에서 CPU에 명령을 내립니다, 그리고 어떤 명령을 해동해 필요한 동작지시를 다른 장치에 내립니다,

 

연산을 행하는 부분은 연산장치 또는 연산기구라고 하고 여러 가지 형식을 가진 데이터에 대해서 사칙연산, 논리연산이나 대소 비교 등을 실행합니다. 연산장치는 명령에 대응한 여러 가지 회로로부터 구성되어 있습니다.

 

이러한 기능을 수행하기 위한 중앙처리장치의 구성요소들을 세분화해서 보면 연산기능을 수행하는 연산장치, 처리해야 할 데이터들을 일시적으로 기억해 두는 범용 레지스터, 특수한 기능을 수행하는 특수 레지스터, 제어 기능을 수행하는 제어장치, 데이터 전달 기능을 수행하는 내부 버스 들로 구성되어 있습니다.

 

 

 

중앙처리 장치에는 기억 클래스가 있습니다.

 

[auto] 자동 변수

register 레지스터 변수

 

Static(내부, 외부) 정적변수

(전역 변수)

extern (외부변수 )(전역 변수)

 

 

 

CPU 내의 기억장치인 레지스터 그리고 이들에 의해 명령 이 수행되도록 제어기, 장치 상호 간에 신호의 전달을 위한 신호 회선인 내부버스로 구성되어 있습니다.

 

 

연산기

CPU 내의 연산 기능을 가진 요소는 연산기(ALU)이며 수치 연산과 논리 연산 등의 기능을 갖고 있습니다. 즉 단순한 2진 가산기에서부터 부동 소수점 연산기에 이르기까지 다양하며 단순한 연산기로 복잡한 계산을 할 때는 여러 가지 연산 명령의 조합으로 된 프로그램을 처리하게 되는데 대부분의 컴퓨터는 2의 보수 체계로써 연산을 실행합니다

 

  • 2진의 가감산(사칙연산 )
  • 논리 연산
  • 보수 연산
  • 시프트 라이트와(shift right) 시프트 레프트(shift left)

ALU의 기본 원리는 밑그림과 똑같습니다

 

 

 

ALU와 누산기

ALU와 누산기가 조합되어 연산하는 기능을 살펴봅시다.

 

 

 

 

플래그 레지스터

f레지스터 또는 프로세서 상황 워드라고 부르며 누산기와 함께 쌍으로 되어 있고 ALU에서의 계산 결과에 의해서 결과 상태를 나타내는 것이다. 

 

감산 플래그(N): 바로 앞에 수행된 가감산 명령의 형태를 정의하는 데 사용되며 감산인 경우 1세트(1)됩니다.

중간 캐리(H) :BCD 연산에서 4비트 중 최상위 비트에서 자리올림 또는 빌림이 생겼을 때 1세트(1)됩니다.

 

 

레지스터

레지스터는 CPU 내부에 있는 소규모의 일시적인 기억장치입니다

 

2진 소자로 구성되어 있고 메모리와 다른 점은 수효가 훨씬 적다는 것입니다.

 

 

 

프로그램 카운터 PC (Program counter)

컴퓨터는 프로그램의 최초의 명령이 들어 있는 주소에서 시작하여 차례로 명령을 실행해 나가는데 CPU가 현재 메모리의 주소를 실행하고 다음에 실행할 명령은 어떤 주소에 있는가를 모르면 정상적인 동작을 할 수 없게 됩니다. 따라서 컴퓨터가 현재 실행 중인 명령 다음에 실행해야 될 명령이 보관된 메모리 주소를 기억하게 되는 것입니다 

 

 

 

MAR(Memory Address Register: 메모리 번지 레지스터)

메모리의 번지를 저장하거나 메모리의 위치를 저장하는 데 사용됩니다.

 

메모리 버퍼 레지스터(MBR)

메모리부터 읽어 낸 워드를 받아들여 그 값을 보존 합니다.

 

 

명령 레지스터(IR Instruction Register)

명령 레지스터는 컴퓨터의 CPU가 어떤 명령을 호출하여 그 명령이 무슨 내용인가를 판독하기 위하여 명령을 보관하는 레지스터입니다.

명령 해독기가 있으며 그 명령이 갖는 의미가 해독되 타이밍이 조정된 후에 제어 신호로서 각 구성 요소에 전달됩니다.

 

 

누산기(ACC: accumulator)

누산기는 계산에 사용되는 일시 보관 레지스터로서 산술 또는 논리 연산에 사용됩니다 예를 들면 덧셈을 할 때는 더하는 수와 더해지는 수, 합을 보관하기 위한 레지스터가 필요하게 됩니다.

 

가산기와 레지스터를 조합한 것을 누산기라 하며 가산기와 레지스터가 일체가 되어 카운터로서 등장 하게 됩니다. 누산기는 대부분

컴퓨터 내에서 가장 많이 사용되는 레지스터이며 보통 컴퓨터는 한 개의 누산기만을 갖고 있지만 어떤 컴퓨터는 여러 개의 누산기를 가짐으로써 계산 명령 실행 중에도 누산기의 내용을 다른 곳에 보관하지 않아도 되게 되어 있습니다.

 

 

인덱스 레지스터(IX: index Register)

인덱스 레지스터는 메모리 어드레스를 지정하는 데 사용됩니다 인덱스 레지스터는 명령에 의해서 저장된 메모리 어드레스 수와 더불어 새로운 메모리 어드레스를 저장하게 되는데 이때 새로운 주소를 데이터의 실제 주소 또는 이 팩티브 어드레스 라고 합니다 IX 레지스터는 명령을 바꾸지 않고 이 IX 레지스터의 내용만큼 변경시켜 이 팩티브 어드레스를 다르게 할 수 있으며 이와 같은 특성을 이용하여 IX 레지스터는 카운터로  크게 활용됩니다.

 

 

status 레지스터

CPU의 동작에 있어서  제어 조건, 판정 결과, 캐리 부호 또는 외부의 특별한 신호를 기억하고 지시하는 비트(bit)의 집합으로 되어 있으며 각 비트는 각각의 CPU의 상태를 나타내는 표시이므로 플래그(flag)라고 합니다. 이 플래그는 마이크로 컴퓨터에서 8비트의 레지스터로 구성되어 있으며 내용은 캐리(carry)및 보로우(borrow) , 인터렙트 인에이블(interrupt enable) , 네거티브(negative), zero, overflow, half-carry의 발생들을 표시합니다

 

 

 

 

 

명령 수행

컴퓨터는 기본적으로 프로그램에 의해 수행되며 실질적으로 CPU내의 프로그램으로 기술된 명령을 수행함으로써 작업을 행합니다

 

결국 CPU의 동작을 산술 논리 연산, 자료 처리, 컴퓨터의 제어 등의 작업을 수행할 수 있는 명령에 의해 결정됩니다.

 

 

 

 

 

인출(fetch)된 명령어는 컴퓨터 내에서 일련의 비트(bit)로 표현되고 명령어는 그 구성 요소에 따라 몇 부분을 나눌 수 있는데, 이러한 명령어의 구성 형태를 명령어 형식(instruction format ) 또는 명령어 코드 라고합니다

 

명령어 코드는 실행해야 할 작업을 나타내는 비트들의 집합입니다 보통 여러 부분으로 구분되어지는데 가장 기본이 되는 것은 연산자(op 코드) 부입니다. 즉, 사칙연산, 보수 연산 등과 같은 작동을 정의하는 부분으로 동작 코드(operation code) 부라고도 합니다 그런데

이 명령 코드가 실행되려면 데이터가 필요합니다.

 

 

 

그래서 명령어 코드에는 명령뿐만 아니라 피연산자 가 들어있는 레지스터나 어드레스가 나타나 있어야 하고 덧붙여 결과가 저장될 곳도 나타나 있어야 합니다. 그러나 경우에 따라서는 명령어 크기를 줄이고 전체 프로그램이 차지하는 기억 장소를 줄이려고 피연산자를 함축적으로 처리하기도 합니다.

 

 

 

오버랜드

연산의 대상을 의미하며 처리 대상이 되는 자료를 뜻합니다.

 

  1. 문자(character)
  2. 숫자(number)
  3. 논리 데이터(logical data) :일반적으로 워드(word)나 주소 지정이 가능한 단위(byte, half word)는 하나의 단위 데이터로 취급합니다.
  4. 주소(address

등이 있습니다.

 

명령어의 기능

컴퓨터는 사용자가 데이터 처리 작업을 수행할 수 있도록 고급 언어로 프로그램을 작성하였다면, 그 프로그램을 실행하기 위해 기계 명령어들로 번역해야 합니다. 명령어는 0과 1의 조합으로 이루어지며 이 조합 역시 기종에 따라 각각 다릅니다. 그러나 여기서는 보편적이고 기본적인 명령어들을 기능별로 분류해 봅시다

 

  1. 전달기능(transfer operation)
    연산을 할 경우에는 두 수는 제각기 다른 주소의 기억장치 속에 들어 있으므로 계산에 임하여 이들 중 하나의 수를 먼저 누산기에 옮겨 놓아야 합니다 누산기는 연산을 실행할 경우 연산의 과정과 필요한 일시적인 기억장치입니다.
  2. 함수 연산 기능(function operation)
    연산을 실행하는 명령은 산술적 연산과 논리적 연산을 포함하는데 산술적 연산의 기본은 사칙연산과 시프트(shift), 컴플리먼트(complement), 로테이트(rotate)이며 논리적 연산의 기본은 AND , OR, NOT 등의 조합입니다.
  3. 제어 기능(control operation)
    동일한 명령어를 여러 번 반복 수행한 다거나 어떤 조건에 따라 몇 개의 명령을 건너뛰어야 할 경우가 생깁니다 이와 같이 프로그램의 동작 과정을 제어하는 제어기능이 있는데 그중에서도 대표적인 것이 프로그램 명령의 수행 순서를 결정하는 조건과 무조건 브랜치(branch)가 있습니다.

    1) 조건부 분기 명령
        프로세서 내의 상태 값에 따라 제어 전송이 발생할 수도 있고 안 할 수도 있게 제어
    2) 서브루틴(subroutine) 명령. => 실행
        특정한 작업을 수행하도록 자체가 일련의 명령들로 구성되어 있는 프로그램들입니다.
  4. 입출력 기능(I/O operation)
    프로그램과 데이터를 기억장치에 기억시키기 위해서는 입력장치가 필요하고 또 기억된 데이터를 출력하여 프로그래머에게 알리는 출력장치가 필요합니다. 이와 같이 입출력 기능은 전달 기능과 유사함을 알 수 있습니다.



 

 

 

 

 

5.  매크로 기능 
여러 개의 명령어를 한 개로 묶어서 사용하는 경욱 있는대 이때 메크로 명령어라 합니다 흔희 범용적으로  언제나 쓰이는 명령어들을 하나로 묶어 거기에 이름을 붙이고 그것을 한 개의 명령어로 간주해서 사용하면 편리합니다 보통 데이터 읽기 기록 등은 메크로 명령어의 대표적인 예입니다.

6. 기타의 기능
다양한 동작을 지시하는 명령어가 필요합니다 입출력장치를 움직이는 명령, 실행 정지, 운영체제로 복귀하는 명령 등이 있습니다.

 

 

 

 

명령어 형식

컴퓨터에는 기계마다 정해진 명령어 형이 있고 그 명령어 이외의 것은 기계가 이해하지 못했습니다. 이런 명령어 형을 컴퓨터의 동작을 실행하게 하는 인공적인 특유의 언어라 하여 기계어라고 부릅니다. 만약 어떤 문제가 발생하면 그 문제를 분석하여 명령어에 있는 사칙연산 명령 또는 판단 명령 등으로 프로그램을 작성하여야 합니다 명령의 형식이나 종류는 컴퓨터 기종마다 다르지만 기본적인 면에서는 공통되는 원리를 적용하고 있습니다.

 

명령어 형식의 종류

명령어의 형식은 앞에서 언급한 바와 같이 명령코드부와 오퍼랜드부로 나누어지는데 

 

명령 코드부

입력, 가산, 출력, 시프트, 비교 등의 명령들을 취급하고

 

오퍼랜드부

주기억장치의 데이터 번지, 주기억장치의 명령 번지, 보조기억장치의 데이터 번지, 보조기억장치의 명령 번지 또는 데이터를 취급하는 부분입니다.

 

 

3- 주소 명령어 

3개의 오퍼랜드로 구성되며 여러 개의 범용 레지스터를 가진 컴퓨터에서 사용되는 형식으로 특수한 목적에서만 제한적으로 사용됩니다.

 

 

 

2-주소 명령어 

3-주소 명령어에서 연산 후에 입력 자료 보존의 필요성이 없으면 연산 결과를 두 개의 입력 자료가 기억되어 있던 곳들 중에서 어느 한 곳에 기억시킬 수 있습니다.  이렇게 하면 연산결과를 기억시킬 곳의 주소 명령어 내에 표시할 필요가 없어집니다. 이러한 인스트럭션 형식을 2-주소 명령어 형식이라고 합니다.

 

 

 

 

1-주소 명령어

누산기(ACC)를 하나만 갖고 있는 컴퓨터에서는 누산기에 기억되어 있는 자료를 모든 명령에서 사용되며 누산기가 하나밖에 없으므로 명령어에서 입력 자료가 그것에 기억되어 있음을 나타낼 필요가 없습니다. 즉 하나의 입력 자료의 주소를 생략할 수 있습니다. 연산결과 또는 항상 누산기에 기억하도록 하면 연산 결과의 주소를 지정해 줄 필요가 없습니다.

 

 

 

0-주소 명령 =zero Address

0 -주소명령 형식을 사용하는 컴퓨터의 특징은 연산을 위하여 스택(stack)을 갖고 있는 점이며 모든 연산은 스택에 있는 자료를 이용하여 수행하고 그 결과 또한 스택에 보존됩니다.

 

스택 포인트(sp: stack pointer)

맨 꼭대기 위치를 알려주는 어드레스 레지스터를 말합니다.

 

스택의 동작에는 데이터를 넣고 빼내는 두 가지 동작이 있는대 그것이 푸시(push)와 팝(pop)이 있습니다.

 

A+B( 중위 표기법)        +AB(정치 표기법)  AB+(후치 표기법)

 

예를 들어 봅시다

 

A*B+C*D를 계산해 보면

 1         2

-----------

      3

 

이렇게 진행됩니다.

AB*CD*+ 이렇게 후취 표기법으로 표현을 할 줄 알아야 합니다

 

 

그렇다면 이렇게 스택에서 진행이 됩니다.

 

 

 

주소 지정 방식

 

주소 지정방식(addressing mode)이란 연산에 사용될 데이터를 주기억장치의 어떤 위치에서 끄집어낼 것인가를 미리 명령어 형식의 오퍼랜드 주소부에다가 지정하는 방식을 말합니다. 레지스터의 저장된 메모리 워드에 제 저장된 데이터에 대해 수행을 하고 프로그램이 수행되는 동안 오퍼랜드 주소들을 취해오는 방법은 명령어의 주소 지정 방식에 따라 달라지게 됩니다.

 

 

즉치 주소 방식

누산기에 있는 데이터 처리

- 주소필드에 실제 사용할 오퍼랜드(피연산자)를 지정

- 레지스터나 변수를 상수값으로 초기화하는데 유용

 

CLA.   

    AC<--- 0

 

LDI 100, R1 ; R1 ← 100
레지스터 R1에 데이터 100을 초기화합니다.

 

 

 

 

즉시 주소 방식

오퍼랜드가 명령 그 자체 내에 있습니다.  명령어의 수행은 기억장치의 주소에 들어 있는 내용을 가지고 계산을 하지 않습니다

 

 

 

직접 주소 방식

 

명령어의 주소부에 실제 데이터가 들어있는 주기억장치의 주소를 직접 갖고 있는 방식

 

간단하게 C의 포인터  =>  *     참조 연산자라고 생각하면 편합니다.

 

 

간접 주소 방식

2중 포인터라고 생각하면 편합니다.

 

 

 

레지스터 방식 (이 밑은 다 레지스터를 사용)

CPU 내의 레지스터에 오퍼랜드가 있으며 명령의 레지스터 필드에서 특정 레지스터를 지목 후 값을 지정하며 그레지스터에 실제 데이터가 기억되게 됩니다.     비트는 k비트일때 2^k 개의 레지스터중에 하나를 선택할 수 있습니다.

레지스터 간접 지정 방식

오퍼랜드가 레지스터를 지정하고 다시 그 레지스터의 값이 실제 데이터가 기억된 장소의 주소를 지정합니다. 이 지정방식의 특징은 직접 주소 지정방식보다 적은 비트가 사용됩니다     방식은 포인터 참조변수의 레지스터 버전이라 생각하면 됩니다.

 

 

 

 

상대  주소 방식 (레지스터 사용)

주소를 실제 메모리 공간에 연관시키는 방법에 따라 주소는 절대 주소와 상대 주소가 있습니다.

절대 주소는 그 주소를 가지고 직접 앞에서 소개한 데이터의 접근방식에 따라 접근할 수 있고

상대 주소는 절대 주소로 변환하여야 되며 그 주소로는 직접 데이터에 접근할 수 없고 모든 주소는 어느 기본 주소에 상대적으로 표시되므로 절대주소를 구하기 위해서는 상대 주소와 기본 주소를 이용한 계산이 필요합니다.

 

유효주소 = 명령어 오퍼랜드 + PC

 

 

 

 

 

 

 

그림을 이해하기 위해선 예시로

pc =200

200 번지는 Load to AC.   

201 번지는 Address =500

202 Next 

203 명령실행

 

1 워드당 8비트이며 명령어를 사용하기 위해 2 워드까지 가야 합니다. 만약 명령번지가 더 밑에 있으면 더 밑으로 내려가야 합니다. 

그리고 워드를 사용하기 때문에 200  지금 상대 주소 방식에서는 200,201를 같이 사용하고 202 ,203 은 한 묶음으로 처리된다.

 

그럼 pc+명령어를  한다고 하니

200+500 =700이라고 생각할 수 있으나

 

 

AC←M[ADRS+PC]  PC<--PC+1 (다음 명령주소값으로 이동)

이런 공식이 있다 즉 연산을 하면서 다음 주소값으로 이동이 되어서

202+500= 702가 된다.       

왜  2일까 하면   방금 200,201 은 지금 한 명령 주소에 다 포함된다고 했다    그러므로 그다음 주소값인 202 가 된다는 것입니다. 이건 컴퓨터의 주어진 비트에 따라 달라진다.  그리고 pc 카운터 증가후 연산이 진행된다는거에 이점을 주의해야 합니다.

 

 

 

인덱스 주소 방식

상대 주소랑 비슷합니다 명령 중에 지정된 어드레스는 프로그램 카운터 이외에서 지정된 레지스터의 내용과 관련하여 오퍼랜드 어드레스가 계산됩니다. 이 지정된 레지스터를 인덱스 레지스터라고 부릅니다,.

 

 

베이스 레지스터 주소 방식

 

이경우는 베이스 레지스터의 내용이 명령의 주소 부분에 더해져서 유효 번지가 결정됩니다. 인덱스 어드레스 모드의 경우와는 인덱스 레지스터 대신에 베이스 레지스터가 사용되었다는 것만 다릅니다. 베이스 레지스터는 베이스 주소를 가지고 있고 베이스 주소로부터 상대적인 디스플레이스먼트가 됩니다.     무슨 소리인지 감이 안 오면 그냥 그림을 봐봅시다.

 

 

 

 

자동 증가 주소 방식

레지스터의 값을 인출 후 번지를 +1 하는 방식입니다   쉽게 설명하면 i++ 후위 연산입니다

값이 적용되며 그 후에 레지스터 값이 증가합니다 자료가 없어서 똥손 그림으로 대체합니다..

 

 

 

 

감소 주소 방식

증가 주소방식이 전위연산이었다면 감소 주소 방식은  -- i 전위 연산입니다.

 

 

 

 

 

CISC와 RISC

cpu가 실행할 수 있는 명령 종류는 설계 시에 결정할 수 있는데 이 명령 집합을 명령 세트라고 합니다. 마이크로 프로그램 제어에 따라 기계어 명령을 마이크로 명령으로 복합화시켜 복잡한 동작을 실행하는 명령을 포함한 명령 세트를 가지는 컴퓨터를 CISC라고 합니다

한편 명령마다 실행시간이 크게 다르기 때문에 실행시간이 걸리는 명령에 시간을 끌어 후속 명령이 지연되어 파이프라인(pipeline) 처리는 부적합하다는 결점이나 설계가 복잡화 되어 처리속도난 신뢰성 향상이 어려운 문제도 있습니다

 

이문제를 해결하기 위해 CISC 이전의 컴퓨터 아키텍처를 발전시킨 RISC발상이 나타났습니다 CPU 처리속도가 비약적으로 발전한 경우도 있습니다. RISC에서는 단순히 동작하는 명령 세트만을 하드웨어인 와이어드 로직으로 준비해 명령수를 감소시킴으로써 구조를 단순화해서 설계 작업을 용이하게 했습니다.

 

 

 

 

 

 

 

 

 

 

마지막으로 주소 지정방식 기출문제 하나 두고 갑니다.

 

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

기억장치  (1) 2023.12.01
제어 장치  (0) 2023.11.17
정수의 산술 연산  (1) 2023.11.03
음수의 표현  (0) 2023.10.28
부동 소수점 2진수 표현  (0) 2023.10.19