컴퓨터 구조

CPU의 구조와 시스템 버스 (@두다지)

중앙처리장치 (CPU - Central Processing Unit)

  • 컴퓨터의 작업을 처리하고 관리하는 중심적인 역할을 수행하는 장치
  • 주요 구성 요소:
    • 산술논리연산장치 (ALU - Arithmetic Logic Unit): 산술 연산(덧셈, 뺄셈 등)과 논리 연산(AND, OR, NOT 등) 수행
    • 제어장치 (Control Unit): 프로그램 명령어를 해석하고 컴퓨터의 다른 부분에 제어 신호를 보내 작업을 지시
    • 레지스터 (Registers): CPU 내부에 있는 고속 임시 저장 공간

레지스터 (Registers)

  • CPU가 데이터를 처리하기 위해 사용하는 작은 크기의 고속 메모리
  • 종류:
    • 범용 레지스터 (General-Purpose Registers): 다양한 목적으로 사용될 수 있는 레지스터 (데이터 임시 저장 등)
    • 용도 지정 레지스터 (Special-Purpose Registers): 특정 기능 수행을 위해 지정된 레지스터
      • 명령 레지스터 (IR - Instruction Register): 현재 실행 중인 명령어를 저장
      • 프로그램 카운터 (PC - Program Counter): 다음에 실행할 명령어의 메모리 주소를 저장
      • 메모리 주소 레지스터 (MAR - Memory Address Register): 접근할 메모리 주소를 저장
      • 메모리 버퍼 레지스터 (MBR - Memory Buffer Register): 메모리와 주고받을 데이터를 임시 저장

버스 (Bus)

  • 컴퓨터 내부의 구성 요소들(CPU, 메모리, 입출력 장치 등) 간에 데이터와 신호를 전송하는 통로(전선 묶음)
  • 종류:
    • 데이터 버스 (Data Bus): 실제 데이터 전송 통로
    • 주소 버스 (Address Bus): 데이터가 저장된 메모리 위치나 입출력 장치를 지정하는 주소 정보 전송 통로
    • 제어 버스 (Control Bus): CPU의 제어 신호(읽기/쓰기 등) 및 상태 정보 전송 통로

프로그램 내장 개념 (Stored-Program Concept)

1947년~1955년경 ENIAC을 프로그래밍하는 Glen Beck, Betty Holberton (UPENN)
  • 컴퓨터 프로그램과 데이터를 주기억장치(메모리)에 저장하고, CPU가 순차적으로 명령어를 가져와 해석하고 실행하는 방식
💡
이전에는 프로그램 변경 시 물리적인 회로 변경이 필요했으나, 이 개념 도입으로 메모리 내용 변경만으로 프로그램 변경 가능

기계어

기계어 기본 (Basics)

8비트 기계어 구조 (exclusivearchitecture.com)
  • CPU가 인식할 수 있는 비트 패턴(0과 1)으로 인코딩된 명령어의 집합
  • 기계 명령어 (Machine Instruction): 개별 동작을 지시하는 단위
  • 구성:
    • 연산 코드 (Opcode - Operation Code): 수행할 연산의 종류 (예: LOAD, STORE, ADD)를 나타내는 부분
    • 피연산자 (Operand): 연산에 사용될 데이터나 데이터의 위치(주소, 레지스터 번호 등)를 나타내는 부분

RISC vs CISC

  • CPU 명령어 집합 구조 설계 방식
  • RISC (Reduced Instruction Set Computer):
    • 명령어 수를 줄이고, 구조를 단순화하여 각 명령어가 한 클럭 사이클 내에 실행되도록 설계
    • 고정 길이 명령어, 레지스터 기반 연산 많음
    • 하드웨어 구현이 단순하지만 컴파일러 역할이 중요
    • 예: PowerPC, ARM, MIPS
  • CISC (Complex Instruction Set Computer):
    • 다양하고 복잡한 기능을 가진 명령어를 많이 포함하여 설계
    • 가변 길이 명령어, 메모리 접근 명령어 많음
    • 하드웨어 구현이 복잡하지만 적은 수의 명령으로 프로그램 작성 가능
    • 마이크로 코드 사용
    • 예: Intel x86, AMD64

