CPU가 뭔가요?
CPU는 컴퓨터 시스템에서 핵심적인 역할을 담당하는 부품으로, 프로그램을 실행하거나, 데이터를 처리하는 역할을 수행합니다.
CPU의 구성요소를 설명해주세요
CPU는 3가지로 구성됩니다.
- 연산 장치
- 제어 장치
- 레지스터
위 3개로 구성되어 있으며, 구성장치들은 내부 버스로 연결되어 있습니다.
연산 장치는 산술연산과 논리연산을 수행합니다. ALU는 연산을 처리하고 결과를 레지스터에 저장합니다.
제어장치는 명령어 해석 및 실행의 조정을 담당하는 부분으로, 명령어의 흐름을 관리하고 다른 하드웨어 구성 요소와 제어 신호를 보내거나 받아 상호작용 합니다.
레지스터는 고속 기억 장치로, CPU 내의 데이터를 일시적으로 저장하거나 조작하는데 사용합니다.
CPU의 동작과정을 설명해주세요
- 처리해야할 데이터를 주기억장치(RAM)에서 불러와 제어장치 안의 레지스터에 전달합니다.
- 제어장치는 연산 코드를 해석하고 연산을 결정해 연산 장치에게 전달합니다.
- 연산 장치가 연산후, 레지스터나 주기억장치로 전송합니다.
제어장치의 구성요소를 설명해주세요
제어장치는 프로그램 카운터, 명령 레지스터, 디코더, 엔코더, 메모리 주소 레지스터, 메모리 버퍼 레지스터 등으로 이루어져 있습니다.
- 프로그램 카운터 : 프로그램 카운터는 다음번에 실행할 명령어의 주소를 기억하는 레지스터입니다. 다음 명령의 번지수가 레지스터에 기억됩니다.
- 명령어 레지스터 : 명령어 레지스터에는 현재 실행중인 명령의 내용이 기억됩니다.
- 디코더 : 명령 해독기 입니다.
- 엔코더 : 부호기 입니다. 명령에 따라 장치로 보낼 제어 신호를 생성합니다.
- 메모리 주소 레지스터 : 명령을 처리하면 CPU 내의 레지스터에 데이터가 생기는데, 이 데이터의 주기억장치 주소가 저장됩니다.
- 메모리 버퍼 레지스터 : 주기억장치에서 읽어온 데이터를 임시저장합니다.
연산장치(ALU)의 구성요소를 설명해주세요
연산장치는 가산기, 보수기, 누산기, 데이터 레지스터, 플래그 레지스터, 인덱스 레지스터 등으로 구성됩니다.
- 데이터 레지스터 : 주기억장치로 부터 가져온 데이터를 보관하는 기억장소입니다.
- 가산기 : 누산기와 레지스터의 값을 더하여 그 결과를 누산기에 보관하는 회로입니다.
- 누산기 : 연산장치를 구성하는 중심이 되는 레지스터이고, 사칙 연산, 논리 연산 등 중간 결과를 기억합니다.
- 보수기 : 음수를 보수로 변환합니다. 1의 보수 방식과 2의 보수 방식이 존재합니다.
- 플래그 레지스터 : 연선 결과의 부호 입력 자리 올림수, 오버플로, 인터럽트 발생 여부의 상태를 저장합니다.
- 인덱스 레지스터 : 주로 데이터가 저장되어 있는 메모리 주소를 가리키는 포인터로 사용됩니다.
레지스터의 종류를 알려주세요
- MAR(메모리 주소 레지스터) : 읽기와 쓰기 연산을 수행할 주기억장치 주소 저장
- PC(프로그램 카운터) : 다음에 수행할 명령어 주소 저장
- IR(명령어 레지스터) : 현재 실행중인 명령어 저장
- MBR(메모리 버퍼 레지스터) : 주기억장치에서 읽어온 데이터 or 저장할 데이터 임시 저장
- AC(누산기) : 연산 결과 임시 저장
ALU에 대해 자세히 설명해주세요
연산장치는 레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어 신호를 받아들입니다. 즉, 레지스터와 제어장치로부터 받아들인 피연산자와 제어 신호로 산술 연산, 논리 연산 등 다양한 연산을 수행합니다.
연산장치의 연산을 수행한 결과는 숫자, 문자, 메모리 주소 등이 될 수 있습니다. 연산의 결과는 메모리에 바로 저장되지 않고 일시적으로 레지스터에 저장됩니다.
ALU는 계산 결과와 플래그를 내보냅니다. 플래그에는 연산 결과에 대한 추가 정보를 내보냅니다. 예시로 결괏값이 음수일 경우 플래그에 ‘음수’라는 추가적인 정보를 보내거나, 결괏값이 레지스터보다 큰 경우 오버플로우 라는 추가 정보를 보냅니다.
이러한 플래그는 CPU가 프로그램을 실행하는데 반드시 필요한 참고 정보이고, 플래그 레지스터에 저장됩니다.
왜 연산결과를 레지스터에 임시 저장하나요?
CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 훨씬 느립니다.
연산장치가 연산할 때 마다 결과를 메모리에 저장하게 된다면, CPU는 메모리에 자주 접근하게 되고, 이는 CPU가 프로그램 실행속도를 늦출 수 있습니다.
그래서 연산장치의 결괏값을 메모리가 아닌 레지스터에 우선 저장하는 것 입니다.
플래그 종류에 대해 설명해주세요
부호 플래그는 연산 결과의 부호를 나타냅니다. 음수일땐 1, 양수일땐 0 입니다.
제로 플래그는 연산 결과가 0인지 여부를 나타냅니다. 0일땐 1, 0이 아닐땐 0입니다.
캐리 플래그는 올림수나 빌림수 발생 여부를 나타냅니다. 1일 경우 발생했음을 의미하고, 0은 발생하지 않았음을 의미합니다.
오버플로우 플래그는 오버플로우 발생 여부를 나타냅니다. 1일 경우 발생했음을 의미하고, 0은 발생하지 않았음을 의미합니다.
인터럽트 플래그는 인터럽트가 가능한지 나타냅니다. 1일 경우 인터럽트가 가능함을 의미하고, 0일땐 불가능을 의미합니다.
슈퍼바이저 플래그는 커널 모드인지 사용자 모드인지 나타냅니다. 1일 경우 커널모드 ,0일 경우 사용자 모드입니다.
제어장치에 대해 자세하게 설명해주세요
제어장치는 제어 신호를 내보내고, 명령어를 해석하는 부품입니다.
제어 신호는 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호 입니다.
제어장치는 클럭 신호를 받아들입니다.
제어장치는 명령어 레지스터에서 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시킵니다.
제어장치는 플래그 레지스터에서 플래그 값을 받아들입니다.
제어장치는 시스템 버스 중 제어 버스로 전달된 제어 신호를 받아들입니다.
제어장치는 CPU 외부와 내부에 전달하는 제어 신호가 있습니다.
CPU 외부에 제어 버스로 제어 신호를 내보냅니다.
CPU 내부에서 ALU에는 수행할 연산을 지시하기 위해, 레지스터에는 레지스터 간에 데이터를 이동시키거나 레지스터에 저장된 명령어를 해석하기 위해 제어 신호를 보냅니다.