CPU의 구성 요소 중
ALU와 제어장치는 어떻게 동작할까?
CPU 구성
--
--
ALU (Arithmetic Logic Unit)
--
ALU는
CPU에서 가장 중요한 구성 요소 중 하나로
산술 연산과 논리 연산을 수행하는 하드웨어 부품이다. (계산을 수행하는 부품)
계산을 수행하기 위해 필요한 정보
- 피연산자 (레지스터를 통해 받아온다.)
- 연산자 (제어장치를 통해 수행할 연산을 알려주는 제어 신호를 받아온다.)
- 제어장치는 CPU 내에서 수행할 명령어를 해석 후,
어떠한 연산을 수행해야 하는지 ALU에게 전달 (연산에 대한 정보를 전달) - 해당 연산에 필요한 피연산자를 레지스터로부터 가져옴
- 제어장치로부터 받은 명령어(연산)와 레지스터로부터 받은 피연산자를 이용하여 해당 연산 수행
- 연산 결과를 제어장치에 의해 지정된 레지스터에 저장
- 연산 결과에 따라 상태 플래그가 플래그 레지스터에 저장
ALU 내부에는 이 외에도 여러 계산을 위한 회로들이 존재하지만 (덧셈을 위한 가산기, 뺄샘을 위한 보수기 등)
간단한 형태로만 설명을 한다.
연산을 수행한 결과는
바로 메모리에 저장하지 않고 일시적으로 먼저 레지스터에 저장한다.
CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느리기 때문에
ALU가 연산할 때 마다 결과를 메모리에 저장한다면 CPU는 메모리에 자주 접근하게 되고,
CPU가 프로그램의 실행 속도를 느리게 만든다.
플래그(Flag)는
어떠한 데이터에 대한 추가적인 정보를 의미한다.
즉, ALU의 연산 결과를 기반으로 특정 상태나 조건을 표시하는 비트다.
가끔 결괏값만 보고 해당 결괏값이 정확히 어떠한 결괏값인지 알기 어려울 경우가 존재한다.
(ex) "어떠한 2진수 값이 있는데 음수인지 양수인지 판별하기 어려움"
이러한 경우
해당 결괏값 외에 추가적인 정보를 확인하기 위해 플래그를 사용한다.
주요 플래그 종류
- Zero 플래그 (ZF) : 연산 결과가 0인지 여부 (1 = 0, 0 = 0이 아님)
- Carry 플래그 (CF) : 연산 결과가 자리 올림/내림을 수행했는지 여부 (1 = 0, 0 = 0이 아님)
- Overflow 플래그 (OF) : 오버플로우가 발생했는지 여부 (1 = 오버플로우, 0 = 발생X)
- Sing 플래그 (SF) : 연산 결과의 부호 (1 = 음수, 0 = 양수)
- Interrupt 플래그 (IF) : 인터럽트가 가능한지 여부 (1 = 가능, 0 = 불가능)
- Supervisor 플래그 (SF) : 사용자 모드 or 커널 모드로 사용 중인지 구분 (1 = 커널 모드, 0 = 사용자 모드)
플래그 레지스터는
여러 개의 플래그 비트로 구성되어 있으며 각 비트는 플래그 값들을 저장하는 레지스터다.
--
제어장치
--
제어장치는
CPU에서 가장 중요한 구성 요소 중 하나로
명령어 해석과 제어 신호를 보내는 부품이다.
제어 신호는
컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호다.
즉, 컴퓨터가 프로그램을 올바르게 실행할 수 있도록 각 구성 요소의 동작을 지시하고 조정하는 역할을 한다.
CPU 제조사마다 제어장치의 구현 방식이나 명령어를 해석하는 방식에 조금씩 차이가 존재한다.
대표적인 구조
1. 제어장치는 클럭 신호를 받아온다.
제어장치는 받아온 클럭 주기에 맞춰
A 레지스터에서 B 레지스터로 데이터를 이동하거나,
ALU에서 연산을 수행하거나,
CPU가 메모리에 저장된 명령어를 읽어오는 동작들을 수행한다.
클럭(Clock)은
제어 장치와 전체 CPU가 동작하는 데 중요한 역할을 하는 신호로,
CPU 내의 모든 동작을 동기화하는 데 사용된다.
클럭은 일정한 주기로 반복되는 신호를 말하는데
해당 신호의 각 주기는 CPU가 한 명령어를 처리하는 데 필요한 단계를 구분 짓는 데 사용된다.
간단하게 컴퓨터의 모든 부품을 알맞게 움직일 수 있도록 하는 시간 단위다.
주의해야 할 것은 컴퓨터의 모든 부품이 클럭 신호에 맞춰 작동하지만
컴퓨터의 모든 부품들이 각자 알맞은 클럭 박자에 맞춰 작동할 뿐
한 박자(주기)마다 작동하는 것은 아니다.
2. 제어장치는 "해석해야 하는 명령어를 받아온다.
제어장치는 "명령어 레지스터"로부터 해설할 명령어를 받아오고 해석한 뒤,
제어 신호를 전달하여 각 컴퓨터 부품들이 수행해야 할 내용(정보)을 알려준다.
명령어 레지스터는
CPU가 해석해야 할 명령어를 저장하는 특별한 레지스터다.
3. 제어장치는 플래그 레지스터에 담긴 플래그 값을 받아온다.
제어장치가 제어 신호를 전달할 때 부가적인 정보(참고 사항)를 참고하기 위해
플래그 레지스터로부터 플래그 값을 받아온다.
4. 제어장치는 시스템 버스 중에서 제어 버스로 전달된 제어 신호를 받아온다.
제어 신호는 CPU(제어장치)뿐만 아니라
입/출력장치처럼 CPU 외부 장치에서도 발생시킬 수 있다.
이러한 경우 제어 버스를 통해 외부 제어 신호를 제어장치로 받아올 수 있다.
제어장치에서 제어 신호를 전달하는 방법에는 크게 2가지가 있다.
- CPU 내부에 제어 신호를 전달
- CPU 외부에 제어 신호를 전달
여기서 CPU 외부에 제어 신호를 전달한다는 것은
제어 버스로 제어 신호를 전달한다는 것과 같다.
이렇게 CPU 외부에 제어 신호를 보내는 경우 일반적으로 (외부의 데이터를 가져오거나 저장 등)
- 메모리
- 입/출력장치
에 전달하는 제어 신호가 존재한다.
(입/출력장치에는 보조기억장치도 포함된다.)
--
'CS > 컴퓨터 구조' 카테고리의 다른 글
[CPU 작동 원리] 명령어 사이클과 인터럽트 (0) | 2024.08.25 |
---|---|
[CPU 동작 원리] 레지스터 종류 (0) | 2024.08.24 |
[명령어] 명령어의 구조 ( 연산 코드, 오퍼랜드, 주소 지정 방식 ) (0) | 2024.08.22 |
[명령어] 고급 언어와 저급 언어 ( 컴파일, 인터프리터 ) (0) | 2024.08.21 |
데이터 (0과 1로 문자, 숫자를 표현하기) (0) | 2024.08.20 |