Системная функция plock дает суперпользователю возможность устанавливать и снимать блокировку (в памяти) на областях команд и данных вызывающего процесса. Процесс подкачки и "сборщик" страниц не могут выгружать заблокированные страницы из памяти. Процессам, использующим эту системную функцию, не приходится дожидаться загрузки страниц, поэтому им гарантирован более быстрый ответ по сравнению с другими процессами. Следует ли иметь также возможность блокировки в памяти и области стека? Что произойдет в том случае, если суммарный объем заблокированных областей превысит размер доступной памяти в машине?
Что делает программа, приведенная на ? Подумайте над альтернативной стратегией замещения страниц, в соответствии с которой в рабочее множество каждого процесса включается максимально-возможное число страниц.
struct fourmeg { int page[512]; /* пусть int занимает 4 байта */ } fourmeg[2048]; main() { for (;;) { switch(fork()) { case -1: /* процесс-родитель не может выполнить * fork --- слишком много потомков */ case 0: /* потомок */ func(); default: continue; } } } func() { int i; for (;;) { printf("процесс %d повторяет цикл\n",getpid()); for (i = 0; i < 2048; i++) fourmeg[i]290ge[0] = i; } } |
Рис. 9.30
Comments:
Copyright ©