개발/💻 CS 지식

[ 컴퓨터구조 ] Chapter1 : Computer Abstractions and Technology

정소은 2025. 9. 11. 12:22

 

 

 

Fixed Point Number와 Floating Point Number

 

1. 숫자 표현 방식의 기본

  • 정수(Integer): 우리가 흔히 다루는 int 같은 타입. 소수점 없이 양수와 음수를 표현합니다.
  • Fixed Point(고정소수점): 정수부와 소수부의 경계(점, dot)가 고정된 위치에 있는 표현 방식.
  • Floating Point(부동소수점): 소수점의 위치가 지수(exponent) 에 따라 유동적으로 달라지는 방식. 보통 float(32비트), double(64비트) 같은 타입이 여기에 해당합니다.

 

2. Fixed Point Number

Fixed Point Number는 소수점 위치가 고정
즉, 2진수 비트열에서 특정 지점을 기준으로 왼쪽은 정수부, 오른쪽은 소수부로 나뉘죠.

예를 들어,

[  4비트 정수부 | 4비트 소수부 ]

  • 0001.0000 (2) = 1.0
  • 0001.1000 (2) = 1.5
  • 0000.0100 (2) = 0.25

처럼 표현

👉 특징:

  • 각 비트의 크기 변화가 일정.(0.125, 0.25, 0.5… 등 일정 간격)
  • 구현이 단순하고 연산 속도가 빠름
  • 다만, 소수점 위치가 고정되어 있기 때문에 표현 가능한 범위(range) 가 제한

 

3. Floating Point Number

Floating Point Number는 IEEE 754 표준 기반 표현으로,
숫자를 부호(Sign) + 지수(Exponent) + 가수(Mantissa) 로 나누어 표현합니다.

예를 들어,

  • 1.0 × 2^3 = 8
  • 1.1 × 2^-2 = 0.375

처럼 지수를 조절해 소수점 위치를 옮기는 방식

👉 특징:

  • 아주 작은 수 ~ 매우 큰 수까지 폭넓게 표현 가능
  • 하지만 연산 속도가 Fixed Point보다 느림
  • 하드웨어적으로 더 많은 자원(사이클, 전력)을 사용

 

예전에는 주로 Floating Point가 범용적으로 쓰였지만,
최근 머신러닝(특히 딥러닝 추론 단계, inference) 에서 Fixed Point Number가 다시 주목받고 있음
-  학습(Training) 단계: float32, float64 사용 (정확도 중요)
-  추론(Inference) 단계: Fixed Point (예: int8, int16) 로 변환 → 연산 속도↑, 메모리 사용↓

 

 

 

Chapter 1: Computer Abstraction and Technology 요약

 

성능(Performance)의 중요성

우리가 더 좋은 프로그램을 만들고, 더 비싼 컴퓨터를 구매하는 이유는 결국 성능 때문

  • 어떤 경우에는 더 빠른 CPU가 필요하고,
  • 어떤 경우에는 더 좋은 디스플레이가 필요

하지만 일반적으로는 컴퓨터의 전반적인 성능(Performance) 때문에 새로운 기기를 선택

 

성능의 두 가지 관점

  1. 응답 속도(Response Time, Latency) → 일을 얼마나 빠르게 끝낼 수 있는가?
    • 예: 스포츠카로 물건을 한 번에 빠르게 옮기기.
  2. 처리량(Throughput) → 동시에 얼마나 많은 일을 처리할 수 있는가?
    • 예: 덤프트럭으로 한 번에 많은 물건을 옮기기.

즉, 상황에 따라 “빠른 게 좋은가, 많이 처리하는 게 좋은가”가 달라짐

 

왜 멀티코어(Multi-core)로 전환했을까?

과거에는 단일 코어(Single Core) CPU를 더 빠르게 만드는 방향으로 발전

하지만 

  • 클럭 속도를 높일수록 발열(Heat)전력 소모(Power Consumption) 가 급격히 증가
  • 냉각 비용과 전력 한계에 부딪힘

위와 같은 문제 발생

 

