보조기억장치 - 주기억장치 - 캐시 - 레지스터
| 메모리 | 속도 | 용량 | 예시 | 특징 |
|---|---|---|---|---|
| 보조기억장치 | 느림 | 많음 | HDD, SDD | 비휘발성 |
| 주기억장치 | 보통 | 보통 | RAM | 휘발성 |
| 캐시 | 빠름 | 적음 | L1, L2, L3캐시 | 휘발성 |
| 레지스터 | 가장 빠름 | 가장 적음 | CPU 안의 작은 메모리 | 휘발성 |
데이터를 미리 복사해 놓는 임시 저장소.
빠른 장치와 느린 장치의 속도 차이에 따른 병목 현상을 줄이기 위한 메모리.
캐싱 계층 - 메모리와 CPU 속도 차이가 매우 크므로 속도 차이를 해결하기 위해 존재
지역성의 원리 - 캐시 설정 시 자주 사용하는 데이터를 기반으로 설정하는 원리.
시간 지역성: 최근 사용한 데이터에 다시 접근하려는 특성
ex) for(i = 0; ~ ) 포문에서 i에 계속해서 접근하는 경우
공간 지역성: 최근 접근한 데이터를 이루는 공간이나 그 가까운 공간에 접근하는 특성
ex) 배열 순회 포문에서 배열에 연속적으로 접근
캐시히트 - 캐시에서 원하는 데이터를 찾은 경우
캐시미스 - 해당 데이터가 캐시에 없을 경우 (주 메모리에서 찾아옴)
캐시매핑 - CPU 레지스터와 RAM 간에 데이터 주고받을 때 캐시가 히트되기 위해 매핑하는 방법. 레지스터는 메모리에 비해 매우 작으므로 매핑이 중요함.
직접 매핑: 메모리 1~100, 캐시 1~10이면 1: 1~10, 2: 1~20 처럼 직접 매핑. 처리가 빠르나 충돌이 잦음.
연관 매핑: 순서를 일치시키지 않고 매핑. 충돌이 적지만 탐색 시간이 길다.
집합 연관 매핑: 위 두 방법을 합한 것. 순서는 일치시키지만 집합을 두어 저장.
웹 브라우저의 캐시
실제 사용 가능한 메모리를 추상화하여 사용자에게 무제한의 메모리를 가진 것처럼 보이도록 함.
실제 주소(physical address)와 가상 주소(logical address)를 MMU를 통해 매핑하고 페이지 테이블로 관리하여 사용함. 이 때 TLB(메모리와 CPU 사이 일종의 캐시)를 사용하여 성능 향상.
스와핑 - 가상 메모리에는 존재하지만 RAM에는 없는 데이터나 코드에 접근할 경우 Page fault 발생. 이를 방지하기 위해 사용하지 않는 영역을 하드디스크로 옮기고 필요할 때 RAM으로 불러오고 반복하며 효과적으로 관리하는 방법.
페이지 폴트 - 프로세스 주소 공간에는 존재하지만 RAM에는 없는 데이터에 접근하면 발생.
메모리의 페이지 폴트율이 높은 것 - 심각한 성능 저하
메모리에 너무 많은 프로세스 올라감 - 스와핑 자주 발생 - CPU 이용률 저하 - 더 많은 프로세스 올림 악순환.
해결 방법: 메모리 크기를 늘려 스와핑을 줄임. HDD를 SDD로 바꾸어도 좋음.
+) 내부 단편화: 메모리 나눈 크기보다 프로그램 작아 들어가지 못함
ex)100MB 공간에 각각 10MB, 20MB, 30MB, 40MB 프로세스가 존재. 30MB 프로세스 끝난 후 그자리에 20MB 프로세스가 들어가고, 10MB의 작은 공간이 남음 (적은 크기의 잔여 메모리 발생)
추가) 페이징 기법을 사용할 경우 내부 단편화의 비중이 커진다.
(페이지 1024byte인데 프로세스가 512byte를 요구하면 512byte만큼 내부 단편화)
+) 외부 단편화: 메모리 나눈 크기보다 프로그램이 커서 들어가지 못함.
ex) 100MB 공간에 10MB, 20MB, 30MB, 40MB 프로세스가 존재하다 20, 40 프로세스가 종료됨. 다음 50MB 프로세스가 들어가려 하지만 60MB 공간이 남았음에도 불구하고 순차적이어서 들어가지 못함.
페이지 교체 알고리즘