명령 사이클(Instruction Cycle)

CPU가 명령어를 수행하는 과정을 의미한다. 일반적으로 명령 사이클은 여러 단계로 이루어져 있다.

1. 인출(Fetch)

메모리에서 프로그램 카운터에 저장된 주소의 명령어를 가져온다. 그 다음 프로그램 카운터를 다음 명령어의 주소로 업데이트한다.

 

2. 디코딩(Decode)

명령어를 분석하여 해당하는 작업을 파악하고 필요한 피연산자를 결정한다.

 

3. 실행(Execute)

분석된 명령어와 연관된 작업을 수행하고 결과를 생성한다.

 

4. 저장(Store)

연산 결과를 레지스터 또는 메모리에 저장한다.

 

CPU는 위 사이클을 프로그램이 실행되는 동안 반복하며 각 명령어가 수행되는 순서대로 진행한다.

 

명령어 집합 구조(Instruction Set Architecture, ISA)

컴퓨터의 하드웨어와 소프트웨어 사이의 인터페이스를 정의한다. ISA는 하드웨어가 지원하는 명령어들의 집합, 데이터 유형, 레지스터, 메모리 주소 지정 방식, 입출력 관리 등에 대한 규칙과 규격을 제공한다. ISA는 컴퓨터 아키텍처의 핵심 구성 요소로 컴파일러와 운영 체제가 하드웨어와 상호 작용하는 방식을 결정한다. 컴퓨터는 다양한 아키텍처가 존재하며 각각의 아키텍처는 고유한 ISA를 가지고 있다.

 

ISA는 프로세서와 소프트웨어 간의 인터페이스 역할을 한다.

  • 명령어 집합 : 프로세서가 인식하고 수행할 수 있는 기본 명령어 집합
  • 레지스터 파일 : 프로세서 내부에 있는 레지스터들의 집합
  • 메모리 접근 방식 : 프로세서가 메모리에 접근하는 방법 정의
  • 입출력 방식 : 프로세서와 외부 장치 간의 데이터 교환 방식을 정의
  • 인터럽트 및 예외 처리 : 프로세서가 예외 상황이 발생했을 때 처리하는 방식 정의

 

 

 

 

728x90
반응형

'Computer > Engineering' 카테고리의 다른 글

데이터 경로와 제어 유닛  (0) 2023.03.17
메모리  (0) 2023.03.17
레지스터  (0) 2023.03.17
CPU  (0) 2023.03.17
튜링 머신 : 컴퓨터 과학의 기초  (0) 2023.01.07

Register

CPU내에 위치한 기억장치로 특정 목적을 위해 사용하는 저장소이다.

매우 빠른 속도로 데이터를 읽고 쓰는 특징이 있다. CPU의 성능에 큰 영향을 미치며 레지스터의 개수와 크기가 높을수록 빠른 처리 속도를 기대할 수 있다.

 

종류

Accumulator Register(AC)  

누산기 레지스터

산술 및 논리 연산에 사용되는 값을 저장하는 레지스터이다.

이 레지스터는 CPU의 연산 결과를 저장하거나 결과를 다음 연산에 사용하기 위해 일시적으로 저장하는 역할을 한다.

대부분의 CPU에서 누산기 레지스터는 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 연산을 수행하며, 비트 논리 연산을 수행하기도 한다. 이러한 연산의 결과는 다시 누산기 레지스터에 저장되어 다른 연산에 사용될 수 있다.

 

이 레지스터는 초기 컴퓨터 아키텍처부터 현대 컴퓨터 시스템에서까지 사용되고 있다. 하지만 현대에는 더 많은 범용 레지스터와 복잡한 레지스터 구조를 가지고 잇기 때문에 누산기 레지스터의 중요성은 상대적으로 감소했다. 

 

누산기 레지스터는 CPU내에 위치한 특별한 레지스터로 산술 및 논리 연산을 수행하고 그 결과를 저장하는 데 사용된다. 이는 연산 결과를 다른 명령어에 전달하거나 다음 연산에 사용하기 위한 중요한 구성요소이다.

 

Program Counter(PC)

프로그램 카운터