명령어의 종류 (Instruction Categories)

  • 데이터 전송 (Data Transfer): 데이터를 한 위치에서 다른 위치로 이동
    • CPU 레지스터와 주기억장치 간: LOAD(메모리 → 레지스터), STORE(레지스터 → 메모리)
    • 데이터 이동 명령어는 일반적으로는 복사 동작이며 원본 데이터는 유지됨
    • CPU 레지스터와 입출력 장치 간: IN, OUT
  • 연산 (Arithmetic/Logic): 산술/논리 연산 수행을 요청.
    • 산술 연산: ADD, MUL, DIV 등
    • 논리 연산: AND, OR, XOR, NOT 등
    • 자리 이동/회전: SHIFT, ROTATE
  • 제어 (Control): 프로그램의 실행 흐름을 제어.
    • 무조건 분기: JUMP
    • 조건 분기: 조건에 따라 JUMP 수행 (예: JUMPEQ - 같으면 점프)
    • 프로그램 종료: HALT, STOP

Vole (가상 기계어 예시)

  • 학습 목적의 가상 컴퓨터 아키텍처
    • 16개의 범용 레지스터 (R0 ~ RF, 16진수 표기)
    • 256개의 주기억장치 셀 (주소 00 ~ FF, 16진수 표기), 각 셀은 8비트
  • 명령어 형식: 16비트
    • 명령 코드(Op-code): 4비트 (어떤 명령인지 지정)
    • 피연산자(Operand): 12비트 (명령 수행에 필요한 추가 정보 - 레지스터 번호, 메모리 주소 등)
  • 예시: 35A7 (16진수)
    • 3 : STORE 명령 코드
    • 5 : 데이터를 가져올 레지스터 번호 (R5)
    • A7: 데이터를 저장할 메모리 주소
    • 해석: "레지스터 5의 내용을 메모리 주소 A7에 저장하라."
    • *16진수 사용은 긴 이진수(0011 0101 1010 0111) 표현을 간결하게 함
  • 메모리 크기 관련성:
    • Vole 명령어에서 메모리 주소를 표현하는 데 8비트(피연산자 일부)를 사용
    • 따라서 $2^8 = 256$ 개의 서로 다른 메모리 셀을 지정 가능 (주소 0 ~ 255)
    • *주소 지정 비트 수에 맞춰 메모리 크기를 설계하는 것이 효율적

프로그램 실행

프로그램 실행 과정 (Execution Process)

  • 컴퓨터는 필요한 프로그램 코드나 데이터를 주기억장치에서 CPU로 복사하여 처리.
  • 소스 코드 → 컴파일러 → 오브젝트 파일 → 링커 → 실행 파일 → 로더 → 메모리 적재 → CPU 실행
    • ELF (Executable and Linkable Format): Unix/Linux 표준 실행 파일 형식.
    • PE (Portable Executable): Windows 표준 실행 파일 형식

기계 주기 (Machine Cycle) 또는 CPU 주기

기계 주기 (Machine Cycle, Instruction Cycle)
  • CPU가 하나의 명령어를 처리하는 과정으로, 계속 반복됨
  • 기계 주기는 3단계로 이루어진다:
    1. 인출 (Fetch):
      • 프로그램 카운터(PC)가 가리키는 주기억장치 주소에서 명령어를 읽어옴
      • 읽어온 명령어를 명령 레지스터(IR)에 저장
      • PC 값을 다음 명령어 주소로 증가시킴 (Vole의 경우 명령어 길이가 2바이트이므로 +2)
    2. 해석 (Decode):
      • 명령 레지스터(IR)에 있는 명령어의 연산 코드(Opcode)를 해석하여 수행할 작업을 결정
      • 피연산자(Operand)를 분석하여 필요한 데이터나 주소를 파악
    3. 실행 (Execute):
      • 해석된 명령에 따라 제어장치가 필요한 장치(ALU, 레지스터, 메모리 등)에 제어 신호를 보내 실제 연산이나 데이터 이동 등을 수행
명령어 형식이나 종류에 따라 세부 단계는 추가될 수 있다

프로그램과 데이터 구분 문제 (Program vs. Data Distinction)

  • 주기억장치에는 프로그램 명령어와 데이터가 모두 0과 1의 비트 패턴으로 저장됨
  • CPU 자체는 메모리의 특정 위치에 있는 비트 패턴이 명령어인지 데이터인지 구분할 방법이 없음
