ALU와 제어장치

SeungJoo
|2023. 8. 16. 20:33
반응형

ALU

ALU는 산술 논리 장치의 약자로 컴퓨터의 중앙 처리 장치 (CPU)에 속하는 핵심적인 하드웨어 구성 요소입니다. ALU는 산술 연산과 논리 연산을 수행하여 컴퓨터의 다양한 연산을 처리하는 역할을 합니다.

ALU가 수행하는 기본적인 기능은 산술 연산 논리 연산이 있습니다.

산술 연산은 덧셈, 뺄셈, 곱셈, 나눗셈 등과 같은 산술 연산을 수행합니다. 이러한 연산은 컴퓨터의 기본적인 수치 계산에 사용되며, ALU의 회로는 이러한 연산을 이진수로 효율적으로 처리할 수 있도록 설계됩니다.

논리 연산은 AND, OR, NOT, XOR과 같은 논리 연산을 수행합니다. 이러한 연산은 데이터의 비트 단위 조작에 사용되며, 불린 논리와 논리 회로에 기반합니다.

ALU는 CPU의 레지스터에서 입력 데이터를 받아오고, 연산을 수행하여 결과를 다시 레지스터에 저장합니다. CPU는 ALU를 사용하여 프로그램의 명령어를 실행하고 데이터를 처리합니다. ALU는 컴퓨터의 처리 속도와 성능에 직접적인 영향을 미치므로, 더 빠르고 효율적인 ALU가 더 빠른 컴퓨터 성능을 제공할 수 있습니다.

 

플래그

CPU 상태를 나타내는 이진수 값들의 집합으로, 연산 결과 컴퓨터의 특정 상태를 나타내는 데 사용됩니다.

플래그는 일반적으로 CPU 레지스터에 저장되며 여러 가지 용도로 사용될 수 있습니다.

플래그의 종류와 이름은 조금씩 다를 수 있지만, 대표적으로 사용되는 플래그에 대해 알아봅시다.

제어장치

컴퓨터의 중앙 처리 장치 내에 다른 하드웨어 구성 요소들을 제어하고 조정하는 역할을 수행하는 부분이며 CPU 내에서 핵심적인 기능을 담당하며, 명령어 해석, 실행 순서 지저, 연산 장치와 입출력 장치들과의 상호 연결 등을 관리합니다. 또한 컴퓨터의 명령어 세트를 이해하고, 명령어를 해석하여 각 하드웨어 구성 요소에 해당 명령어가 수행되도록 신호를 발생시킵니다.

 

제어장치의 주요 기능과 동작 방식

  • 명령어 해석 제어장치는 메모리로부터 가져온 명령어를 해석하여 어떤 동작을 수행하는지 결정합니다.
  • 명령어 순서 지정 다수의 명령어가 메모리에 저장되어 있으며, 이들이 CPU에 순차적으로 실행되어야 합니다.
  • 제어 신호 발생 명령어를 해석한 후, 해당 명령어에 대응하는 제어 신호를 발생시켜 다른 하드웨어 구성 요소들을 활성화하거나 비활성화합니다.
  • 상태 관리 CPU는 명령어를 한 번에 하나씩 실행하며, 제어장치는 이러한 CPU 내부의 상태를 관리합니다. 상태 레지스터와 플래그 등을 이용하여 명령어 실행 중에 발생하는 상태 변화를 추적하고, 조건 분기와 루프 처리에 제어합니다.
  • 클록 신호 관리 CPU의 동작은 클록 신호에 의해 조정됩니다. 제어장치는 클록 신호를 받아 CPU 내부의 작업들을 시간적으로 동기화하여 명령어를 순차적으로 실행하도록 제어합니다.

필수로 알아야 할 레지스터에 대해 알아보겠습니다.

 

1. 프로그램 카운터

컴퓨터 시스템에서 현재 실행 중인 명령어의 주소를 가리키는 레지스터입니다.

 

기능&동작 방식

  • 초기화 : 프로그램 카운터는 보통 프로그램 실행이 시작될 때, 프로그램의 진압점인 메모리 주소로 초기화됩니다.
  • 명령어 실행 : CPU는 프로그램 카운터가 가리키는 주소에 위치한 명령어를 메모리에서 가져와 실행합니다.
  • 증가 : 명령어 실행이 끝나면, 프로그램 카운터는 자동으로 증가하여 다음 명령어의 주소를 가리킵니다. 이로 인해 순차적으로 다음 명령어를 실행할 수 있습니다.
  • 분기 및 점프 : 프로그램 카운터는 분기나 점프 명령어가 실행될 때 해당 명령어의 인자로 전달된 주소로 변경합니다. 이렇게 함으로써 프로그램의 흐름을 변경하고, 다른 부분의 명령어를 실행할 수 있습니다.

2. 명령어 레지스터

현재 실행 중인 명령어를 저장하고, 제어장치가 해당 명령어를 해석하여 실행하는 데 사용됩니다.

 