다음에 실행될 명령어의 메모리 주소를 저장하고 관리하는 일종의 포인터 역할을 한다. CPU는 프로그램 카운터에 저장된 주소를 사용하여 메모리에서 해당 명령어를 가져와 실행하며 명령어 실행이 완료되면 프로그램 카운터는 다음 명령어의 주소로 자동 업데이트된다.

 

일반적으로 프로그램 카운터는 순차적으로 실행되는 명령어들의 주소를 저장하고 있지만 제어 전달 명령어분기(Branch)점프(Jump) 명령어가 사용되면 프로그램 카운터가 다른 메모리 주소로 변경되어 명령어의 실행 순서가 바뀔 수 있다. 이러한 동작은 조건부 실행, 함수 호출, 반복문 및 예외 처리 등 다양한 프로그래밍 구조를 구현하는데 필수적이다.

 

- 제어 전달 명령어(Control Transfer Instructions) : 프로그램의 실행 흐름을 변경하는 명령어이다. 프로그램은 일반적으로 순차적으로 실행되지만, 조건부, 반복문, 함수 호출 등 다양한 프로그래밍 구조를 구현하기 위해서는 실행 흐름을 변경할 필요가 있다. 이때 사용되는 명령어들을 제어 전달 명령어라 하며 크게 분기, 점프, 서브루틴 호출 세 가지 유형으로 분류된다. 

- 분기(Branch) : 주어진 조건이 참인지 거짓인지에 따라 프로그램의 실행 흐름을 변경한다. 일반적으로 조건문 또는 반복문에서 사용된다. 분기 명령어는 조건에 따라 프로그램 카운터를 업데이트하여 실행 흐름을 변경한다.

- 점프(Jump) : 프로그램의 실행 흐름을 명시적으로 변경한다. 점프 명령어는 프로그램 카운터를 새로운 주소로 업데이트하여 실행 흐름을 변경한다. 점프는 조건 없이 변경하는 것과 조건에 따라 변경하는 두 가지 유형이 있다.

- 서브루틴 호출(Subroutine Call) : 함수 호출과 반환에 사용된다. 함수를 호출할 때 실행 흐름은 함수의 시작 주소로 이동하고 함수의 실행이 완료되면 원래 실행 흐름으로 돌아와야 하는데 이때 사용되는 명령어가 서브루틴 호출 명령어이다.

 

프로그램 카운터는 다음에 실행할 명령어의 메모리 주소를 저장하는 CPU의 특수한 레지스터로 명령어가 순차적으로 실행되거나 분기 및 점프 명령어에 의해 변경되는 경우에도 명령어의 실행 순서를 관리하고 제어기 때문에 다양한 프로그래밍 구조를 구현하기 위해 필수적인 구성 요소이다.

 

Temporary Register(TR)

임시 레지스터

데이터를 일시적으로 저장하기 위해 사용되는 레지스터이다. 연산 과정에서의 중간 결과를 저장하거나, 데이터 전송, 레지스터 간의 값을 교환하는 등의 작업에 사용된다. 임시 레지스터는 데이터를 보유하기 때문에 포함된 비트 수는 데이터 워드의 비트 수와 같다.

 

- 워드(word) : 메모리에서 레지스터로 데이터를 옮기거나 ALU를 통해서 데이터를 조작할 때 하나의 명령어로 실행될 수 있는 데이터 처리 단위이다.

 

CPU 아키텍처에 따라 다양한 이름과 기능을 가질 수 있는데 예를 들어 x86 아키텍처에서는 범용 레지스터라고 불리는 레지스터들이 있으며, 이 레지스터들은 연산, 데이터 전송, 주소 계산 등 다양한 목적으로 사용된다. 이러한 범용 레지스터들은 EAX, EBX, ECX, EDX 등과 같은 이름으로 구분되며 종종 중간 결과를 저장하는 임시 레지스터로 사용된다. 범용 레지스터들의 이름과 종류는 아키텍처마다 다르다.

 

ARM 아키텍처에서는 R0부터 R12까지의 범용 레지스터가 있으며, 이 레지스터들 역시 데이터를 임시로 저장하고 연산에 사용된다. 

 

임시 레지스터는 프로그램 실행 중 발생하는 다양한 작업을 처리하는데 필수적인 레지스터로 중간 연산 결과를 저장하거나 데이터를 전송하는 등의 작업을 수행하기 위해 사용되며, CPU 아키텍처와 디자인에 따라 여러 가지 이름과 기능을 가진다.

 

