메모리 계층 구조란 무엇인가?
컴퓨터 시스템에서 메모리는 단순히 하나의 저장 공간이 아닌, 여러 계층으로 구성된 복잡한 구조를 가지고 있습니다.
이러한 계층적 구조는 속도, 용량, 비용 간의 최적의 균형을 맞추기 위해 설계되었습니다.
메모리 계층 구조는 마치 피라미드와 같이 구성되어 있습니다.
피라미드의 꼭대기에는 매우 빠르지만 용량이 작고 비싼 메모리가 위치하며,
아래로 내려갈수록 점점 더 느리지만 용량이 크고 저렴한 메모리가 자리 잡고 있습니다.
메모리 월(Memory Wall) 문제
이러한 계층적 구조가 필요한 이유는 바로 '메모리 월(Memory Wall)' 문제 때문입니다.
CPU의 처리 속도는 무어의 법칙에 따라 기하급수적으로 증가해왔지만,
메인 메모리인 RAM의 속도는 그에 비해 상대적으로 천천히 향상되었습니다.
이로 인해 CPU와 메모리 사이의 성능 격차가 점점 커지게 되었고,
이를 해결하기 위한 방법으로 메모리 계층 구조가 등장하게 되었습니다.
참고 자료: 위키백과 - CPU 캐시와 나무위키 - 메모리 계층 구조에서
메모리 계층 구조의 기본 개념을 더 자세히 확인할 수 있습니다.
메모리 계층 구조의 구성 요소
메모리 계층 구조는 일반적으로 다음과 같은 구성 요소를 포함합니다:
- 레지스터(Register) - CPU 내부의 최고속 메모리
- 캐시 메모리(Cache Memory) - L1, L2, L3 캐시
- 주 메모리(Main Memory) - RAM
- 보조 메모리(Secondary Memory) - SSD, HDD
- 3차 저장소(Tertiary Storage) - 테이프, 광학 미디어
각각의 구성 요소는 서로 다른 특성을 가지고 있으며,
이를 이해하는 것은 효율적인 프로그래밍과 시스템 설계에 매우 중요합니다.
지역성의 원리 (Principle of Locality)
메모리 계층 구조가 효과적으로 작동하는 이유는 지역성의 원리 때문입니다:
- 시간적 지역성 (Temporal Locality): 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높습니다
- 공간적 지역성 (Spatial Locality): 참조된 데이터 주변의 데이터도 곧 참조될 가능성이 높습니다
레지스터(Register): 최고 속도의 메모리
레지스터는 메모리 계층 구조에서 가장 상위에 위치한 최고 속도의 메모리입니다.
CPU 내부에 직접 내장되어 있어 데이터에 접근하는 시간(액세스 타임)이 가장 짧습니다.
레지스터의 주요 특징
- 속도: 약 0.5~1 나노초(ns)의 접근 시간
- 용량: 일반적으로 각 레지스터가 32비트 또는 64비트, 총 개수는 CPU에 따라 다름(보통 수십 개)
- 비용: 매우 높음(바이트 당 가격)
- 휘발성: 전원이 꺼지면 데이터 손실
레지스터의 종류
- 데이터 레지스터(DR): 연산에 필요한 데이터를 임시 저장
- 주소 레지스터(AR): 메모리 주소를 저장
- 누산기(Accumulator): 산술 논리 연산의 결과를 저장
- 명령어 레지스터(IR): 현재 실행 중인 명령어를 저장
- 프로그램 카운터(PC): 다음에 실행할 명령어의 주소를 저장
코드로 보는 레지스터 활용 예제
; x86 어셈블리 예제
section .text
global _start
_start:
mov eax, 5 ; EAX 레지스터에 5를 저장
mov ebx, 10 ; EBX 레지스터에 10을 저장
add eax, ebx ; EAX = EAX + EBX (5 + 10)
; 이제 EAX에는 15가 저장되어 있음
위 예제에서 eax와 ebx는 x86 아키텍처의 레지스터로, 직접 CPU 내에서 데이터를 저장하고 연산을 수행합니다.
관련 정보: 위키백과 - 프로세서 레지스터에서 레지스터의 종류와 역할에 대해 더 자세히 알아볼 수 있습니다.
캐시 메모리(Cache Memory): 빠른 임시 저장소
캐시 메모리는 CPU와 주 메모리(RAM) 사이에 위치한 고속 메모리로,
자주 사용되는 데이터와 명령어를 임시로 저장하여 CPU의 데이터 접근 시간을 줄이는 역할을 합니다.
캐시의 계층 구조
캐시는 일반적으로 여러 레벨로 구성되어 있습니다:
- L1 캐시: CPU 코어에 가장 가까이 위치한 가장 빠른 캐시
- 속도: 약 0.9~1.3 나노초(ns)
- 용량: 약 32KB~64KB (코어 당)
- 특징: 종종 명령어 캐시(I-cache)와 데이터 캐시(D-cache)로 분리됨
- L2 캐시: L1보다 약간 느리지만 더 큰 용량을 제공
- 속도: 약 3~10 나노초(ns)
- 용량: 약 256KB~1MB (코어 당 또는 여러 코어 공유)
- L3 캐시: 여러 코어가 공유하는 더 큰 캐시
- 속도: 약 10~20 나노초(ns)
- 용량: 약 2MB~50MB
- 특징: 모든 CPU 코어 간에 공유되는 경우가 많음
캐시 작동 원리: 지역성의 원리
캐시 메모리는 '지역성의 원리(Principle of Locality)'를 기반으로 작동합니다:
- 시간적 지역성(Temporal Locality): 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높음
- 공간적 지역성(Spatial Locality): 참조된 데이터 주변의 데이터도 곧 참조될 가능성이 높음
캐시 히트와 캐시 미스
- 캐시 히트(Cache Hit): CPU가 요청한 데이터가 캐시에 있는 경우
- 캐시 미스(Cache Miss): CPU가 요청한 데이터가 캐시에 없어 주 메모리에서 가져와야 하는 경우
코드로 보는 캐시 최적화 예제
// 캐시 친화적인 코드 예제
#define N 1000
void cache_friendly() {
int matrix[N][N];
int sum = 0;
// 행 우선 순회 (캐시 친화적)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
sum += matrix[i][j];
}
}
}
void cache_unfriendly() {
int matrix[N][N];
int sum = 0;
// 열 우선 순회 (캐시 비친화적)
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
sum += matrix[i][j];
}
}
}
C언어에서 2차원 배열은 메모리에 행 우선 순서(row-major order)로 저장됩니다.
따라서 cache_friendly() 함수는 메모리를 순차적으로 접근하여 캐시의 공간적 지역성을 활용하지만,
cache_unfriendly() 함수는 메모리를 불연속적으로 접근하여 캐시 미스를 더 많이 발생시킵니다.
성능 분석 자료: 💵 캐시가 동작하는 아주 구체적인 원리에서
캐시의 동작 방식을 더 구체적으로 확인할 수 있습니다.
RAM(Random Access Memory): 주 메모리
RAM은 컴퓨터의 주 메모리로, CPU가 직접 접근할 수 있는 가장 큰 메모리 공간입니다.
프로그램이 실행되면 해당 프로그램의 코드와 데이터가 RAM에 로드됩니다.
RAM의 주요 특징
- 속도: 약 50~100 나노초(ns)의 접근 시간
- 용량: 현대 컴퓨터에서는 수 GB~수백 GB
- 비용: 레지스터나 캐시보다 저렴하지만 디스크보다는 비쌈
- 휘발성: 전원이 꺼지면 데이터 손실
RAM의 종류
- DRAM(Dynamic RAM)
- 정보를 콘덴서에 전하 형태로 저장
- 주기적인 리프레시 필요
- 더 저렴하고 용량이 큼
- 주로 주 메모리로 사용
- SRAM(Static RAM)
- 플립플롭 회로를 사용하여 정보 저장
- 리프레시 불필요
- DRAM보다 빠르지만 비쌈
- 주로 캐시 메모리로 사용
메모리 대역폭의 중요성
현대의 고성능 시스템에서는 메모리 대역폭이 성능에 큰 영향을 미칩니다.
특히 DDR5 SDRAM과 같은 최신 메모리 기술은 더 높은 대역폭을 제공하여 시스템 성능을 향상시킵니다.
코드로 보는 RAM 활용 예제
#include <stdlib.h>
#include <string.h>
int main() {
// 동적으로 RAM에 메모리 할당 (힙 영역)
char* buffer = (char*)malloc(1024 * 1024); // 1MB 할당
// RAM에 데이터 쓰기
memset(buffer, 'A', 1024 * 1024);
// 작업 수행...
// 메모리 해제
free(buffer);
return 0;
}
위 예제에서 malloc 함수는 RAM의 힙(Heap) 영역에 1MB의 메모리를 동적으로 할당하고,
memset 함수는 해당 메모리에 데이터를 쓰는 작업을 수행합니다.
디스크 저장소: SSD와 HDD
디스크 저장소는 메모리 계층 구조에서 가장 아래쪽에 위치한 영구 저장 장치입니다.
전원이 꺼져도 데이터가 유지되며(비휘발성), 대용량의 데이터를 저장할 수 있습니다.
디스크 저장소의 주요 특징
- 속도: HDD는 밀리초(ms) 단위, SSD는 마이크로초(μs) 단위의 접근 시간
- 용량: 수백 GB에서 수십 TB까지 다양
- 비용: RAM보다 훨씬 저렴함(바이트 당 가격)
- 비휘발성: 전원이 꺼져도 데이터 유지
디스크 저장소의 종류
- HDD(Hard Disk Drive)
- 자기 디스크를 물리적으로 회전시켜 데이터 읽고 쓰기
- 기계적 부품 사용으로 SSD보다 느림
- 용량 당 가격이 저렴
- 물리적 충격에 약함
- SSD(Solid State Drive)
- NAND 플래시 메모리 사용
- 기계적 부품 없이 전자적으로 데이터 접근
- HDD보다 빠르고 전력 효율적
- 용량 당 가격이 HDD보다 비쌈
NVMe SSD의 등장
NVMe(Non-Volatile Memory Express) SSD는 PCIe 인터페이스를 통해 직접 CPU와 통신하여
기존 SATA SSD보다 훨씬 빠른 성능을 제공합니다.
코드로 보는 디스크 저장소 활용 예제
import java.io.*;
public class DiskExample {
public static void main(String[] args) {
try {
// 파일에 데이터 쓰기 (디스크 접근)
FileOutputStream fos = new FileOutputStream("data.bin");
for (int i = 0; i < 1024 * 1024; i++) {
fos.write(65); // 'A' 문자를 1MB만큼 쓰기
}
fos.close();
// 파일에서 데이터 읽기 (디스크 접근)
FileInputStream fis = new FileInputStream("data.bin");
byte[] buffer = new byte[4096]; // 일반적인 페이지 크기
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
// 읽은 데이터 처리...
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 Java 예제는 디스크에 파일을 쓰고 읽는 작업을 보여줍니다. 이러한 작업은 RAM 접근보다 훨씬 느리기 때문에, 일반적으로 운영체제는 디스크 I/O 작업을 최적화하기 위해 버퍼링을 사용합니다.
메모리 계층 구조의 성능 비교
각 메모리 계층 간의 성능 차이를 이해하는 것은 효율적인 프로그램 작성에 매우 중요합니다. 다음은 대략적인 성능 비교입니다:
메모리 유형 | 접근 시간 | 상대적 속도 비교 | 용량 범위 |
---|---|---|---|
레지스터 | 0.5~1ns | 가장 빠름 (1x) | 수십 개 × 32/64비트 |
L1 캐시 | 0.9~1.3ns | 레지스터의 약 1~2배 느림 | 32KB~64KB |
L2 캐시 | 3~10ns | 레지스터의 약 3~10배 느림 | 256KB~1MB |
L3 캐시 | 10~20ns | 레지스터의 약 10~20배 느림 | 2MB~50MB |
RAM | 50~100ns | 레지스터의 약 50~100배 느림 | 수GB~수백GB |
SSD | 25~50μs | 레지스터의 약 25,000~50,000배 느림 | 수백GB~수TB |
HDD | 5~10ms | 레지스터의 약 5,000,000~10,000,000배 느림 | 수TB~수십TB |
성능 격차의 실제 영향
이러한 성능 차이는 알고리즘과 데이터 구조를 설계할 때 중요한 고려 사항이 됩니다.
예를 들어, 메모리 계층 구조를 고려하지 않은 알고리즘은 이론적으로는 효율적일지 모르지만,
실제 하드웨어에서는 많은 캐시 미스를 발생시켜 성능이 크게 저하될 수 있습니다.
아이케아 효과 (Amdahl's Law)와 메모리
아달의 법칙에 따르면, 시스템의 전체 성능 향상은 개선되지 않은 부분에 의해 제한됩니다.
메모리 계층 구조는 이러한 병목 현상을 완화하는 중요한 역할을 합니다.
메모리 계층 구조를 고려한 프로그래밍 최적화 기법
메모리 계층 구조의 이해를 바탕으로, 다음과 같은 최적화 기법을 적용할 수 있습니다:
1. 데이터 지역성 활용
// 나쁜 예 (캐시 비친화적)
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
matrix[i][j] = i + j; // 열 우선 접근
}
}
// 좋은 예 (캐시 친화적)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
matrix[i][j] = i + j; // 행 우선 접근
}
}
2. 루프 타일링 (Loop Tiling)
// 나쁜 예 (캐시 비친화적)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < N; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
// 좋은 예 (캐시 친화적)
#define BLOCK_SIZE 32
for (int i = 0; i < N; i += BLOCK_SIZE) {
for (int j = 0; j < N; j += BLOCK_SIZE) {
for (int k = 0; k < N; k += BLOCK_SIZE) {
// 블록 단위로 처리
for (int ii = i; ii < i + BLOCK_SIZE && ii < N; ii++) {
for (int jj = j; jj < j + BLOCK_SIZE && jj < N; jj++) {
for (int kk = k; kk < k + BLOCK_SIZE && kk < N; kk++) {
C[ii][jj] += A[ii][kk] * B[kk][jj];
}
}
}
}
}
}
3. 메모리 프리페칭 (Prefetching)
// 컴파일러 지시어를 사용한 프리페칭
for (int i = 0; i < N; i++) {
__builtin_prefetch(&array[i + 16], 0, 1); // 미리 데이터를 캐시로 가져오기
process(array[i]);
}
4. 데이터 구조 패딩 (Structure Padding)
// 나쁜 예 (캐시 라인 경계를 자주 넘어감)
struct BadStruct {
char a; // 1바이트
double b; // 8바이트
char c; // 1바이트
double d; // 8바이트
};
// 좋은 예 (관련 데이터를 함께 배치)
struct GoodStruct {
char a; // 1바이트
char c; // 1바이트
// 패딩 6바이트
double b; // 8바이트
double d; // 8바이트
};
5. 벡터화 최적화
현대 CPU들은 SIMD(Single Instruction, Multiple Data) 명령어를 지원하여
하나의 명령어로 여러 데이터를 동시에 처리할 수 있습니다.
// 벡터화를 위한 코드 예제
#include <immintrin.h>
void vectorized_add(float* a, float* b, float* c, int n) {
for (int i = 0; i < n; i += 8) {
__m256 va = _mm256_load_ps(&a[i]);
__m256 vb = _mm256_load_ps(&b[i]);
__m256 vc = _mm256_add_ps(va, vb);
_mm256_store_ps(&c[i], vc);
}
}
최적화 가이드: Intel Developer Zone에서 더 많은 최적화 기법을 확인할 수 있습니다.
가상 메모리와 페이징
현대 운영체제는 가상 메모리 시스템을 통해 물리적 메모리보다 더 큰 주소 공간을 사용할 수 있게 해줍니다.
이 시스템은 페이징(Paging)이라는 기법을 사용하여 가상 주소를 물리적 주소로 변환합니다.
가상 메모리의 주요 개념
- 페이지(Page): 가상 메모리를 고정 크기의 블록으로 나눈 것 (일반적으로 4KB)
- 페이지 테이블(Page Table): 가상 페이지와 물리적 페이지 간의 매핑 정보를 저장
- 페이지 폴트(Page Fault): 접근하려는 페이지가 물리적 메모리에 없을 때 발생하는 예외
메모리 관리 단위 (MMU)
MMU(Memory Management Unit)는 가상 주소를 물리적 주소로 변환하는 하드웨어 구성 요소입니다.
TLB(Translation Lookaside Buffer)
TLB는 페이지 테이블의 일부를 캐싱하여 가상 주소 변환 속도를 높이는 특수한 캐시입니다.
가상 주소 -> [TLB 확인] -> TLB 히트 -> 물리적 주소 변환 완료
|
v
TLB 미스
|
v
[페이지 테이블 접근] -> 물리적 주소 변환
NUMA (Non-Uniform Memory Access)
현대의 멀티프로세서 시스템에서는 NUMA 아키텍처를 사용하여 각 CPU가 자신에게 가까운 메모리에 더 빠르게 접근할 수 있도록 설계되어 있습니다.
메모리 계층 구조와 성능 측정
메모리 계층 구조의 성능을 측정하는 몇 가지 중요한 지표가 있습니다:
1. 평균 메모리 접근 시간 (Average Memory Access Time)
AMAT = Hit Time + Miss Rate × Miss Penalty
여기서:
- Hit Time: 캐시 히트 시 접근 시간
- Miss Rate: 캐시 미스 비율
- Miss Penalty: 캐시 미스 시 추가 지연 시간
2. 대역폭 (Bandwidth)
단위 시간당 전송할 수 있는 데이터의 양을 측정합니다.
대역폭 = 데이터 크기 / 전송 시간 (e.g., GB/s)
3. 지연 시간 (Latency)
요청에서 응답까지의 시간을 측정합니다.
지연 시간 = 응답 시작 시간 - 요청 시작 시간
4. 캐시 적중률 (Cache Hit Ratio)
캐시 적중률 = 캐시 히트 수 / 전체 메모리 접근 수
일반적으로 L1 캐시는 95% 이상, L2 캐시는 85% 이상의 적중률을 목표로 합니다.
성능 벤치마킹 도구
- STREAM Benchmark: 메모리 대역폭 측정
- LMbench: 메모리 지연 시간 측정
- Intel MLC (Memory Latency Checker): 종합적인 메모리 성능 분석
성능 분석 참고: Computer Architecture: A Quantitative Approach - 메모리 계층 구조 성능 분석의 표준 교재
최신 메모리 기술 동향
메모리 기술은 끊임없이 발전하고 있으며, 몇 가지 주목할 만한 최신 동향은 다음과 같습니다:
1. 비휘발성 메모리 (Non-Volatile Memory)
- Intel Optane (3D XPoint): DRAM과 NAND 플래시 사이의 성능 특성을 가진 비휘발성 메모리
- NVDIMM(Non-Volatile DIMM): 전원이 꺼져도 데이터를 유지하는 메모리 모듈
- Storage Class Memory (SCM): 메모리와 스토리지의 경계를 흐리는 새로운 범주
2. 통합 메모리 아키텍처
- Apple M1/M2/M3 통합 메모리: CPU, GPU 및 다른 프로세서가 단일 메모리 풀을 공유하는 아키텍처
- AMD 인피니티 패브릭(Infinity Fabric): CPU와 GPU 간의 고속 상호 연결을 제공
- NVIDIA Grace CPU: ARM 기반 CPU와 GPU 간의 고속 메모리 공유
3. HBM(High Bandwidth Memory)
3D 적층 기술을 사용하여 메모리 칩을 수직으로 쌓아 대역폭을 크게 증가시킨 메모리 기술입니다.
- HBM3: 최대 819 GB/s의 대역폭 제공
- 주로 고성능 GPU와 AI 가속기에 사용
4. DDR5와 차세대 메모리
- DDR5 SDRAM: DDR4 대비 2배 향상된 대역폭과 향상된 전력 효율성
- LPDDR5X: 모바일 기기용 저전력 고성능 메모리
- DDR6: 2025년 이후 상용화 예정인 차세대 메모리
5. 컴퓨팅 인 메모리 (Computing-in-Memory)
- Processing-in-Memory (PIM): 메모리 내에서 직접 연산을 수행하는 기술
- Near-Data Computing: 데이터 이동을 최소화하는 컴퓨팅 패러다임
6. 양자 메모리와 미래 기술
- 양자 메모리: 양자 컴퓨팅을 위한 특수 메모리 기술
- DNA 저장소: 초고밀도 데이터 저장을 위한 생물학적 저장 매체
- 광학 메모리: 빛을 이용한 초고속 메모리 기술
최신 기술 동향: IEEE Computer Society와 ACM Digital Library에서 최신 메모리 기술 연구를 확인할 수 있습니다.
AI와 머신러닝에서의 메모리 최적화
인공지능과 머신러닝 워크로드는 메모리 시스템에 새로운 도전과제를 제시합니다:
1. 대용량 모델과 메모리 요구사항
- Transformer 모델: GPT, BERT 등 대규모 언어 모델의 메모리 요구사항 증가
- 메모리 효율적 아키텍처: MoE(Mixture of Experts), LoRA 등의 기법
2. GPU 메모리 계층 구조
- HBM 메모리: 고대역폭 메모리로 AI 가속기 성능 향상
- GPU 캐시 최적화: Tensor Core와 연계된 캐시 활용
3. 분산 메모리 시스템
- 모델 병렬화: 대용량 모델을 여러 GPU에 분산
- 메모리 오프로딩: CPU 메모리와 스토리지 활용
AI 메모리 최적화: NVIDIA Developer에서 GPU 메모리 최적화 가이드를 확인할 수 있습니다.
결론: 메모리 계층 구조의 중요성
메모리 계층 구조는 현대 컴퓨터 시스템의 성능에 결정적인 영향을 미칩니다.
각 계층의 특성과 작동 원리를 이해하면 다음과 같은 이점이 있습니다:
1. 개발자 관점에서의 이점
- 효율적인 알고리즘 설계: 메모리 접근 패턴을 최적화하여 캐시 효율성을 높일 수 있습니다
- 성능 병목 현상 진단: 시스템 성능 문제의 원인을 더 정확히 파악할 수 있습니다
- 하드웨어 요구 사항 예측: 애플리케이션의 메모리 요구 사항을 더 정확히 예측할 수 있습니다
2. 시스템 아키텍트 관점에서의 이점
- 비용 효율적인 시스템 설계: 워크로드에 맞는 적절한 메모리 구성 선택
- 성능 최적화: 병목 지점 식별 및 해결 방안 수립
- 미래 확장성 고려: 기술 발전 방향을 고려한 시스템 설계
3. 미래 전망
메모리 기술의 발전은 다음과 같은 방향으로 진행될 것으로 예상됩니다:
- 메모리와 스토리지의 경계 모호화: 비휘발성 메모리 기술 발전
- AI 특화 메모리 아키텍처: 인공지능 워크로드에 최적화된 메모리 시스템
- 에너지 효율성 향상: 저전력 고성능 메모리 기술 개발
- 3D 적층 기술 발전: 더 높은 집적도와 성능 달성
핵심 메시지
개발자로서, 메모리 계층 구조를 이해하고 이를 고려한 코드를 작성하는 것은 최적화된 소프트웨어를 개발하는 데 필수적인 요소입니다.
이러한 지식은 단순한 알고리즘 복잡도 분석을 넘어서, 실제 하드웨어에서의 성능을 예측하고 최적화하는 데 큰 도움이 됩니다.
메모리 계층 구조는 복잡하지만, 그 원리를 이해하고 적용함으로써 더 효율적이고 빠른 소프트웨어를 개발할 수 있습니다.
앞으로도 계속해서 발전하는 메모리 기술을 주시하며, 새로운 최적화 기법을 학습하고 적용하는 것이 중요할 것입니다.
참고 자료 및 추가 학습
핵심 참고 자료
- 학술 자료
- 기술 분석 자료
- 공식 기술 문서
- 성능 최적화 가이드
추천 도서
- Computer Architecture: A Quantitative Approach - John L. Hennessy, David A. Patterson
- Computer Systems: A Programmer's Perspective - Randal E. Bryant, David R. O'Hallaron
- Memory Systems: Cache, DRAM, Disk - Bruce Jacob, Spencer Ng, David Wang
온라인 강의 및 튜토리얼
- Coursera - Computer Architecture
- edX - Introduction to Computer Science and Programming
- MIT OpenCourseWare - Computer System Engineering
이 글이 메모리 계층 구조에 대한 이해를 높이는 데 도움이 되기를 바랍니다.
더 자세한 내용은 위 참고 자료들을 통해 학습하시기 바랍니다.
'컴퓨터 과학(CS)' 카테고리의 다른 글
OS 스케줄링 알고리즘 종류 및 작동 방식 완벽 가이드 (0) | 2025.05.23 |
---|---|
동시성과 병렬성의 차이 – 예제 코드와 면접 답변 포함 (0) | 2025.05.23 |
해시(Hash) 함수와 충돌 해결 방법 – CS 면접 대비 실전 예제 (2) | 2025.05.18 |
면접에서 자주 나오는 동기화 이슈 – 스레드 안전성과 자바 코드로 설명하기 (4) | 2025.05.13 |
TCP vs UDP - 실무 예제 기반 차이 완벽 설명 (면접 답변 예시 포함) (1) | 2025.05.12 |