TIL 220918

강지훈·2022년 9월 17일
0

[캐시, 캐시히트, 캐시미스, 캐시의 사례]
캐시
캐시(cache)는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도차이에 따른 병목 현상을 줄이기 위한 메모리를 말합니다
**병목현상: 병목(bottleneck) 현상은 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다. "병목"이라는 용어는 물이 병 밖으로 빠져나갈 때 병의 몸통보다 병의 목부분의 내부 지름이 좁아서 물이 상대적으로 천천히 쏟아지는 것에 비유한 것이다.

이를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결합니다. 계산된 값을 저장해서 다시 계산하지 않게 하는 장치 또는 메모리로도 의미가 쓰입니다.
실제로 메모리와 CPU 사이의 속도 차이가 너무 크기 때문에 그 중간에 레지스터 계층을둬서 속도 차이를 해결합니다.
이렇게 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 합니다.
예를 들어 캐시 메모리와 보조기억장치 사이에 있는 주기억장치를 보조기억장치의 캐싱 계층이라고 할수 있습니다.

지역성의 원리
그렇다면 캐시 계층을 두는 것 말고 캐시를 직접 설정할 때는 어떻게 해야 할까요?
이는 자주 사용하는 데이터를 기반으로 설정해서 '캐시히트'를 높여야 합니다.
그렇다면 자주 사용하는 데이터에 대한 근거가 되는 것은 무엇일까요?
바로 지역성입니다. 지역성은 시간지역성(temporal locality)과 공간 지역성(spatial locality)으로 나뉩니다.

시간 지역성
시간 지역성은 최근 사용한 데이터에 다시 접근하려는 특성을 말합니다.
예를 들어 for 반복문으로 이루어진 코드 안의 변수 i에 계속해서 접근이 이루어지겠죠? 여기서 데이터는 변수 i 이고 최근에 사용했기 때문에 계속 접근해서 +1을 연이어 하는것을 볼수 있습니다.

공간지역성
공간 지역성은 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성을 말합니다. 앞의 코드에서 공간을 나타내는 배열 arr의 각 요소들에 i가 할당되며 해달 배열에 연속적으로 접근함을 알수 있죠?

캐시히트와 캐시미스
캐시에서 원하는 데이터를 찾았다면 캐시히트라고 하며, 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것을 캐시미스라고 합니다. 다음 그림처럼 캐시히트를 하게 되면 해당 데이터를 제어장치를 거쳐 가져오게 됩니다.
캐시히트의 경우 위치도 가깝고 cpu 내부 버스를 기반으로 작동하기 때문에 빠릅니다. 반면에 캐시미스가 발생되면 메모리에서 가져오게 되는데, 이는 시스템 버스를 기반으로 작동하기 때문에 느립니다.

웹 브라우저의 캐시
소프트웨어 대표적인 캐시로는 웹 브라우저의 작은 저장소 쿠키, 로컬 스토리지, 세션 스토리지가 있습니다. 이러한 것들은 보통 사용자의 커스텀한 정보나 인증모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰입니다.

데이터베이스의 캐싱계층
참고로 데이터베이스 시스템을 구축할 때도 메인 데이터베이스 위에 레디스(redis) 데이터 베이스 계층을 '캐싱 계층'으로 둬서 성능을 향상시키기도 합니다.

[메모리할당 : 고정분할과 가변분할]
메모리 할당
메모리에 프로그램을 할당할 대는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당하는데, 연속 할당과 불연속 할당으로 나뉩니다.
연속 할당
연속 할당은 메모리에 '연속적으로' 공간을 할당하는 것을 말합니다.

고정 분할 방식
고정 분할 방식(fixed partition allocation)은 메모리를 미리 나누어 관리하는 방식이며, 메모리가 미리 나뉘어 있기 때문에 융통성이 없습니다.
또한, 내부 단편화가 발생합니다.

가변 분할 방식
가변 분할 방식(variable partition allocation)은 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용합니다. 내부 단편화는 발생하지 않고 외부 단편화는 발생할 수 있습니다. 이는 최초적합(first fit)
최적적합(best fit). 최악접합(worst fit)이 있습니다.

profile
never stop

0개의 댓글