나는 면접 시험에있는이 질문을 질문 받았다 Plz는 응답을 보낸다 : -페이지 크기를 얻는 방법
당신은 커널의 문서가 없다. 커널이 페이징을 지원한다는 것을 알고있을뿐입니다. 페이지 크기는 어떻게 알 수 있습니까? 페이지 크기에 관해 말할 수있는 플래그 또는 매크로가 없습니다.
시간을 사용하여 답을 얻을 수있는 것처럼 힌트를 받았습니다. 나는 아직 그것에 대한 단서가 없다.
나는 면접 시험에있는이 질문을 질문 받았다 Plz는 응답을 보낸다 : -페이지 크기를 얻는 방법
당신은 커널의 문서가 없다. 커널이 페이징을 지원한다는 것을 알고있을뿐입니다. 페이지 크기는 어떻게 알 수 있습니까? 페이지 크기에 관해 말할 수있는 플래그 또는 매크로가 없습니다.
시간을 사용하여 답을 얻을 수있는 것처럼 힌트를 받았습니다. 나는 아직 그것에 대한 단서가 없다.
실행 코드 :
for (int stride = 1; stride < maxpossiblepagesize; stride += searchgranularity) {
char* somemem = (char*)malloc(veryverybigsize*stride);
starttime = getcurrentveryaccuratetime();
for (pos = somemem; pos < somemem+veryverybigsize*stride; pos += stride) {
// iterate over "veryverybigsize" chunks of size "stride"
*pos = 'Q'; // Just write something to force the page back into physical memory
}
endtime = getcurrentveryaccuratetime();
printf("stride %u, runtime %u", stride, endtime-starttime);
}
그래프 Y 축에 X 축과 런타임에 보폭과 결과. stride = pagesize에서 성능이 더 이상 떨어지지 않는 지점이 있어야합니다.
여러 페이지 폴트가 발생합니다. 보폭이 페이지 크기를 초과하면 오류 수가 증가하지 않으므로 프로그램의 성능이 더 이상 크게 저하되지 않습니다.
더 지루하고 싶다면 mprotect
시스템 호출이 전체 페이지에서 작동해야한다는 사실을 악용 할 수 있습니다. 더 작은 것으로 시도해보십시오. 그러면 오류가 발생합니다. 그와 같은 다른 "구멍"도있을 것이라고 확신합니다. 그러나 위의 코드는 페이징을 지원하는 모든 시스템에서 작동하며 디스크 액세스는 RAM 액세스보다 훨씬 비쌉니다. 그것은 모든 신물 현대 시스템이 될 것입니다.
페이징이 실제로 작동하는 방식에 대한 질문이 내게 들립니다. 페이지 크기를 변경하면 시스템 실행에 미칠 영향을 설명하기를 원합니다.
나는이 물건에 녹슬지 만 페이지가 가득 차면 시스템이 페이지 스와핑을 시작하여 모든 작업 속도가 느려집니다. 그래서 당신은 다른 크기로 메모리를 채울 무언가를 실행하고 작업을 수행하는 데 걸리는 시간을 측정하고자합니다. 어떤 시점에서 작업을 수행하는 데 걸리는 시간이 갑자기 점프되는 점프가 발생합니다.
나는 이렇게하기의 구현에 약간 녹슬 었다고 말했다. 그러나 나는 그들이 그 대답의 형태라고 확신한다. 다음과 같은
그들이 무엇을 기대 하던지간에 그것은 거의 확실하게 취성있는 해결책이 될 것입니다. 하나의 경우, 여러 페이지 크기를 가질 수 있으므로, 하나의 작은 할당에 대한 모든 응답은 다음 멀티 메가 바이트 할당과 관련이 없습니다 (Linux의 Large Page 지원과 같은 내용 참조).
최종 솔루션보다는 문제에 어떻게 접근했는지 궁금합니다.
이 질문은 Linux에 관한 것이 아니라 POSIX 준수뿐만 아니라 sysconf (_SC_PAGE_SIZE)를 호출하는 설명서가 있기 때문에 리눅스에 관한 것이 아닙니다.
Stsquad 당신이 옳을 수도 있습니다. – Arpit
mprotect는 유닉스 시스템에 좋은 점이지만 일반적인 것이 아닙니다. @Borealid @Jon 여러분이 여기에서 설명한 것처럼 비슷한 대답을주었습니다. 페이지 오류 및 성능 기준을 기반으로합니다. 심지어 쓰기/쓰기 작업과 시간을 관련 짓려고했는데 블록으로 작성했지만 그 사람이 감명주지 않았던 것처럼 보입니다. ( – Arpit