메모리 - 메모리 계층 #23
jcrescent61
started this conversation in
컴구&운체
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
메모리 계층
CPU는 그저 '메모리'에 올라와 있는 프로그램의 명령어들을 실행할 뿐이다.
메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성되어있다.
L1, L2 캐시가 뭔데?
L1 캐시 (Level 1 Cache)
위치: CPU 코어 내부에 가장 가까운 위치에 있습니다.
속도: 가장 빠른 캐시로, CPU 클럭 속도와 거의 동일한 속도로 동작합니다.
용량: 매우 작습니다. 보통 몇 KB에서 수십 KB 수준입니다.
분류: L1 캐시는 일반적으로 두 부분으로 나뉩니다:
L1 명령어 캐시 (Instruction Cache): CPU가 실행할 명령어를 저장합니다.
L1 데이터 캐시 (Data Cache): 연산에 필요한 데이터를 저장합니다.
L2 캐시 (Level 2 Cache)
위치: CPU 코어 내부에 있지만 L1 캐시보다는 약간 멀리 위치해 있습니다.
속도: L1 캐시보다 느리지만 여전히 매우 빠릅니다.
용량: L1 캐시보다 더 큽니다. 보통 수백 KB에서 몇 MB까지 존재합니다.
역할: L1 캐시에 없는 데이터를 CPU가 빠르게 찾을 수 있도록 보조하는 역할을 합니다.
요약
L1 캐시: 가장 빠르고, 작으며 CPU와 가장 가까운 캐시.
L2 캐시: L1보다 느리지만 용량이 크고, L1을 보조하는 역할.
이 외에도 더 큰 L3 캐시가 존재하는 경우도 있습니다. L3 캐시는 여러 CPU 코어가 공유할 수 있으며, L2 캐시보다 느리지만 더 큰 용량을 제공합니다.
캐시의 목적은 CPU가 메인 메모리(RAM)에 접근하는 시간을 줄여서 전체 시스템의 성능을 높이는 것입니다.
위로 올라 갈수록 속도가 빨라지고, 아래로 내려 갈수록 용량이 많아진다.
계층 위로 올라 갈 수록 가격은 비싸지는데 용량은 작아지고 속도는 빨라지는 특징이 있다.
계층이 있는 이유는 무엇일까? - 경제성
경제성과 캐시 때문이다. 16GB 램과 16GB SSD의 가격차이가 크다. 같은 16GB여도 램이 훨씬 비싸다.
이러한 경제성 때문에 계층을 두어 관리한다.
게임을 실행하다 보면 ‘로딩중’ 이라는 메시지가 나오는데 이는 하드디스크 또는 인터넷에서 데이터를 읽어 RAM으로 전송하는 과정이 아직 끝나지 않았음을 의미한다.
계층이 있는 이유는 무엇일까? - 캐시
캐시는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다. 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 다시 계산하는 시간을 절약할 수 있다.
메모리와 CPU 사이의 속도 차이가 너무 크기 때문에 중간에 레지스터 계층을 두어 속도 차이를 해결한다. 이렇게 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다. 예를 들어 캐시 메모리와 보조기억장치 사이에있는 주기억장치를 보조기억장치의 계싱 계층이라 할 수 있다.
지역성의 원리
계싱 계층을 두는 것 말고 캐시를 직접 설정할 때는 어떻게 해야할까?
→ 자주 사용하는 데이터를 기반으로 설정해야한다. 자주 사용하는 데이터에 대한 근거는 지역성이다. 지역성은 시간 지역성과 공간 지역성으로 나뉜다.
시간 지역성
시간 지역성은 최근 사용한 데이터에 다시 접근하려는 특성을 말한다. 예를 들어 for 반복문으로 이루어진 코드 안의 변수 i에 계속해서 접근이 이루어진다면 여기서 데이터는 변수 i이고 최근에 사용했기 때문에 계속 접근해서 +1연이어 할 수 있다.
공간 지역성
공간 지역성은 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성이다. 앞의 코드에서 공간을 나타내는 배열 arr의 각 요소들에 i가 할당되며 해당 배열에 연속적으로 접근함을 알 수 있다.
캐시히트와 캐시미스
캐시에서 원하는 데이터를 찾았다면 캐시히트, 해당 데이터가 캐시에 없다면 주 메모리로 가서 데이터를 찾아오는 것을 캐시 미스라고 한다.
캐시히트
캐시히트를 하게 되면 해당 데이터를 제어장치를 거쳐 가져오게 된다.
캐시히트의 경우 위치도 가깝고 CPU 내부 버스를 기반으로 작동하기 때문에 빠르다.
캐시미스
캐시미스가 발생되면 메모리에서 데이터를 가져오게 된다.
시스템 버스를 기반으로 작동하기 때문에 느리다.
캐시매핑
캐시매핑이란 캐시가 히트되기 위해 매핑하는 방법을 말하며 CPU의 레지스터와 주 메모리간에 데이터를 주고 받을 때 기반으로 설명한다. 레지스터는 주 메모리에 비하면 굉장히 작고 주 메모리는 굉장히 크기 때문에 작은 레지스터가 캐시 계층으로서 역할을 잘 해주려면 매핑을 어떻게 하느냐가 중요하다.
100이 있고 캐시가 110이 있다면 1:110, 2:120 … 이런식으로 매핑하는 것을 말한다. 처리가 빠르지만 충돌 발생이 잦다. → 캐시 충돌100이 있고 캐시가 110이 있다면 캐시 15에는 150의 데이터를 무작위로 저장시키는 것을 말한다.웹 브라우저의 캐시
소프트웨어적인 대표적인 캐시는 쿠키, 로컬 스토리지, 세션 스토리지가 있다. 이러한 것들은 보통 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰인다.
쿠키
쿠키는 만료기한이 있는 키-값 저장소이다. same site 옵션을 strict로 설정하지 않았을 경우 다른 도메인에서 요청했을 때 자동 전송되며, 4KB까지 데이터를 저장할 수 있고 만료기한을 정할 수 있다. 쿠키를 설정할 때는 document.cookie로 쿠키를 볼 수 없게 httponly 옵션을 거는 것이 중요하며, 클라이언트 또는 서버에서 만료기한 등을 정할 수 있는데 보통 서버에서 만료기한을 정한다.
로컬 스토리지
로컬 스토리지는 만료기한이 없는 키-값 저장소이다. 10MB까지 저장할 수 있으며 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장, 생성된다. HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없으며 클라이언트에서만 수정 가능하다.
세션 스토리지
세션 스토리지는 만료기한이 없는 키-값 저장소이다. 탭 단위로 세션 스토리지를 생성하며, 탭을 닫을 때 해당 데이터가 삭제된다. 5MB까지 저장가능하며 HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없다. 클라이언트에서만 수정가능하다.
데이터베이스의 캐싱 계층
데이터베이스 시스템을 구축할 때도 메인 데이터베이스 위에 레디스 데이터 베이스 계칭을 ‘캐싱 계층’으로 둬서 성능을 향상시키기도 한다.
Beta Was this translation helpful? Give feedback.
All reactions