데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
👉 이를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결한다.
1) 계산된 값을 저장해서 다시 계산하지 않게 하는 장치 또는 메모리로도 의미가 쓰인다.
2) 메모리와 CPU 사이의 속도 차이가 너무 크기 때문에 그 중간에 레지스터 계층을 둬서 속도 차이를 해결한다.
👉 이렇게 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다. (캐시 메모리와 보조기억장치 사이에 있는 주기억장치를 보조기억장치의 캐싱 계층이라고 할 수 있다.)
3) 지역성의 원리
: 캐시 계층을 두는 것 말고 캐시를 직접 설정할떄는 어떻게 해야하나?
--> 이는 자주 사용하는 데이터를 기반으로 설정해서 "캐시히트"를 높여야 한다.
❓ 자주 사용하는 데이터? 시간지역성과 공간지역성을 근거로 자주 사용하는 데이터로 나눈다.
시간 지역성(temporal locality) : 최근 사용한 데이터에 다시 접근하려는 특성
✅ 예시. for문에 있는 i변수에 계속 접근하는 것도 i가 최근에 사용한 데이터이기 때문에.
공간 지역성(spatial locality) : 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성을 말한다.
✅ 예시. 배열 arr의 각 요소들에 i가 할당되며 해당 배열에 연속적으로 접근하는 것
👉 캐시히트를 하게 되면 해당 데이터를 제어장치를 거쳐 가져오게 된다.
1) 캐시히트 : 캐시에서 원하는 데이터를 찾았을 때
2) 캐시미스 : 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것
1) 웹 브라우저의 캐시
소프트웨어적인 대표적인 캐시로는 웹 브라우저의 작은 저장소 쿠키, 로컬 스토리지, 세션 스토리지가 있다.
보통 사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰인다.
2) 데이터베이스의 캐싱 계층
👉 먼저, 레디스를 본다. 레디스에 있으면 캐시히트, 그게 아니라면 메인 데이터베이스에서 찾는다.
메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당하는데, 연속 할당과 불연속 할당으로 나뉜다.
1) 연속 할당
: 메모리에 연속적으로 공간을 할당하는 것을 말한다.
👉 A,B,C가 순차적으로 공간에 할당하는 것을 볼 수 있다. 고정 분할 방식과 가변 분할 방식으로 나눌 수 있다.
고정 분할 방식(fixed partition allocation)
: 메모리를 미리 나누어 관리하는 방식으로 메모리가 미리 나뉘어 있기 때문에 융통성이 없다. 내부 단편화가 발생하는 단점.
❓ 내부 단편화(internal fragmentation) : 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상 (미리 정해진 크기에 프로그램이 들어갔는데, 프로그램 크기가 더 작아 메모리 공간이 조금씩 남는 현상.)
가변 분할 방식(variable partition allocation)
: 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용한다. 외부 단편화가 발생하는 단점.
❓ 외부 단편화 : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상.
👉 최초적합 : 위쪽이나 아래쪽부터 시작해서 홀을 찾으며 할당
❓ 홀 : 할당할 수 있는 비어 있는 메모리 공간
👉 최적적합 : 프로세스 크기 이상인 공간 중 가장 작은 홀부터 할당
👉 최약적합 : 프로세스의 크기와 가장 많이 차이가 나는 홀에 할당
2) 불연속 할당
: 현대 운영체제가 쓰는 방법으로 메모리를 연속적으로 할당하지 않는다.
세그멘테이션(segmentation)
: 페이지 단위가 아닌 의미 단위인 세그먼트로 나누는 방식이다.
👉 프로세스는 코드 ,데이터, 스택, 힙으로 이루어져있는데 이를 기반으로 나눌 수도 있고, 함수 단위로 나눌 수도 있다. 공유와 보안 측면에서 좋으며 홀 크기가 균일하지 않은 문제가 발생된다.
페이지드 세그멘테이션
: 페이지드 세그멘테이션(paged segmentation)은 공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나누는 것을 말한다.
출처 : 면접을 위한 CS전공지식 노트(책 / 강의)