🚨
만약 프로그램 카운터가 데이터가 저장된 주소를 가리키게 되면, CPU는 해당 데이터를 명령어로 잘못 해석하여 실행하려 시도하며 오류 발생 가능

연산 명령

논리 연산 (Logical Operations)

  • 비트 단위로 수행되는 연산
  • AND: 두 비트가 모두 1일 때만 결과가 1
    • 용도: 마스킹 (Masking) - 특정 비트들을 0으로 만듦 (원하는 부분만 남김)
  • OR: 두 비트 중 하나라도 1이면 결과가 1
    • 용도: 특정 비트들을 1로 설정
  • XOR (Exclusive OR): 두 비트가 서로 다를 때만 결과가 1
    • 용도: 특정 비트들을 반전, 비트 열의 보수 생성 (모든 비트가 1인 마스크와 XOR 연산)

회전 및 자리 이동 연산 (Shift and Rotate Operations)

  • 레지스터 내의 비트들을 왼쪽 또는 오른쪽으로 이동시키는 연산
  • 회전 (Rotate): 밀려 나가는 비트가 반대쪽 끝의 빈자리로 들어옴 (ROTATER, ROTATEL)
  • 논리적 자리 이동 (Logical Shift): 밀려 나가는 비트는 버려지고, 빈자리는 0으로 채워짐 (SHIFTR, SHIFTL)
  • 산술적 자리 이동 (Arithmetic Shift):
    • 부호 비트를 유지하면서 이동
    • 왼쪽 이동: 2의 보수 표현에서 곱하기 2 효과 (오버플로우 주의) 빈자리는 0으로 채움
    • 오른쪽 이동: 2의 보수 표현에서 나누기 2 효과 (소수점 이하 버림) 빈자리는 부호 비트와 같은 값으로 채움
    • 10진수에서 자릿수 이동이 곱하기/나누기 10 효과와 유사

산술 연산 (Arithmetic Operations)

  • 덧셈(ADD), 뺄셈(SUB), 곱셈(MUL), 나눗셈(DIV) 등 수학적 계산 수행

입출력 장치와의 통신

제어기 (Controller) 또는 어댑터 (Adapter)

  • CPU(컴퓨터 핵심 요소)와 개별 입출력 장치(프린터, 디스크 등) 사이의 중개 역할
  • 메인보드 또는 별도 카드 형태로 존재하며, 자체적인 간단한 CPU와 메모리를 가질 수 있음
  • 데이터 형식 변환, 장치 제어 등 수행
  • 버스를 통해 CPU 및 주기억장치와 통신
  • 메모리 매핑 I/O (Memory-Mapped I/O):
    • 입출력 장치의 제어 레지스터나 데이터 버퍼를 메모리 주소 공간의 일부처럼 할당
    • CPU는 일반적인 메모리 접근 명령어(LOAD, STORE)를 사용하여 입출력 장치와 통신 가능

직접 메모리 접근 (DMA - Direct Memory Access)

  • 제어기가 CPU의 개입 없이 직접 주기억장치에 접근하여 데이터를 전송하는 기능
  • 대량의 데이터를 전송할 때(예: 하드 디스크) CPU의 부담을 줄여 시스템 효율성 향상
  • CPU와 DMA 제어기가 동시에 버스 사용을 시도하면 버스 경합(Bus Contention) 또는 버스 정체 현상 발생 가능 (폰 노이만 병목 현상의 일부)

핸드셰이킹 (Handshaking)

  • 두 장치 간 데이터 전송 시, 서로 제어 신호를 주고받으며 전송 상태를 확인하고 동기화하는 과정
  • 데이터 전송의 신뢰성 보장
  • 예: 송신측이 데이터 준비 완료 신호 전송 → 수신측이 수신 준비 완료 신호 전송 → 데이터 전송 → 수신측이 수신 완료 신호 전송

신호 전달 방식 (Signal Transmission Methods)

  • 병렬 전송 (Parallel Transmission):
    • 여러 비트를 동시에 여러 개의 선(회선)을 통해 전송
    • 속도가 빠르지만 거리가 길어지면 신호 간 간섭 문제 발생 가능
    • 예: 컴퓨터 내부 버스, 구형 프린터 포트 (IEEE 1284)
  • 직렬 전송 (Serial Transmission):
    • 비트를 한 번에 하나씩 순서대로 하나의 선을 통해 전송
    • 전송 거리가 길어도 비교적 안정적, 클럭 속도를 높여 고속 전송 가능
    • 예: USB, RS-232, 이더넷, PCI Express

