[CS 스터디] 컴퓨터 구조 정리1

오리구이·2025년 2월 12일

1. 컴퓨터 구조의 큰 그림

1. 컴퓨터가 이해하는 정보

(1) 데이터와 명령어

  • 데이터(Data): 숫자, 문자, 이미지, 동영상 등 정적인 정보
  • 명령어(Instruction): 데이터를 어떻게 처리할지를 지시하는 정보

(2) 데이터와 명령어의 차이점

구분설명
데이터숫자, 문자, 이미지, 영상 등 컴퓨터가 저장하고 처리할 정보
명령어데이터를 조작하거나 연산하기 위해 CPU가 실행하는 명령
  • 예시
    • 1과 2를 더하는 연산: 명령어
    • "hello world" 문자열: 데이터
    • cat.jpg 이미지 파일: 데이터
  • 명령어의 처리 과정
    • CPU가 메모리에서 명령어를 가져와 해석하고 실행
    • CPU의 종류에 따라 실행 가능한 명령어가 다름
    • 특정 명령어를 처리하는 순서가 정해져 있으며 이를 명령어 사이클이라 함

2. 컴퓨터의 핵심 부품

컴퓨터의 핵심 부품은 CPU(중앙처리장치), 메모리(RAM, 캐시), 보조기억장치(SSD, HDD), 입출력장치(키보드, 마우스, 모니터 등) 로 구성된다.

(1) CPU(중앙처리장치)

  • 데이터를 읽고 해석하여 실행하는 역할을 담당
  • CPU의 주요 구성 요소
    • 연산장치(ALU, Arithmetic Logic Unit): 산술 및 논리 연산 수행
    • 제어장치(CU, Control Unit): 명령어 해석 및 실행 과정 관리
    • 레지스터(Register): 명령어와 데이터를 저장하는 초고속 임시 저장장치

(2) 메모리와 캐시 메모리

  • 메인 메모리(RAM): 실행 중인 프로그램과 데이터를 저장하는 휘발성 저장소
  • 캐시 메모리(Cache Memory): CPU가 자주 사용하는 데이터를 저장하여 처리 속도 향상

메모리의 특징

구분설명
RAM실행 중인 프로그램과 데이터를 저장하는 공간
캐시 메모리CPU가 빠르게 접근할 수 있는 작은 크기의 고속 메모리
휘발성(volatile) 메모리전원이 꺼지면 데이터가 사라지는 특징 (RAM)

(3) 보조기억장치

  • 전원이 꺼져도 데이터가 유지되는 비휘발성(non-volatile) 저장장치
  • 주요 장치
    • HDD(하드 디스크): 회전하는 자기 디스크를 이용해 데이터 저장
    • SSD(솔리드 스테이트 드라이브): 반도체 기반 저장장치로 HDD보다 빠름
    • USB, SD 카드: 휴대용 저장 장치

(4) 입출력장치

  • 입력장치(Input Device): 사용자로부터 데이터를 입력받는 장치
    • 마우스, 키보드, 마이크, 스캐너 등
  • 출력장치(Output Device): 처리된 데이터를 사용자에게 출력하는 장치
    • 모니터, 프린터, 스피커 등

(5) 메인 보드와 버스

  • 메인보드(Mainboard): 컴퓨터의 핵심 부품을 연결하는 기판
  • 버스(Bus): CPU, 메모리, 보조기억장치 등 주요 부품 간 데이터를 전달하는 통로
    • 시스템 버스: CPU와 메모리를 연결
    • 입출력 버스: CPU와 입출력장치를 연결

(6) 저장장치의 계층 구조

저장장치는 속도, 용량, 가격을 기준으로 계층 구조를 갖는다.

저장장치 계층속도용량가격
레지스터가장 빠름매우 작음가장 비쌈
캐시 메모리매우 빠름작음비쌈
RAM빠름중간중간
보조기억장치 (SSD, HDD)느림저렴
  • 속도가 빠를수록 용량이 작고 가격이 비싸며, 속도가 느릴수록 용량이 크고 가격이 저렴하다.

2. 컴퓨터가 이해하는 정보

