Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операційні системи.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6.41 Mб
Скачать

Виконання й завантаження користувальницьких програм в Linux

Linux підтримує таблицю функцій для завантаження програм. Кожної функції надається можливість спробувати завантажити заданий файл, коли виконується системний виклик exec.

Реєстрація програм, що завантажують багаторазово, дозволяє Linux підтримувати як ELF-,так й a.out – формати коду.

Первоначально сторінки двійкового файлу завантажуються у віртуальну пам'ять; тільки якщо програма намагається звернутися до даної сторінки й виникає відмова сторінки, у результаті дана сторінка завантажується у фізичну пам'ять.

Двійковий файл формату ELF (Executable and Linkage Format) складається із заголовка, за яким ідуть трохи вирівняних до сторінки секцій ; ELF-завантажник читає заголовок і відображає секції файлу в окремі регіони віртуальної пам'яті.

Структура секцій файлу ELF для модуля ядра Linux показана в таблица 1.

Таблиця 1. Структура секцій файлу ELF для модуля ядра Linux

.text

інструкції

.fixup

зміни часу виконання

.init.text

інструкції ініціалізації модуля

exit.text

вихідні інструкції модуля

.rodata.etrl.l

рядка тільки для читання

.modinfо

текст макросів модуля

_versions

дані про версії модуля

.data

инициализированные дані

.bss

неинициализированные дані

other

Розподіл пам'яті для ELF-програм в Linux зображено на рис. 26.2.

Рис. 26.2.  Розподіл пам'яті для ELF-програм.

Статична й динамічна линковка.Програма, бібліотечні функції якої убудовані безпосередньо у двійковий виконува код, що, статично линкуется зі своїми бібліотеками.

Основний недолік статичної линковки в тім, що будь-яка генерируемая програма повинна зберігати копії тих самих загальносистемних бібліотечних функцій.

Динамічна линковка більше ефективна в термінах як використання фізичної, так і дискової пам'яті, тому що вона завантажує системні бібліотеки на згадку тільки один раз.

Системи файлів Linux

З погляду користувача файлова система Linux являє собою ієрархічне дерево директорій, що підкоряється семантиці UNIX.

Із внутрішньої точки зору, ядро приховує деталі реалізації й управляє багатьма різними файловими системами через загальний рівень абстракції, тобто віртуальну файлову систему (VFS).

Linux VFS спроектована по объектно-ориентированным принципах і використає набір визначень, що задає структуру файлів. Системні структури inode-object й file-object представляють окремі файли. Об'єкт file system object представляє файлову систему в цілому. Існує рівень абстракції для маніпулювання цими об'єктами.

Файлова система Ext2fs – основна файлова системи Linux. Вона використає механізм, подібний з UNIX BSD Fast File System (ffs) для пошуку блоків даних, що належать деякому файлу.

Основні розходження між ext2fs й ffs стосуються їхній політик розподілу дискової пам'яті.

У системі ffs диск ділиться на файли, що складаються із блоків по 8Kb, а блоки розбиваються на фрагменти по 1Kb для зберігання маленьких файлів або частково заповнених блоків наприкінці файлу.

Система Ext2fs не використає фрагменти; вона розподіляє пам'ять більше дрібними одиницями. Розмір блоку за замовчуванням в ext2fs -1Kb, хоча блоки в 2Kb й 4Kb також підтримуються.

Система Ext2fs використає політики розподілу, спроектовані з метою розміщення логічно суміжних блоків файлу у фізично суміжних блоках на диску, так щоб можна було використати одну операцію вводу-виводу для декількох суміжних блоків.

Структурна схема системи файлів Ext2fs показана в таблица 2.

Таблиця 2. Структурна схема системи файлів Ext2fs в Linux

Суперблок (Superblock)

Описани групи блоків (Group Descriptors)

Бітова карта блоків (Block Bitmap)

Бітова карта індексних дескрипторів (Inode Bitmap)

Таблиця індексних дескрипторів (Inode Table)

Дані (Data)

Групи блоків в Ext2fs.Всі блоки ext2 розділяються на групи блоків. Для кожної групи блоків створюється окремий запис у глобальної дескрипторной таблиці, у цьому записі зберігаються основні параметри:

  • номер блоку бітовий карти блоків

  • номер блоку бітової карти inode

  • номер блоку таблиці inode

  • число вільних блоків у групі

  • число inode, що містить каталоги.

Бітова карта блоків — це структура, кожен біт якої показує, чи відведений відповідний йому блок якому-небудь файлу. Якщо біт дорівнює 1, то блок зайнятий. Аналогічну функцію виконує бітова карта індексних дескрипторів, показуючи які саме індексні дескриптори зайняті, а які немає. Ядро Linux, використовуючи число inode, що містить каталоги, намагається рівномірно розподілити inode каталогів по групах, а inode файлів поміщає, якщо це можливо, у групу з батьківським каталогом.

Все місце, що залишилося, позначене в таблиці як дані, приділяється для зберігання файлів.

Адресація файлів в Ext2fs.Система адресації даних - одна із самих істотних складових частин файлової системи. Саме система адресації дозволяє знаходити потрібний файл серед безлічі як порожніх, так і зайнятих блоків на диску.

Файлова система ext2 використає наступну схему адресації блоків файлу. Для зберігання адреси файлу виділено 15 полів, кожне з яких складається з 4 байтів.

Якщо розмір файлу менше або дорівнює 12 блокам, то номера цих кластерів безпосередньо перераховуються в перших дванадцятьох полях адреси. Якщо розмір файлу перевищує 12 блоків, то наступне 13-і поле містить адреса кластера, у якому можуть бути розташовані номери наступних блоків файлу.

Таким чином, 13-й елемент адреси використається для непрямої адресації. При максимальному розмірі блоку, рівних 4096 байтів, 13-й елемент може містити до 1024 номерів наступних кластерів даних файлу. Якщо розмір файлу перевищує 12+1024 блоків, то використається 14-і поле, у якому перебуває номер блоку, що містить 1024 номерів блоків, кожний з яких зберігають 1024 номерів блоків даних файлу. Тут застосовується вже подвійна непряма адресація. І, нарешті, якщо файл включає більше 12+1024+1048576 = 1049612 блоків, то використається останнє 15-і поле для потрійної непрямої адресації.

Таким чином, описана вище система адресації, дозволяє при максимальному розмірі блоку 4 Кб мати файли розміру до 2 терабайт або більше.

Схема адресації файлів у системі Ext2fs зображена на рис. 26.3.

Рис. 26.3.  Адресація файлів у системі Ext2fs.

Принципи розміщення блоків у системі Ext2fs ілюструються на рис. 26.4.

Рис. 26.4.  Принципи розміщення блоків у системі Ext2fs.

Файлова система Linux Proc.Файлова система proc не зберігає дані; замість цього, їхній уміст обчислюється на вимогу, відповідно до користувальницьких запитів на ввід-вивід.

Система proc реалізує структуру директорій і файли, що перебувають усередині них; потім вона визначає унікальний і зберігати номер, що, inode для кожної директорії й файлів, які в ній утримуються. Вона використає цей номер inode для ідентифікації, яка операція потрібно, коли користувач намагається звернутися до конкретного inode файлу або виконати пошук у конкретному inode директорії.

Коли дані читаються з одного із цих файлів, система proc збирає відповідну інформацію, перетворить її в текстову форму й поміщає в буфер читання відповідного процесу.