다양한 통신 매체 및 기술

  • 광섬유 전송 (Optical Fiber Transmission):
    • 빛 신호를 이용하여 데이터를 전송하는 방식
    • 매우 높은 대역폭, 낮은 신호 감쇠, 긴 전송 거리, 전자기 간섭에 강함
    • 인터넷 백본망 등에 주로 사용
  • 무선 전송 (Wireless Transmission):
    • 전자기파(라디오파, 마이크로파 등)를 이용하여 데이터를 전송
    • 이동성과 편리성 제공
    • 환경(장애물, 거리, 다른 신호 간섭)에 따라 신호 품질 영향 받음
    • 예: WiFi, Bluetooth, LTE, 5G
  • DSL (Digital Subscriber Line):
    • 기존 전화선을 이용하여 디지털 데이터를 고속으로 전송하는 기술
    • ADSL(비대칭), VDSL(초고속) 등 다양한 표준 존재
  • 케이블 모뎀 전송 (Cable Modem Transmission):
    • 케이블 TV(CATV) 망을 이용하여 데이터를 전송하는 방식
    • 고속 인터넷 서비스 제공에 널리 사용됨

통신 속도 (Communication Speed)

  • 대역폭 (Bandwidth): 통신 경로를 통해 단위 시간당 전송될 수 있는 최대 비트 수 (bps - bits per second)
    • 높은 대역폭은 단순히 속도가 빠르다는 의미 외에, 동시에 많은 양의 데이터를 전송할 수 있는 용량을 의미
⚠️
bps (bits per second)와 Bps (Bytes per second)를 혼동하지 않도록 주의 (1 Byte = 8 bits)

기타 CPU 구조

파이프라이닝 (Pipelining)

  • 하나의 명령어를 처리하는 과정을 여러 단계(예: 인출, 해석, 실행)로 나누어, 각 단계가 동시에 다른 명령어의 부분을 처리하도록 하는 기술
  • 기계 주기의 단계들을 중첩시켜 전체 처리율(Throughput, 단위 시간당 처리 작업량)을 높임
  • 이상적인 성능 향상을 위한 조건:
    • 각 파이프라인 단계의 처리 시간이 균등해야 함
    • 파이프라인은 항상 같은 종류의 작업만 처리해야 함
    • 파이프라인에 투입되는 작업들은 서로 의존 관계가 없어야 함
    • 파이프라인 유지 비용(단계 분할 및 제어) 최소화

슈퍼스칼라 (Superscalar)

  • CPU 내부에 여러 개의 파이프라인을 두어, 매 클럭 사이클마다 여러 개의 명령어를 동시에 인출, 해석, 실행할 수 있는 구조
  • Intel Nehalem 아키텍처는 4-와이드 슈퍼스칼라 구조 (동시에 4개 명령어 처리 가능)

다중 코어 (Multi-core) 및 병렬 처리 (Parallel Processing)

  • 다중 코어: 하나의 CPU 칩 안에 여러 개의 독립적인 처리 장치(코어)를 집적한 구조
    • 각 코어는 자체적으로 명령어를 처리하며, 데이터를 공유(L3 캐시, 메모리)하고 협력하여 작업 수행해서 큰 문제를 더 빠르게 해결 가능
  • 병렬 처리 분류:
    • SISD (Single Instruction, Single Data): 고전적인 단일 프로세서 구조 (하나의 명령, 하나의 데이터)
    • SIMD (Single Instruction, Multiple Data): 여러 처리 장치가 동일한 명령을 서로 다른 데이터에 대해 동시에 수행 (벡터 프로세서, GPU 그래픽 처리 일부)
    • MISD (Multiple Instruction, Single Data): 여러 명령이 하나의 데이터 스트림에 대해 수행 (실제 구현 사례 거의 없음)
    • MIMD (Multiple Instruction, Multiple Data): 여러 처리 장치가 각자 다른 명령을 다른 데이터에 대해 독립적으로 수행 (다중 코어 프로세서, 클러스터)

레퍼런스

“이 글은 『컴퓨터 과학 총론』(Brookshear & Brylow, 2019)의 내용을 토대로 재구성된 자료입니다.”​
ƎXCLUSIVE ARCHITECTURE