그래서 현대 CPU는 멀티코어 구조로 발전함

  • 여러 개의 코어가 병렬로 작업을 나눠 수행
  • 성능을 높이면서도 전력 문제를 줄이는 방식

하지만 프로그래머 입장에서는 병렬 프로그래밍을 고려해야 하므로 더 높은 수준의 하드웨어 이해가 필요

 

컴퓨터의 분류 (Classes of Computers)

 

  1. 임베디드 컴퓨터 (Embedded Systems)
    • 스마트폰, 태블릿, 가전제품, 자동차 제어 장치 등
    • 특징: 휴대성, 저전력, 배터리 효율이 핵심
  2. 퍼스널 컴퓨터 (Personal Computers)
    • 데스크톱, 노트북
    • 특징: 개인 사용 중심, 범용성
  3. 서버 컴퓨터 (Servers)
    • 네트워크 기반으로 다수 사용자에게 서비스 제공
    • 특징: 신뢰성(Reliability)이 매우 중요
    • 예: 게임 서버, 은행 시스템, 대형 예약 시스템
  4. 슈퍼컴퓨터 (Supercomputers)
    • 특정 목적을 위한 초고성능 컴퓨터
    • 특징: 과학 계산, 기후 예측, 우주 관측 데이터 처리 등 특화 목적

 

데이터 단위와 저장 용량

  • 사람 기준(10진수 단위)
    • KB = 10³
    • MB = 10⁶
    • GB = 10⁹
  • 컴퓨터 기준(2진수 단위)
    • KiB = 2¹⁰
    • MiB = 2²⁰
    • GiB = 2³⁰

 

ISA (Instruction Set Architecture)

컴퓨터는 하드웨어와 소프트웨어를 이어주는 언어가 필요
이를 명령어 집합 구조(ISA) 라고 함

  • x86 (Intel, AMD) → PC, 서버 중심, 무료 아님 (특허 제한)
  • ARM (Apple, Qualcomm 등) → 모바일 중심, 라이선스 비용 有
  • MIPS → 과거 많이 쓰였지만 현재는 거의 사용되지 않음
  • RISC-V → 최근 각광, 무료(Open-source), 삼성 등 대기업에서도 사용

 

컴퓨터 아키텍처의 목표

컴퓨터 아키텍처의 핵심:
👉 “컴퓨터를 더 빠르게 만드는 것”

이를 위해 고려하는 기법들:

  • 파이프라이닝(Pipelining)
  • 캐시(Cache) 활용
  • 병렬 프로그래밍(Parallelism)

 

성능(Performance)과 컴퓨터 아키텍처

컴퓨터의 발전과 설계에서 가장 중요한 주제 중 하나는 성능(Performance)
단순히 더 빠른 CPU나 더 많은 메모리를 구매한다고 해서 항상 최고의 성능을 얻을 수는 없음
성능은 크게 알고리즘 → 언어 및 컴파일러 → 아키텍처(하드웨어) 계층을 따라 결정됨

 

1. 알고리즘 : 성능의 80~90%를 좌우하는 요소

  • 좋은 알고리즘을 쓰지 않으면, 아무리 비싼 CPU나 많은 메모리를 사용해도 성능 향상을 기대하기 어려움
  • 예시:
    • 나쁜 알고리즘을 C 언어로 작성한 경우보다,
    • 좋은 알고리즘을 Python으로 작성한 경우가 훨씬 빠를 수 있음.

👉 즉, 성능의 대부분은 알고리즘에서 결정

 

2. 프로그래밍 언어와 컴파일러의 영향

  • 동일한 알고리즘이라도 어떤 언어를 사용하느냐에 따라 성능 차이가 큼.
    • C > Java > Python (속도 기준)
  • Python은 인터프리터 언어라서 상대적으로 느리고, C는 컴파일 언어라서 훨씬 빠름.
  • 컴파일러 버전도 중요한 요소 → 최신 버전일수록 더 많은 최적화 기법을 적용.
    • 필요 없는 명령어를 줄이고, 효율적인 기계어로 변환해줌.

 

