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의 스왑파일을 로드하며 컨텍스트 스위칭 발생
'Study > Windows System Programming' 카테고리의 다른 글
[Window System Programming] Chapter 18. 파일 I/O와 디렉토리 컨트롤 (1) | 2024.01.21 |
---|---|
[Window System Programming] Chapter 17. 예외 처리 / SEH & 종료 핸들러 / 예외 핸들러 (0) | 2024.01.20 |
[Window System Programming] Chapter 15. 스레드 풀링(Pooling) (0) | 2024.01.20 |
[Window System Programming] Chapter 14. 이벤트 기반 동기화 / 타이머 기반 동기화 (0) | 2024.01.20 |
[Window System Programming] Chapter 13. 스레드 동기화 / 유저 모드 동기화 / 커널 모드 동기화 (0) | 2024.01.20 |