Абсолютне завантаження
Перший, найпростіший, варіант полягає в тому, що
ми завжди завантажуватимемо програму з однієї і тієї ж адреси. Це можливо
в наступних випадках.
- Система може надати кожному процесу
свій адресний простір. Це можливо лише на процесорах, що здійснюють
трансляцію віртуальної адреси у фізичний.
- Система може виконувати в кожен момент лише
один процес. Так поводиться Ср/м, так само влаштована більшість завантажувальних
моніторів для саморобних комп'ютерів. Схожим чином влаштована система
RT-11, але про неї ледве нижче.
Завантажувальний файл, використовуваний при такому способі завантаження,
називається абсолютним завантажувальним модулем.
Початковий вміст образу процесу формується шляхом простого копіювання
модуля в пам'ять. У системі RT-11 такі файли мають розширення sav від saved
— збережений.
Формат завантажувального модуля а.out
У системі UNIX на 32-розрядних машинах також
використовується абсолютне завантаження. Завантажуваний файл формату а.out (сучасні версії
Unix використовують складніший формат завантажуваного модуля і складнішу схему завантаження,
яке обговорюватиметься в разд. Бібліотеки, що
розділяються) починається із заголовка (мал. 3.1), який містить:
• "магічне число" — ознака того, що це саме завантажуваний
модуль, а не щось інше;
• число TEXT_SIZE — довжину області коди програми (TEXT);
• DATA_SIZE —длину області инициализованных даних програми (DATA);
• BSS_SIZE —длину області неинициализованных даних програми (BSS);
• стартова адреса програми.
За заголовком слідує вміст областей TEXT і DATA. Потім може слідувати
налагоджувальна інформація. Вона потрібна символьним відладчикам, але самою програмою
не використовується.
При завантаженні система виділяє процесу TEXT_SIZE байтів віртуальної пам'яті,
доступної для чтения/исполнения, і копіює туди вміст сегменту TEXT.
Потім відлічується DATA_SIZE байтів пам'яті, доступної для чтения/ запису,
і туди копіюється вміст сегменту DATA. Потім відлічується
ще BSS_SIZE байтів пам'яті, доступної для чтения/записи, які прописуються
нулями.
Очищення
пам'яті, що виділяється, потрібне не стільки для зручності програміста,
скільки з міркувань безпеки: перед знов завантажуваним процесом
цю пам'ять могли займати (а при скільки-небудь тривалій роботі системи
майже напевно займали) інші процеси, які могли використовувати
цю пам'ять для зберігання важливих і секретних даних, наприклад паролів або
ключів шифрування.
Після цього виділяється простір під стек, в стек поміщаються позиційні
аргументи і середовище виконання (environment), і управління передається на
стартову адресу. Процес починає виконуватися.

Мал. З.1. Завантажувальний модуль а.out
|