Instruction Register(IR)

명령어 레지스터

실행 중인 명령어를 저장하는 데 사용된다. 프로그램 카운터에 저장된 주소를 통해 메모리에서 명령어를 가져온 후, 해당 명령어는 명령어 레지스터에 저장되어 실행을 위한 처리가 진행된다.

 

명령어 레지스터는 CPU가 현재 어떤 명령어를 실행하고 있는지 파악하는 데 사용되며, 명령어의 인코딩 된 정보를 저장하고 있다. 이 정보는 오퍼레이션 코드, 피연산자 주소, 상수 값 등으로 구성되어 있을 수 있고 CPU는 명령어 레지스터의 정보를 해독하여 적절한 연산을 수행하고 결과를 다른 레지스터에 저장하거나 메모리로 전송한다.

 

- 오퍼레이션 코드(opcode) : 명령어가 수행할 연산의 종류를 나타내는 코드이다. CPU는 이 코드를 해석하여 어떤 작업을 수행해야 하는지를 결정한다. 예를 들어 덧셈, 뺄셈, 곱셈 등의 산술 연산, 논리 연산 데이터 전송, 제어 전달 등의 작업은 각각 고유한 오퍼레이션 코드를 가진다. 오퍼레이션 코드는 명령어의 일부분으로 명령어의 길이와 아키텍처에 따른 다른 크기를 가질 수 있다.

- 피연산자(operand)  주소 : 연산의 대상이 되는 데이터를 나타낸다. 피연산자 주소는 이러한 데이터가 저장된 메모리 주소나 레지스터를 가리킨다. 명령어는 하나 이상의 피연산자를 가질 수 있으며 이들의 주소 정보를 함께 저장하고 있다. 피연산자 주소는 명령어 내에서 오퍼레이션 코드 뒤에 위치하며 주소 지정 방식(Addressing Mode)에 따라 다양한 형태를 가질 수 있다. 주소 지정 방식은 피연산자의 메모리 주소나 레지스터를 참조하는 방법을 정의하며, 아키텍처에 따라 다양한 방식이 사용된다.

 

명령어 레지스터는 현재 실행 중인 명령어를 저장하고 있는 CPU의 특수한 레지스터이다. 이 레지스터는 명령어를 실행하는 동안 해당 명령어의 인코딩 된 정보를 저장하고 관리하며, CPU가 적절한 작업을 수행할 수 있도록 한다.

 

Data Register(DR)

데이터 레지스터

주로 데이터를 저장하고 연산에 사용되는 목적으로 사용된다. CPU와 메모리 사이에서 데이터를 전송하거나, 연산의 피연산자와 결과를 저장하는 데 사용되는 레지스터이다. 

 

데이터 레지스터는 일반적으로 범용 레지스터라고 불리며 이러한 레지스터가 다양한 종류의 데이터를 저장하고 연산에 사용될 수 있는데 반해 다른 특수 레지스터들은 주로 특정 목적으로 사용된다. 

 

데이터 레지스터는 CPU내부에서 데이터를 저장하고 연산에 사용되는 레지스터로, 범용 레지스터라고 불린다. 이러한 레지스터는 CPU와 메모리 사이에서 데이터를 전송하거나, 연산의 피연산자와 결과를 저장하는데 사용된다.

 

Address Register(AR)

주소 레지스터

주로 메모리 주소를 저장하고 관리하는 데 사용된다. 주소 레지스터는 메모리에서 데이터를 읽거나 쓰는데 필요한 메모리 주소를 담당하며 주소 계산, 포인터 연산, 배열 인덱싱 등 다양한 작업에서 사용된다.

 

종류

  • 베이스 레지스터(Base Register) : 메모리 주소 영역의 시작 주소를 저장하는 데 사용된다.
  • 인덱스 레지스터(Index Register) : 메모리 주소 영역 내에서 특정 위치를 가리키기 위해 사용된다. 주로 배열 인덱싱에 활용된다.
  • 세그먼트 레지스터(Segment Register) : 일부 아키텍처에서만 사용되며 메모리 세그먼트의 기준 주소를 저장하는 레지스터로 주소 계산에 사용된다.
  • 스택 포인터 레지스터(Stack Pointer Register) : 스택의 최상단을 가리키는 주소를 저장한다.

