시작은 미미하나 끝은 쥬쥬하리라.

Study/Windows System Programming

[Window System Programming] Chapter 16. 메모리 계층 / 캐쉬와 캐쉬 알고리즘 / 가상 메모리

코딩뚜벅이 2024. 1. 20. 22:34

4-16 메모리 계층 / 캐쉬와 캐쉬 알고리즘 / 가상 메모리

  • 메모리 계층
  • 캐쉬와 캐쉬 알고리즘
  • 가상 메모리
  • 페이지 & 페이지 프레임

메모리 계층

메모리 계층

레지스터 : CPU에 내장, 연산을 위한 저장소 제공

L1 & L2 캐쉬 : CPU와 RAM 사이의 중간 저장소 역할, CPU의 일부가 아닌 CPU에 근접한 메모리

메인 메모리 : RAM ( + 하드디스크 일부 : 스왑 파일)

 

 

 

-> 상위 계층으로 갈수록 비용, 속도 증가

-> 메모리 계층 비교 시, 같은 기능을 기준으로 비교 (ex: 메인 메모리의 실행 <-> 하드디스크의 실행을 비교)

-> 프로그램 실행을 위해서 하위 메모리는 상위 메모리에게 메모리를 전달

-> 상위 메모리에 데이터가 없다면 하위 메모리에 데이터를 요청

-> 프로그램의 지역적 특성 때문에 계층 구조를 이루는 것이 유리

 


 

캐쉬와 캐쉬 알고리즘

캐쉬의 특징

지역성(Locality), 프로그램의 시작과 끝에서 프로그램의 흐름은 지역적 특성

-> 산발적 실행이 아닌 코드의 주변을 실행하는 특징

-> 1. 반복 접근(Temporal Locality) : 같은 메모리에 다시 접근할 확률이 높음

-> 2. 주변 접근(Spatial Lacaloty) : 순차적으로 선언된 메모리 주변에 접근할 확률이 높음

 

-> CPU가 캐쉬에 데이터를 요청할 때, 캐쉬가 데이터를 가지고 있을 확률이 높음

 

 

캐쉬 알고리즘

기본 정책 : 블록 단위 전송

-> 1. CPU가 임의의 주소에 있는 데이터를 필요로 하면 하위 계층의 메모리에 요청

->  2. 하위 계층에 메모리가 있다면 상위로 메모리를 올려주고, 데이터의 이동은 블록 단위로 진행

 

-> 하위 메모리 계층으로 갈수록 상위로 올려주는 메모리 블록의 크기 증가

-> 블록 단위 전송 시, 원하는 주소의 데이터를 포함하여 주변 주소의 데이터도 블록에 포함(주변 접근 특성)

 

 

Cache Friendly Code

 

 

-> 반복 접근 : total 변수에 반복적으로 접근

-> 주변 접근 : 인접한 배열 주소에 접근

 

 

 


 

가상 메모리

물리주소

RAM 공간의 메모리 주소 값

 

 

가상주소

HDD까지 영역을 확장했을 경우, 추가로 얻게 되는 메모리 주소 값

-> 가상 주소는 선 할당으로 인한 부담과 느린 속도의 개선

 

 

선 할당 부담

프로세스 생성 시, 메모리 전체를 할당하는 것은 낭비도 심하고 시간도 오래 소요

 

 

 

ex) 16bit 시스템의 경우, 프로세스 별 64KB 메모리를 할당하며 RAM 용량은 16KB인 상황

-> MMU(메모리 관리 유닛)은 CPU가 요구하는 값을 그 메모리 공간에 데이터가 존재하는 것처럼 가져다주는 역할 담당

 

첫 번째 요청 : CPU가 MMU에 1K번지부터 20Byte의 할당을 요구하면 RAM에서는 사용하지 않는 블록을 하나 할당

-> 필요한 할당 용량이 4KB가 아니더라도 MMU는 블록 하나를 할당(주변 접근 특성)

 

두 번째 요청 : 할당 후 다시 CPU가 MMU에게 36K번지 부터 20Byte 할당 요청이 들어오면 다른 블록 할당

-> 메모리 번지를 순차적으로 사용하는 것이 아닌 CPU에 요청이 들어오면 그 번지에 알맞게 할당

 

-> CPU는 가상 주소로 접근, MMU는 가상 주소를 물리 주소로 변환하여 RAM에게 데이터를 가져와서 CPU에게 전달

 


 

페이지 & 페이지 프레임

CPU가 MMU(메모리 관리 유닛)에게 메모리 할당 및 데이터를 요구

-> MMU는 제한된 공간에서 메모리 공간을 활용

 

 

 

페이지 

가상 메모리 블록 단위

 

 

페이지 프레임

물리 메모리 블록 단위

 

-> 실제 가상 메모리와 물리 메모리에 데이터가 올라가는 위치는 다르나 메모리 공간 활용, 주소 변환 작업은 MMU가 처리

-> 따라서 페이지와 페이지 프레임은 동일하다고 할 수 있음

 

 

느린 속도 개선

가상 메모리는 하드디스크의 일부를 메인 메모리로 확장하는 것

-> 실질적인 물리 메모리는 RAM에 국한

-> 단순히 메모리를 확장하면 RAM에 접근하는 속도에 제약 발생

 

-> 하드디스크와 RAM의 관계를 RAM과 캐쉬 관계로 구성

-> 하드디스크에 실질적인 메모리 공간 모두 할당

-> 지역적 특성에 의해 블록 단위로 필요한 것을 모두 RAM에 가져와서 실행

 

ex) 4~8K 메모리 할당 요청이 CPU로부터 들어온 경우

 

 

 

-> 지역적 특성에 의해 가장 사용될 확률이 떨어지는 8~12K 메모리 블록을 하드디스크로 이동

-> 같은 메모리 위치에 4~8K 메모리 블록 할당

 

 

ex) 다시 8~12K 메모리 블록의 사용 요청이 CPU로부터 들어온 경우

 

 

 

-> RAM의 여러 정책을 통해 가장 사용될 확률이 떨어지는 메모리 블록을 선정하여 하드디스크에 저장(0~4K)

-> 하드디스크에 저장된 8~12K 메모리 블록을 RAM으로 로드

 

 

스왑 파일

프로세스의 가상 메모리 공간 확장을 위한 파일 

-> 하드디스크는 파일형태로 메모리를 저장

 

 

둘 이상의 프로세스와 RAM

ex) 4GB의 RAM에서 4GB의 메모리를 필요로 하는 프로세스 2개를 실행하려는 경우

-> 총 8GB의 메모리를 필요로 함

-> 각각의 프로세스 스왑 파일은 하드디스크에 저장

-> 프로세스 A를 실행하는 경우 하드디스크에 저장된 A의 스왑파일을 로드하여 실행

-> 프로세스 B를 실행하는 경우 하드디스크에 저장된 B의 스왑파일을 로드하며 컨텍스트 스위칭 발생