3. 아키텍처와 마이크로아키텍처

  • 같은 알고리즘, 같은 언어라도 CPU와 메모리 구조에 따라 성능이 달라짐
  • CPU 성능에 영향을 주는 요소:
    • 클럭 속도 (Clock Speed)
    • 파이프라이닝(Pipelining)
    • 멀티코어(Multi-core)
    • 메모리 대역폭(Bandwidth)

👉 좋은 하드웨어는 더 많은 명령어를 더 빠르게 실행할 수 있게 도와줌

 

4. 성능 향상을 위한 8가지 아이디어

  1. 무어의 법칙(Moore’s Law)
    • 트랜지스터 크기가 작아지면서 성능이 지속적으로 향상됨.
    • 하지만 최근에는 속도가 둔화되고 있음.
  2. 추상화(Abstraction)
    • 복잡한 시스템을 쉽게 다룰 수 있도록 계층(Layer)을 나눔.
    • 예: printf() 함수 사용자는 내부 동작을 몰라도 사용 가능.
  3. 공통 케이스 최적화 (Make the Common Case Fast)
    • 사람들이 자주 쓰는 기능(예: 동영상 재생, 게임)을 빠르게 만들면 전체 성능이 좋아진 것처럼 체감됨.
  4. 병렬성(Parallelism)
    • 여러 일을 동시에 수행 → 성능 극대화.
    • 예: 멀티코어, GPU 연산.
  5. 파이프라이닝(Pipelining)
    • 큰 작업을 작은 단계로 쪼개고 동시에 실행.
    • 예: CPU 명령어 파이프라인.
  6. 예측(Prediction)
    • 프로그램의 흐름(Branch)이나 데이터 접근을 미리 예측.
    • 예: 브랜치 예측, 캐시 프리페치.
  7. 메모리 계층 구조(Memory Hierarchy)
    • 빠른 메모리는 비싸고, 느린 메모리는 싸다 → 계층적으로 설계.
    • 예: 캐시(Cache) → 메인 메모리(RAM) → 보조 기억장치(SSD/HDD).
  8. 신뢰성(Dependability)
    • 데이터가 안전하게 저장되고 처리될 수 있어야 함.
    • 예: 우주선의 컴퓨터는 동일한 연산을 여러 번 수행해 다수결로 오류 방지.

 

5. 운영체제(OS)와 소프트웨어 스택

  • OS는 하드웨어와 애플리케이션 사이를 연결하는 핵심 계층.
  • 드라이버, API 등을 통해 하드웨어를 추상화하여 애플리케이션 개발을 단순화함.

 

6. ISA (Instruction Set Architecture)

  • 소프트웨어와 하드웨어가 소통하는 공용 언어.
  • 예시: x86, ARM, RISC-V
  • RISC-V는 오픈소스 ISA라 최근 각광받고 있음.

 

 

 

컴퓨터 시스템의 주요 컴포넌트 이해하기

 

1. 입력(Input)과 출력(Output)

모든 컴퓨터에는 입력 장치(Input Device)출력 장치(Output Device) 가 있음

  • 입력 장치
    • 마우스, 키보드, 터치스크린, 마이크, 카메라, 네트워크 어댑터(NIC)
    • 최근 가장 많이 쓰이는 입력은 터치스크린
    • 입력은 결국 “사용자의 의도를 디지털 신호(좌표, 픽셀, 텍스트 등)”로 바꿔 전달하는 역할.
  • 출력 장치
    • 디스플레이(화면), 스피커, 프린터, 진동 모터(햅틱), 네트워크 전송
    • 가장 대표적인 출력 장치는 여전히 디스플레이(화면).
    • 하지만 소리(음악), 진동, 네트워크를 통한 데이터 전송도 모두 출력의 일종.

 

2. 디스플레이와 픽셀

  • 화면은 사실 픽셀(pixel) 들의 집합.
  • 해상도(Resolution) = 화면의 가로 × 세로 픽셀 수
    • 예: FHD(1080p) → 1920 × 1080 ≈ 200만 개 픽셀
  • 하나의 픽셀은 보통 RGB(빨강, 초록, 파랑) 값으로 색상을 표현 (24비트 = 3바이트).
  • 투명도(Alpha) 채널까지 포함하면 32비트(4바이트) 가 한 픽셀을 차지.
  • 따라서 이미지 출력은 결국 “메모리에 저장된 픽셀 데이터”를 디스플레이 장치가 불러와 색상으로 변환하는 과정.

 