세그먼트(Segment)

컴퓨터 메모리를 관리하는 방법 중 하나로 메모리를 의미상 관련 있는 덩어리로 나누는 것을 의미한다. 프로그램이 메모리에 로드될 때 메모리 공간을 논리적으로 구분하여 관리하며, 각 세그먼트는 시작 주소와 길이로 정의된다. 

세그 먼트는 메모리 보호와 관련된 장점을 가지며 다른 세그먼트 간에 데이터의 접근을 제한하여 메모리 충돌을 방지하고 프로그램의 안정성을 높인다. 

 

세그먼트 종류

코드 세그먼트(Code Segment) : 프로그램의 코드를 저장하는 세그먼트로 일반적으로 읽기와 실행 권한만 가지며 쓰기 권한은 없다. 이를 통해 코드 영역의 데이터 오염을 방지한다.

데이터 세그먼트(Data Segment) : 전역 변수와 정적 변수를 저장하는 세그먼트로 일반적으로 읽기와 쓰기 권한이 있다. 프로그램의 수명 동안 고정된 위치에 데이터를 저장하는 데 사용된다.

스택 세그먼트(Stack Segment) : 함수 호출과 지역 변수를 저장하는 데 사용되는 스택 자료구조를 위한 세그먼트이다. 스택 포인터를 사용하여 현재 스택의 최상단을 가리키며 함수 호출 시 스택 프레임이 할당되고 반환 시 해제된다.

힙 세그먼트(Heap Segment) : 동적으로 할당되는 메모리를 저장하는 세그먼트로 프로그램이 실행되는 동안 메모리를 필요에 따라 할당하고 해제하는 데 사용된다.

 

일부 프로세서 아키텍처에서는 주소 레지스터를 별도로 두기도 하지만, 다른 아키텍처에서 범용 레지스터를 주소 레지스터로 사용하기도 한다. 예를 들어 x86 아키텍처에서는 ESI와 EDI 등의 범용 레지스터가 주소 레지스터로 사용되며 이를 통해 메모리 주소를 저장하고 참조할 수 있다.

 

다양한 종류의 주소 레지스터는 메모리 주소를 저장하고 관리하는 데 사용되고 아키텍처에 따라 주소 레지스터와 범용 레지스터가 별도로 존재할 수 있으며 범용 레지스터가 주소 레지스터의 역할을 수행할 수도 있다.

 

Input Register(INPR)

입력 레지스터

주로 외부 장치에서 전달되는 데이터를 저장하는 데 사용된다. 이 레지스터는 입력 데이터를 저장하고 CPU가 처리할 수 있는 형태로 전달하는 역할을 한다. 

 

일반적으로 입력 레지스터는 입출력 시스템의 일부로 동작하며 외부 장치로부터 데이터를 받아올 때 해당 데이터를 일시적으로 저장하는 공간으로 사용된다. CPU는 입력 레지스터에 저장된 데이터를 읽어서 적절한 처리를 수행한 후 결과 데이터를 다른 레지스터 또는 메모리 영역에 저장할 수 있다.

 

입력 레지스터의 크기는 아키텍처에 따라 다를 수 있으며 일반적으로 8비트, 16비트, 32비트 등의 크기를 가질 수 있다. 입력 레지스터의 크기는 처리할 수 있는 데이터의 크기를 결정하며, 레지스터의 크기에 맞춰 외부 장치에서 전달되는 데이터의 크기가 정해진다.

 

입력 레지스터는 외부 장치와 CPU 간의 데이터 전달을 위한 중간 저장소 역할을 하며, CPU가 외부 장치에서 전달되는 데이터를 처리할 수 있도록 돕는 중요한 구성요소이다.

 

Output Register(OUTR)

출력 레지스터

CPU에서 처리된 데이터를 외부 장치로 전달하기 전에 일시적으로 저장하는 데 사용된다. 출력 레지스터는 CPU에서 생성된 결과 데이터를 외부 장치로 전송하는 과정에서 중간 저장소 역할을 한다.

 

일반적으로 출력 레지스터는 입출력 시스템의 일부로 동작하며 CPU가 처리한 데이터를 외부 장치로 전송할 때 해당 데이터를 일시적으로 저장하는 공간으로 사용된다. CPU는 처리한 데이터를 출력 레지스터에 저장한 후 컨트롤러를 통해 해당 데이터를 외부 장치로 전달할 수 있다.

 

