기본적인 컴퓨터 구조
오늘날의 컴퓨터는 대부분 폰노이만 구조를 따른다. 폰노이만 구조는 CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어 있는 구조를 말한다. 이 구조가 등장하기 이전에는 하드와이어링 형태로 전선 연결이 계속 바꾸는 형태였다.
이러한 문제를 해결하기 위해 폰노이만은 메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조, 즉 하드웨어는 그대로 둔 채 작업을 위한 프로그램만 교체하여 메모리에 올리는 방식을 고안했다.
폰노이만 구조의 가장 큰 핵심은 '모든 프로그램이 메모리에 올라와야 실행할 수 있다'는 것이다.
CPU의 구성
CPU는 크게 3가지 구성으로 이루어져 있는데 산술논리 연산장치, 제어장치, 레지스터 이다.
1. 산술논리 연산장치(arithmetic and logical unit, ALU)
CPU가 데이터를 연산하는 장치로, 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 산술 연산과 AND, OR과 같은 논리 연산도 수행한다.
2. 제어 장치(control Unit)
CPU에서 작업을 지시하는 부분을 제어장치라고 한다.
3. 레지스터(register)
CPU내의 데이터를 임시로 보관하는 곳으로 레지스터라고 한다. 저장 장치의 속도 순서로 레지스터 > 메모리 > 하드 디스크지만 용량은 반대로 커진다.
CPU 명령어 처리 과정
산술논리 연산장치, 제어장치, 레지스터를 이용해 어떻게 컴퓨터가 명령어를 처리하는지 알아보자
int sum;
int a = 2, b =3;
sum = a + b;
위 코드를 어셈블리로 변환한 다음, 기계어로 바뀌어야 기계가 인식할 수 있다.
LOAD mem(100), register 2;
LOAD mem(120), register 3;
ADD register 5, register 2, register 3;
MOVE register 5, mem(160);
LOAD로 메모리 100번지에 있는 값을 레지스터 2로 가져온다는 의미이다. 메모리 100번지에는 변수 a의 값인 2가 있다고 하고 120번지에는 변수 b의 값인 3이 있다고 하자 ADD를 통해 register 2, 3의 값을 더하고 register 5에 저장한다.
MOVE 명령어를 통해 register 5의 값을 메모리 160번지(sum)로 옮긴다.
CPU가 연산을 하려면 필요한 데이터를 CPU로 가져와 임시로 보관해야 한다. 이때 사용하는 장소가 레지스터이다.
제어장치는 명령어를 해석하고 제어 신호를 보내고 CPU내의 데이터 흐름을 조절하는 역할을 한다. 위 예제에서 제어장치는 메모리에서 데이터를 가져와라, 덧셈을 실행하라, 덧셈한 결과를 메모리로 옮겨놔라라고 명령 신호를 보낸다.
즉, 다음과 같이 메모리에서 100, 120번지를 읽어 레지스터로 보내는 것이 1,2 로드이다. 더하기 연산 명령어를 읽고 제어장치는 레지스터에서 2와 3번지에 있는 값을 산순 논리 연산장치에 넣고 연산하도록 한다.
연산 결과를 레지스터 5에 저장되고, MOVE 명령어를 읽고 4, 이동 화살표처럼 레지스터에게 5번 레지스터 값을 메모리 160번지에 저장하라고 지시한다.
레지스터 종류
CPU는 레지스터에 메모리에서 가져온 데이터와 산술논리 연산장치 결과의 데이터를 저장한다.
이때 사용되는 레지스터는 데이터 레지스터와 주소 레지스터이다.
- 데이터 레지스터(DR) : 메모리에서 가져온 데이터를 임시로 보관한다. CPU 내의 대부분의 레지스터가 데이터 레지스터 이기 때문에 범용 레지스터, 일반 레지스터라고 불린다.
- 주소 레지스터(AR) : 데이터 또는 명령어가 저장된 메모리의 주소는 주소 레지스터에 저장된다.
이외의 특수 레지스터는 다음과 같다. 참고로 특수 레지스터는 사용자가 임의로 변경할 수 없기 때문에 사용자 불가 레지스터라고 불린다.
- 프로그램 카운터(PC) : 프로그램 카운터는 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에게 알려준다.
- 명령어 레지스터(IR) : 명령어 레지스터는 현재 실행 중인 명령어를 저장한다. 제어 장치는 명령어 레지스터에 있는 명령을 해석한 수 외부 장치에 적절한 제어 신호를 보낸다.
- 메모리 주소 레지스터(MAR) : 메모리 주소 레지스터는 메모리에서 데이터를 가져오거나 반대로 메모리로 데이터를 보낼 때 주소를 지정하게 위해 사용한다.
- 메모리 버퍼 레지스터(MBR) : 메모리 버퍼 레지스터는 메모리에서 가져온 데이터나 메모리로 옮겨 갈 데이터를 임시로 저장한다. 메모리 버퍼 레지스터는 항상 메모리 주소 레지스터와 함께 동작한다.
명령어 LOAD mem(1000), register 2; 의 실행 과정을 통해 특수 레지스터를 살펴보자
- 프로그램 카운터에는 실행 중인 코드의 행 번호(주소이지만 행번호로 대체)가 저장되고, 이 번호는 제어장치에 전송된다.
- 명령어 레지스터에는 명령어를 저장해야 하므로, LOAD가 탑재된다.
- 제어장치가 명령어 레지스터에 있는 명령어를 해석하여 메모리에 있는 데이터를 가져오라는 제어 신호를 보낸다.
- 메모리 주소 레지스터에는 100 (메모리 주소)가 저장되고, 메모리 관리자는 메모리 100번지에 저장된 값을 메모리 버퍼 레지스터로 가져온다.
- 제어장치는 메모리 버퍼 레지스터에 저장된 값을 레지스터 2로 옮긴다.
위에서 언급한 레지스터 말고도 CPU에서 사용하는 레지스터들이 아주 많다. 프로그램 상태 레지스터(상태 레지스터)는 연산 결과(양수, 음수 등)를 저장한다.
함께 읽으면 좋은 글
출처
'하드웨어 > 컴퓨터 구조' 카테고리의 다른 글
보수(Complement)에 대해서 알아보자 (2) | 2023.10.06 |
---|---|
전기로 뺄셈을 표현하는 반감산기, 전감산기 (0) | 2023.09.21 |
프로그램 카운터(Program Counter) (3) | 2023.07.21 |
릴레이를 이용한 논리연산 (6) | 2023.07.11 |
전기로 덧셈을 표현하는 반가산기, 전가산기 (6) | 2023.07.07 |
댓글