Search
🗄️

메모리

태그
운영체제

메모리 계층

메모리 계층은 레지스터, 캐시, 주기억장치(RAM), 보조기억장치(HDD, SSD)로 구성되어 있습니다
레지스터: CPU 안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량 가장 적음
캐시: L1, L2 캐시를 지칭. 휘발성, 속도 빠름, 기억 용량 적음
주기억장치: RAM을 가리킴. 휘발성, 속도 보통, 기억 용량 보통
보조기억장치: HDD, SSD를 일컬으며 비휘발성, 속도 낮음, 기억 용량이 많음

캐시

캐시는 데이터를 미리 복사해 놓는 임시 저장소이자
빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말합니다.
이를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 무언가를 다시 계산하는 시간을 절약할 수 있습니다.
계층과 계층 사이에 있는 계층을 캐싱 계층이라고 합니다.
예를 들어 캐시 메모리와 보조기억장치 사이에 있는 주기억장치를 보조기억장치의 캐싱 계층이라고 할 수 있습니다.
지역성의 원리
캐시 계층을 두는 것 말고 캐시를 직접 설정할 때는 자주 사용하는 데이터를 기반으로 설정해야 합니다.
자주 사용하는 데이터는 지역성에 근거한다. 지역성은 시간 지역성과 공간 지역성으로 나뉜다.
시간 지역성: 최근 사용한 데이터에 다시 접근하려는 특성을 말합니다. 예를 들어 for 반복문으로 이루어진 코드 안의 변수 i에 계속해서 접근하여 연이어 +1을 하는 경우가 있습니다.
공간 지역성: 최근 사용한 데이터의 공간이나 주변 공간에 접근하려는 특성을 말합니다. 예를 들어 for 반복문에서 arr 배열의 개수만큼 출력하는 코드를 작성해보면 arr에 i가 할당되며 해당 배열에 연속적으로 접근하는 경우가 있습니다.

캐시히트와 캐시미스

캐시에서 원하는 데이터를 찾았다면 캐시히트라고 하며, 해당 데이터가 캐시에 없다면 주 메모리로 가서 데이터를 찾아오는 것을 캐시미스라고 합니다.

데이터베이스의 캐싱 계층

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

가상 메모리

가상 메모리는 실제 물리 메모리와 개발자 입장의 논리 메모리 개념을 분리한 것입니다. 이렇게 함으로써
개발자가 메모리 크기에 관련한 문제를 염려할 필요 없이 쉽게 프로그램을 작성할 수 있게 해줍니다.
운영체제는 가상 메모리 기법으로 프로그램의 논리적주소 영역에서 필요한 부분만 물리 메모리에 적재하고,
직접적으로 필요하지 않은 메모리 공간은 디스크에 저장하게 됩니다.

요구 페이징

당장 사용될 주소 공간을 page 단위로 메모리에 적재하는 방법을 요구페이징이라고 합니다.
요구 페이징 기법에서는 유효/무효 비트를 두어 각 page가 메모리에 존재하는지 표시하게 됩니다.

스와핑

가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근할 경우 페이지 폴트가 발생합니다.
이때 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옯기고 하드 디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것을 말합니다.

페이지 폴트

CPU가 무효 비트로 표시된 page에 액세스하는 경우를 page faultfkrh gkqslek
CPU가 무효 page에 접근하면 주소 변환을 담당하는 MMU가 page fault trap을 발생시키게 되고 다음 순서로 page fault를 처리하게 됩니다.
1.
CPU가 페이지 N을 참조합니다
2.
Page table에서 페이지 N이 무효 상태임을 확인합니다
3.
MMU에서 page fault trap을 발생시킵니다
4.
디스크에서 페이지 N을 빈 프레임에 적재하고 page table을 업데이트합니다.
페이지| 가상 메모리를 사용하는 최소 단위 프레임| 물리 메모리를 사용하는 최소 단위
Plain Text
복사

페이지 교체 알고리즘

디스트에서 물리 메모리로 page를 적재할때 물리 메모리에 빈 프레임이 있는지 확인해야합니다
만약 없다면 메모리에 올라와 있는 데이터를 디스크로 옮겨서 메모리 공간을 확보해야하는데 이를 page 교체라고 합니다.
교체 알고리즘은 최대한 page fault가 적게 일어나도록 도와줘야 합니다.
FIFO: 메모리에 올라온지 가장 오래된 page를 교체
최적 페이지 교체: 앞으로 가장 오랫동안 사용되지 않을 page 교체
LRU(Least Recently Used): 가장 오랫동안 사용되지 않은 page 교체
LFU(Least Frequently Used): 가장 빈번하게 사용되지 않은 page 교체