CPU(Central Process Unit) 은 중앙처리장치로 간단하게 컴퓨터에서 돌아가는 모든 작업을 처리해주는 장치이다.
더 자세히 들어가면 CPU 는 제어장치 + 연산장치 + 레지스터로 구성되어있으며 이들은 서로 내부 버스로 연결되어 있다.
여기서 버스(BUS)는 데이터들이 이동하는 전기적 통로로 버스에서 이동하는 데이터에 따라 또는 위치에 따라 분류할 수 있다.
1. 이동하는 데이터에 따른 분류
- Data BUS : CPU 가 사용하는 데이터들의 이동통로, 메모리<->CPU, 메모리<->입출력장치가 해당된다.
- Address BUS : CPU 가 사용하는 데이터들의 주소의 이동 통로.
- Control BUS : CPU 에서 발생하는 제어신호들의 이동 통로.
2. 위치에 따른 분류
- Inner BUS : CPU 내부
- Outer BUS : CPU 외부
연산장치(Arithmetic Logic Unit)는 산술연산, 논리연산을 수행하는 장치로 디지털 논리회로로 이루어져 있다.
제어장치(Control Unit)는 컴퓨터 내 모든 장치의 동작 및 지시를 제어 신호를 발생시키는 장치이다.
레지스터는 CPU 가 사용하는 데이터들을 담는 메모리로 매우 빠르지만 용량이 작다.
위 장치들 중에서 연산/제어 장치의 경우에는 간단하게 정리가 되지만 레지스터는 종류도 다양하고 다양한 레지스터들이 다른 영역에서도 언급되므로 좀 더 자세히 파고 들어가보도록 하자.
레지스터는 CPU 의 작업 공간으로 작업을 수행하면서 발생하는 다양한 정보들을 저장하고 그 목적에 따라 기능이 설계되어있으며 기본적으로는 CPU 에서 빠르게 정보를 받고 저장하기 위해 빠르지만 용량이 작다. 레지스터들에 대해 하나씩 열거해 보자.
1. PC(Program Counter)
다음에 실행될 명령의 주소를 저장하는 레지스터
쉽게 생각하면 흔히 우리가 디버깅 모드를 사용할 경우 한 줄씩 포인터를 넘기며 진행할 수 있는데 마찬가지로 CPU 도 본인이 실행할 작업의 코드의 현재 위치를 알기 위해 이 프로그램 카운터에 해당 포인터의 위치 정보를 저장한다. 따라서 프로그램 카운터는 실행해야되는 코드의 위치를 관리하는 레지스터라고 볼 수 있다.
2. IR(Instruction Register)
현재 실행 중인 명령어를 저장하는 레지스터
PC 는 수행 중인 모든 프로그램들의 다음에 실행될 위치만을 담고 있다면 IR 은 PC 가 가르키는 명령어를 담는 레지스터이다.
3. AC(Accumulator)
CPU 의 연산 결과를 일시적으로 저장하는 레지스터
4. SR(State Register)
시스템 내부 상태를 기록하는 레지스터
5. DR(Data Register)
연산에 사용될 데이터들을 저장하는 레지스터
6. MAR(Memory Address Register)
CPU 가 메모리 접근 시 원하는 데이터가 메모리 내에 위치한 곳의 주소를 저장하는 레지스터
7. MBR(Memory Buffer Register)
CPU 가 읽으려는 혹은 쓰려는 데이터를 일시적으로 저장하는 레지스터
자주 언급되는 레지스터들은 위와 같고 이외에도 기능에 따라 더욱 다양한 디지털 논리회로로 구성된 레지스터들이 있다.
그렇다면 CPU 는 어떠한 원리로 프로그램들의 요청을 수행할까?
모든 프로그램들은 작업을 수행하기 위해 프로세스를 생성한다.
여기서 프로세스는 CPU 가 수행하는 하는 가장 기본적인 단위의 작업으로 큐(Queue) 자료구조에 저장된다.
이렇게 큐 저장된 프로세스들은 CPU 의 스케쥴링 기법에 따라 한 번에 한 개만 실행된다.
그리고 프로세스를 수행하면서 CPU 는 프로세스가 요청하는 작업을 진행하기 위해 메모리에서 데이터를 불러온다.
1. 이때 가져오는 데이터는 결국 하나의 코드를 읽어 실행하는 것으로 PC 가 가르키는 명령어 집합을 가져온다.
2. 가져온 명령어를 해석하여 연산을 수행할 준비를 하고
3. 해석된 명령어를 수행하며
4. 만약 메모리에 결과를 반영해야한다면 해당 내용을 새로 쓴다.
5. 마지막으로 위 과정을 진행하며 인터럽트(다른 프로세스를 진행해야하는 이벤트)를 체크한다.
위와 같은 CPU 명령 수행 구조를 폰 노이만 구조라고 하며 (인출-실행-인터럽트)-(인출-실행-인터럽트).... 를 반복하며 프로세스를 진행한다고 볼 수 있다.
CPU 는 결과적으로 컴퓨터에서 실행되는 모든 프로그램들이 요청하는 프로세스들을 수행하는 장치이며 그 과정에서 효율적으로 데이터들을 관리하기 위해 다양한 종류의 메모리들이 각자의 기능에 맞게 설계 되어 CPU 의 작업 과정을 서포트 해준다고 볼 수 있다.