Сколько ошибок страницы нужно этой программе?

Вы можете использовать eval, чтобы получить чей-то домашний каталог.

eval echo "~$USER"

По крайней мере, для локальных пользователей это точно работает. Я не знаю, работает ли eval с удаленными пользователями, такими как LDAP.

0
09.10.2018, 18:21
1 ответ

Then why is the text so sure that the most recent page is moved out of RAM immediately after being accessed?

Как правило, удаляется страница, к которой обращались наименее недавно, но это приводит к описанному патологическому поведению. При первом прохождении внутреннего цикла выгружаются первые n кадров; затем, когда страница n + 1 должна быть выгружена, страница 1 выгружается, и так далее, гарантируя, что все страницы должны быть выгружены обратно каждый раз вокруг цикла.

Однако этот сценарий действительно маловероятен. Если системе полностью не хватает физической памяти (и подкачки ), ядро ​​уничтожит программу, чтобы освободить часть памяти; учитывая поведение тестовой программы, вряд ли это кандидат. Если системе не хватает только физической оперативной памяти, ядро ​​выгрузит страницы или сократит свои кэши; если он меняет местами страницы, вряд ли он нацелится на тестовую программу. В обоих случаях тестовая программа будет иметь достаточно оперативной памяти для своего рабочего набора. Если вы каким-то образом умудряетесь голодать тестовую программу только (, например. увеличив свой рабочий набор так, чтобы он доминировал в системной памяти ), вы с большей вероятностью на практике увидите, что он будет уничтожен с помощью SIGSEGV, чем вы увидите, как он постоянно просматривает свой рабочий набор. (Это нормально, это мысленный эксперимент в учебнике. Изучите получившиеся принципы, не обязательно пытаться применить пример на практике.)

Can it just keep "n-1" pages i.e. rows in RAM, and use the remaining one page for all the page faults and replacements?

Он мог бы , но это было бы необычно для системы; как система узнает, какими будут будущие шаблоны доступа к памяти? Вообще говоря, вы увидите вытеснение LRU, поэтому цикл будет демонстрировать патологическое поведение, как описано выше.

Если вы хотите поиграть с этим, исправьте программу, чтобы она соответствовала размеру страницы 4 КБ (, используемому на x86; Я предполагаю, что Linux на 64 -бит x86 здесь )и на самом деле компилируется:

int main(int argc, char **argv) {
  int i, j;
  int data[128][1024];
  for (j = 0; j < 1024; j++)
    for (i = 0; i < 128; i++)
      data[i][j] = 0;
}

Затем запустите его с помощью /usr/bin/time,который покажет количество ошибок страницы:

0.00user 0.00system 0:00.00elapsed 100%CPU (0avgtext+0avgdata 1612maxresident)k
0inputs+0outputs (0major+180minor)pagefaults 0swaps

Такой вид обработки массива на практике вызовет больше проблем с вытеснением строк из кэша, чем с ошибками страниц.

2
28.01.2020, 02:31

Теги

Похожие вопросы