저번 게시물에서는 CPU가 명령어를 실행하는 과정과 핵심 부품들에 대해 정리했다. 이번에는 CPU 내부의 ALU, 제어장치, 레지스터에 대해 더 자세히 알아보고 CPU의 작동원리에 대해 이해해 보려고 한다.
복습해보자면 CPU 는 ALU(산술논리연산장치), 레지스터(register), 제어장치(CU; Control Unit) 등으로 구성되어있는 장치이며, 메모리에 저장된 명령어를 읽어들이거, 해석하고, 실행하는 장치이다.
산술논리연산장치인 ALU는 레지스터를 통해 피연산자를 받고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들인다. 이후, 다양한 연산을 수행한다.
CPU가 메모리에 접근하는 시간은 레지스터에 접근하는 시간보다 훨씬 많이 걸리기 때문에 수행된 연산의 결과값은 메모리가 아닌 레지스터에 임시로 저장된다. 연산 결과에 대한 추가정보 상태정보는 "플래그" 라고 하는 데, 이런 플래그들은 플래그 레지스터라는 플래그에 저장된다.
추가정보들은 연산결과값의 부호, 연산이 0인지에 대한 여부, 연산결과가 레지스터보다 큰 상황 등을 나타낸다. 다음과 같은 플래그 들이 있다.
예를들어, 네거티브 플래그(부호 플래그)가 다음과 같이 1이 되었다면, 연산결과는 음수라는 것을 나타낸다. 마찬가지로 제로플래그가 1이 되면 연산결과가 1이라는 것을, 오버플로우 플래그가 1이라면 오버플로우가 발생한것을 나타낸다.
제어신호를 내보내고, 명령어를 해석하는 장치. 주기억 장치, 입출력 장치, ALU에 프로세서가 전송한 명령어를 수행하도록 하는 역할을 한다.
제어신호 :
컴퓨터 부품들을 관리하고, 작동시키기 위한 전기신호
제어장치는 다음과 같은 순서로 신호를 받고, 내보낸다.
클럭은 컴퓨터의 부품을 움직일 수 있게 하는 시간 단위이다. 모든 부품이 한 클럭 단위로 작동하는 것은 아니고, 부품별로 다른 정해진 클럭 주기에 따라 부품들이 작동하게 된다.
"명령어 레지스터"로 부터 명령어를 받아들여서 해석한 뒤, 제어신호를 발생시켜 다른 컴퓨처 부품들에게 수행해야 할 내용들을 전달한다.
플래그 값을 받고, 이를 참고하여 제어신호를 발생시킨다.
시스템버스, 그 중에서 제어버스를 통해 외부로 부터 전달된 제어신호를 받아들인다.
이후, 메모리 값을 읽거나 메모리에 값을 저장하고 싶다면 메모리로 제어신호를 내보내고, 입출력장치의 값을 읽거나 쓰고 싶르면 입출력장치로 제어신호를 내보낸다.
프로그램을 실행하는 데 필요한 값들을 임시로 저장하는 작은 임시 저장장치이다. 명령어와 데이터는 실행전후로 반드시 레지스터에 저장된다. CPU안에는 다양한 레지스터들이 있고, 각기 다른 역할이 있다. CPU마다 다른 레지스터들을 갖고 있지만 다음 8개의 레지스터만큼은 꼭 갖고있다.
1. 프로그램 카운터
프로그앰 카운터는 메모리에서 읽어들일 명령어를 저장한다. 명령어 포인터라고 부르기도한다.
2. 명령어 레지스터
메모리에서 읽어들인 명령어를 저장하는 레지스터. 제어장치는 명령어 레지스터 속 명령어를 받아들이고, 해석한 뒤에 제어신호를 내보낸다.
3. 메모리 주소 레지스터
메모리의 주소를 저장하는 레지스터. CPU가 읽어들이는 주소 값을 주소버스로 보낼 때 이 레지스터를 거친다.
4. 메모리 버퍼 레지스터
메모리와 주고받을 값(데이터와 명령어)를 저장하는 레지스터. 메모리에 저장하고 싶거나 메모리로 부터 전달받은 값들은 이 레지스터를 거친다. 메모리 데이터 레지스터라고도 한다.
🕹️ 레지스터들이 작동하는 과정
5. 플래그 레지스터
연산 결과 또는 부가적인 정보를 저장하는 레지스터.
6. 범용 레지스터
범용이라는 이름 처럼 다양한 상황에서 자유롭게 이용할 수 있는 레지스터. 데이커와 주소를 모두 저장할 수 있고, 일반적으로 CPU내에 여러개의 범용 레지스터들이 있다.
7. 스택 포인터
"스택 주소 지정 방식" 이라는 주소 지정 방식에 사용되는 레지스터.
8. 베이스 레지스터
프로그램 카운터와 베이스 레지스터는 "변위 주소 지정방식"이라는 주소 지정방식에 사용된다.
✅스택 주소 지정 방식 : 스택과 스택포인터를 이용한 주소지정방식. 스택포인터는 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터이다.
✅베이스 레지스터 : 오퍼랜드 필드의 값과 특정 레지스터의 값을 더하여 유효주소를 얻어내는 주소 지정방식.
오퍼랜드 필드를 이해하기 위해서는 명령어의 구조에 대해 이해해야한다.
참고 : 혼자 공부하는 컴퓨터 구조+운영체제