캐시(Cache)
캐시란 자주 사용되는 데이터를 메인 메모리보다 접근 속도가 빠른 캐시 메모리에 임시로 저장해 놓는 장치입니다. 캐시를 사용하면 메인 메모리에 직접 접근하는 대신 캐시 메모리에서 데이터를 읽어올 수 있기 때문에 데이터 접근 시간을 단축할 수 있습니다.
- 캐시 계층: 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층(ex. 램과 CPU 사이의 속도 차이가 크기 때문에 그 중간에 레지스터 계층을 둬서 속도 차이 해결)
1. 지역성(Locality)의 원리
캐시 계층을 두지 말고 캐시를 직접 설정할 때는 자주 사용하는 데이터를 기반으로 설정해야 합니다. 이 데이터에 대하는 근거는 지역성입니다.
지역성의 원리는 캐시 메모리 설계와 최적화에 매우 중요한 역할을 합니다.
- 시간 지역성(Temporal Locality)
프로그램이 최근에 액세스 한 메모리 위치를 가까운 미래에 다시 액세스 할 가능성이 높다는 것입니다. 예를 들어, 반복문 내에서 같은 변수를 반복적으로 사용하는 경우가 이에 해당합니다. 시간 지역성이 높으면 캐시 적중률이 높아집니다. - 공간 지역성(Spatial Locality)
최근 근접한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성을 의미합니다. 예를 들어, 배열을 순차적으로 탐색하는 경우가 이에 해당합니다.
2. 캐시 Hit & 캐시 Miss
캐시가 효율적으로 동작하려면, 캐시의 적중률(Hit-rate)를 극대화해야 합니다.
캐시 메모리에 접근했을 때 원하는 정보가 있을 수도 없을 수도 있습니다. 이때 원하는 정보가 있다면 적중(Hit), 없다면 실패(Miss)했다고 합니다.
캐시 hit의 경우, 해당 데이터를 제어장치를 거쳐 가져오게 됩니다. 위치도 가깝고 CPU 내부에서 작동하기 때문에 빠릅니다.
반면 miss의 경우, 데이터를 메모리에서 가져오게 되는데 이는 시스템을 기반으로 작동하기 때문에 느립니다.
캐시 적중률 = 캐시 적중 횟수/ 전체 요청 횟수(적중률이 0.95~0.99일 때 우수하다고 함)
3. 캐시 매핑
캐시 매핑은 컴퓨터 시스템에서 메인 메모리의 데이터를 캐시 메모리에 어떻게 저장하고 검색할 것인지를 결정하는 방법을 의미합니다.
캐시 매핑에는 3가지 방법이 있습니다.
- 직접 매핑: 메인 메모리와 캐시를 똑같은 크기로 나누고 순서대로 매핑하는 것을 말합니다. 예를 들어 메모리가 1~100이 있고 캐시가 1~10이 있다면 각각을 10으로 나눠 1:1~10, 2:11~20 이런 식으로 매핑합니다. 구현이 간단하며 처리가 빠르지만 충돌 문제가 발생할 수 있습니다.
직접 매핑 방식에서 캐시 메모리는 메인 메모리의 특정 블록에 직접 매핑됩니다. 이 매핑 방식의 특성상, 한 캐시 라인이 여러 메모리 블록과 연결될 수 있습니다. 따라서, CPU가 다시 A를 참조하려고 하면, 그 위치에는 이전에 덮어씌운 B의 데이터만 존재하게 됩니다. 그래서 캐시에서 원하는 A의 데이터를 찾을 수 없게 되는 것이죠. 이러한 상황을 '캐시 미스'라고 부르며, 이 때문에 CPU는 다시 메인 메모리에서 A를 찾아야 합니다. 이 과정은 상대적으로 느리기 때문에 성능 저하를 초래하게 됩니다.
위의 예제에서 A와 B는 동일한 캐시 라인에 매핑되어 있다고 가정했습니다. 그래서 CPU가 A를 참조할 때 A는 캐시에 로드되며, 이후 B를 참조할 때 B는 같은 캐시 라인에 로드되어 기존의 A를 덮어씁니다. - 연관 매핑: 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑합니다. 직접 매핑에서는 인덱스가 필요했지만 연관 매핑에서는 빈자리를 찾아가면 됩니다. 충돌은 적지만 모든 블록을 탐색해야 해서 속도가 느립니다.
- 집합 연관 매핑: 직접 매핑과 연관 매핑을 합쳐 놓은 것입니다. 순서는 일치시키지만 집합을 둬서 저장하며 블록화되어 있기 때문에 검색은 좀 더 효율적입니다. 예를 들어 메모리가 1~100이 있고 캐시가 1~10이 있다면 캐시 1~5는 1~50의 데이터를 무작위로 저장시키는 것을 말합니다.
4. 웹 브라우저의 캐시
웹 브라우저의 캐시(Cache)는 웹 페이지, 이미지, 스타일시트, 자바스크립트 등 웹 리소스를 임시로 저장해 두는 공간을 말합니다.
쿠키(Cookie), 로컬 스토리지(Local Storage), 세션 스토리지(Session Storage)가 있습니다. 쿠키, 로컬 스토리지, 세션 스토리지는 모두 웹 브라우저에서 사용하는 데이터 저장 기술입니다.
4-1. 쿠키
- 개념: 웹 사이트(웹 서버)가 사용자의 컴퓨터에 저장하는 작은 텍스트 파일
- 특징
- key-value 형태
- 각 쿠키는 4KB까지 데이터 저장 가능
- 사용자의 세션 ID, 로그인 정보, 사용자의 환경 설정 등을 저장하는데 주로 사용
- 만료 기한 O -> 만료 날짜가 지나면 쿠키는 자동으로 삭제됨
4-2. 로컬 스토리지
- 개념: 웹 브라우저에서 브라우징 도메인 내에서 데이터를 장기적으로 저장할 수 있는 텍스트 파일
- 특징
- key-value 형태
- 한 브라우징 도메인 당 최대 5KB까지 데이터 저장 가능
- 사용자 설정, 쇼핑 카트 정보, 로그인 정보 및 상태, 게임 데이터 저장하는데 주로 사용
- 만료 기한 X -> 사용자가 직접 삭제하기 전까지 데이터 유지, 브라우저 종료해도 제거되지 않음
4-3. 세션 스토리지
- 개념: 브라우징 도메인 내에서 시점에 따른 데이터를 저장하는 텍스트 파일
- 특징
- key-value 형태
- 각 쿠키는 5KB까지 데이터 저장 가능
- 사용자 입력, 일시적인 설정(사용자가 세션동안 선택한 테마 또는 언어 설정), 장바구니 등을 저장하는데 주로 사용
- 만료 기한 O -> 브라우저를 닫으면 세션 스토리지의 모든 정보 사라짐
4. 데이터베이스의 캐싱 계층
데이터베이스 시스템을 구축할 대도 메인 데이터베이스 위에 레디스(redis, Remote Dictionary Server) 데이터베이스 계층을 '캐싱 계층'으로 둬서 성능을 향상시키기도 합니다.
데이터를 메모리에 저장하고 관리하여 빠른 응답 시간을 제공합니다.
'운영체제' 카테고리의 다른 글
[운영체제] CPU 스케줄링 알고리즘 (0) | 2024.05.10 |
---|---|
[운영체제] 스레드 (0) | 2024.05.10 |
[운영체제] 멀티 프로세싱 (0) | 2024.05.09 |
[운영체제] 프로세스 (0) | 2024.05.08 |
[운영체제] 메모리 관리 (0) | 2024.05.05 |