가상메모리를 관리할때 신경써야 할 것들이 있다.
Other Considerations
- page size
- program restructuring
- TLB reach
Page Size
메모리는 page frame단위로 나누어져있다.
페이지 크기가 시스템 성능에 많은 영향을 미칠 것을 예상하고 있음.
page 크기는 적당한 것이 좋다.
page는 시스템의 특성에 따라 적절한 크기가 다르다
일반적인 page size는 2^7(128) bytes ~ 2^ 22(4M) bytes 이다.
4GB의 메모리를 가졌다고 했을 때
페이지 크기가 작은 경우 페이지 수가 많다.
페이지를 관리하기 위한 테이블이 크다.
커널이 이를 관리하는 오버헤드가 크다.
반면 페이지가 크면 페이지 수가 적다.
페이지를 관리하기 위한 테이블도 작다.
커널이 이를 관리하는 오버헤드가 작다.
paging system은 internal fragmentation이 발생할 수 있음
이때 페이지 크기가 작으면 내부 단편화가 감소되고
페이지 크기가 크면 내부 단편화가 증가한다.
virtual memory system은 swap device에 전체 메모리 내용이 올라가 있다.
disk(swap device)에 해당page가 작기 때문에 여러번 올려야 한다. 즉 I/O시간 증가
page가 크다면 I/O시간은 작다.
잘라서 여러번 읽는 것보다 큰 것을 한번에 읽는게 성능 측면에서 더 좋다.
Locality측면에서 보면 page 크기가 작으면 계속 읽을 page만 들어가 있기 때문에 locality가 높아진다 볼 수 있다.
page 크기가 큰 경우를 보면 locality가 낮은 경향을 보인다.
page 크기가 작고 수가 많으면 페이지를 읽기 위해서 자주 메모리상에 올라왔다가 내려갈 수 있으므로 page fault가 증가한다.
page 크기가 크면 한번 가져다 놓으면 많은 데이터를 가져가 읽을 수 있으므로 page fault는 감소할 것이다.
HW는 CPU처리 연산능력 증가와 메모리 사이즈가 증가하여 상대적으로 page fault의 처리비용이 늘어남
(추후 정리예정)
program restructuring
- 가상 메모리 시스템의 특성에 맞도록 프로그램을 재구성
- 사용자가 가상 메모리 관리 기법(ex. paging system)에 대해 이해하고 있다면, 프로그램의 구조를 변경하여 성능을 높일 수 있음
Example
Paging system, Page size = 1 KB
sizeof(int) = 4 bytes
// program-1
int main() {
int zar[256][256]; //행, 열
int i, j;
for(j = 0; j < 256; j++)
for(i = 0; i < 256; i++)
zar[i][j] = 0; //zar를 0으로 만든다.
return 0;
}
256 X 4 = 1KB, 즉 각 행 하나당 페이지 하나를 차지함
위의 시스템에서 문제가 있다
zar를 0으로 만들었을 때 다음 그림과 같이 되어있을 것이다.
Row-major order for array
for문을 보면 j, i순으로 반복문이 실행되는데 zar[0][0], zar[1][0], zar[255][0], zar[0][1], zar[1][1], zar[255][1] ....순으로 실행되어 page fault가 계속 발생되는 것을 확인할 수 있다.
이를 해결한다면 i와 j를 바꿔서 실행하면된다.
zar[0][0], zar[0][1], zar[0][2] ...순으로 실행되기 때문에 page fault가 발생되지 않는다.
// program-2
int main() {
int zar[256][256]; //행, 열
int i, j;
for(i = 0; i < 256; i++)
for(j = 0; j < 256; j++)
zar[i][j] = 0; //zar를 0으로 만든다.
return 0;
}
이런식으로 구조를 변경하면 문제점을 해결할 수 있다.
(코드상으로는 간단해보이지만, 메모리에 데이터가 어떻게 올라가는지, 가상메모리 시스템이 어떻게 생겼는지를 알아야 해당 작업을 수행할 수 있다.)
TLB Reach
TLB를 통해 접근할 수 있는 메모리의 양
TLB의 양 = The number of entries * the page size
- TLB의 hit ratio를 높이려면, TLB의 크기 증가하면 된다. (비용이 비쌈)
- page크기를 증가, 다양한 page size를 지원함 (OS의 지원이 필요함)
'CS > OS' 카테고리의 다른 글
[OS] 11-3. Directory Structure (0) | 2022.05.09 |
---|---|
[OS] 11-1. Disk System, File System (0) | 2022.05.07 |
[OS] 10. 가상 메모리 관리 - Replacement Strategies for Variable Allocation (0) | 2022.04.30 |
[OS] 10. 가상 메모리 관리 - Replacement Strategies for Fixed Allocation (0) | 2022.04.27 |
[OS]10. 가상 메모리 관리 - SW components (0) | 2022.04.25 |