3. 프로세서(Processor: CPU, GPU, NPU)

  • CPU (Central Processing Unit)
    • 데이터 이동(Data Path) + 제어(Control Logic) + 캐시(Cache)
    • 일반적인 연산(프로그램 실행, 명령어 처리)의 중심.
    • 현대 모바일/PC는 Big-Little 구조
      • Big Core → 고성능, 게임/고속 연산용
      • Little Core → 저전력, 메신저/텍스트 등 일상 작업용
      • Prime Core → Big Core보다 더 강력, 최상급 성능
  • GPU (Graphics Processing Unit)
    • 본래 목적은 이미지 렌더링(그래픽 처리).
    • 최근에는 병렬 연산 성능 때문에 AI/머신러닝에도 활용.
  • NPU/TPU (Neural Processing Unit / Tensor Processing Unit)
    • AI 연산 가속 전용.
    • 예: 스마트폰 카메라 얼굴 인식, 사진 자동 보정.

 

4. 메모리와 저장 장치

  • 캐시(Cache): CPU 가까이에 있는 초고속 메모리. 자주 쓰는 데이터를 보관. (편의점)
  • 메인 메모리(RAM): 프로그램 실행 중 필요한 데이터를 저장. (동네 마트)
  • 보조 기억장치(SSD/HDD): 장기 데이터 저장소. (대형 창고)

👉 데이터는 CPU ↔ 캐시 ↔ 메모리 ↔ 저장장치 순서로 흘러감.

 

5. SoC (System on a Chip)

스마트폰이나 최신 기기에는 대부분 SoC 구조가 사용됩니다.

  • CPU, GPU, 메모리 컨트롤러, NPU, 모뎀(4G/5G 통신) 등을 하나의 칩에 집적.
  • 가장 비싼 부품 중 하나로, 단일 SoC가 스마트폰 원가의 20~30% 차지.

 

 

컴퓨터 시스템과 추상화(Abstraction) 요약

 

1. 추상화(Abstraction)의 의미

  • 복잡성을 숨기고 단순한 인터페이스만 제공하는 것.
  • 덕분에 사용자는 하드웨어 내부 동작을 몰라도 텍스트 출력, 앱 개발, 통신 같은 기능을 쉽게 구현 가능.
  • “블랙박스”를 다루듯 필요한 기능만 활용할 수 있음.

 

2. 추상화 레이어의 예시

  • 하드웨어 레벨: 트랜지스터 → 컴포넌트 설계 → 칩(SoC) → CPU/GPU
  • 시스템 소프트웨어 레벨: OS(운영체제)가 하드웨어 제어를 추상화해 앱 실행을 가능하게 함.
  • 프로그래밍 레벨:
    • C 언어로 직접 구현하면 수천 줄이 필요한 기능도,
    • Python 같은 고수준 언어에서는 단 몇 줄로 가능.
    • 이는 라이브러리·API·프레임워크가 추상화된 레이어를 제공하기 때문.

 

3. 메모리와 추상화

  • 휘발성 메모리(Volatile Memory): RAM. 전원 꺼지면 데이터 사라짐.
  • 비휘발성 메모리(Non-Volatile Memory): SSD, HDD, 플래시 메모리. 전원 꺼져도 데이터 유지.
  • 예시:
    • 워드 작성 중 전원 꺼지면 저장 안 한 데이터는 RAM에만 있었기 때문에 사라짐.
    • 최근 앱들은 자동 저장 기능(수 초 단위 저장)으로 손실 최소화.

 

4. 통신의 추상화 예시

  • 전화 통화: 우리는 단순히 “전화 버튼”만 누르지만,
    • 음성이 디지털 신호로 변환 → 네트워크 전송 → 상대방 기기에서 아날로그로 변환 → 소리 출력
    • 이 모든 과정을 모르는 상태에서도 앱을 만들 수 있음.