1. 데이터 - 0과 1로 숫자 표현하기

컴퓨터는 모든 데이터를 이진수(0과 1) 로 표현한다.

(1) 비트와 바이트

  • 비트(bit): 데이터의 최소 단위(0 또는 1)
  • 바이트(byte): 8비트(1바이트) 단위로 데이터를 저장
  • 기본 단위 변환
    • 1 Byte = 8 비트
    • 1 KB = 1,000 Byte
    • 1 MB = 1,000 KB
    • 1 GB = 1,000 MB
    • 1 TB = 1,000 GB

(2) 이진수로 숫자 표현

  • 10진수(Decimal) → 2진수(Binary) 변환
    • 11
    • 210
    • 311
    • 4100
    • 5101
  • 숫자를 표현할 때 0과 1을 사용하며, 자릿수를 채우기 위해 앞에 0을 추가(자릿수 정렬) 한다.

(3) 16진수 표현 (Hexadecimal)

  • 이진수는 너무 길어지므로, 16진수(0~F)를 사용하여 줄여서 표현
  • 16진수 변환
    • 10진수: 0, 1, 2, ..., 9, 10, 11, 12, 13, 14, 15
    • 16진수: 0, 1, 2, ..., 9, A, B, C, D, E, F
  • 예시
    • 10진수 255 → 2진수 1111 1111 → 16진수 FF
    • MAC 주소, IPv6 주소 등에 16진수를 사용

2. 실수 표현 (부동 소수점)

컴퓨터는 부동 소수점 방식(IEEE 754) 을 사용하여 실수를 저장한다.

(1) 실수 저장 방식

  • 32비트 실수 표현: 부호(1비트) + 지수(8비트) + 가수(23비트)
  • 64비트 실수 표현: 부호(1비트) + 지수(11비트) + 가수(52비트)

(2) 오차 발생

  • 실수는 이진수로 정확히 표현하기 어려워, 반올림 오차가 발생
  • 0.1 + 0.2 를 계산하면 0.3 이 아니라 0.30000000000000004 가 나올 수도 있음

3. 데이터 - 0과 1로 문자 표현하기

컴퓨터는 문자를 숫자로 변환하여 저장하며, 이를 문자 인코딩(character encoding) 이라 한다.

(1) ASCII 코드

  • 7비트(128개 문자)로 영문, 숫자, 특수문자 표현
  • 예: A = 65, B = 66, a = 97, b = 98

(2) 확장 문자 인코딩

  • ASCII는 영어만 표현 가능하여, 한국어 등 다국어 표현을 위해 EUC-KR, Unicode(UTF-8, UTF-16, UTF-32) 등이 등장
  • EUC-KR: 한국어 문자 표현 (2바이트)
  • Unicode: 모든 언어를 표현 가능
    • UTF-8 (가변 길이, 웹에서 많이 사용)
    • UTF-16 (일부 시스템에서 사용)
    • UTF-32 (고정 길이, 저장 공간이 큼)

(3) Base64 인코딩

  • 바이너리 데이터를 문자로 변환하는 방식
  • 이메일, URL 인코딩 등에 사용됨

4. 명령어 (Instruction)

컴퓨터는 수행할 동작(연산)과 수행할 대상(데이터) 으로 명령어를 구성한다.

(1) 명령어의 구성

요소설명
연산 코드수행할 연산 (덧셈, 곱셈 등)
오퍼랜드(Operand)연산 대상 (데이터 또는 주소)

(2) 주요 연산 코드

  • 데이터 전송
    • MOVE (데이터 이동)
    • STORE (메모리에 저장)
    • LOAD (메모리에서 CPU로 불러오기)
  • 산술/논리 연산
    • ADD, SUBTRACT (덧셈, 뺄셈)
    • MULTIPLY, DIVIDE (곱셈, 나눗셈)
    • AND, OR, NOT (논리 연산)
  • 제어 흐름 변경
    • JUMP (특정 주소로 이동)
    • CALL, RETURN (함수 호출 및 복귀)
  • 입출력
    • READ, WRITE (입출력 장치 데이터 처리)

