Computer architecture
01. 컴퓨터 구조: 폰 노이만 구조
- 폰 노이만 구조는 현대 컴퓨터의 기본적인 구조.
- 프로그램과 데이터가 동일한 메모리에 저장되어 CPU가 처리.
- 기존의 컴퓨터들은 프로그램과 데이터를 각각의 하드웨어에 저장해야 했지만, 폰 노이만 구조에서는 메모리에 프로그램과 데이터를 함께 저장.
CPU(중앙처리장치, Central Processor Unit)
- Arithmetic Logic Unit (ALU): 산술 연산과 논리 연산을 수행하는 핵심 장치.
- 레지스터 (Register): ALU에서 연산에 필요한 데이터를 일시적으로 저장하는 메모리 위치.
- Controller Unit: CPU의 동작을 제어하는 부분으로, 주소를 지시하는 Program Counter와 같은 기능을 수행.
Memory
- 프로그램과 프로그램 수행에 필요한 데이터 저장
- 내부 기억장치(주기억장치): 컴퓨터가 꺼지면 데이터 사라짐
- CPU 안에 레지스터, 캐쉬
- DRAM 등 메모리 (RAM, DDR4 등)
- 외부 기억장치(보조기억장치): 컴퓨터가 꺼져도 데이터 보존
- SDD, HDD
IO Devices(입출력 장치)
- 입력장치: 마우스, 키보드, 터치패드
- 출력장치: 모니터, 프린터, 스피커
Bus
- CPU, Memory, IO Devices를 연결.
- 개별적인 IO Devices들까지 연결해주고 데이터를 송수신.
02. 이진수의 덧셈(가산기)
- 0 + 0 = 0 , carry 는 0
- 0 + 1 = 1 , carry 는 0
- 1 + 0 = 1 , carry 는 0
- 1 + 1 = 0 , carry 는 1
- XOR, AND 게이트를 사용해 sum과 carry를 반가산기 구현
- 반가산기: 두 bit를 덧셈하는 가산기
- 전가산기: 두 bit 외, carry까지 계산
XOR 게이트 (Exclusive OR)
- 기호: \( \oplus \)
- 기능: 두 입력이 다를 때 출력이 참(1)
- 진리표:
A | B | 출력 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
XNOR 게이트 (Exclusive NOR)
- 기호: \( \overline{\oplus} \)
- 기능: XOR 게이트의 출력의 반대를 출력
- 진리표:
A | B | 출력 |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
03. 클럭 (Clock)
- 클럭 주파수: CPU가 동작하는 속도를 나타내며, 2.5GHz (기가헤르츠)와 같은 단위로 표현.
- 변환: \(1 \text{GHz} = 1,000 \text{MHz} = 1,000,000,000 \text{Hz}\)
- 오실레이터 (Oscillator): 일정한 주기로 클럭 신호를 생성하여 CPU와 메모리 같은 장치의 동작을 동기화.
- 기능: 전압을 주기적으로 변동시켜 주파수를 생성.
- 클럭 주기 (Clock Cycle): 클럭 신호가 한 사이클을 완료하는 데 걸리는 시간
- 계산: 클럭 주기 = \(\frac{1}{\text{주파수}}\)
- 예시: 2.5GHz CPU의 주기 = \(\frac{1}{2.5 \times 10^9} \approx 0.4 \text{ns}\)
- 주파수 (Frequency, Hz): 클럭 신호의 초당 반복 횟수를 나타내며, 시스템 성능의 지표.
- 계산: 주파수 = \(\frac{1}{\text{주기}}\)
- 단위: 헤르츠 (Hz), \(1 \text{Hz} = 1 \text{초}^{-1}\)
- 클럭 신호: CPU와 디지털 회로의 동작을 동기화하고 조절하는 타이밍 신호.
클럭의 역할
- 동기화: CPU와 메모리 등의 부품이 일치된 시간 간격으로 작동하도록 보장
- 성능: 클럭 주파수가 높을수록 CPU의 명령어 처리 속도가 빠름
- 전력 소모: 높은 주파수는 전력 소모와 발열이 증가할 수 있으므로, 효율적인 주파수 관리가 필요.
04. 플립플롭 (Flip-Flop)
- 클럭 신호에 동기화된 순차논리회로로, 한 비트의 데이터를 저장할 수 있음.
- 동작: 클럭 신호의 상승 에지 또는 하강 에지에서 입력 데이터를 저장하거나 상태를 변경.
- 용도: 레지스터, 카운터, 시프트 레지스터 등에서 데이터 저장과 처리를 담당.
래치 (Latch)
- 클럭 신호 없이 입력 상태를 그대로 반영하여 데이터를 유지하는 순차논리회로.
- 동작: 활성화 신호(Enable)나 제어 입력에 따라 데이터를 저장. 클럭 신호가 없는 동안에도 상태를 유지.
- 용도: 간단한 데이터 저장, 메모리 셀의 기본 구성 요소.
메모리 (Memory)
- 데이터를 장기적으로 저장하는 장치, 여러 플립플롭이나 래치로 구성됨.
- 동작: 플립플롭이나 래치를 조합하여 많은 비트의 데이터를 저장하고 읽어낼 수 있음.
- 유형: RAM(랜덤 액세스 메모리), ROM(읽기 전용 메모리), 캐시 메모리 등.
- RAM: 플립플롭이나 래치를 기반으로 휘발성 메모리 셀을 구성, 전원이 꺼지면 데이터가 사라짐.
- ROM: 비휘발성 메모리로, 전원이 꺼져도 데이터가 유지됨.
05. 명령어 집합과 기계어 (Instruction Set and Machine Language)
명령어 집합(Instruction Set)은 CPU가 실행할 수 있는 명령어의 모음으로, 소프트웨어와 하드웨어의 인터페이스 역할.
- 소프트웨어 (Software): 코드와 데이터로 구성
- 기계어 (Machine Language): CPU가 직접 실행할 수 있는 명령어 코드
- CPU의 역할: 기계어로 작성된 명령어를 해석하고 실행.
- 컴파일러 (Compiler): 고급 프로그래밍 언어로 작성된 프로그램을 CPU의 기계어로 번역.
- 고급 언어: 사람이 이해하기 쉬운 형태로 작성된 프로그래밍 언어 (예: C, Java).
- 기계어 변환: 컴파일러가 고급 언어로 작성된 코드를 기계어로 변환하여 CPU가 이해할 수 있도록 함.
- 인터프리터 (Interpreter): 컴파일러와 달리 코드 전체를 번역하지 않고, 고급 프로그래밍 언어로 작성된 코드를 실행할 때 한 줄씩 기계어로 변환하여 실행. (예: Python, PHP, Ruby).
06. 레지스터(Register)
레지스터는 CPU 내부에 있는 작고 빠른 메모리
- PC (Program Counter):
- 다음에 실행할 명령어의 주소를 가리키는 레지스터. CPU는 PC에 저장된 주소로부터 명령어를 읽어와 실행.
- IR (Instruction Register):
- 현재 실행 중인 명령어를 임시로 저장하는 레지스터. CPU는 IR에 저장된 명령어를 해석하고 실행.
- MAR (Memory Address Register):
- 메모리에 접근할 때 사용되는 주소를 저장하는 레지스터. CPU는 MAR에 저장된 주소로부터 메모리에서 데이터를 읽거나 쓸 수 있다.
- MBR (Memory Buffer Register):
- 메모리에서 읽거나 쓸 데이터를 임시로 저장하는 레지스터. CPU는 MBR을 통해 메모리와 데이터를 주고받는다.
- ACC (Accumulator):
- 산술 및 논리 연산에서 중간 결과를 저장하는 레지스터. 주로 산술 연산에서 사용되며, ALU가 결과를 ACC에 저장하여 다음 연산에 활용.
07. CPU 실행 구조
- Instruction Fetch (명령어 가져오기)
- PC (Program Counter)가 가리키는 주소를 MAR (Memory Address Register)에 전달합니다.
- MAR에 저장된 주소로 메모리에서 데이터를 읽어와 MBR (Memory Buffer Register)에 저장합니다.
- MBR에 있는 명령어를 IR (Instruction Register)에 저장합니다.
- 다음 실행할 명령어를 가리키도록 PC의 주소값을 증가시킵니다.
- Instruction Decode (명령어 해석)
- Instruction Execution (명령어 실행): MBR의 데이터와 ACC의 데이터로 연산 후, ACC에 저장
- Write Back (결과 쓰기)
CPU의 성능 높이기 - DMA, 파이프라인 (Pipeline)
- DMA(Direct Memory Access)
- CPU가 직접 SSD와 같은 저장 장치에서 데이터를 가져오는 경우, CPU의 활용도가 낮아진다. 이를 방지하기 위해 DMA(Direct Memory Access)를 사용.
- 역할: DMA는 CPU를 거치지 않고 메모리와 I/O 장치 간의 직접적인 데이터 전송을 관리하여 CPU의 부하를 줄이고 시스템 성능을 향상.
- 이점: CPU가 데이터 전송 작업에서 벗어나, 더 중요한 연산에 집중.
- 파이프라인(Pipeline)은 컴퓨터 아키텍처에서 CPU의 성능을 향상시키기 위해 사용되는 기법으로, 여러 명령어를 겹쳐서 처리함으로써 전체 명령어 처리 시간을 단축하는 방식. 파이프라인은 명령어 실행을 여러 단계로 나누고, 각 단계를 병렬로 처리하여 명령어 처리 속도를 높인다.
- Instruction Fetch (IF):
- 명령어를 메모리에서 가져옴.
- Instruction Decode (ID):
- 명령어를 해석하여 필요한 연산과 오퍼랜드를 결정.
- Execution (EX):
- 명령어가 지시하는 연산을 수행합니다. ALU를 통해 산술/논리 연산을 처리.
- Memory Access (MEM):
- 필요한 경우 메모리에서 데이터를 읽거나, 연산 결과를 메모리에 저장.
- Write Back (WB):
- 연산 결과를 레지스터에 기록.
이렇게 파이프라인을 사용하면, 여러 명령어가 각기 다른 단계에서 동시에 처리될 수 있다. 예를 들어, 첫 번째 명령어가 실행 단계에 있는 동안, 두 번째 명령어는 해석 단계에 있고, 세 번째 명령어는 가져오는 단계에 있을 수 있다.
- 명령어 처리 속도 증가: 여러 명령어를 병렬로 처리함으로써 CPU의 처리 속도가 빨라짐.
- CPU 효율성 증가: 각 명령어가 다른 단계에서 처리되기 때문에, CPU 자원을 더 효율적으로 사용할 수 있다.
- Instruction Fetch (IF):
CPU 명령어 정의 전략
CISC (Complex Instruction Set Computer) - 인텔 CPU CISC는 하나의 복잡한 명령어 실행으로 가능한 한 많은 작업을 수행.
RISC (Reduced Instruction Set Computer) - ARM, 스마트폰, 임베디드, IoT 기기 RISC는 단순한 명령어 집합해서 실행.
특성 | CISC (Complex Instruction Set Computer) | RISC (Reduced Instruction Set Computer) |
---|---|---|
명령어 복잡성 | 복잡한 명령어, 다수의 연산 기능 포함 | 단순한 명령어, 하나의 작업 수행 |
명령어 길이 | 가변적 | 고정 길이 |
메모리 접근 | 명령어가 직접 메모리 접근 | 대부분의 연산이 레지스터 간에 수행 |
명령어 실행 시간 | 명령어에 따라 다름, 예측 어려움 | 대부분의 명령어가 한 클럭 사이클 내에 실행 |
파이프라인 효율성 | 낮음, 복잡한 명령어로 인해 파이프라인 처리 어려움 | 높음, 단순한 명령어로 인해 파이프라인 처리 용이 |
코드 크기 | 작은 코드 크기 (복잡한 명령어로 인한 압축 효과) | 큰 코드 크기 (간단한 명령어의 조합 필요) |
This post is licensed under CC BY 4.0 by the author.