페이지 폴트 발생 시 use bit
- 페이티 폴트(Page Fault): CPU가 접근하려는 페이지가 현재 메인 메모리에 없을 때 발생하는 인터럽트
- 페이지 교체 알고리즘 : 메인 메모리가 꽉 차서 새로운 페이지를 가져와야 할 때, 어떤 페이지를 내보낼지 결정하는 알고리즘
- Use bit : 각 페이지에 할당된 비트로, 페이지가 최근에 사용되었는지 여부를 나타냄
- Use bit 초기화 : 특정 시점에 모든 use bit을 0으로 설정하는 작업
Use bit은 페이지가 사용되었는지 여부를 나타내는 지표이므로, 교체 시에는 최근에 사용되지 않은 페이지, 즉 use bit가 0인 페이지를 우선적으로 선택하여 교체합니다.
Use bit의 초기화는 메모리 하드웨어 자체가 하는 것이 아니라 운영체제가 주기적으로 수행합니다. 운영체제가 특정 시점마다 모든 use bit를 0으로 설정함으로써, 페이지의 사용 이력을 갱신합니다.
페이지에 접근이 발생할 때마다 해당 페이지의 Use bit는 1로 설정됩니다.
Use bit는 Reference bit이라고도 합니다. 둘 다 최근 사용 여부를 나타내는 비트입니다.
페이지 폴트 세부적 내용
- 가상 메모리: 실제 물리 메모리보다 더 큰 메모리를 사용하는 것처럼 보이게 하는 기술
- 페이지 : 가상 메모리를 일정한 크기로 나눈 단위
- 프레임: 물리 메모리를 일정한 크기로 나눈 단위
- 페이지 테이블 : 가상 주소를 물리 주소로 변환하는 테이블
- TLB : 페이지 테이블의 일부를 캐싱하여 주소 변환 속도를 높이는 캐시
- Valid bit : 페이지 테이블 항목에 존재하는 비트로, 해당 페이지가 물리 메모리에 존재하는지 여부를 나타냅니다. 1이면 물리 메모리에 존재하고, 0이면 존재하지 않습니다.
- 페이지 폴트 : CPU가 접근하려는 페이지가 현재 물리 메모리에 없을 때 발생하는 인터럽트
- Fault penalty : 페이지 fault가 발생 시, 디스크에서 페이지를 가져오는 데 걸리는 시간
Page Fault는 찾고하는 페이지가 물리 메모리에 없는 경우를 의미합니다. 즉 valid bit가 0인 경우입니다.
페이지 폴트트 예외 사항이므로 페이지 폴트 발생 시 CPU는 현재 실행중인 프로세스를 중단하고 운영체제에게 제어권을 넘깁니다. 페이지 폴트는 접근하려는 페이지가 메인 메모리에 없고 디스크에 있음을 의미합니다. 운영체제는 이 페이지를 디스크에서 읽어와 메인 메모리에 로드해야 합니다.
Fault penalty는 디스크 접근 시간을 포함하기 때문에 매우 큽니다. 디스크 접근은 메인 메모리 접근보다 훨씬 느리기 때문입니다. 이 큰 패널티 때문에 페이지 교체 알고리즘이 중요해지는 것입니다.
가상 메모리를 사용하는 이유
가상 메모리의 가장 큰 목적 중 하나는 물리 메모리보다 더 큰 프로그램을 실행할 수 있도록 하는 것입니다. 프로그램의 모든 부분은 물리 메모리에 로드할 필요 없이, 필요한 부분만 로드하여 실행할 수 있기 때문에, 물리 메모리 용량보다 훨신 큰 프로그램도 실행 가능합니다.
가상 메모리는 여러 프로그램을 동시에 실행하는 것을 효율적으로 지원합니다. 각 프로그램은 자신만의 독립적인 가상 주소 공간을 가지므로, 서로의 메모리 영역을 침범하지 않고 안전하게 실행될 수 있습니다.
가상 메모리는 프로그램 실행 속도를 직접적으로 향상시키지는 않습니다. 오히려 가상 주소를 물리 주소로 변환하는 과정에서 약간의 오버헤드가 발생합니다.
가상메모리는 각 프로그램에게 독립적인 가상 주소 공간을 제공합니다. 이를 통해 한 프로그램의 오류가 다른 프로그램에 영향을 미치지 않도록 보호하며, 보안성을 향상시킵니다.
Page table
- Page Table : 가상 주소를 물리 주소로 변환하는 테이블로 각 프로세스는 자신만의 페이지 테이블을 가짐
- 가상 주소 : 프로세스가 사용하는 주소, 페이지 번호와 페이지 오프셋으로 구성
- 물리 주소 : 실제 메모리 위치를 나타내는 주소
- 페이지 번호 : 가상 주소에서 어떤 페이지에 접근하는지를 나타내는 부분
- 페이지 오프셋 : 페이지 내의 특정 바이트 위치를 나타내는 부분
- 프레임 번호 : 물리 주소에서 어떤 프레임에 접근하는지 나타내는 부분
페이지 테이블은 메인 메모리에 저장됩니다. 프로세서 내부에는 페이지 테이블의 시작 주소를 저장하는 페이지 테이블레지스터만 존재합니다. 페이지 테이블 자체가 프로세서 내부에 저장되는 것은 아닙니다.
CPU는 가상 주소를 물리 주소로 변환하기 위해 Page Table Register에 저장된 페이지 테이블의 시작 주소에 가상 주소의 페이지 번호를 더하여 페이지 테이블의 해당 항목의 주소를 계산합니다. 이 주소에 저장된 값을 통해 물리 주소를 얻습니다.
페이지 테이블의 각 항목에는 물리 프레임 번호 뿐만 아니라 valid bit, dirty bit, use bit같은 추가적인 정보들이 포함되어 있습니다. 이러한 비트들은 메모리 관리 및 페이지 교체 알고리즘 등에 사용됩니다.
페이지 테이블은 가상 주소 공간의 크기에 비례하여 크기가 커질 수 있습니다. 특히 64비트 시스템에서는 페이지 테이블의 크기가 매우 커질 수 있기 때문에 다단계 페이지 테이블, 역 페이지 테이블, 한계 레지스터 등의 기법을 사용하여 페이지 테이블을 줄이는 방법을 사용합니다.
페이지 테이블은 메모리 관리에 매우 중요한 역할을 합니다. 가상 주소와 물리 주소 간의 매핑을 제공함으로써, 각 프로세스가 독립적인 주소 공간을 가지도록 하고, 메모리 보호 및 공유 등의 기능을 가능하게 합니다.
하지만 페이지 테이블 자체가 메모리에 저장되어 있기 때문에, 주소 변환 과정에서 메모리 접근이 추가로 발생한다는 오버헤드가 있습니다. TLB는 이러한 오버헤드를 줄이기 위해 페이지 테이블 의 일부를 캐싱하는 역할을 합니다.
연관성
연관성이 증가한다는 것인 메인 메모리 블록이 캐시의 더 많은 위치에 매핑될 수 있다는 것을 의미합니다. 예를들어 direct mapped에서는 블록이 하나의 위치에만 매핑될 수 있지만 2-way set associative에서는 두 개의 위치에, fully associative는 모든 위치에 매핑될 수 있습니다.
n-way set associative에서는 해당 블록이 속한 집합 내의 n개의 블록과 태그를 비교하여 원하는 데이터를 찾습니다. 따라서 태그 비교 횟수는 n입니다.
가상 메모리의 미스 패널티는 디스크 접근 시간으로 인해 매우 큽니다. 그래서 fully associative 방식을 주로 사용합니다.
Fully associative 방식에서 블록을 검색하는 방법에는 모든 블록의 패그를 병렬로 비교하는 방법과 룩업 테이블을 사용하는 방법이 있습니다. lookup 테이블을 사용하는 경우 검색 속도 면에서는 우수하지만 매우 큰 lookup table을 유지하기 위해선 자원이 많이 들어서 자원 면에서 우수한 것은 아닙니다.
페이지 테이블 캐시
- 캐시 : 자주 사용되는 데이터의 복사본을 저장하여 접근 속도 향상시키는 작은 고속 메모리
- TLB : 페이지 테이블의 일부로 최근에 사용된 페이지 테이블 항목들을 저장하는 캐시
- DMA : CPU의 개입 없이 주변 장치가 메인 메모리에 직접 접근할 수 있도록 하는 장치
- 가상 메모리 : 물리 메모리보다 더 큰 메모리를 사용하는 것처럼 보이게 하는 기술
- 가상 페이지 : 가상 메모리를 일정한 크기로 나눈 단위
페이지 테이블은 메인 메모리에 저장되어 있기 때문에, CPU가 가상 주소를 물리 주소로 변환하려면 매번 메모리에 접근해야 하는데 이는 오버헤드를 발생시키므로 TLB를 이용합니다.
TLB는 최근에 사용된 페이지 테이블 항목들을 저장하는 캐시입니다. CPU가 가상주소를 물리주소로 변환할 때 TLB를 먼저 확인합니다. Translation-Lookaside Buffer
메모리 계층 구조 WRITE-BACK
- write-through : 데이터를 캐시에 쓸 때마다 즉시 메인 메모리에도 쓰는 것
- write-back : 데이터를 캐시에만 쓰고, 해당 블록이 캐시에서 교체될 때 메인 메모리에 씀
- Dirty bit : 캐시 블록에 저장된 데이터가 메인 메모리에 데이터와 일치하는지 나타내는 비트로, Write-Back 방식에서 사용
write-back 방식의 핵심은 블록이 캐시에서 교체될 때, 즉 다른 데이터로 덮어씌워지기 전에 변경된 내용만 메인 메모리에 쓰는 것입니다. 변경되지 않은 블록은 다시 쓸 필요가 없습니다.
write-back 방식은 모든 쓰기 작업이 즉시 메인 메모리에 전달되지 않기 때문에, write-through보다 메모리 대역폭 사용량을 줄일 수 있습니다. 즉 높은 대역폭을 효과적으로 사용 가능합니다.
write-through은 단순히 캐시를 쓸 때마다 메모리에도 쓰면 되므로 구현이 간편하지만 write-back은 dirty bit을 관리해야하고, 블록 교체 시점도 고려해야 하기 때문에 구현이 복잡합니다.
동일한 블록에 여러 번 쓰기가 발생하는 경우, write-through 방식은 매번 메모리에 쓰기 때문에 성능 저하가 발생합니다. write-back은 최종 결과만 메모리에 쓰기 때문에 속도 면에서 이점을 가집니다.
'IT 프로그래밍 > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] 메모리 및 캐시 설계 가상 메모리 (0) | 2024.12.18 |
---|---|
[컴퓨터구조] 메모리 계층 (0) | 2024.12.18 |
[컴퓨터구조] 포워딩 hazard 위험 (0) | 2024.12.18 |
[컴퓨터구조] 파이프라인 해저드 (Pipeline Hazards) 및 해결 방법 (0) | 2024.12.18 |
[컴퓨터구조] 파이프라인 및 제어신호 (0) | 2024.12.18 |