(3) 스택(Stack)과 PUSH, POP

  • 명령어 실행 시 스택(Stack, 후입선출 구조) 을 사용
  • PUSH: 데이터를 스택에 저장
  • POP: 데이터를 스택에서 꺼냄

5. 기계어와 어셈블리어

(1) 기계어(Machine Code)

  • CPU가 직접 실행하는 0과 1의 이진 코드
  • 사람은 해독하기 어려움

(2) 어셈블리어(Assembly)

  • 기계어를 사람이 읽을 수 있도록 만든 저수준 언어
  • 예제 (x86 어셈블리어)
mov eax, 5
add eax, 3

(3) CISC vs RISC

  • CISC (Complex Instruction Set Computer)
    • 복잡한 명령어 집합 사용 (ex: x86)
    • 한 개의 명령어로 여러 동작 수행 가능
  • RISC (Reduced Instruction Set Computer)
    • 단순한 명령어 집합 사용 (ex: ARM)
    • 실행 속도가 빠름

6. 명령어 사이클

CPU는 명령어를 읽고(인출), 해석하고, 실행하는 과정을 반복하며 이를 명령어 사이클(Instruction Cycle) 이라 한다.

(1) 명령어 사이클 과정

  1. 인출(Fetch): 명령어를 메모리에서 가져옴
  2. 해석(Decode): 명령어를 해석
  3. 실행(Execute): 명령어를 실행
  4. 저장(Store): 실행 결과를 저장

(2) 간접 사이클

  • 연산에 필요한 추가 데이터(주소)가 있을 경우 간접 사이클(Indirect Cycle) 을 수행하여 데이터를 불러옴

3. CPU

1. 레지스터(Register)

(1) 레지스터란?

  • CPU 내부의 초고속 임시 저장 공간
  • 프로그램 실행 중 필요한 데이터를 저장하고 관리
  • 다양한 종류의 레지스터가 있으며, 각 레지스터는 특정한 역할을 수행

(2) 주요 레지스터 종류

레지스터 유형설명
명령어 레지스터 (IR, Instruction Register)현재 실행 중인 명령어 저장
프로그램 카운터 (PC, Program Counter)다음에 실행할 명령어의 메모리 주소 저장
범용 레지스터 (General Purpose Register)데이터를 저장하고 연산 수행에 활용
플래그 레지스터 (Flag Register)연산 결과에 대한 상태 정보 저장 (예: 오버플로우, 캐리 플래그)
스택 포인터 (SP, Stack Pointer)스택 메모리의 최상단 주소 관리

2. 인터럽트(Interrupt)

(1) 인터럽트란?

  • CPU가 실행 중인 작업을 일시 중단하고, 긴급한 작업을 우선 처리하는 기법
  • 외부(하드웨어) 또는 내부(소프트웨어)에서 발생
  • 예: 키보드 입력, 마우스 클릭, 타이머 이벤트 등

(2) 인터럽트 종류

종류설명
하드웨어 인터럽트 (Hardware Interrupt) / 동기 인터럽트 (Synchronous Interrupt)외부 하드웨어 장치에서 발생, CPU의 작업을 중단하고 즉시 처리 (예: 키보드 입력, 마우스 클릭)
마스커블 인터럽트 (Maskable Interrupt)우선순위가 낮아 무시될 수 있는 인터럽트, CPU가 명시적으로 허용해야 처리됨
스푸리어스 인터럽트 (Spurious Interrupt)원인 불명의 잘못된 신호로 발생하는 인터럽트, 종종 하드웨어 오류나 전기적 잡음으로 발생
소프트웨어 인터럽트 (Software Interrupt) / 비동기 인터럽트 (Asynchronous Interrupt)명령어 실행 중 소프트웨어에서 발생, 주로 시스템 호출이나 예외 처리에 사용됨 (예: 운영체제 호출, 0으로 나누기)

3. 예외 처리(Exception Handling)

(1) 예외(Exception)란?

  • 프로그램 실행 중 예상치 못한 오류(예: 0으로 나누기, 메모리 접근 오류)가 발생하는 상황
  • 예외가 발생하면 CPU는 예외 처리 루틴을 실행한 후 다시 원래 작업으로 복귀

