실제 메모리의 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황
페이지 기법과 같은 메모리 관리 기법은 사용자가 눈치 채지 못하도록 눈속임을 통해 메모리를 할당해줌 (가상 메모리를 이용해서)
과할당 상황에 대해서 사용자를 속인 것을 들킬만한 상황이 존재함
이러한 과할당을 해결하기 위해선, 빈 프레임을 확보할 수 있어야 함
메모리에 올라와 있는 한 프로세스를 종료시켜 빈 프레임을 얻음
프로세스 하나를 swap out하고, 이 공간을 빈 프레임으로 활용
swapping 기법을 통해 공간을 바꿔치기하는 2번 방법과는 달리 1번은 사용자에게 페이징 시스템을 들킬 가능성이 매우 높아서 하면 안됨
(페이징 기법은 사용자 모르게 시스템 능률을 높이기 위해 선택한 일이므로 들키지 않게 처리해야한다)
따라서, 2번과 같은 해결책을 통해 페이지 교체가 이루어져야 함
메모리 과할당이 발생했을 때, 프로세스 하나를 swap out해서 빈 프레임을 확보하는 것
프로세스 실행 도중 페이지 부재 발생
페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾음
메모리에 빈 프레임이 있는지 확인
빈 프레임이 있으면 해당 프레임을 사용
빈 프레임이 없으면, victim 프레임을 선정해 디스크에 기록하고 페이지 테이블을 업데이트함
빈 프레임에 페이지 폴트가 발생한 페이지를 올리고, 페이지 테이블 업데이트
페이지 교체가 이루어지면 아무일이 없던것 처럼 프로세스를 계속 수행시켜주면서 사용자가 알지 못하도록 해야 함
이때, 아무일도 일어나지 않은 것처럼 하려면, 페이지 교체 당시 오버헤드를 최대한 줄여야 함
이처럼 빈 프레임이 없는 상황에서 victim 프레임을 비울 때와 원하는 페이지를 프레임으로 올릴 때 두 번의 디스크 접근이 이루어짐
페이지 교체가 많이 이루어지면, 이처럼 입출력 연산이 많이 발생하게 되면서 오버헤드 문제가 발생함
변경비트를 모든 페이지마다 둬서, victim 페이지가 정해지면 해당 페이지의 비트를 확인
해당 비트가 set 상태면? → 해당 페이지 내용이 디스크 상의 페이지 내용과 달라졌다는 뜻
(즉, 페이지가 메모리 올라온 이후 한번이라도 수정이 일어났던 것. 따라서 이건 디스크에 기록해야함)
bit가 clear 상태라면? → 디스크 상의 페이지 내용과 메모리 상의 페이지가 정확히 일치하는 상황
(즉, 디스크와 내용이 같아서 기록할 필요가 없음)
비트를 활용해 디스크에 기록하는 횟수를 줄이면서 오버헤드에 대한 수를 최대 절반으로 감소시키는 방법임
페이지 교체 알고리즘을 상황에 따라 잘 선택해야 함
현재 상황에서 페이지 폴트를 발생할 확률을 최대한 줄여줄 수 있는 교체 알고리즘을 사용
FIFO
OPT
LRU
주기억장치에 저장된 내용의 일부를 임시로 저장해두는 기억장치
CPU와 주기억장치의 속도 차이로 성능 저하를 방지하기 위한 방법
CPU가 이미 봤던걸 다시 재접근할 때, 메모리 참조 및 인출 과정에 대한 비용을 줄이기 위해 캐시에 저장해둔 데이터를 활용한다
캐시는 플리플롭 소자로 구성되어 SRAM으로 되어있어서 DRAM보다 빠른 장점을 지님
캐시 메모리는 중앙처리장치(CPU)와 주기억장치 사이에 위치한 빠른 메모리로서, CPU가 반복적으로 참조하는 데이터나 명령어를 임시적으로 저장하는 역할을 합니다. CPU가 필요로 하는 데이터나 명령어를 먼저 캐시 메모리에서 찾고 (이를 '캐시 히트'라고 합니다), 만약 그것이 캐시 메모리에 없다면 주기억장치에서 찾게 됩니다 (이를 '캐시 미스'라고 합니다).
캐시 메모리는 그 크기에 비해 비교적 빠르고 비싸므로, 일반적으로 주기억장치보다 크기는 작지만 더 빠른 접근 시간을 제공합니다. 이는 '시간 지역성'과 '공간 지역성'이라는 두 가지 주요 원칙에 기반하고 있습니다.
시간 지역성 (Temporal Locality) : 이는 최근에 참조된 항목이 가까운 미래에 다시 참조될 가능성이 높다는 개념입니다. 다시 말해, CPU가 최근에 사용한 데이터나 명령어는 곧 다시 사용될 가능성이 높다는 것입니다.
공간 지역성 (Spatial Locality) : 이는 메모리의 특정 위치에 접근했다면, 그 근처의 위치에 곧 접근할 가능성이 높다는 개념입니다. 예를 들어, 프로그램이 순차적으로 실행되는 경우, 다음에 실행될 명령어는 현재 실행 중인 명령어와 가까운 위치에 있을 가능성이 높습니다.
캐시 메모리의 세부 구조와 동작은 다양한 요인에 따라 다를 수 있습니다. 예를 들어, 몇 가지 캐시 메모리는 '직접 매핑', '완전 연관 매핑', '집합 연관 매핑' 등 다양한 방법을 사용하여 메모리에서 캐시로의 데이터 매핑을 관리합니다. 또한, 캐시의 효율성을 최대화하기 위한 다양한 교체 알고리즘(Least Recently Used, Least Frequently Used 등)이 존재합니다.
캐시 메모리는 컴퓨터 시스템의 전반적인 성능 향상에 중요한 역할을 합니다. CPU가 주기억장치에 비해 빠른 캐시에서 데이터를 더 자주 찾을 수록, 전체 시스템의 성능은 향상됩니다. 이를 캐시 히트율이라고 하며, 이를 최대화하는 것이 중요한 설계 고려 사항입니다.
SRAM (Static Random Access Memory)과 DRAM (Dynamic Random Access Memory)은 둘 다 랜덤 액세스 메모리 (RAM)의 유형이지만, 그들은 데이터를 저장하고 보관하는 방식에서 차이가 있습니다.
SRAM (Static Random Access Memory): SRAM은 한 번 저장된 데이터를 보관하기 위해 전력을 계속 공급받아야 하는 반면, DRAM보다 더 빠르고 신뢰성이 높습니다. 이는 SRAM이 각 메모리 셀에 플립플롭 회로를 사용하여 데이터를 저장하기 때문입니다. 플립플롭 회로는 전원이 공급되는 한 자신의 상태를 유지할 수 있습니다. 그러나 이러한 성능 향상은 비용 증가와 메모리 셀 당 더 많은 공간을 필요로 하는 단점으로 이어집니다. SRAM은 주로 CPU의 캐시 메모리에 사용됩니다.
DRAM (Dynamic Random Access Memory): DRAM은 메모리 셀 당 한 개의 트랜지스터와 커패시터를 사용하여 데이터를 저장합니다. 커패시터는 전하를 저장하며, 이 전하의 유무가 이진 데이터 1과 0을 나타냅니다. 그러나 커패시터는 시간이 지남에 따라 자연스럽게 전하를 잃게 되므로, DRAM은 데이터를 보관하기 위해 주기적으로 '리프레시'되어야 합니다. 이로 인해 DRAM은 SRAM보다 느리지만, 메모리 셀 당 더 적은 공간을 차지하므로 더 저렴하게 대량의 메모리를 제공할 수 있습니다. DRAM은 대부분의 컴퓨터 시스템에서 주 메모리로 사용됩니다.
둘 다 전력 공급이 끊기면 저장된 정보를 잃게되는 휘발성 메모리입니다.
CPU에서 주소를 전달 → 캐시 기억장치에 명령이 존재하는지 확인
(존재) Hit
해당 명령어를 CPU로 전송 → 완료
(비존재) Miss
명령어를 갖고 주기억장치로 접근 → 해당 명령어를 가진 데이터 인출 → 해당 명령어 데이터를 캐시에 저장 → 해당 명령어를 CPU로 전송 → 완료
이처럼 캐시를 잘 활용한다면 비용을 많이 줄일 수 있음
따라서 CPU가 어떤 데이터를 원할지 어느정도 예측할 수 있어야 함
(캐시에 많이 활용되는 쓸모 있는 정보가 들어있어야 성능이 높아짐)
적중률을 극대화시키기 위해 사용되는 것이 바로 지역성의 원리
기억 장치 내의 정보를 균일하게 액세스 하는 것이 아니라 한 순간에 특정부분을 집중적으로 참조하는 특성
지역성의 종류는 시간과 공간으로 나누어짐
시간 지역성 : 최근에 참조된 주소의 내용은 곧 다음에도 참조되는 특성
공간 지역성 : 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성
빈번하게 사용되는 데이터들을 캐시에 저장했더라도, 내가 필요한 데이터를 캐시에서 찾을 때 모든 데이터를 순회하는 것은 시간 낭비다.
즉, 캐시에 목적 데이터가 저장되어있을 때 바로 접근하여 출력할 수 있어야 캐시 활용이 의미있어짐
따라서 캐시에 데이터를 저장할 시, 자료구조를 활용해 묶어서 저장하는데 이를 캐싱 라인
이라고 부른다.
즉, 캐시에 저장하는 데이터에 데이터의 메모리 주소를 함께 저장하면서 빠르게 원하는 정보를 찾을 수 있음 (set이나 map 등을 활용)