보조기억장치는 메모리의 휘발성을 보완하는 동시에, 메모리보다 큰 저장 공간을 제공
데이터의 안전성과 성능을 확보하기 위해 여러 개의 독립적인 보조기억장치를 하나의 저장장치처럼 구성하는 기술
현대에 대중적으로 사용되는 보조기억장치는 하드디스크(HDD)와 플래시 메모리 기반 저장장치(SSD)로 크게 나뉨
하드디스크 (Hard Disk Drive, HDD)
- 자기적인 방식으로 데이터를 읽고 쓰는 저장장치
- 주요 구성 요소:
플래시 메모리 (Flash Memory)
- 전기적인 방식으로 데이터를 읽고 쓰는 반도체 기반 저장장치
- 대표적인 플래시 메모리 기반 저장장치:
보조기억장치의 역할
- 데이터 안전 보관: 전원이 꺼져도 데이터를 안전하게 유지
- 데이터 전달 성능: CPU가 필요로 하는 정보를 메모리로 빠르게 전달
1️⃣ RAID0
스트라입: 분산되어 저장된 데이터
스트라이핑: 분산하여 저장하는 동작
2️⃣ RAID1
3️⃣ RAID4
패리티(Parities): 오류를 검출할 수 있는 정보
4️⃣ RAID5
5️⃣ RAID6
RAID 레벨은 각기 다른 장단점을 가지며, 최적의 RAID 레벨은 사용자가 성능, 안전성, 저장 공간 중 어떤 요소를 우선시하느냐에 따라 달라질 수 있음
Nested RADI: 여러 RAID 레벨을 혼합한 방식
보조기억장치를 포함한 다양한 입출력 장치들이 컴퓨터 내부와 정보를 주고받는 방식을 의미
1️⃣ 장치 컨트롤러(Device Controller)
장치 컨트롤러에는 RAM과 같은 저장 장치가 포함된 경우가 많음
CPU와의 데이터 교환 과정에서 중간 데이터를 저장
작업 도중 장치를 안전하게 제거하지 않으면 데이터 문제가 발생할 수 있음
2️⃣ 장치 드라이버(Device Driver)
프로그램 입출력은 CPU가 명령어를 통해 입출력 작업을 수행하는 방식
CPU는 이러한 입출력 명령어를 실행하여 장치 컨트롤러와 상호작용하며 입출력 작업을 수행

다중 인터럽트란 키보드, 마우스, 모니터, 스피커 등 여러 입출력 장치에서 동시에 인터럽트 요청이 발생하는 상황을 의미
CPU는 이러한 다중 인터럽트를 효율적으로 처리해야 함

하지만 모든 인터럽트가 위 그림과 같이 처리되지 않음
1️⃣ 순차적 처리
2️⃣ 우선순위 기반 처리

CPU는 플래그 레지스터 속 인터럽트 비트가 활성화되어 있는 경우, 혹은 인터럽트 비트를 비활성화해도 무시할 수 없는 인터럽트인 NMI가 발생한 경우, 이렇게 우선순위가 높은 인터럽트 부터 먼저 처리하게 됨
CPU와 장치 컨트롤러 사이에서 우선순위를 판별하고, 처리할 인터럽트를 CPU에 전달하는 하드웨어 장치
> 무시할 수 없는 인터럽트(NMI)는 PIC에서 판별하지 않음일반적으로 PIC는 많은 하드웨어 인터럽트를 관리하기 위해 2개 이상의 계층으로 구성

DMA(Direct Memory Access)
- 직접 메모리에 접근할 수 있는 입출력 기능
- DMA는 CPU를 거치지 않고, 입출력 장치와 메모리가 직접 데이터를 주고받을 수 있는 방식이다.
구조
- DMA를 위해 DMA 컨트롤러라는 하드웨어가 필요
- DMA 컨트롤러는 시스템 버스에 연결되고, 입출력 장치의 장치 컨트롤러는 입출력 버스를 통해 DMA 컨트롤러와 연결
1️⃣ CPU가 DMA 컨트롤러에게 입출력장치의 주소, 수행할 연산, 연산할 메모리 주소 등의 정보와 함께 입출력 작업을 명령
2️⃣ DMA 컨트롤러가 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행. 이 때 DMA 컨트롤러는 필요한 경우 메모리에 직접 접근하여 정보를 읽거나 씀. 입출력장치와 메모리 사이에 주고 받을 데이터가 CPU를 거치지 않음
3️⃣ DMA 컨트롤러는 입출력 작업이 끝나면 CPU에게 인터럽트를 걸어 작업이 끝났음을 알림
공용 자원인 시스템 버스의 특징
- 시스템 버스는 공용 자원이므로 동시에 여러 장치가 사용할 수 없음
- DMA 컨트롤러와 CPU는 시스템 버스를 번갈아 사용해야 함
PCI 버스의 발전된 형태로, 현대에 메인보드에서 가장 널리 사용되는 입출력 버스
PCIe 성능 관련 주요 개념
1️⃣ PCIe 버전
PCIe는 지속적으로 발전하고 있으며, 버전에 따라 지원되는 최대 속도가 다름
주요 버전과 한 레인당 최대 속도:

2️⃣ PCIe 레인 (Lane)
레인(Lane): PCIe 버스를 통해 데이터를 송수신하는 단위
레인의 수가 많아질수록 한 번에 처리할 수 있는 데이터 양이 증가
예:
PCIe 4.0 x1 → 1 레인 사용 (1,969 MB/s)
PCIe 4.0 x4 → 4 레인 사용 (1,969 MB/s × 4 = 7,876 MB/s)
GPU (Graphic Processing Unit)
그래픽 처리 장치로로 화면에 그림을 그리는 등 대량의 그래픽 연산을 위한 장치
1️⃣ 다수의 코어로 병렬 처리
2️⃣ 고성능 연산 처리
3️⃣ GPU는 CPU를 대체하지 않음
CUDA (Compute Unified Device Architecture):
엔비디아(NVIDIA)가 개발한 GPU 프로그래밍 모델
호스트 코드(CPU 실행 코드)와 디바이스 코드(GPU 실행 코드)로 구성
프로그래밍 언어를 통해 GPU의 병렬 연산 작업을 쉽게 구현 가능
CUDA 프로그램 예제:
#include <stdio.h>
__global__ void cuda_hello() {
printf("Hello World from GPU\n"); // GPU가 실행하는 코드
}
int main() {
cuda_hello<<<1, 1>>>(); // GPU로 디바이스 코드 실행 명령
cudaDeviceSynchronize(); // CPU가 GPU 작업 완료를 기다림
return 0;
}
GPU는 대량의 단순 연산을 빠르게 처리하며, 병렬 처리에 최적화된 장치
GPU: 단순 연산 병렬 처리
CPU: 복잡한 명령어와 시스템 관리
참고: 북스터디 - 이것이 취업을 위한 컴퓨터 과학이다 (Chapter 2-5)