램 : 휘발성 저장장치(volatile memory)
- 실행할 프로그램 저장
메인메모리, RAM - random access memory(임의 접근 저장장치)
임의 접근 (random access) 방식
: 순차적 접근 할 필요 없이 임의의 위치에 곧바로 접근
램 종류
DRAM(Dynamic RAM)
SRAM(Static RAM)
SDRAM(Synchronous Dynamic RAM)
DDR SDRAM(Double Data Rate SDRAM)
DRAM: 소비 전력이 낮고 집적도가 높음(소멸을 막기 위해 일정 주기로 데이터 재활성화)
SRAM: DRAM보다 속도는 빠르지만 소비 전력이 크고, 가격이 비싸며 집적도가 낮다
(속도가 빨라야 하는 저장장치-캐시메모리 등에서 사용)
SDRAM : DRAM의 발전 형태(클럭 신호와 동기화된 형태의 DRAM)
- 클럭 타이밍에 맞춰 CPU와 정보 주고받기 가능
DDR SDRAM: 대역폭을 넓혀 속도를 빠르게 만든 SDRAM
---
메모리에 bite를 밀어 넣는 순서 - 빅 엔디안 / 리틀 엔디안
- 메모리는 데이터를 워드 단위 (보통 4bite, 8bite) 단위로 받아들인다
- 해당 데이터를 받아서, 여러 주소에 걸쳐 저장
big endian : 낮은 번지의 주소에 '상위 바이트'부터 저장하는 방식
- 일반적으로 숫자 체계를 읽고 쓰는 순서와 동일해서,
값을 직접 읽을때나 디버깅할 때 편리하다
little endian : 낮은 번지의 주소에 '하위 바이트'부터 저장하는 방식
- 메모리 값을 직접 읽고 쓰기엔 불편하지만, 수치 계산이 편리하다
CPU는 데이터에 접근할 때 캐시메모리를 우선 참조
캐시메모리 : cpu 연산 속도와 메모리 접근 속도의 차이를 줄이기 위해 탄생한 '보조 저장 장치'
(CPU와 메모리 사이에 위치한 SRAM 기반 저장장치)
캐시 적중률 : 캐시가 히트되는 비율
(캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
- 범용적으로 사용되는 컴퓨터의 캐시 적중률은 대략 85~95% 이상
*참조 지역성의 원리
- 시간 지역성 : CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 성향이 있음 (EX. 변수)
- 공간 지역성 : 접근한 메모리 공간 근처에 접근하려는 경향 (EX. 변수)
[예시 - 공간 지역성을 고려한 js 코드와 그렇지 않은 js 코드]
const size = 20000;
// 2차원 배열 생성 (20,000 x 20,000)
const matrix = Array.from({ length: size }, () => Array(size).fill(0));
// 공간 지역성을 고려한 JS 코드 ([i][j])
for (let i = 0; i < size; i++) {
for (let j = 0; j < size; j++) {
matrix[i][j] = 1; // 행 고정, 열 순차 접근
}
}
// 공간 지역성을 고려하지 않은 JS 코드 ([j][i])
for (let i = 0; i < size; i++) {
for (let j = 0; j < size; j++) {
matrix[j][i] = 1; // 열 고정, 행 순차 접근
}
}
캐시 메모리의 쓰기 정책과 일관성
캐시 메모리에 데이터를 쓰는 경우
: 캐시 메모리에 새롭게 쓰인 데이터와 메모리 상 데이터가 일관성을 유지해야함
캐시 메모리와 메모리 간 불일치 방지
1. 즉시 쓰기 : 캐시 메모리와 메모리에 동시에 쓰는 방법
- 장점 : 메모리를 항상 최신 상태로 유지, 캐시 메모리와 메모리 간 일관성 깨지는 상황 방지
- 단점 : 매번 메모리를 참조해야해서 성능상 불이익
2. 지연 쓰기 : 캐시 메모리에 값을 써 두었다가, 후에 수정된 데이터를 한 번에 메모리에 반영
- 장점 : 메모리 접근 횟수가 줄어들어 즉시 쓰기 방식보다 속도가 빠름
- 단점 : 메모리와 캐시 메모리 간 인관성이 깨질 수 있음(위험성)
캐싱을 한다는 것
- 빠른 성능을 보장하지만 언제나 캐시 데이터와 원본 데이터 간 불일치와 일관성을 고려해야한다
'CS' 카테고리의 다른 글
운영체제의 큰 그림 (1) | 2025.04.27 |
---|---|
보조기억장치, 입출력장치 (0) | 2025.04.21 |
CPU - 성능 개선 (0) | 2025.04.06 |
CPU-인터럽트 (0) | 2025.04.02 |
CPU - 레지스터 (0) | 2025.03.25 |