Post

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)
  • 진리표:
AB출력
000
011
101
110

XNOR 게이트 (Exclusive NOR)

  • 기호: \( \overline{\oplus} \)
  • 기능: XOR 게이트의 출력의 반대를 출력
  • 진리표:
AB출력
001
010
100
111

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 실행 구조

  1. Instruction Fetch (명령어 가져오기)
    • PC (Program Counter)가 가리키는 주소를 MAR (Memory Address Register)에 전달합니다.
    • MAR에 저장된 주소로 메모리에서 데이터를 읽어와 MBR (Memory Buffer Register)에 저장합니다.
    • MBR에 있는 명령어를 IR (Instruction Register)에 저장합니다.
    • 다음 실행할 명령어를 가리키도록 PC의 주소값을 증가시킵니다.
  2. Instruction Decode (명령어 해석)
  3. Instruction Execution (명령어 실행): MBR의 데이터와 ACC의 데이터로 연산 후, ACC에 저장
  4. Write Back (결과 쓰기)

CPU의 성능 높이기 - DMA, 파이프라인 (Pipeline)

  • DMA(Direct Memory Access)
    • CPU가 직접 SSD와 같은 저장 장치에서 데이터를 가져오는 경우, CPU의 활용도가 낮아진다. 이를 방지하기 위해 DMA(Direct Memory Access)를 사용.
    • 역할: DMA는 CPU를 거치지 않고 메모리와 I/O 장치 간의 직접적인 데이터 전송을 관리하여 CPU의 부하를 줄이고 시스템 성능을 향상.
    • 이점: CPU가 데이터 전송 작업에서 벗어나, 더 중요한 연산에 집중.
  • 파이프라인(Pipeline)은 컴퓨터 아키텍처에서 CPU의 성능을 향상시키기 위해 사용되는 기법으로, 여러 명령어를 겹쳐서 처리함으로써 전체 명령어 처리 시간을 단축하는 방식. 파이프라인은 명령어 실행을 여러 단계로 나누고, 각 단계를 병렬로 처리하여 명령어 처리 속도를 높인다.
    1. Instruction Fetch (IF):
      • 명령어를 메모리에서 가져옴.
    2. Instruction Decode (ID):
      • 명령어를 해석하여 필요한 연산과 오퍼랜드를 결정.
    3. Execution (EX):
      • 명령어가 지시하는 연산을 수행합니다. ALU를 통해 산술/논리 연산을 처리.
    4. Memory Access (MEM):
      • 필요한 경우 메모리에서 데이터를 읽거나, 연산 결과를 메모리에 저장.
    5. Write Back (WB):
      • 연산 결과를 레지스터에 기록.

    이렇게 파이프라인을 사용하면, 여러 명령어가 각기 다른 단계에서 동시에 처리될 수 있다. 예를 들어, 첫 번째 명령어가 실행 단계에 있는 동안, 두 번째 명령어는 해석 단계에 있고, 세 번째 명령어는 가져오는 단계에 있을 수 있다.

    • 명령어 처리 속도 증가: 여러 명령어를 병렬로 처리함으로써 CPU의 처리 속도가 빨라짐.
    • CPU 효율성 증가: 각 명령어가 다른 단계에서 처리되기 때문에, CPU 자원을 더 효율적으로 사용할 수 있다.

CPU 명령어 정의 전략

  1. CISC (Complex Instruction Set Computer) - 인텔 CPU CISC는 하나의 복잡한 명령어 실행으로 가능한 한 많은 작업을 수행.

  2. 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.