반응형
ALU와 제어장치
ALU는 계산하는 부품이다. 계산하기 위해서는 피연산자와 수행할 연산이 필요하다.
그래서 ALU는 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들인다.
즉, 레지스터와 제어장치로부터 피연산자와 제어신호를 받아들여 산술연산, 논리 연산 등 다양한 연산을 수행한다.
받아들였다면 내보내는 정보도 있다.
결과는 메모리가 아닌 레지스터에 저장된다. 그 이유는 CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느리기 때문이다.
ALU는 계산결과와 플래그를 내보낸다. 연산 결과에 대한 추가적인 상태 정보를 플래그(flag)라고 한다. 대표적은 플래그로 6가지가 있다.
플래그 종류 | 의미 |
부호 플래그 | 연산한 결과의 부호를 나타낸다. |
제로 플래그 | 연산 결과가 0인지 여부를 나타낸다. |
캐리 플래그 | 연산 결과 올림수나 발림수가 발생했는지 나타낸다. |
오버플로우 플래그 | 오버플로우가 발생했는지 나타낸다. |
인터럽트 플래그 | 인터럽트가 가능한지를 나타낸다. |
슈퍼바이저 플래그 | 커널 모드로 실행 중인지, 사용자 모드로 실행중인지를 나타낸다. |
이런 각각의 플래그들은 플래그 레지스터라는 레지스터에 저장된다.
예를 들어, ALU가 연산 직후 부호 플래그가 1이 되었다면 아래와 같이 연산 결과가 나온다.
부호플래그 | 제로 플래그 | 캐리 플래그 | 오버플로우 플래그 | 인터럽트 플래그 | 슈퍼바이저 플래그 |
1 | 0 | 0 | 0 | 0 | 0 |
제어장치
제어장치는 제어 신호를 내보내고, 명령어를 해석하는 부품.
제어신호는 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호
- 제어장치는 클럭 신호를 받아들인다.
- 클럭이란 컴퓨터의 모든 부품을 일사불란하게 움직일 수 있게 하는 시간 단위이다. 레지스터에서 다른 레지스터로 데이터가 이동되거나, ALU에서 연산이 수행되거나, CPU가 메모리에 저장된 명령어를 읽어 들인다.
- 제어장치는 해석해야 할 명령어를 받아들인다.
- CPU가 해석해야 할 명령어는 명령어 레지스터라는 특별한 레지스터에 저장된다. 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어신호를 발생시켜 컴퓨터 부품들에 수행해야 할 내용을 알려준다.
- 제어장치는 플래그 레지스터 속 플래그 값을 받아들인다.
- 제어장치가 제어신호를 통해 플래그 값을 받아들이고 이를 참고하여 제어 신호를 발생시킨다.
- 제어장치는 시스템 버스, 그중에서 제어 버스로 전달된 제어 신호를 받아들인다.
- 제어 신호는 CPU뿐만 아니라 입출력장치를 비롯한 CPU외부 장치도 발생시킬 수 있다. 제어장치는 제어 버스를 통해 외부로부터 전달된 제어 신호를 받아들이기도 한다.
즉, 제어장치는 클럭, 현재 수행할 명령어, 플래그, 제어 신호를 받아들인다.
위의 그림을 보면 제어장치는 CPU 외부로 전달하는 제어 신호와 CPU 내부에 전달하는 제어 신호가 있다.
- CPU 외부로 전달하는 제어 신호
- 제어장치가 CPU 외부에 제어 신호를 전달한다는 말은 제어 버스로 신호를 내보낸다는 말이다.그리고 크게는 메모리와 입출력장치에 보낸다.
- 메모리에 저장된 값을 읽거나 메모리에 새로운 값을 쓰고 싶다면 메모리로 제어신호를 내보낸다.
- 입출력장치의 값을 읽거나 새로운 값을 쓰고 싶을 때는 입출력장치로 제어신호를 내보낸다.
- CPU 내부로 전달하는 제어 신호
- ALU에는 수행할 연산을 지시하기 위해 제어 신호를 보낸다.
- 레지스터에는 레지스터 간에 데이터를 이동시키거나 레지스터에 저장된 명령어를 해석하기 위해 제어 신호를 내보낸다.
레지스터
프로그램 속 명령어와 데이터는 실행 전후로 레지스터에 저장된다. 레지스터 속 값을 보면 프로그램을 실행할 때 CPU내에서 무슨 일이 발생되고 있는지 알 수 있다.
대표적인 레지스터 8가지
- 프로그램 카운터
- 메모리에서 가져올 명령어의 주소 즉, 메모리에서 읽어 들일 명령어의 주소를 저장한다. 프로그램 카운터 또는 명령어 포인터라고 부르는 CPU가 있다.
- 명령어 레지스터
- 해석할 명령어, 메모리에서 읽어 들인 명령어를 저장하는 레지스터이다.
- 메모리 주소 레지스터
- 메모리의 주소를 저장하는 레지스터. CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거친다.
- 메모리 버퍼 레지스터(메모리 데이터 레지스터라고도 불린다.)
- 메모리와 주고받을 값(데이터와 명령어)을 저장하는 레지스터. CPU가 주소 버스로 내보낼 값이 메모리 주소 레지스터를 거친다면, 데이터 버스로 주고받을 값은 메모리 버퍼 레지스터를 거친다.
- 플래그 레지스터
- ALU 연산결과에 따른 플래그를 플래그 레지스터에 저장.
- 범용 레지스터
- 데이터와 주소를 모두 저장할 수 있다. 현대 대다수 CPU는 모두 범용 레지스터를 가지고 있다.
- 스택 포인터
- 스택의 꼭대기를 가리키는 레지스터이다. 즉, 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터.
- 베이스 레지스터
- 저장된 주소는 기준 주소로서의 역할을 한다.
반응형
'혼자 공부하는 컴퓨터구조 + 운영체제' 카테고리의 다른 글
CPU 성능 향상 기법 (0) | 2022.10.08 |
---|---|
명령어 사이클과 인터럽트 (0) | 2022.10.05 |
연산코드와 오퍼랜드 (0) | 2022.09.29 |
소스코드와 명령어 (0) | 2022.09.27 |
데이터 (0) | 2022.09.25 |