⚠️ 공부한 내용을 정리하는 공간입니다. 설명이 부족하거나 옳바르지 못한 부분이 있을 수 있습니다. 옳바르지 못한 내용을 발견하셨다면 댓글로 알려주시길 부탁드립니다. 수정하도록 하겠습니다.
오늘의 사족
스스로에게 부여한 과제가 많아지면서 제 스스로가 너무하다는 생각이 듭니다. 그렇다면 제가 미워해야 할 대상은 무엇일까요?
뇌? 마음? 신체? 영혼? 무엇을 미워해야 하는지 알아내는 것도 참 어려운 과정일 거란 예감이 드는군요
그냥 세상을 미워하기로 합의를 볼까요?
세상아 네가 참 밉다!
< 목차 >
1. CPU의 구성요소
1-1. ALU (Arithmetic Logical Unit)
1-2. CU (Control Unit)
1-2. Registers
1. CPU의 구성요소
CPU 내부에는 계산을 담당하는 산술 논리 장치인 ALU와 명령어를 읽고 해석하는 장치인 CU와 CPU가 명령을 빠르게 수행하기 위해 임시로 데이터를 저장하는 장치인 Register가 있다. 그리고 각 장치들이 정보를 읽어오고 저장할 수 있도록 해주는 내부의 Bus도 있다.
그러면 이제 각 장치들이 구체적으로 어떤 역할을 하는지 알아보자!
1-1. ALU (산술 논리 장치)
ALU는 산술/논리 연산을 하는 장치이다. 그래서 다른 레지스터로부터 연산에 필요한 데이터를 전달받고 연산을 마치면 그 결과값을 다시 내보내는 역할을 한다. 이때 ALU가 어떠한 연산을 할 것인지에 대한 데이터는 제어 장치가 제어 신호를 통해 전달한다.
그런데 이때 ALU가 연산한 결과값이 음수인지 아닌지 그 정보도 전달해야할 필요가 있다.
위 글에서 컴퓨터는 0과 1로만 표현된 데이터만 처리하기 때문에 음수를 표현하기 위해 2의 보수를 사용한다고 했었다. 그러면서 해당 수가 음수인지 양수인지 Flag를 사용하여 CPU가 데이터를 처리할 수 있다고 했다. 이때 Flag에 대한 데이터를 담는 레지스터가 바로 Flag Register이다.
ALU는 연산을 하고 나온 결과값에 대한 부가적인 정보를 Flag Register를 통해 전달한다.
그러면 Flag Register에는 도대체 어떤 부가 정보가 저장되는걸까?
1-2. CU (제어 장치)
CU는 제어장치로서 데이터를 어떻게 처리해야 할지 해석하고 해석한 명령을 바탕으로 ALU가 어떤 연산을 수행할지에 대한 제어 신호를 보내는 역할을 한다.
CU는 IR로부터 opcode에 대한 데이터를 전달받아(Fetch) 어떤 연산을 수행해야하는지 opcode를 해석(Decode)한다. 그런 다음 해석한 명령을 바탕으로 연산을 수행할 수 있도록 ALU에 제어 버스를 통해 제어 신호를 전달한다. 이때 CU는 clock(클럭)이라는 시간단위에 맞춰서 명령을 수행한다.
1-3. Registers
CPU에는 제어를 수행하는 CU와 연산을 수행하는 ALU와 명령을 수행하기 위해 CPU가 데이터를 임시로 저장하기 위해 사용하는 Registers가 있다.
각 레지스터들은 역할에 따라 명칭을 가지고 있다.
PC (Program Couter): 프로그램 카운터는 메모리에서 읽어들인 명령어가 담긴 주소를 저장한다.
IR (Instruction Register): 명령어 레지스터는 opcode 필드와 operand 필드로 구성되며 IR이 전달하는 명령어를 토대로 CU는 명령어를 해석하여 제어신호를 내보낸다.
MAR (Memory Address Register): 메모리 주소 레지스터는 메모리의 주소를 저장한다.
MBR (Memory Buffer Register): 메모리 버퍼 레지스터는 메모리의 주소에 저장된 혹은 저장할 데이터를 저장한다.
FR (Flag Register): 플래그 레지스터는 연산 결과나 CPU의 상태에 대한 부가 정보를 저장한다.
General Purpose Register: 범용 레지스터는 다양하고 일반적인 상황에서 자유롭게 값을 저장하기 위해 사용하는 레지스터이다.
SP (Stack Pointer): 스택에 저장된 데이터 중 제일 마지막에 저장된 주소를 가리킨다.
BR (Base Register): 베이스 레지스터는 명령의 시작 주소를 기억하는 레지스터로 프로그램에서 첫 번째 물리 주소를 저장한다.