logo search
АВМиС - бывшее АПЭВМ / apvem / всякаявсячина

54. Алгоритм загрузки программ

При запуске приложения система открывает его исполняемый файл и определяет объем кода и данных приложения. Затем резервирует регион адресного пространства и помечает, что физическая память, связанная с этим регионом, — сам ЕХЕ-файл. Вместо выделения какого-то пространства из страничного файла система использует истинное содержимое или образ (image) ЕХЕ-файла как зарезервированный регион адресного пространства программы. Благодаря этому приложение загружается очень быстро, а размер страничного файла удается заметно уменьшить.

Образ исполняемого файла (т. е. ЕХЕ- или DLL-файл), размещенный на жестком диске и применяемый как физическая память для того или иного региона адресного пространства, называется проецируемым в память файлом (memory-mapped file). При загрузке ЕХЕ или DLL система автоматически резервирует регион адресного пространства и проецирует на него образ файла. Помимо этого, система позволяет (с помощью группы Win32~функ-ций) проецировать на регион адресного пространства еще и файлы данных. (О проецируемых в память файлах мы поговорим в главе 8.)

Когда ЕХЕ- или DLL-файл загружается с дискеты, Windows 95 и Windows NT выделяют для него всю память из страничного файла. Далее система копирует файл с дискеты в оперативную память и в страничный файл; в этом случае страничный файл служит фактически копией содержимого оперативной памяти. Так, в частности, загружаются программы, устанавливающие приложения на компьютер.

Обычно программа установки запускается с первой дискеты, потом поочередно вставляются следующие диски, на которых собственно и содержится устанавливаемое приложение. Если системе понадобится какой-то фрагмент кода ЕХЕ- или DLL-модуля программы установки, на текущей дискете его, конечно же, нет. Но, поскольку система скопировала файл в оперативную память и в страничный файл, у нее не возникнет про­блем с доступом к нужному коду программы установки. Ну а по окончании ее работы система освободит оперативную память и память, выделенную в страничном файле.