컴퓨터 구조란?
컴퓨터가 데이터를 저장하고 처리하는 전체적인 설계 방식
= 하드웨어 구성 + 명령어 실행 구조
기본 구성 요소 (폰 노이만 구조 기반)
구성 요소 | 세부 구성 | 주요 역할 및 기능 |
입력 장치 | 키보드, 마우스 등 | 사용자로부터 데이터를 입력받음 |
중앙처리장치 (CPU) | 제어장치 (CU) 연산장치 (ALU) 레지스터 |
명령어를 해석하고 연산 수행 장치 간 제어 임시 데이터 고속 저장 |
기억 장치 | RAM ROM 캐시 레지스터 |
데이터를 저장 및 불러오기 RAM은 휘발성, ROM은 비휘발성 캐시는 CPU와 RAM 사이 속도 보완 |
출력 장치 | 모니터, 프린터 등 | 처리 결과를 사용자에게 출력 |
보조기억장치 | HDD, SSD, USB 등 | 프로그램과 데이터를 영구 저장 |
버스(Bus) | 데이터 버스 주소 버스 제어 버스 |
장치 간 데이터, 주소, 제어 신호 전송 |
기타 주요 장치
장치 | 설명 | 포인트 |
GPU (Graphics Processing Unit) |
그래픽 처리 전용 프로세서 → 병렬 연산에 특화됨 (영상, 딥러닝 등) |
CPU보다병렬 연산 성능 우수 |
RAM Disk | 메모리(RAM)의 일부를 디스크처럼 사용하는 가상 저장공간 | 매우 빠르지만 전원 차단 시 데이터 사라짐 (휘발성) |
SSD (Solid State Drive) |
반도체 기반 비휘발성 저장장치 → 속도 빠름, 기계적 소음 없음 |
TRIM 명령, 셀 종류(SLC, MLC, TLC) 등 |
캐시 메모리 (Cache) |
CPU와 RAM 사이에 위치, 속도 차이 보완 / L1, L2, L3 단계 존재 | 용량 작지만 속도 매우 빠름, 지역성(Locality) 원리 기반 |
레지스터 (Register) |
CPU 내부에 있는 초고속 기억장치 / 계산 중인 값 저장 |
가장 빠르지만 용량 매우 작음 |
BIOS (Basic Input Output System) |
부팅 시 하드웨어 초기화 + OS 로딩 전까지 필요한 설정 수행 |
ROM에 저장, POST 수행, CMOS와 함께 시험에 나옴 |
POST (Power-On Self Test) |
BIOS가 부팅 시 수행하는 하드웨어 진단 과정 |
부팅 중 "삐" 소리 = POST 에러 발생 신호 |
CMOS | 시스템 설정 값 저장 공간 / 시계, 날짜, 부팅 순서 등 포함 |
배터리(BIOS 배터리)로 유지됨, 초기화 가능 |
DMA (Direct Memory Access) |
CPU 거치지 않고 장치 간 메모리 직접 전송 가능 |
고속 전송 구조, CPU 부하 감소 |
북마크 (Bookmark) |
시스템이 자주 사용하는 주소나 위치를 기억 | → 시험보단 실무에서 더 자주 등장 |
헷갈리는 장치 비교
구분 | RAM | RAM Disk | SSD | HDD | Cache | Register | GPU | CPU |
---|---|---|---|---|---|---|---|---|
기능 | 주기억장치 | 가상 디스크 | 보조기억장치 | 보조기억장치 | CPU-메모리 중간 버퍼 | CPU 내부 연산 임시 저장 | 그래픽 연산 특화 | 일반 연산 처리 |
속도 | 빠름 | 매우 빠름 | 중간 | 느림 | 매우 빠름 | 최고속도 | 중간 | 빠름 |
휘발성 | ✅ 예 | ✅ 예 | ❌ 아니오 | ❌ 아니오 | ✅ 예 | ✅ 예 | ❌ 아니오 | ❌ 아니오 |
사용 목적 | 프로그램 실행 | 빠른 임시 저장소 | 데이터 저장 | 대용량 저장 | 속도 보완 | 계산 중 데이터 보관 | 병렬 그래픽 연산 | 일반 논리·산술 연산 |
특징 | 휘발성 메모리 |
RAM을 디스크처럼 사용 | 반도체 기반 저장 | 기계식 저장장치 | CPU 근접 위치 | CPU 가장 가까움 | 병렬 연산 구조 | 연산 핵심 장치 |
명령어 실행 사이클
① 인출(Fetch) → 명령어를 메모리에서 CPU로
② 해독(Decode) → 명령어 분석
③ 실행(Execute) → 실제 연산 수행
④ 저장(Store) → 결과를 메모리에 저장
버스 구조
버스 종류 | 역할 |
데이터 버스 | 데이터 전달 |
주소 버스 | 기억장치 주소 전달 |
제어 버스 | 제어 신호 전달 (읽기/쓰기 등) |
저장장치 계층 구조
레지스터 > 캐시 > RAM > SSD > HDD
- 빠를수록 작고 비쌈
- 느릴수록 크고 쌈
- 계층 구조 설계는 성능과 비용의 균형을 맞추기 위함
컴퓨터 구조의 발전 과정
세대 | 기술 기반 | 구조 설계 | 대표 언어 | 운영 방식 | 주요 특징 | 대표 시스템 |
---|---|---|---|---|---|---|
1세대 (1940~1950년대) |
진공관 (Vacuum Tube) | 폰 노이만 구조 최초 적용 명령어와 데이터 동일한 기억장소 사용 |
기계어 | 단일 작업 방식 (Batch) | 속도 느림, 발열 심함 하드웨어 크기 큼, 고장 빈번 |
ENIAC, EDVAC, UNIVAC |
2세대 (1950년대 후반~1960년대) |
트랜지스터 | 폰 노이만 구조 유지 하드웨어 신뢰성 향상 |
어셈블리어 | 배치 처리 향상 초기 운영체제 등장 |
작고 안정적, 소비전력 감소 컴퓨터 대중화 시작 |
IBM 1401, CDC 1604 |
3세대 (1960년대 후반~1970년대) |
집적회로 (IC) | 다중 프로그래밍 가능 기억장치 고도화 |
C언어 (초기 고급언어) | 시분할(Time-sharing), 다중 사용자 | 속도 향상, 효율적 자원 분배 중앙 집중식 컴퓨팅 |
IBM System/360, UNIVAC 1108 |
4세대 (1970년대 후반~현재) |
VLSI (초대형 집적회로) |
병렬처리, 파이프라이닝 구조 마이크로프로세서 기반 |
고급언어 (C, Pascal 등) | 다중 작업(OS), 멀티태스킹 GUI 운영체제 등장 |
PC 보급, 개인화 컴퓨터 가격 하락, 상용화 급진전 |
인텔 4004, IBM PC, Apple II |
5세대 (현재~미래) |
AI, 양자컴퓨팅 뉴로모픽 기술 |
비폰노이만 구조 시도 병렬·분산·지능형 구조 |
Python, R, AI 언어 (딥러닝 프레임워크 등) |
자율처리, 딥러닝 중심 네트워크 기반 서비스 확대 |
인간 사고방식 모방 빅데이터·AI 융합 |
딥러닝 서버, NPU, 클라우드 AI, 양자컴퓨터 |
논리게이트
논리게이트 | 기호 | 동작 원리 | 대표 진리표 요약 | 설명 |
---|---|---|---|---|
AND | A • B | 1 • 1 = 1 | 모두 참일 때만 참 | 입력값 모두 1일 때만 출력이 1 |
OR | A + B | 0 + 0 = 0 | 둘 중 하나라도 참이면 참 | 입력값 중 하나라도 1이면 출력이 1 |
NOT | A̅ | 1 → 0 0 → 1 |
참/거짓 반전 | 입력값을 반전시킴 (1이면 0, 0이면 1) |
NAND | (A • B)̅ | AND의 반대 | AND 결과의 부정 | AND 연산 후 결과를 반전 |
NOR | (A + B)̅ | OR의 반대 | OR 결과의 부정 | OR 연산 후 결과를 반전 |
XOR | A ⊕ B | 같으면 0, 다르면 1 | 배타적 논리합 | 입력값이 다르면 1, 같으면 0 |
XNOR | (A ⊕ B)̅ | 같으면 1, 다르면 0 | 동등 비교 | XOR의 반대, 입력값이 같을 때 1 |
3 상태 버퍼
상태 | 설명 |
0 | 출력으로 0 |
1 | 출력으로 1 |
Z (High Impedance) | 출력 없음 상태 / 회로에서 연결이 끊긴 것처럼 동작함 |
멀티플렉서
구성 | 설명 |
입력 | 4개 (I₀, I₁, I₂, I₃) |
선택선 | 2개 (S₀, S₁) → 2ⁿ 개 입력 선택 가능 |
출력 | 1개 (Y) → 선택된 입력만 출력됨 |
- 작동 예시
S1 | S0 | 출력(Y) |
0 | 0 | I₀ 출력 |
0 | 1 | I₁ 출력 |
1 | 0 | I₂ 출력 |
1 | 1 | I₃ 출력 |
프로세스란?
운영체제에서 실행 중인 프로그램
= 코드 + 실행 상태 + 자원의 집합
프로세스 구성요소
구성 요소 | 설명 |
프로그램 코드 (Text) | 실행할 명령어 집합 (코드 영역) |
데이터 (Data) | 전역변수, 정적 변수 등 |
힙 (Heap) | 동적 메모리 할당 영역 (malloc 등) |
스택 (Stack) | 함수 호출, 지역 변수 저장 |
PCB (Process Control Block) | 프로세스 상태, PID, 레지스터 등 관리 |
프로세스 전이 상태
상태 | 설명 |
New | 새로 생성되고 있는 중 (아직 실행 전) |
Ready | CPU 할당을 기다리는 상태 |
Running | CPU를 받아 실행 중인 상태 |
Waiting / Blocked | 입출력 등 외부 이벤트를 기다리는 상태 |
Terminated / Exit | 실행이 끝나 종료된 상태 |
전이 | 설명 |
New → Ready | 프로세스 생성 완료 → 준비 완료 상태 |
Ready → Running | CPU가 할당됨 → 실행 시작 |
Running → Waiting | 입출력 요청 등으로 대기 상태로 전환 |
Running → Ready | CPU 선점(문맥 교환) → 다시 준비 상태로 |
Waiting → Ready | 입출력 완료 → 다시 준비 상태 |
Running → Terminated | 실행 종료 |
[New]
↓
[Ready] ←────────────┐
↓ │
[Running] ──→ [Waiting]
↓ ↑ ↓
[Terminated] ←───────┘
인터럽트란?
- 정의:
→ 실행 중인 프로그램을 강제로 멈추고, 외부 또는 내부에서 발생한 긴급한 이벤트를 처리하도록 하는 신호 - 주요 역할:
→ CPU가 느린 장치(I/O 등)를 기다리지 않고 필요한 때에만 처리하도록 해 효율 향상 - 일상 비유:
→ 누군가 말을 하고 있을 때, 급한 일이 생겨 “잠깐만요!” 하고 중단시키는 것
인터럽트의 종류
분류 | 하위 분류 | 설명 | 대표 예시 |
---|---|---|---|
외부 인터럽트 (하드웨어 기반) |
입출력 인터럽트 | I/O 장치에서 CPU로 요청 | 키보드 입력, 프린터 완료 |
타이머 인터럽트 | 내부 타이머에 의해 발생 | 시간 분할 스케줄링 | |
전원 이상 인터럽트 | 전압 강하, 정전 등 이상 감지 | UPS 작동 요청 | |
외부 신호 인터럽트 | 외부 장치에서 신호 발생 | 외부 컨트롤러 요청 | |
내부 인터럽트 (예외/트랩) |
잘못된 명령어 | CPU가 해석 불가능한 명령어 | 불법 명령 실행 |
산술 오류 | 0으로 나누기 등 계산 오류 | Divide by zero, overflow | |
메모리 접근 오류 | 허용되지 않은 영역 접근 | 커널 영역 접근 시도 | |
주소 지정 오류 | 존재하지 않는 주소 접근 | NULL 포인터 참조 | |
소프트웨어 인터럽트 (의도적 호출) |
시스템 콜 | OS 기능 요청 인터럽트 | read(), exec(), write() 등 |
Supervisor Call (SVC) | 운영체제 특권 명령 요청 | UNIX에서 커널 호출 | |
프로그램 요청 인터럽트 | 사용자 코드에 명시된 인터럽트 | INT 21h (x86 인터럽트) |
- 외부 인터럽트: "밖에서 불러서 방해"
- 내부 인터럽트: "내가 문제 생김"
- 소프트웨어 인터럽트: "내가 OS한테 도와달라고 요청"
입출력 시스템의 구성요소
구성 요소 | 설명 |
---|---|
디바이스 드라이버 (Device Driver) |
운영체제가 각 하드웨어 장치를 제어할 수 있도록 제공하는 소프트웨어 모듈 OS ↔ 장치 제어기 간의 통신 중개 역할 |
I/O 장치 제어기 (Device Controller) |
입출력 장치를 실제로 제어하는 하드웨어 장치 내부에 존재하며, CPU의 명령을 받아 동작 |
버퍼 (Buffer) |
CPU와 입출력 장치 간 속도 차이를 완화하기 위한 임시 데이터 저장소 데이터 손실 방지 및 효율적 처리에 사용 |
I/O 명령어 | CPU가 입출력 장치에 명령을 내리기 위해 사용하는 명령어 예: READ, WRITE 등 |
입출력장치 접근 방식
방식 | 설명 | 특징 | 장점 | 단점 |
---|---|---|---|---|
Programmed I/O | CPU가 직접 입출력 장치를 제어 작업 완료 시까지 CPU가 대기 |
CPU가 모든 입출력 처리 주체 | 구현이 간단 | CPU 자원 낭비 심함 |
Interrupt-driven I/O | I/O 장치가 준비되면 인터럽트를 발생시켜 CPU가 처리 | 인터럽트 기반 처리 | CPU 자원 절약 | 복잡한 인터럽트 처리 필요 |
DMA (Direct Memory Access) |
I/O 장치가 메모리에 직접 접근하여 데이터 전송 CPU의 개입 없이 대량 전송 가능 |
DMA 컨트롤러 사용 | CPU 부하 감소, 고속 전송 | 구현 복잡, 하드웨어 추가 필요 |
Channel I/O | 별도의 채널 프로세서가 입출력 전담 CPU와 독립적으로 처리 |
고급 시스템(메인프레임) 사용 | 입출력 완전 분리, 병렬 처리 가능 |
고비용, 복잡한 구조 |
- Cycle Stealing : DMA 장치가 CPU의 버스 사용 사이클을 잠깐 ‘훔쳐’서 메모리에 직접 접근하는 방식
CISC와 RISC
항목 | 설명 |
CISC (Complex Instruction Set Computer) |
복잡한 명령어 집합을 가진 CPU 설계 방식 |
→ 1개의 명령어로 여러 동작 수행 가능 | |
RISC (Reduced Instruction Set Computer) |
간단하고 빠른 명령어만 사용하도록 단순화된 설계 |
→ 명령어 실행 속도와 효율성 중시 |
비교 항목 | CISC (Complex Instruction Set Computer) |
RISC (Reduced Instruction Set Computer) |
---|---|---|
명령어 수 | 많고 복잡함 | 적고 단순함 |
명령어 길이 | 가변 길이 (1~15바이트 등) | 고정 길이 (일반적으로 4바이트) |
처리 속도 | 명령어 자체는 강력하지만 느림 | 단순 명령어를 빠르게 처리 (파이프라이닝 효율 ↑) |
전력 소모 | 비교적 많음 | 낮음 (모바일·임베디드 친화적) |
하드웨어 복잡도 | 높음 (복잡한 디코더 필요) | 낮음 (제어회로 간단) |
호환성 | 높음 (x86 계열의 레거시 지원) | 낮음 (호환성보단 속도에 중점) |
컴파일러 의존성 | 낮음 (복잡한 명령이 하드웨어에 있음) | 높음 (컴파일러가 명령어 최적화 책임) |
사용 예시 | Intel x86, AMD 계열 데스크탑 CPU | ARM, MIPS, SPARC, RISC-V 등 모바일/임베디드/IoT |
대표 특징 | 명령어 1개로 다양한 동작 수행 | 명령어는 단순하지만 실행 빠름 |
주소지정방식
주소지정방식 | 개념 설명 | 특징 | 이해하기 쉬운 예시 |
---|---|---|---|
즉시주소지정 (Immediate) |
명령어 자체에 데이터가 포함됨 | 가장 빠름, 메모리 접근 없음 | MOV A, #5 → A에 숫자 5를 직접 넣음 |
직접주소지정 (Direct) |
명령어에 실제 메모리 주소가 포함됨 | 명령어가 메모리 위치를 직접 지정 | MOV A, 1000 → A에 메모리 주소 1000에 있는 값 저장 |
간접주소지정 (Indirect) |
명령어가 가리키는 주소에 진짜 데이터 주소가 있음 |
메모리 접근 2번 필요 | MOV A, (1000) → 주소 1000에 적힌 주소로 가서 값을 가져옴 |
레지스터주소지정 (Register) |
데이터가 레지스터에 있음 | 속도 매우 빠름 | MOV A, R1 → R1에 저장된 값을 A에 저장 |
레지스터간접주소지정 (Register Indirect) |
레지스터가 가리키는 메모리 주소에서 데이터 읽음 | 레지스터를 포인터처럼 사용 | MOV A, @R1 → R1이 가리키는 주소의 값 가져옴 |
상대주소지정 (Relative) |
현재 명령어 주소(PC) + 오프셋 | 분기(Branch) 명령어에서 사용 | JMP +5 → 현재 위치에서 5칸 뒤로 점프 |
기준주소지정 (Base / Indexed) |
기준 주소(레지스터) + 오프셋으로 실제 주소 계산 | 배열/구조체 등 반복 데이터 처리에 유용 | LOAD A, BASE+4 → BASE 레지스터 기준 4칸 떨어진 주소의 값 |
암시적주소지정 (Implicit) |
명령어에 피연산자 없음, CPU가 자동 인식 | 명령어 자체로 의미 완결 | CLR → 누산기(ACC)를 자동으로 지움 |
- CISC가 복잡하고 다양한 주소지정방식을 사용하고, RISC가 단순하고 다양하지 않은 주소지정방식을 사용함
데이터의 구성 단위
- 물리적 단위
단위 | 크기 | 설명 |
---|---|---|
비트 (Bit) | 1비트 | 가장 작은 단위, 0 또는 1의 이진값 |
니블 (Nibble) | 4비트 | 16진수 1자리 표현 가능 (0~F) |
바이트 (Byte) | 8비트 | 영문자 1개 저장 가능, 메모리 최소 주소 단위 |
워드 (Word) | CPU 구조에 따라 보통 2~8바이트 | CPU가 한 번에 처리할 수 있는 데이터 크기 |
더블워드 (Double Word) | 2워드 (일반적으로 4~8바이트) | 워드보다 2배 큰 데이터 단위 |
쿼드워드 (Quad Word) | 4워드 (일반적으로 8~16바이트) | 64비트 이상의 CPU에서 사용되는 단위 |
킬로바이트 (KB) | 1,024 바이트 | 작은 텍스트 파일 크기 정도 |
메가바이트 (MB) | 1,024 KB | 이미지, 음악 파일 수준 |
기가바이트 (GB) | 1,024 MB | 일반적인 RAM, 영화 파일 크기 |
테라바이트 (TB) | 1,024 GB | SSD, HDD 등 저장장치 용량 단위 |
페타바이트 (PB) | 1,024 TB | 데이터 센터, 클라우드 스토리지 |
엑사바이트 (EB) | 1,024 PB | 국가·글로벌 단위 대용량 데이터 |
제타바이트 (ZB) | 1,024 EB | 인터넷 전체 트래픽 규모 등 초대형 단위 |
- 논리적 단위
단위 | 정의 | 상세 설명 / 예시 |
---|---|---|
필드 (Field) | 의미 있는 데이터 항목 하나 | 예: 이름, 전화번호, 주소 데이터베이스에서 "열(Column)"에 해당 |
레코드 (Record) | 필드들의 집합 | 예: 한 명의 학생 정보(이름+학번+전화번호 등) 데이터베이스에서 "행(Row)"에 해당 |
파일 (File) | 레코드들의 모음 | 예: 학생정보.txt, 회원목록.csv 등 하나의 주제에 대한 정보 저장 |
테이블 (Table) | 레코드들이 모인 2차원 형태의 구조 | 데이터베이스 내부 구조의 기본 단위 필드 = 열, 레코드 = 행 |
데이터베이스 (Database) | 논리적으로 연결된 파일/테이블들의 모음 | 예: 학사관리 DB, 고객관리 DB DBMS로 관리되는 데이터 집합체 |
- 블록 : 디스크 입출력의 최소 단위, HDD/SSD 등에서 데이터를 실제로 읽고 쓰는 기본 단위
분류 | 이유 |
물리적 단위로 분류 | 디스크에서 실제로 I/O 작업이 블록 단위로 처리됨 (512B, 4KB 등) |
논리적 개념으로도 등장 | 파일시스템/DBMS에서 "논리적 블록 주소(LBA)", "할당 블록" 등으로 사용됨 |
숫자
수 체계 | 기수(진수) | 사용 숫자 | 예시 |
2진수 | 2 | 0, 1 | 1101 (13 in decimal) |
8진수 | 8 | 0~7 | 0751 (== 489) |
10진수 | 10 | 0~9 | 123, 456 |
16진수 | 16 | 09, AF | 0x1F (== 31 in decimal) |
- 숫자 내부 표현 방식
구분 | 설명 | 비고 |
정수 | 부호 + 값 (보통 2의 보수로 표현) | 8/16/32/64비트 |
실수 | 부동소수점(Floating Point) | IEEE 754 표준 사용 |
고정소수점 | 정수처럼 처리하되, 소수점 위치 고정 | 임베디드 등에서 사용 |
- 변환 방식
변환 방향 | 변환 방법 | 설명 | 예시 |
---|---|---|---|
10진수 → 2진수 |
2로 나눈 나머지를 역순으로 정렬 | 2로 계속 나누고, 나머지를 아래서 위로 읽음 | 13 → 1101 |
2진수 → 10진수 |
각 자리수에 2의 제곱을 곱해 모두 더함 | LSB(오른쪽)부터 차례대로 2⁰, 2¹, 2²... | 1101 → 1×8 + 1×4 + 0×2 + 1×1 = 13 |
2진수 → 16진수 |
4자리씩 끊어서 16진수 한 자리로 변환 | 왼쪽부터 4비트 단위로 끊어서 대응 | 11011011→ 1101(D), 1011(B) → DB |
16진수 → 2진수 |
각 자리 숫자를 4자리 이진수로 변환 | 예: A = 1010, F = 1111 | 3F → 0011 1111 |
10진수 → 16진수 |
16으로 나눈 나머지를 역순으로 정렬 | 2진수 변환과 원리 같음 (단위만 다름) | 255 → 0xFF |
16진수 → 10진수 |
각 자리수 × 16ⁿ 해서 모두 더함 | 16진수의 각 자리 곱해서 합산 | 1F → 1×16 + 15 = 31 |
- 변환 문제 예시
10진수 157을 2진수로 바르게 변환한 것은?
① 10011111
② 10011001
③ 10100011
④ 10011101
정답: ①
157 ÷ 2 = 78 ... 1
78 ÷ 2 = 39 ... 0
39 ÷ 2 = 19 ... 1
19 ÷ 2 = 9 ... 1
9 ÷ 2 = 4 ... 1
4 ÷ 2 = 2 ... 0
2 ÷ 2 = 1 ... 0
1 ÷ 2 = 0 ... 1
→ 역순으로 읽으면: 10011111 (정답)
다음 2진수 10101111
을 16진수로 바르게 변환한 것은?
① 0xAF
② 0xB2
③ 0xA7
④ 0xBE
정답: ① 0xAF
해설:
2진수 10101111을 4자리씩 끊어서 변환하면:
1010 = A, 1111 = F → 0xAF
8비트 기준으로 10진수 -23
을 2의 보수로 표현한 것은?
① 11101001
② 11100111
③ 11101000
④ 11101101
정답: ① 11101001
해설:
1. +23 → 00010111
2. 1의 보수 → 11101000
3. +1 → 11101001
따라서 정답은 11101001
- 빅엔디안과 리틀엔디안 : 메모리를 저장할 때 어떤 바이트를 먼저 저장하느냐에 관한 개념
비교 항목 | Big Endian | Little Endian |
---|---|---|
바이트 저장 순서 | 상위 바이트부터 저장 (왼쪽 → 오른쪽) | 하위 바이트부터 저장 (오른쪽 → 왼쪽) |
사람 눈에 직관적인가? | 예 (큰 값이 먼저 보여서 이해 쉬움) | 아니오 (숫자가 뒤집혀 보여 헷갈릴 수 있음) |
실제 저장 예시 (0x12345678) |
12 34 56 78 | 78 56 34 12 |
실제 저장 예시 (0xABCD) |
AB CD | CD AB |
사용 시스템 | 네트워크 표준, 일부 RISC 시스템 (SPARC 등) | 대부분의 PC(x86/Intel), ARM, Windows 등 |
활용 분야 | TCP/IP, 네트워크 전송 시 사용 | 메모리 저장, 파일 시스템 내부 구조 |
비유 | “큰 것이 먼저” → 제목을 앞에서부터 씀 | “작은 것이 먼저” → 제목을 거꾸로 씀 |
- 네트워크 = 항상 빅엔디안
- PC 메모리 = 대부분 리틀엔디안
- 저장된 값이 이상하게 보이면 엔디안 순서 확인
문자
인코딩 방식 | 설명 | 비고 |
ASCII | 영문자, 숫자, 특수기호 표현 (7비트 → 128문자) |
'A' = 65, 'a' = 97, '0' = 48 |
EUC-KR | 한글 완성형 표현 (2바이트) | 옛 한글 미지원 |
UTF-8 | 유니코드 기반, 전 세계 문자 지원 (1~4바이트 가변 길이) |
웹 표준 |
UTF-16 | 고정 2바이트 or 4바이트 | Windows 내부 많이 사용 |
Unicode | 전 세계 문자에 고유한 번호 부여 | U+AC00 = '가' |
- Base64 : 8비트 바이너리 데이터를 ASCII 문자로 표현하는 방식 → 텍스트만 허용되는 환경에서 바이너리 데이터를 안전하게 전달하기 위해 사용
항목 | 내용 |
---|---|
정의 | 바이너리 데이터를 ASCII 문자로 변환하는 인코딩 방식 |
사용 목적 | 이진 데이터를 텍스트 환경에서도 안전하게 전송 |
입력 단위 | 3바이트(24비트) |
출력 단위 | 4문자 (6비트 × 4) |
사용 문자 | A~Z, a~z, 0~9, +, / (총 64문자) + = (패딩) |
패딩 | 입력 데이터가 3바이트 미만일 경우, = 또는 == 사용 |
크기 변화 | 원본보다 약 33% 증가 (3바이트 → 4문자) |
사용 예시 | 이메일 MIME, 이미지 base64(data URI), JWT 토큰 등 |
예제 | "Man" → TWFu "M" → TQ== |
반도체 저장매체
저장매체 | 설명 | 특징 | 휘발성 |
---|---|---|---|
DRAM | 컴퓨터의 주기억장치로 사용되는 동적 램 | 속도 빠름, 재충전 필요, 저렴 | 휘발성 |
SRAM | CPU 캐시에 사용되는 정적 램 | 매우 빠름, 고가, 재충전 불필요 | 휘발성 |
플래시 메모리 | EEPROM을 발전시킨 비휘발성 반도체 메모리 |
SSD, USB, SD 카드 등 저장장치의 핵심 | 비휘발성 |
NAND Flash | 저장 속도가 빠르고 대용량 저장이 가능함 | SSD, USB, 스마트폰 등에 사용, 블록 단위 삭제 | 비휘발성 |
NOR Flash | 빠른 읽기 속도, 코드 실행 가능 | BIOS, 펌웨어 등에 사용, 랜덤 접근 지원 | 비휘발성 |
EEPROM | 전기적으로 삭제 및 재기록 가능한 ROM | 플래시 메모리의 전신, 느리지만 안정성 높음 | 비휘발성 |
SSD (Solid State Drive) |
NAND 플래시 기반 저장장치 | 빠른 속도, 무소음, 기계 부품 없음, 수명 제한 있음 | 비휘발성 |
USB (Flash Drive) |
플래시 메모리 기반의 휴대용 저장장치 | 작고 휴대성 좋음, 다양한 기기에서 사용 가능 | 비휘발성 |
SD 카드 | 플래시 메모리 기반의 소형 저장장치 | 카메라, 스마트폰, 드론 등에 사용 | 비휘발성 |
MRAM / PRAM | 자기저항/상변화 재료 기반 차세대 비휘발성 메모리 |
빠르고 전력 적음, 높은 내구성, 상용화 진행 중 | 비휘발성 |
- 반도체 아닌것
저장매체 | 저장 방식 | 설명 | 주요 특징 |
---|---|---|---|
HDD (Hard Disk Drive) | 자기 디스크 회전 + 자기헤드 | 회전하는 금속 디스크에 데이터를 자기적으로 저장 |
대용량, 저렴, 느림, 기계적 손상 우려 |
FDD (Floppy Disk Drive) | 자기 디스크 | 자성 플라스틱 원판 사용한 소형 디스크 | 용량 작고 속도 느림, 현재는 거의 사용 안함 |
Optical Disc (CD/DVD/Blu-ray) |
레이저로 표면 읽기 | 빛 반사를 이용해 데이터를 읽고 쓰는 저장매체 |
읽기 전용 또는 다회 기록 가능, 내구성은 보통 |
자기 테이프 (Magnetic Tape) |
자기 입자 코팅된 리본 테이프 |
순차 접근 방식, 백업용으로 사용됨 | 저렴, 대용량, 매우 느림, 순차 읽기 |
ZIP Disk | 자기 디스크 | 플로피디스크 대체용으로 개발된 중간급 저장장치 | 소형, 휴대 가능, 현재는 거의 단종 |
USB 메모리
플래시 메모리를 사용하여 데이터를 저장하고, USB 인터페이스(포트)를 통해 컴퓨터나 장치에 연결해 사용하는 휴대용 저장장치
- 비휘발성이라 전원 꺼져도 데이터 유지
- 플러그 앤 플레이 지원 → 드라이버 없이 자동 인식
- 다양한 운영체제/기기에서 넓은 호환성
- FAT32 / exFAT / NTFS 등 다양한 파일시스템 지원
- 핫 스와이핑 : 컴퓨터 전원이 켜진 상태에서도 USB 장치를 연결/분리/교환이 가능한 기능
- 주 컨트롤러는 허브를 통해 최대 127개까지의 포트의 확장이 가능
- 장치가 늘어날수록 대역폭을 나눠쓰게 되어 속도는 현저하게 떨어짐
버전 | 출시 연도 | 이론 최대 속도 | 커넥터 종류 | 특징 |
---|---|---|---|---|
USB 1.1 | 1998 | 12 Mbps | Type-A | 초기 표준, 느림 |
USB 2.0 | 2000 | 480 Mbps | Type-A, Micro-B | 대중화 시작, 여전히 많이 사용됨 |
USB 3.0 | 2008 | 5 Gbps | Type-A (파란색) | 고속 전송, 대용량 지원 |
USB 3.1 | 2013 | 10 Gbps | Type-A, Type-C | 양방향 데이터, 고속 충전 |
USB 3.2 | 2017 | 20 Gbps | Type-C | 듀얼 레인 전송, 고성능 장치 |
USB 4.0 | 2019 | 40 Gbps | Type-C 전용 | Thunderbolt 3 호환, 고속 멀티 디바이스 |
[USB 메모리]
├── [컨트롤러]
│ ├─ USB 통신 인터페이스
│ └─ FTL (주소 매핑, 수명 관리 등)
└── [NAND 플래시]
├─ Die
│ └─ Block
│ └─ Page
│ └─ Cell
- 읽기는 페이지 단위
- 삭제는 블록 단위
- 컨트롤러가 이 모든 걸 자동으로 관리함
구성 요소 | 설명 | 단위 | 특징 |
---|---|---|---|
Cell (셀) | 플래시 메모리의 가장 작은 저장 단위 | 1비트 or 멀티비트 | SLC, MLC, TLC, QLC 등으로 구분 |
Page (페이지) | 여러 셀로 구성된 데이터 읽기 단위 | 4KB~16KB | 읽기/쓰기 단위 |
Block (블록) | 여러 페이지로 구성된 삭제 단위 | 128~512 페이지 | 삭제는 반드시 블록 단위 |
Die (다이) | 하나의 독립적인 메모리 칩 내부 구성 | 여러 블록 포함 | 병렬 처리 가능 |
컨트롤러 | 전체 데이터 흐름 관리 + 주소 변환 | USB 인터페이스 + FTL 포함 | 속도, 수명, 안정성에 큰 영향 |
플래시 메모리
- 전원을 꺼도 데이터가 사라지지 않은 비휘발성 저장장치
- EEPROM(전기적으로 지우고 다시 쓰는 메모리)을 발전시킨 형태로 블록 단위로 데이터를 지우고 페이지 단위를 저장
- NAND = 저장 / NOR = 실행
- Page = 읽기/쓰기 / Block = 삭제
- FTL = 주소 변환 + 수명 관리
- SLC > MLC > TLC > QLC (내구성 순)
- Wear Leveling, Trim, OP → 성능/수명 유지 기술
항목 | NAND Flash | NOR FLASH |
기능 중심 | 저장(대용량) 중심 | 실행(코드) 중심 |
구조 | 직렬 연결 (저장용 최적화) | 병렬 연결 (빠른 접근) |
읽기 속도 | 상대적으로 느림 | 빠름 (바로 실행 가능) |
쓰기/삭제 속도 | 빠름 | 느림 |
접근 방식 | 블록 단위 | 주소 기반 랜덤 접근 |
용도 | SSD, USB, SD카드 등 | BIOS, 펌웨어 등 |
구분 | 설명 |
Page | 플래시 메모리의 읽기/쓰기 단위 (보통 4KB) |
Block | 삭제 단위, 여러 Page로 구성 (보통 128~256개 페이지) |
구분 | 셀 당 저장 비트 | 내구성 | 속도 | 용도 |
SLC | 1비트 | 최고 (10만회↑) | 매우 빠름 | 산업용, 서버 |
MLC | 2비트 | 보통 | 보통 | 일반 SSD |
TLC | 3비트 | 낮음 | 느림 | 소비자용 SSD |
QLC | 4비트 | 매우 낮음 | 느림 | 대용량 저장 전용 |
- FFS(Flash File System)
FFS = 플래시 메모리 특화 파일 시스템
웨어 레벨링, GC, FTL 협력 필수 기술
종류: JFFS2 / YAFFS / F2FS / UBIFS
일반 FS(FAT, NTFS)는 덮어쓰기 전제 → 플래시에 부적합
인터페이스
- 두 시스템(또는 장치, 프로그램)이 서로 데이터를 주고받고 상호작용할 수 있도록 해주는 연결 지점 또는 통신 규약
구분 | 인터페이스 종류 | 설명 | 예시 |
---|---|---|---|
하드웨어 인터페이스 |
USB | 범용 직렬 버스, 주변기기 연결 | 키보드, 마우스, USB 메모리 |
SATA | 저장장치(HDD, SSD) 연결용 인터페이스 | SATA SSD, 하드디스크 | |
PCIe | 내부 고속 장치 연결을 위한 슬롯형 인터페이스 | 그래픽카드, NVMe SSD | |
HDMI | 디지털 영상 및 음성 전송 인터페이스 | 모니터, TV, 프로젝터 연결 | |
Ethernet | 유선 네트워크 통신용 인터페이스 | LAN 케이블, 공유기, NAS | |
소프트웨어 인터페이스 |
API | 프로그램과 OS/라이브러리 간 통신을 위한 명령어 집합 | Windows API, OpenAI API |
CLI | 텍스트 기반 명령어 입력 방식 | 터미널, CMD, Bash | |
GUI | 아이콘, 버튼 등 그래픽 기반 사용자 인터페이스 | Windows, macOS, Android | |
Driver Interface | OS와 하드웨어 장치 간의 소프트웨어 연결 | 프린터 드라이버, 그래픽카드 드라이버 | |
System Call | 사용자 프로그램이 커널 기능을 사용할 수 있게 하는 인터페이스 |
fork(), read(), open() 등 (Linux/UNIX) |
- SATA: 내부용 저장장치 기본 인터페이스 (SSD/HDD 연결)
- eSATA: 외장용 SATA, 빠르지만 전원은 따로
- SCSI/SAS: 서버급 고속, 다중 연결 저장장치용 고성능 인터페이스
RAID
- RAID(Redundant Array of Independent Disks) = 여러 개의 하드디스크를 하나처럼 묶어성능 향상 or 데이터 안전성을 확보하는 기술
- 여러 디스크에 동시에 읽고 쓰기 → 병렬 처리
- 일부 디스크 고장에도 복구 가능 (중복 저장)
- 다수의 디스크를 하나처럼 사용 가능
RAID 레벨 | 구성 방식 | 속도 | 안정성 | 용량 효율 | 최소 디스크 수 | 설명 |
---|---|---|---|---|---|---|
RAID 0 | 스트라이핑 | ★★★ ★★ |
✖ | 100% | 2개 | 속도 ↑, 백업 없음 |
RAID 1 | 미러링 | ★★ | ★★★ ★★ |
50% | 2개 | 복제 저장, 안정성↑ |
RAID 3 | 바이트 단위 스트라이핑 + 전용 패리티 디스크 | ★★★ | ★★★★ | 전체 - 1개 | 3개 | 패리티는 전용 디스크 하나에만 저장 연속적 데이터 처리에 유리 (예: 동영상) |
RAID 5 | 블록 단위 스트라이핑 + 분산 패리티 |
★★★ | ★★★★ | 전체 - 1개 | 3개 | 패리티를 모든 디스크에 분산 저장, 성능+안정성 균형 |
RAID 6 | 블록 스트라이핑 + 이중 패리티 |
★★ | ★★★ ★★ |
전체 - 2개 | 4개 | 2개까지 디스크 고장 허용, 매우 안정적 |
RAID 10 | RAID 1 + RAID 0 | ★★★★ | ★★★★ | 50% | 4개 | 미러링 + 스트라이핑 혼합, 속도+안정성 모두 우수 |
- 패리티 = 단순 오류 감지를 위한 1비트 체크. 복구는 안 됨
하드디스크 구조
구분 | 구성 요소 | 설명 | 주요 역할 |
---|---|---|---|
물리적 구조 | 플래터 (Platter) | 자기 물질이 코팅된 회전 디스크 | 데이터 저장 공간 제공 |
스핀들 (Spindle) | 플래터를 고속으로 회전시키는 축 | 읽기/쓰기 시 플래터 회전 | |
헤드 (Head) | 자기장을 이용해 데이터를 읽고 씀 | 실제 읽기/쓰기 수행 | |
암 (Arm) | 헤드를 원하는 트랙 위치로 이동 | 헤드의 위치 제어 | |
액추에이터 (Actuator) | 암을 정밀하게 조정하는 장치 | 정확한 위치 결정 및 이동 제어 | |
PCB (회로 기판) | HDD 제어 회로 및 인터페이스 담당 | SATA, IDE 등으로 컴퓨터와 연결 | |
논리적 구조 | 섹터 (Sector) | 데이터 저장의 최소 단위 (보통 512B or 4KB) | 기본 데이터 저장 블록 |
트랙 (Track) | 플래터 위의 원형 경로 | 동심원 형태로 섹터를 배치 | |
실린더 (Cylinder) | 플래터마다 동일 위치의 트랙 집합 | 헤드 이동 없이 접근 가능한 트랙 묶음 | |
클러스터 (Cluster) | 파일 시스템 상의 최소 할당 단위 (섹터 묶음) | 파일 저장/관리 단위 |
- 디스크 탐색
요소 | 설명 |
탐색 시간(Seek Time) | 헤드를 원하는 트랙으로 이동하는 데 걸리는 시간 |
회전 지연(Rotational Latency) | 섹터가 헤드 아래로 올 때까지 기다리는 시간 |
전송 시간(Transfer Time) | 데이터 전송 자체에 걸리는 시간 |
알고리즘 | 설명 | 특징 |
FCFS (First-Come, First-Served) | 요청 순서대로 처리 | 구현 쉬움, 비효율 가능성 큼 |
SSTF (Shortest Seek Time First) | 가장 가까운 요청 먼저 | 평균 응답 속도 좋음, 기아(starvation) 가능 |
SCAN (전형적 전철) | 한 방향 끝까지 갔다가 반대 방향 이동 | 디스크 엘리베이터 알고리즘 |
LOOK | SCAN과 유사하나, 요청 있는 곳까지만 이동 | 불필요한 끝 왕복 줄임 |
C-SCAN (Circular SCAN) | 한쪽 방향만 탐색 후 처음으로 되돌아감 | 요청 처리의 균형성↑ |
C-LOOK | LOOK + C-SCAN 방식 | 가장 효율적인 방식 중 하나 |
디스크 트랙 0~199 사이에서
현재 헤드 위치가 100이고
요청: 25, 40, 60, 130, 150, 180 이라고 가정할 때
FCFS: 요청 순서대로 (많이 이동함)
SSTF: 100 → 130 → 150 → 180 → 60 → 40 → 25
SCAN: 100 → 130 → 150 → 180 → (199) → 60 → 40 → 25
LOOK: 100 → 130 → 150 → 180 → (끝 안 감) → 60 → 40 → 25
C-SCAN: 100 → 130 → 150 → 180 → (199) → (0) → 25 → 40 → 60
- 예시: 평균 회전 지연 시간 계산
문제:
디스크 회전 속도가 7,200 RPM
일 때, 평균 회전 지연 시간은 얼마일까요?
풀이:
- 1분에 7,200번 회전 → 초당 회전수 =
7,200 ÷ 60 = 120 RPS
- 평균 회전 지연 시간 =
1 ÷ (2 × 120)
초 =1 ÷ 240
초 - 계산 결과:
0.00417 초
≒4.17ms
정답:
평균 회전 지연 시간은 약 4.17ms
디스크의 평균 회전 지연 시간은 1회전 시간의 절반평균 지연 시간(ms) = 60,000 ÷ (2 × RPM)
공식을 기억
추가 개념
- 버스 구조
데이터 버스: CPU ↔ 메모리 간 데이터 이동通로
주소 버스: 접근할 메모리 주소 지정 (버스 폭 = 주소 가능 크기)
제어 버스: 읽기/쓰기 신호, 클럭 등 제어 신호 전달
주소 버스 32비트 → 최대 2³² = 4GB 메모리 주소 가능
- 부동소수점 표현 (IEEE 754)
32비트 구조: 부호(1) + 지수(8) + 가수(23)
정규화 방식: 가수는 1.xxx 형태로 표현됨
실수 표현 시 정확도 손실 발생 가능
+0과 -0, 무한대(∞), NaN도 표현 가능
고정소수점은 소수점 고정 / 부동소수점은 이동 가능
- FAT vs NTFS (파일 시스템 비교)
항목 | FAT32 | NTFS |
최대 파일 크기 | 4GB 제한 | 이론상 16TB 이상 |
보안 | 없음 | 파일 단위 권한 제어 가능 |
저널링 | ❌ | ✔ (변경 이력 기록 가능) |
사용 예 | USB, SD카드 | Windows 시스템 디스크 |
- 클러스터 & 단편화
클러스터: OS가 파일을 저장하는 최소 단위 (여러 섹터 묶음)
내부 단편화: 파일보다 클러스터가 커서 남는 공간 낭비됨
외부 단편화: 파일이 디스크 여러 위치에 흩어짐
해결 방법: 조각 모음(Defragmentation)
클러스터 크기 클수록 내부 단편화 ↑ / 외부 단편화 ↓
'디지털포렌식' 카테고리의 다른 글
디지털포렌식 2급 필기 준비 - 3과목 (1) | 2025.04.22 |
---|---|
디지털포렌식 2급 필기 준비 - 2과목 (0) | 2025.04.16 |