개발자공부일기
컴퓨터구조 - CPU 본문
CPU는 컴퓨터의 주요 기능 구성 요소로서, 컴퓨터에서 모든 연산과 제어 작업을 처리하는 중요한 장치입니다. 컴퓨터의 두뇌라고도 할 수 있는 CPU는 다양한 프로그램과 운영 체제를 실행하고, 데이터를 처리하여 결과를 출력하는 역할을 합니다. CPU는 하나의 장치가 아니라 여러 구성 요소가 협력하여 작업을 처리하는 복합적인 시스템입니다.
CPU의 세 가지 주요 구성 요소
- 제어 장치 (Control Unit, CU)
제어 장치는 컴퓨터의 각 부품에 명령을 전달하고 제어하는 역할을 합니다. 제어 장치는 프로그램 카운터와 명령어 레지스터를 사용하여 실행할 명령어의 순서를 제어하며, CPU 내의 다른 장치들과 협력하여 연산을 수행하게 합니다. 제어 장치는 데이터와 명령어 흐름을 관리하고, 프로그램 흐름을 제어하는 중요한 부분입니다.
- 클러신호를 받아들인다
(클럭은 컴퓨터 부품들이 수행하는 시간 단위이다. 예를 들면 클럭이라는 주기에 맞춰 CPU가 메모리에 저장된 명령어를 읽고, ALU연산이 수행되는등 모든 동작이 클럭이라는 주기에서 발생한다.) - 플래그 레지스터 속 플래그 값을 받아들인다.
제어장치가 제어신호를 내보낼 때 플래그에 참고해야하는 정보가 있을 수 있기 때문에 - 해석해야 할 명령어를 받아들인다.
제어장치는 기본적으로 명령어를 읽고 해석한다고 하였다. 명령어를 해석할려면 우선 해석할 명령어를 받아들여야 한다. - 시스템버스 중 제어 버스로 전달되는 제어 신호를 받아들인다.
제어신호는 제어장치 뿐만 아니라 입출력장치를 비롯한 CPU외부 장치들도 보낼 수 있다. 이러한 신호를 제어 장치가 받아들인다.
- 클러신호를 받아들인다
- 산술/논리 단위 (Arithmetic/Logic Unit, ALU)
산술/논리 단위는 모든 수학적 연산(덧셈, 뺄셈, 곱셈, 나눗셈 등)과 논리적 연산(AND, OR, NOT 등)을 처리합니다. 연산의 결과는 다시 레지스터에 저장되거나, 결과값을 메모리로 전송하는 등의 후속 작업이 수행됩니다. ALU는 컴퓨터 프로그램을 실행하는 데 있어 핵심적인 역할을 담당합니다.
- 입력 데이터: ALU는 두 개 이상의 입력 데이터를 받는다.
- 제어 신호 : 제어 유닛(Control Unit)은 ALU에 어떤 연산을 수행할지 지시하는 신호를 보낸다. 이 신호는 연산의 종류(덧셈, 뺄셈 등)를 결정한다.
- 연산 수행 : ALU는 입력 데이터와 제어 신호에 따라 연산을 수행한다.
- 출력 데이터 : 연산 결과는 ALU의 출력으로 전달된다.
- 레지스터(Registers)
레지스터는 CPU 내부에서 매우 빠르게 데이터를 저장하고 처리하는 작은 메모리 공간입니다. 레지스터는 연산 중 필요한 데이터를 즉시 제공할 수 있도록 하여, CPU의 연산을 효율적으로 만듭니다. 레지스터는 다양한 종류가 있으며, 각각 특정 용도로 사용됩니다.
1. 프로그램 카운터 (PC) 레지스터: 프로그램 카운터는 다음에 실행될 명령어의 주소를 저장합니다. CPU가 명령어를 실행할 때마다, PC는 자동으로 증가하여 다음 명령어의 위치를 가리킵니다. PC는 프로그램의 실행 순서를 제어하는 데 중요한 역할을 합니다.
2. 명령 레지스터 (Instruction Register, IR) 레지스터: 명령 레지스터는 현재 실행 중인 명령어를 저장합니다. CPU는 IR에 저장된 명령어를 해석하고 실행합니다.
3. 메모리 주소 레지스터 (MAR) 역할: 메모리 주소 레지스터는 메모리의 특정 주소를 저장합니다. CPU가 메모리에 데이터를 읽거나 쓸 때, MAR은 해당 데이터의 위치를 가리키는 주소를 저장합니다. 사용: MAR은 CPU가 메모리로부터 데이터를 읽거나 메모리에 데이터를 쓸 때 사용되는 주소 정보를 보관합니다. 중요성: MAR은 메모리 연산에서 데이터의 정확한 위치를 지정하는 데 중요한 역할을 합니다. 즉, 어떤 데이터가 어디에 있는지를 나타내는 주소 정보를 제공합니다.
4. 메모리 버퍼 레지스터 (MBR) 역할: 메모리 버퍼 레지스터는 메모리와 CPU 사이에서 데이터 전송을 중개하는 역할을 합니다. MBR은 메모리에서 읽은 데이터를 임시로 저장하거나, 메모리에 쓸 데이터를 임시로 보관합니다. 사용: CPU가 메모리로부터 데이터를 읽을 때, 해당 데이터는 먼저 MBR에 저장됩니다. 반대로, CPU가 메모리에 데이터를 쓸 때도, 데이터는 먼저 MBR을 거쳐 메모리로 전송됩니다. 중요성: MBR은 메모리와 CPU 사이의 데이터 교환에서 중요한 역할을 하며, 메모리 읽기/쓰기 연산의 중간 단계에 있습니다.
5. 플래그 레지스터(Flag Register): 상태 레지스터는 CPU의 연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장
6. 범용 레지스터 (General-Purpose Registers): 범용 레지스터는 이름 그래도 다양하고 일반적인 상황에서 자유롭게 사용할 수 잇는 레지스터입니다. 일반적으로 MAR은 메모리 주소값만 MBR는 데이터버스로 주고 받을 값만 저장하지만 범용레지스터는 데이터와 주소를 모두 저장할 수 있습니다.
7. 스택 포인터: 스택 포인터는 주로 스택(stack)이라 불리는 메모리 영역을 관리하는 데 사용됩니다. 스택은 함수 호출, 로컬 변수 저장, 프로그램 실행 중 발생하는 다양한 임시 데이터를 처리하는 데 사용되는 LIFO(Last In, First Out) 구조의 메모리 영역입니다. 스택 주소 지정 방식 : 스택과 스택 포인터를 이용한 주소 지정 방식 스팩 포인터 : 스택의 꼭대기를 가르키는 레지스터
8. 베이스 레지스터 (Base Registers): 이 레지스터들은 메모리 관리에 사용됩니다. 베이스 레지스터는 메모리 세그먼트의 시작 주소를 저장하고, 한계 레지스터는 세그먼트의 크기를 저장합니다.
추가적인 필수 구성 요소
- 캐시(Cache)
CPU는 일반적으로 RAM에 직접 접근하지 않고, 대신 CPU 내부에 있는 캐시를 활용합니다. 캐시는 메모리 속도가 CPU에 비해 상대적으로 느리기 때문에, 캐시 메모리가 빠르게 데이터를 제공하여 성능을 향상시킵니다. 최신 CPU는 여러 계층의 캐시(Level 1, Level 2, Level 3 캐시)를 두어 더욱 빠른 데이터 접근을 가능하게 합니다. - 메모리 장치 (Memory Unit)
메모리 장치는 CPU와 메모리 간의 데이터 흐름을 관리합니다. CPU가 데이터를 처리하는 데 필요한 정보를 가져오거나 저장하는 역할을 합니다. 메모리에는 여러 종류가 있으며, 가장 빠른 접근 속도를 자랑하는 캐시 메모리부터 주 메모리(RAM), 보조 메모리(하드 디스크, SSD 등)까지 다양한 계층이 존재합니다. CPU는 필요한 데이터를 빠르게 가져오기 위해 효율적으로 메모리 계층을 활용합니다. - 클럭(Clock)
CPU는 클럭에 의해 동기화되어 작동합니다. 클럭은 CPU 내부의 다양한 회로가 일정한 주기로 동작할 수 있도록 일정한 전기 펄스를 발생시킵니다. 이 클럭의 속도를 클럭 속도라고 하며, 보통 헤르츠(Hz)나 메가헤르츠(MHz) 단위로 측정됩니다. 높은 클럭 속도는 CPU가 더 많은 명령어를 처리할 수 있게 만듭니다. - 버스(Bus)
버스는 컴퓨터 내부의 다양한 구성 요소 간에 데이터가 흐를 수 있도록 하는 물리적 경로입니다. 시스템 버스는 주로 주소 버스, 데이터 버스, 제어 버스로 나뉘며, 각각 메모리 주소, 데이터, 제어 신호를 전달하는 역할을 합니다. 버스의 너비나 대역폭은 CPU의 성능에 중요한 영향을 미칩니다
- 1. 주소 버스 (Address Bus)
주소 버스는 메모리나 입출력 장치와의 통신에서 데이터를 읽거나 쓸 위치를 지정하는 역할을 합니다. CPU가 메모리에서 데이터를 읽거나 데이터를 저장할 위치를 지정할 때 주소 버스가 사용됩니다. 주소 버스의 너비(몇 비트로 데이터를 전달할 수 있는지)는 시스템의 메모리 용량에 영향을 미칩니다. 예를 들어, 32비트 주소 버스를 사용하는 시스템은 최대 4GB의 메모리 주소 공간을 지원합니다. - 데이터 버스 (Data Bus)
데이터 버스는 실제 데이터를 전송하는 역할을 합니다. CPU와 메모리, 입출력 장치 간에 데이터를 전달하는 데 사용됩니다. 데이터 버스는 양방향으로 데이터를 전송할 수 있으며, 데이터 버스의 너비는 CPU가 한 번에 처리할 수 있는 데이터의 양을 결정합니다. 예를 들어, 32비트 데이터 버스는 한 번에 4바이트(32비트)의 데이터를 전송할 수 있습니다. 데이터 버스의 대역폭이 높을수록 더 많은 데이터를 빠르게 전송할 수 있습니다. - 제어 버스 (Control Bus)
제어 버스는 시스템 내의 다른 구성 요소들이 CPU와의 상호 작용을 제대로 수행할 수 있도록 제어 신호를 전달합니다. 제어 버스는 CPU가 메모리나 입출력 장치에 대한 읽기/쓰기 작업을 지시할 때 사용됩니다. 또한, 클럭 신호나 인터럽트 요청 등을 처리하는 역할도 하며, 데이터 흐름을 조정하는 중요한 역할을 합니다. 제어 버스의 신호는 주로 "읽기", "쓰기", "인터럽트"와 같은 명령을 포함하며, 시스템의 동작을 동기화하는 데 필요한 정보를 제공합니다.
- 1. 주소 버스 (Address Bus)
CPU의 작동 방식
CPU는 클럭 신호를 기준으로 주어진 명령어를 실행합니다. CPU의 명령어 처리 과정은 기본적으로 세 가지 단계로 나눠집니다.
- 가져오기(Fetch)
CPU는 메모리에서 명령어를 가져옵니다. 이 명령어는 프로그램 카운터에 의해 지시된 주소에서 가져오며, 이 후 명령어가 명령어 레지스터로 전달됩니다. - 디코딩(Decode)
가져온 명령어는 디코더에 의해 해석됩니다. 디코더는 명령어를 이해하고, CPU 내부의 다른 부품들이 이 명령어를 실행할 수 있도록 신호를 보냅니다. - 실행(Execute)
디코딩된 명령어는 실제로 실행됩니다. 실행은 산술/논리 단위(ALU)에 의해 이루어지며, 연산 결과는 레지스터에 저장되거나 메모리로 전송됩니다. 실행된 명령어의 결과는 프로그램의 흐름을 제어하며, 다음 명령어를 가져오기 위해 프로그램 카운터가 업데이트됩니다.
- CPU는 각 클럭마다 Fetch,Decode,Execute를 반복한다.
- PC에 있는 주소값으로가 명령어를 IR에 저장하고(Fetch)
- IR에 있는 명령어를 해석한후 (Decode)
- Accumulator에 연산에 사용할 데이터를 저장한다. (Execute)
- CPU는 위 과정을 무한반복하는것이다.
'CS지식 > 컴퓨터구조' 카테고리의 다른 글
프로세스와 스레드, 컨텍스트 스위칭 (0) | 2025.01.27 |
---|---|
프로그래머스 문제:타켓 넘버 (0) | 2025.01.23 |
운영체제 (0) | 2025.01.15 |
RAM (0) | 2025.01.13 |
운영체제 (Operating System)란? (0) | 2024.12.24 |