기능&동작 방식

  • 명령어 저장 : 명령어 레지스터는 CPU가 메모리로부터 가져온 현재 실행 중인 명령어를 저장합니다. 명령어를 메모리에서 가져온 후, 명령어 레지스터에 해당 명령어를 저장합니다.
  • 명령어 해석 : 명령어 레지스터에 저장된 명령어는 제어 장치에 의해 해석됩니다. 제어 장치는 명령어 레지스터에서 필요한 정보를 추출하여 어떤 동작을 수행해야 하는지 결정합니다.
  • 명령어 실행 : 명령어 레지스터에 저장된 명령어의 정보에 따라 CPU는 해당 명령어를 실행합니다.

3. 메모리 주소 레지스터

메모리에 접근하여 데이터를 읽거나 쓸 때 사용되는 주소 정보를 저장하는 데 사용됩니다.

메모리 주소 레지스터는 CPU가 메모리와 데이터를 교환하고, 명령어를 실행하는데 중요한 역할을 합니다.

 

기능&동작 방식

  • 주소 저장 : 메모리 주소 레지스터는 CPU가 메모리로부터 읽거나 쓸 데이터의 주소를 저장합니다.
  • 메모리 접근 : 메모리 주소 레지스터에 저장된 주소 정보를 이용하여 CPU는 해당 주소로 메모리에 접근하여 데이터를 읽거나 씁니다. 데이터의 읽기나 쓰기는 메모리와 CPU 간에 데이터 버스를 통해 이루어집니다.
  • 명령어 실행 : 메모리 주소 레지스터는 프로그램 카운터와 함께 현재 실행 중인 명령어 주소를 저장하기도 합니다.

4. 메모리 버퍼 레지스터

CPU와 메모리 사이에서 데이터를 임시로 저장하거나 전송하는 데 사용되며, 데이터 임시 저장과 변환에도 활용됩니다.

 

기능&동작 방식

  • 데이터 저장 : 메모리 버퍼 레지스터는 메모리로부터 읽은 데이터를 임시로 저장합니다.
  • 데이터 전송 : CPU가 메모리와 데이터를 교환할 때, 메모리 버퍼 레지스터를 거쳐 데이터를 전송합니다.
  • 데이터 변환 : 일부 컴퓨터 아키텍처에서는 메모리 버퍼 레지스터를 사용하여 데이터 형식을 변환하는 데도 사용됩니다.

5. 플래그 레지스터

연산의 결과나 다른 CPU 동작에 대한 상태 정보를 저장하는 데 사용됩니다. 주로 조건 분기와 함께 사용되어 프로그램의 제어 흐름을 결정하고, 연산 결과에 따라 다른 동작을 수행하도록 도와줍니다.

 

기능&동작 방식

  • 산술 논리 연산 수행
  • 연산 결과 계산
  • 플래그 레지스터 업데이트
  • 조건 분기 수행

6. 범용 레지스터

레지스터들은 CPU의 데이터 처리와 연산을 지원하는 데 사용되며, 다양한 목적으로 임시 데이터를 저장하거나 연산을 수행하는 데 활용됩니다.

 

주요 범용 레지스터

  • 데이터 레지스터 : 데이터를 저장하고 처리하는 데에 사용되는 범용 레지스터
  • 주소 레지스터 : 메모리 주소를 저장하는 데에 사용되는 범용 레지스터입니다.
  • 인덱스 레지스터 : 주로 배열이나 데이터 구조에 접근하기 위해 사용되는 범용 레지스터입니다.
  • 범용 누산기 : 특별히 데이터 연산에 사용되는 범용 레지스터입니다. 연산 결과를 저장하는 데에 자주 사용됩니다.

7. 스택 포인터

스택 메모리의 최상단 주소를 가리키는 레지스터입니다. 스택 포인터는 CPU가 스택을 관리하고 데이터를 삽입하거나 추출할 때 사용됩니다.

 

기능&동작 방식

  • 스택 초기화 : 스택이 생성되면, 스택 포인터는 스택의 최상단 주소를 가리키도록 초기화됩니다.
  • 스택에 데이터 삽입 : 데이터를 스택에 삽입할 때, 스택 포인터를 증가시켜 스택의 최상단을 가리키도록 합니다.
  • 스택에 데이터 추출 : 데이터를 스택에서 추출할 때, 스택 포인터를 감소시켜 스택의 최상단을 가리키도록 합니다.

8. 베이스 레지스터

주로 주소 계산에 사용되는 기준 주소를 저장하고 이를 기반으로 메모리 주소를 계산하는 데에 사용됩니다.

 

기능&동작 방식

  • 초기화 : 베이스 레지스터는 프로그램 실행 전에 적절한 기준 주소로 초기화되어야 합니다.
  • 주소 계산 : 프로그램에서 데이터 구조에 접근해야 할 때, 베이스 레지스터에 저장된 기준 주소를 기반으로 상대적인 주소를 계산합니다.
  • 데이터 접근 : 주소 계산을 통해 얻은 메모리 주소를 이용하여 메모리에 접근하고 데이터를 읽거나 쓸 수 있습니다.
728x90

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

메모리& 캐쉬메모리  (0) 2023.08.16
CPU를 위한 설계 기법&CISC와 RISC  (0) 2023.08.16
명령어 사이클과 인터럽트  (0) 2023.08.16