메모리 기본 내용중에 조리대에 해당하는 캐시의 “지역성”, “캐시히트/미스” 에 대해서 학습하고, 메모리가 어떻게 사용되는지 “메모리 할당”에 대해서 알아보자!

캐시는 데이터를 미리 복사해 놓는 임시 저장소
- 우리가 보는 화면에 출력되는 데이터는 결국 메인 메모리에 저장된 데이터이다.
- 프로그램이 실행되면 디스크를 읽어서 메인 메모리에 복사해두고
- CPU(MMU)가 메인 메모리에서 데이터를 읽어오며 작업을 처리한다.
- 이때 캐시가 중간에서 한번더 메인메모리의 데이터를 복사해두는 거라고 보시면 된다.

지역성이란?
자주 사용되는 데이터의 특성을 의미한다.
캐시를 직접 설정할때는 자주 사용되는 데이터를 기반으로 설정해야 하며 이러한 특성을 지역성이라고 한다.
- 최근 사용한 데이터에 다시 접근하려는 특성
ex) for문 안에 선언된 i는 반복문 안에서 계속해서 접근이 이루어지는 변수이다.최근에 사용했기 때문에 계속 접근해서 +1 이 이루어지는 것이다. (i 변수에 대한 시간 지역성)for(let i=0; i<5; i++){ console.log(i) // 0 1 2 3 4 }
- 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성
ex) 배열 arr이라는 공간에 i가 연속적으로 할당되어 접근하는 방식 (arr 배열 원소에 대한 공간 지역성)let arr = []; for(let i=0; i<5; i++){ arr.push(i) } // arr = [0,1,2,3,4]
캐시히트란 캐시에 원하는 데이터를 찾은 것을 말한다.
- 위치도 가깝고 CPU 내부버스를 기반으로 작동하여 빠르다
- 캐시히트를 하게 되면 해당 데이터를 제어장치를 거쳐 가져오게 된다.
캐시미스란 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것을 의미한다.
- 메모리를 가져올때 시스템 버스를 기반으로 작동하기 때문에 느리다.
캐시가 히트되기 위해 매핑되는 방법
- CPU의 레지스터 와 주 메모리(RAM) 간에 데이터를 주고 받을 때를 기반
- 주 메모리에 비해 굉장히 작은 레즈시터가 캐시 계층으로써 역할으로 매핑이 중요하다.
메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당한다.
- 연속 할당과 불연속 할당으로 나뉘게 된다.
- 연속할당이란 메모리에 '연속적으로' 공간을 할당하는 것을 말한다.
- 고정 분할 방식과 가변 분할 방식으로 나뉘게 된다.
- 메모리를 미리 나누어 관리하는 방식 입니다.
- 한계
- 내부 단편화 발생 ⭕
- 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식이다.
- 종류
- 최초적합: 위에서부터 바로 보이는 공간에 바로 할당
- 최적적합: 가장 크기에 맞는 공간부터 채우고 나머지를 할당
- 최악적합: 가장 크기가 큰 공간에 부터 채우고 나머지 할당
- 한계
- 내부 단편화 발생 ❌
- 외부 단편화 발생 ⭕
운영체제에서는 여러개의 작업을 효율적으로 수행해야하기 때문에 불연속 할당방법을 사용한다.
불연속 할당 방식의 단점
- 메모리 공간 할당과 해제 시의 오버헤드가 발생할 수 있다. (불필요 할당)
- 메모리 공간이 분산되어 있기 때문에, 프로세스가 불연속 공간에 할당될 경우 프로세스의 페이지 교체와 같은 작업이 더 복잡해질 수 있다. (교체 알고리즘 최적화 필요)