100 k =160k
(1)
MAIN функції текстового редактора функції графічного редактора
Тоді спроектуємо модуль так:
=110k
ОС з режимом оверлей має дві взаємопов’язані компоненти:
редактор міжмодульних зв’язків, який підтримує можливість побудови оверлеїв
функція виборки( завантаження ) оверлейного модуля.
Приклад
Таким чином, якщо ми маємо *.ехе простої структури з режимом оверлей(1)
таблиця управління оверлей-модулем
Дії компілятора при компіляції виклику функції:
код адрес функції
операції
Структура *.obj -– модуля
коментар: – хто виконав компіляцію
– дані для утиліти MAKE ( імена *.h – файлів та дати )
таблиця зовнішніх імен модуля:
ім’я функції
її глобальні дані
Код функції
Таблиця модифікації коду функції( в ній указане зміщення комірок, що потрібно модифікувати ).
Редактор міжмодульних зв’язків( LINKER )
cos.obj – головний модуль
Головний модуль отримує перше управління. В головному модулі знаходяться пролог та епілог Сі-програми.
Приклад
Якщо є глобальні змінні, то потрібно виконати конструктор( в пролозі ) та деструктор( в епілозі ).
Лінкер працює в два етапи( два перегляди ):
Перший перегляд: вибираються дані з розділу 2( імена функцій та глобальні дані ) і заносяться в спеціальну таблицю. Для тих імен( об’єктних файлів ), які не були прочитані,
Виконується операція першого перегляду.
Ім.’я функції | Довжина( об’єм ) коду функції | Зміщення
cos.obj
MAIN.obj
STRLEN.obj | 10k
8k
1k | 0
10k
18k
… | … | …
Переглянувши, дізнаємось об’єм ехе-файла : 19k
Другий перегляд( компоновка ехе-файла ): лінкер переглядає таблицю, отриману на першому етапі, зчитує obj-файли та об’єднує в єдиний файл. Будує таблицю настройки
ехе-файла. При об’єднанні obj- в ехе-файл в місцях виклику функції виконується модифікація коду.
0 виклик strlen strlen
MAIN –
під час компіляції–
зв’язуємось з strlen
В результуючий ехе-файл заноситься вся інформація щодо модифікованих комірок(
розділ 4 obj-модуля ). Тобто ехе-файл має вигляд:
0 cos main strlen таблиця модифікації ехе-файла
19k ( дані з розділу 4 *.obj -файлів )
Завантаження ехе-файла в ОП
ОС завантажує ехе-файл в ОП та виконує модифікації комірок згідно списка з
розділу 4.
Значення кожної комірки = попереднє значення + абсолютний адрес завантаження модуля
в ОП.
0 40k 58k
ядро ОС 19k
виклик strlen:
@ лекція 5 ( 14.03.03 )
Подивимось, як виконується оверлейний модуль.
*.ехе
Під час виконання оверлейного модуля, в пам’ять завантажуеться лише main - головна частина exe-файлу(функції, що не передбачають перевантаження).
Додатково операційній системі додається таблиця управління оверлейною структурою. Програмний код, що завантажується в оперативну пам’ять модифікується таким чином, що в місцях виклику функції, що перевантажується, вставляється програмне переривання по виконанню overlay – loader’a.
При виклику функції А попадаємо в ядро ОС, яке має overlay – loader. Там дивимось, чи є в пам’яті функція А. Якщо так, то в таблиці управління її поточним станом є 1, якщо ні – 0. Якщо ні, то дивимось її адрес і динамічно завантажкємо функцію А. Функція А виконує обробку і передає управління ОС, а ОС в свою чергу програмі.
Якщо з функцією А працюємо в циклі, то при наступному виклику її адрес вже відомий і їй лише передається управління, але вона вже не завантажується.
Якщо функція В викликається з того ж місця, що й функція А, то супервізор ставить поточний стан для А – 0 (він враховує, що А та В перетинаються).
Віртуальна пам’ять.
Адресний простір Віртуальної пам’яті завжди більший за адресний простір оперативної пам’ті.
В моделі віртуальної пам’яті задіяні 2 механізми:
механізи прямої адресації;
механізм пов’язаний з НЖМД.
Віртуальний адрес.
В архітектурі сучасних ЕОМ віртуальний адрес складається з двох компонент:
база;
зміщення.
За базу відповідають регістри (лічильники)команд, регістри (лічильники) даних,...
Під час компіляції програми (функції), компілятор присвоює лічильнику баз початкове значення 0. Під час завантаження програми ЕОМ, ОС присвоює регістрам точки завантаження в ОП програм та даних. База з’являється під час завантаження, а зміщення при компіляціїї. Це дає реальний адрес.
В моделі віртуальної пам’яті реальний адрес, що формується на основі машинної команди, трактується як віртуальний адрес. Частину віртуального простору займає ядро ОС.
Розробники архітектури запропонували декілька стратегій реалізації віртуальної пам’яті:
сегментна;
сторінкова;
змішана(сегментно - сторінкова).
Сегмент – послідовність комірок ОП, яка має змінну довжину. Як правило об’єм сегменту 64К, 128К, 1Мб.
Сторінка – послідовність комірок фіксованої довжини.
Об’єм сторінки 512б, 1К, 2К, 4К (маленький).
Оскільки це апаратні речі, розглянемо трансляцію віртуального адресу в реальний адрес.
Пам’ять: по швидкодії КЕШ 2-го рівня переважає оперативну пам’ять.
Потрібно, щоб апаратура ЕОМ код програми автоматично переписувала в КЕШ.
За рахунок цього програма виконується швидше.
КЕШ 1-го рівня – це пам’ять процесору (64К).
Трансляція віртуального адресу (сторінкова стратегія)
Об’єм віртуальної пам’яті, що виділяється для кожної задачі фіксований (і, наприклад в архітектурі Intel(P4) дорівнює 2Гб). В архітектурі ЕОМ існує об’єкт – регулярна таблиця сторінок задачі.
Колонка 1: Значення:
0 – сторінка на НЖМД;
1 – сторінка в ОП.
Колонка 2: Атрибути сторінки (характеристики для ядра ОС):
RO – read-only;
RW – read-write;
E – execute (сторінка з програмним кодом);
D – data (сторінка з даними).
Колонка 3: Значення:
0 – пам’ять не виділена механізмом MALLOC;
1 – пам’ять виділена механізмом MALLOC.
Колонка 4: Значення:–
коли сторінка на НЖМД, її адрес знаходиться в swap-файлі;–
коли сторінка знаходиться в ОП, то її адрес теж в ОП.
В середовищі ОС існують таблиці трансляції по кількості задач, що в даний момент знаходяться в ОП. Регістр таблиці сторінок задачі вказує на таблицю трансляції активної задачі. Таблиця трансляції завантажується в КЕШ 1-го рівня.
В момент коли змінюється активна задача, ОС перевантажує регістр таблиці сторінок задачі та завантажує в КЕШ нову таблицю. Зміна значення регістру таблиці сторінок та перевантаження таблиці трансляції виконуються однією машинною командою – заміна контексту задачі (виконується за 100-ні тактів базової частоти процесора).
Якщо в