(2) 예외의 종류

종류설명
폴트(Fault)예외가 발생한 명령어를 다시 실행
트랩(Trap)예외 발생 후 다음 명령어 실행
중단(Abort)프로그램을 강제 종료
소프트웨어 인터럽트사용자 정의 인터럽트

4. CPU와 인터럽트 처리

  • CPU가 실행 중 인터럽트가 발생하면, 현재 실행 중인 작업을 멈추고 인터럽트 서비스 루틴(ISR)을 실행 후 기존 작업 수행 재개
    1. 정상적으로 작업 진행
    2. 인터럽트 발생
    3. 인터럽트 서비스 루틴으로 점프
    4. 인터럽트 서비스 루틴 실행
    5. 기존 작업으로 리턴
    6. 기존 작업 수행 재개

5. CPU 성능 향상을 위한 요소

(1) 클럭 속도

  • CPU의 클럭(clock)은 연산을 수행하는 주기적인 신호.
  • GHz(기가헤르츠) 단위로 측정되며, 클럭이 높을수록 더 많은 연산 수행 가능.
  • 1GHz = 10억 회 연산/초를 의미함.

(2) 멀티코어와 멀티스레드

  • 멀티코어 CPU: 여러 개의 코어(Core)를 포함한 CPU로, 다중 작업(멀티태스킹)에 유리.
  • 스레드(Thread): CPU 내에서 실행되는 독립적인 작업 단위.
  • 멀티스레드 CPU는 하나의 코어에서 여러 개의 스레드를 실행 가능.

코어의 종류

코어 수설명
싱글코어 (Single-core)단일 코어 CPU
듀얼코어 (Dual-core)두 개의 코어
쿼드코어 (Quad-core)네 개의 코어
헥사코어 (Hexa-core)여섯 개의 코어
옥타코어 (Octa-core)여덟 개의 코어
데카코어 (Deca-core)열 개의 코어

(3) 하드웨어 스레드 vs 소프트웨어 스레드

구분하드웨어 스레드소프트웨어 스레드
정의CPU의 실제 물리적 코어에서 실행되는 스레드프로그램(소프트웨어)에서 생성된 가상의 스레드
속도직접 CPU에서 실행되므로 빠름CPU 스케줄러가 관리하므로 성능 영향 있음
예제인텔 하이퍼스레딩, AMD SMTJava, Python, C++의 Thread 클래스

6. CPU 성능 최적화 기술

(1) 파이프라이닝(Pipelining)

  • CPU 성능을 높이기 위한 대표적인 기법.
  • 하나의 명령어 실행 과정(인출, 해석, 실행, 저장)을 여러 개의 단계로 나누어 병렬 실행.
  • 예: 5단계 파이프라인 → 하나의 명령이 실행되는 동안, 다음 명령어는 이미 실행 준비 상태.

(2) CISC vs RISC

CISC(Complex Instruction Set Computer)

  • 명령어 집합이 크고, 복잡한 연산을 수행 가능.
  • 명령어 하나로 여러 작업을 수행할 수 있음.
  • 예제: x86 아키텍처.

RISC(Reduced Instruction Set Computer)

  • 명령어가 단순하고 짧음.
  • 각 명령어가 동일한 실행 시간을 가짐.
  • 파이프라이닝 효율이 높음.
  • 예제: ARM, M1 칩.

(3) 명령어 병렬 처리와 위험 요소

명령어 병렬 처리

  • 여러 명령어를 동시에 실행하여 성능을 높이는 기법.
  • CPU가 다중 명령어를 효율적으로 처리하도록 설계됨.

병렬 처리의 위험 요소

위험 요소설명
데이터 위험(Data Hazard)이전 명령어의 실행이 끝나기 전에 다음 명령어가 실행될 때 발생
제어 위험(Control Hazard)분기 명령어(JUMP) 실행 시 발생
구조적 위험(Structural Hazard)두 개의 명령어가 같은 CPU 자원을 동시에 사용하려 할 때 발생

Ref. 📗《이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접》, 강민철

0개의 댓글