CS - #4. ALU, 제어창치, 레지스터
CPU는 ALU, 제어장치, 레지스터로 이루어져있다.
각각의 소소들의 구성과 동작에 대해서 알아보겠다.
1. ALU (Arithmenthic and Logical Unit : 산술 논리 장치)
ALU는 계산을 하는 부품이다.
1+2 라는 계산식이 있다.
이때 1, 2라는 피연산자와 +연산자를 이해해야한다.
ALU는 레지스터를 통해서 1, 2라는 피연산자를 받아들이고 제어장치로 부터 수행할 연산 즉 연산자를 제어신호로 받아들인다. ALU에서 받아들인 피연산자와 제어신호를 토대로 산술연산, 논리연산 등 다양한 연산을 수행한다.
ALU가 내보내는 정보는 연산의 결과이다.
이때 연산수행의 결과는 특정한 숫자나 문자가 될 수도 있고 메모리 주소가 될 수도 있다.
결과는 바로 메모리에 저장되는 것이 아니라 일시적으로 레지스터로 저장된다.
추가로 ALU에서 플래그라는 정보를 추가로 내보낸다.
플래그는 연산결과에 필요한 추가정보에 대한 내용을 담는다.
플래그의 종류는 다음과 같다.
플래그 종류 | 의미 | 사용 예시 |
부호 플래그 | 연산한 결과의 부호를 나타낸다. | 부호 플래그가 1일 경우 계산결과는 음수, 0일 경우 계산 결과는 양수를 의미한다. |
제로 플래그 | 연산결과가 0인지 판별한다. | 제로 플래그가 1일 경우 연산결과는 0, 0일경우 연산결과는 0이 아니다. |
캐리 플래그 | 연산 결과 올림수나 빌림수가 발생했는지 나타낸다. | 캐리 플래그가 1일 경우 올림수나 빌림수가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미한다. |
오버플로우 플래그 | 오버플로우가 발생했는지를 나타낸다. | 오버플로우 플래그가 1일 경우 오버플로우가 발생했음을 의미하고, 0일경우 발생하지 않음을 의미한다. |
인터럽트 플래그 | 언터럽트가 가능한지 나타낸다. | 인터럽트 프래그가 1일경우 인터럽트가 가능함을 나타내며, 0일경우 인터럽트가 불가능함을 의미한다. |
슈퍼바이저 플래그 | 커널 모드로 실행 중인지, 사용자 모드로 실행중인지 나타낸다. | 슈퍼바이저 플래가가 1일경우 커널모드 실행, 0일경우 사용자 모드로 실행 중임을 의미한다. |
이러한 플래그들은 플래그 레지스터라는 공간에 저장이 되며, 연산 결과에 대한 추가적인 정보를 얻을 수 있다.
2. 제어장치
제어장치는 제어신호를 내보내고 명령어를 해석하는 부품이다.
제어신호는 컴퓨터 부픔을 관리하고 작동시키기 위한 전기 신호라고 할 수 있다.
먼저 제어장치가 받아들이는 정보에 대해서 알아보자.
1) 클럭
제어장치는 클럭 신호를 받아들인다.
클럭이란 컴퓨터의 모든 부품을 일사분란하게 움직일 수 있게하는 시간 단위로 클럭의 주기에 맞춰 한 레지스터에서 다른 레지스터로 데이터가 이동되거나, ALU에서 연산이 수행되거나, CPU에서 메모리에 저장된 명령어를 읽어들인다.
모든 부품들이 한주기에 작동하는 것이 아니라 여러주기에 걸쳐 작동이 된다.
2) 명령어
제어장치는 해석해야 할 명령어를 받아들인다.
제어장치는 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려준다.
3) 플래그
제어장치는 플래그 레지스터 속 플래그 값을 받아들인다.
플래그는 ALU 연산에 대한 추가적인 상태 정보이다.
제어장치가 제어신호를 통해 컴퓨터 부품들을 제어할 때 중요한 참고사항이 된다.
4) 제어버스의 제어신호
제어장치는 시스템 버스, 그중에서 제어버스로 전달된 제어 신호를 받아들인다.
제어신호는 CPU 뿐만아니라 입출력 장치를 비롯한 CPU 외부 장치도 발생시킬 수 있다.
제어장치는 제어버스를 통해 외부로부터 전달 된 제어신호를 받아드린다.
다음으로 제어장치가 내보내는 정보이다.
1) CPU 외부에 전달하는 제어 신호
CPU 외부로 전달하는 제어신호는 제어버스로 내보낸다는 것과 같은 말이다.
크게 메모리에 전달하는 제어신호와 입출력장치에 내보내는 제어신호로 나누어진다.
2) CPU 내부에 전달하는 제어 신호
제어장치가 CPU 내부로 전달하는 제어신호는 크게 ALU에 전달하는 제어신호와 레지스터에 전달하는 제어신호가 있다. ALU에는 수행할 연산을 지시하기 위해, 레지스터에는 레지스터 간에 데이터를 이동시키거나 레지스터에 저장된 명령어를 해석하기 위해 제어신호를 내보낸다.
3. 레지스터
프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장된다.
따라서 레지스터에 저장된 값만 잘 관찰해도 프로그램의 실행 흐름을 파악할 수 있다.
레지스터는 CPU마다 이름과 종류가 다르지만, 공통된 주요한 레지스터들에 대해서 알아보자
주요 레지스터는 다음과 같다.
- 프로그램 카운터
- 명령어 레지스터
- 메모리 주소 레지스터
- 메모리 버퍼 레지스터
- 플래그 레지스터
- 범용 레지스터
- 스택 포인터
- 베이스 레지스터
1) 프로그램 카운터
프로그램 카운터(Program Counter) 메모리에서 가져올 명령어 주소, 즉 메모리에서 읽어 들일 명령어의 주소를 저장한다.
2) 명령어 레지스터
명령어 레지스터 (Instruction Register)는 해석할 명령어, 즉 방금 메모리에서 읽어들인 명령어를 저장하는 레지스터이다.
즉 제어장치에서는 명령어 레지스터의 값인 명령어를 받아드리고 해석한뒤 제어신호를 발생시킨다.
3) 메모리 주소 레지스터
메모리 주소 레지스터 (Memory Address Register)는 메모리의 주소를 저장하는 레지스터로, CPU가 읽어 들이고자 하는 주소값을 주소버스로 보낼 때 메모리 주소 레지스터를 거친다.
4) 메모리 버퍼 레지스터
메모리 버퍼 레지스터 (Memory Buffer Register)는 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터이다. CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고 받을 값은 메모리 버퍼 레지스터를 거친다.
5) 범용 레지스터
범용 레지스터 (General Purrpose Register)는 이름 그대로 일반적인 상황에서 자유롭게 사용가능한 레지스터이다.
데이터와 주소를 모두 저장 가능하다.
6) 플래그 레지스터
플래그 레지스터 (Flag Register)는 연산결과나 CPU 상태에 대한 부가 정보를 저장한다.
7) 스택 포인터
스택포인터는 주소 지정에 사용될 수 있는 특별한 레지스터로 스택 주소 지정방식이라는 주소지정방식에 사용된다.
- 스택 주소 지정방식
스택 주소 지정 방식은 스택과 스택 포인터를 이용한 주소 지정 방식이다. 스택구조는 한쪽이 막혀있는 구조로 마지막에 들어온 데이터가 가장 먼저 나가는 LIFO (Last In First Out)의 형태를 띈다.
스택 포인터는 스택의 가장 꼭대기, 즉 가장 늦게 들어온 값을 가리키는 레지스터이다.
스택은 메모리 내 영역 중 하나로 해당 영역은 스택의 구조로 사용하겠다는 암묵적 약속이 적용되어있다.
8) 베이스 레지스터
베이스 레지스터 역시 주소지정에 사용되는 특별한 레지스터로 베이스 레지스터 주소 지정 방식에 사용된다.
-베이스 레지스터 주소 지정 방식
명령어의 구조에서 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식이다.
* 위와 같이 오퍼랜드와 레지스터 값의 합으로 주소를 지정하는 방식을 변위 주소 지정 방식이라고 한다.
프로그램 카운터 값을 더하여 유효주소를 얻는 상대 주소 지정 방식이 추가로 있다.
'Computer Science' 카테고리의 다른 글
CS - #3. 소스 코드, 명령어 (0) | 2023.09.14 |
---|---|
CS - #2. 2진법, 16진법 표현 (0) | 2023.09.11 |
CS - #1. 컴퓨터 구조 (0) | 2023.09.10 |