출력 레지스터의 크기는 아키텍처에 따라 다를 수 있으며 일반적으로 8비트, 16비트, 32비트 등의 크기를 가질 수 있다. 출력 레지스터의 크기는 전달할 수 있는 데이터의 크기를 결정하며 레지스터 크기에 맞춰 CPU에서 처리된 데이터의 크기가 정해진다.

 

출력 레지스터는 CPU와 외부 장치 간의 데이터 전달을 위한 중간 저장소 역할을 하며, CPU가 처리한 데이터를 외부 장치로 전달하는데 필요한 중요한 구성 요소이다.

 

728x90
반응형

'Computer > Engineering' 카테고리의 다른 글

데이터 경로와 제어 유닛  (0) 2023.03.17
메모리  (0) 2023.03.17
명령 사이클과 명령어 집합 구조  (0) 2023.03.17
CPU  (0) 2023.03.17
튜링 머신 : 컴퓨터 과학의 기초  (0) 2023.01.07

CPU

컴퓨터 시스템을 구성하는 요소는 다양하며, 각각의 구성요소들이 상호 작용을 통해서 전체 시스템이 동작하게 된다.

그 중 중앙 처리 장치(CPU, Central Processing Unit)는 컴퓨터 시스템에서 가장 중요한 부품 중 하나이다.

 

구성요소

연산 유닛(Arithmetic Logic Unit, ALU)

산술 및 논리 연산을 수행한다. 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산과 AND, OR, NOT, XOR과 같은 논리 연산을 처리한다.

 

제어 유닛(Control Unit, CU)

메모리에서 명령어를 가져와 해독하고 실행한다. 또한 다른 구성요소들을 제어하여 명령어 실행에 필요한 데이터를 제공하거나 결과를 저장한다.

 

레지스터(Register)

CPU 내부의 작은 기억장치이다. 매우 빠른 접근 속도를 가지고 연산에 필요한 데이터를 저장하거나 중간 결과를 저장하는데 사용된다. 종류는 크게 범용, 프로그램 카운터, 명령, 주소 레지스터 등이 있다.

 

캐시 메모리(Cache Memory)

캐시 메모리는 CPU와 주 기억장치 사이에 위치하며 자주 사용되는 데이터와 명령어를 빠르게 접근할 수 있도록 저장한다. 캐시 메모리는 CPU 성능을 향상시키는 데 중요한 역할을 한다.

 

명령어 주기

CPU는 명령어 주기를 통해 작동한다.

1. 인출(Fetch) : 메모리에서 명령어를 가져오는 단계

2. 해독(Decode) : 가져온 명령어를 해독하여 실행할 동작을 결정하는 단계

3. 실행(Execute) :  해독된 명령어를 실행하는 단계

4. 저장(Store) :  실행 결과를 레지스터나 메모리에 저장하는 단계

 

성능

CPU의 성능은 클럭 속도, 코어 수, 캐시 크기, 명령어 집합 구조(ISA) 등 다양한 요소에 의해 영향을 받는다. 클럭 속도는 CPU가 초당 처리할 수 있는 명령어의 수를 나타내며, 코어 수는 동시에 처리할 수 있는 명령어 스트림의 수를 의미한다. 캐시 크기는 CPU와 메모리 사이에 위치한 고속 메모리의 용량을 나타내며, 명령어 집합 구조는 CPU가 어떤 종류의 명령어를 처리할 수 있는지를 결정한다.

 

다중 코어 프로세서와 파이프라이닝, 병렬 처리 등의 기술을 통해 성능을 향상시킬 수 있으며 이러한 기술은 동시에 여러 작업을 처리하거나 여러 단계로 구성된 작업을 동시에 진행함으로써 전체 시스템의 처리 속도를 높일 수 있다.

728x90
반응형

'Computer > Engineering' 카테고리의 다른 글

데이터 경로와 제어 유닛  (0) 2023.03.17
메모리  (0) 2023.03.17
명령 사이클과 명령어 집합 구조  (0) 2023.03.17
레지스터  (0) 2023.03.17
튜링 머신 : 컴퓨터 과학의 기초  (0) 2023.01.07

+ Recent posts