§ Обработчик
В этой главе будет показано, как создать простой обработчик исключения страничного нарушения; пример, приведенный в конце раздела служит иллюстрацией управления страницами.Итак, обработчик страничного нарушения является основой управления памятью на уровне страниц - это предусмотрено в самом процессоре, который генерирует исключение всякий раз, когда команда пытается обратиться к странице, не присутствующей в памяти. Однако, сам обработчик - это ещё не всё, что нужно для управления памятью - программе понадобятся следующие функции:
- Алгоритм управления таблицами страниц - он должен создавать новые таблицы, уничтожать старые и динамически редактировать каталог и таблицы страниц;
- Структура данных, определяющая наличие и размещение свободных физических страниц;
- Алгоритм, который управляет этой структурой, то есть занимает и освобождает страницы физической памяти, а также следит за самой структурой (в том случае, если она сама требует динамического распределения в памяти);
- Процедура определения количества физической памяти в компьютере.
- Физические страницы памяти будут только заниматься, но не освобождаться. Это значит, что когда все свободные страницы будут заняты, обработчик страничного нарушения аварийно прекратит работу программы. Безусловно, это является минусом данного примера, но имейте в виду, что главное в нём - это показать как именно работает обработчик страничного нарушения, а не построение механизма виртуальной памяти. Пример получился достаточно сложным, поэтому, чтобы не перегружать его деталями, он ограничен функционально.
- При определении свободной физической памяти, подразумевается, что вся память свыше 1Мб + 64К свободна (HMA пример не использует). Отрицательно это может сказаться, если перед запуском примера у вас будет загружен smartdrv, также использующий эту память. В примере не выясняется, сколько памяти оставила нам MS-DOS, т.к. при этом потребуется работа с himem.sys, а это выходит за рамки данного раздела и, к тому же, усложнит пример.