ЗНАЕТЕ ЛИ ВЫ?

Виконання й завантаження користувальницьких програм в 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збирає відповідну інформацію, перетворить її в текстову форму й поміщає в буфер читання відповідного процесу.

Ввод й вивід в Linux

Система файлів Linux, орієнтована на пристрої, здійснює доступ до дискової пам'яті з помошью двох кэшей:

· Дані зберігаються в кэше сторінок, що об'єднаний із системою віртуальної пам'яті;

· Метаданные зберігаються в буферному кэше, причому кожен кэш індексується блоком диска.

Linux розбиває пристрою на три класи:

Блокові пристроїдопускають довільний доступ до повністю незалежних блоків даних фіксованого розміру.

Символьні пристроївключають більшу частину всіх інших пристроїв; вони не мають потреби в підтримці функціональності звичайних файлів.

Мережні пристроївзаємодіють із мережною системою ядра.

Модульна структура драйверів пристроїв в Linux зображена на рис. 26.5.

 

Рис. 26.5. Модульна структура драйверів пристроїв.

Блокові пристроїзабезпечують основний інтерфейс до всіх дискових пристроїв у системі. Блоковий буферний кэш служить для двох основних цілей:

· Як буферний пул для активного вводу-виводу

· Як кэш для завершеного вводу-виводу.

Менеджер запитів управляє читанням і записом умісту буферів за допомогою драйвера блокового пристрою.

Символьні пристрої. Драйвер символьного пристрою не підтримує довільний доступ до фіксованих блоків даних.

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

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

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

Взаємодія процесів в Linux

Як й UNIX, Linux інформує процеси про настання подій за допомогою сигналів.

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

Ядро Linux не використає сигнали для комунікації процесів, що виконують у режимі ядра. Комунікація усередині ядра здійснюється за допомогою структур планувальника – states( стану ) і wait.queue (черга очікування).

Механізм конвеєра (pipe)дозволяє дочірньому процесу успадковувати комунікаційний канал від процесу-батька. Дані, записувані з одного кінця конвеєра, можуть бути прочитані на іншому кінці.

Загальна пам'ять забезпечує дуже швидкий спосіб комунікації; будь-які дані, записаним одним процесом у регіон загальної пам'яті, можуть бути негайно прочитані будь-яким іншим процесом, що відобразив цей регіон у свій адресний простір.

Однак з метою синхронізації загальна пам'ять повинна використатися в сполученні з яким-небудь іншої комуникационным механізмом.

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

Відображення в загальну пам'ять перенаправляють відмови сторінок у регіон пам'яті, зайнятий поділюваним об'єктом.

Поділювані об'єкти пам'ятають свій уміст, навіть якщо в цей момент ніякі процеси не відображають їх у свої віртуальні простори пам'яті.

Структура мережі в Linux

Робота в мережі - ключова область функціональності в Linux.

Мережна система Linux підтримує основні Інтернет-протоколи для комунікацій UNIX - UNIX. Вона також реалізує протоколи, характерні для ОС, відмінних від UNIX, зокрема, протоколи, використовувані в мережах PC, таких як Appletalk й IPX.

Мережна система Linux реалізована у вигляді трьох рівнів абстракції:

· Сокетный інтерфейс

· Драйвери протоколів

· Драйвери мережних пристроїв.

Найбільш важливий набір мережних протоколів в Linux - це набір протоколів Інтернету.

Мережна система Linux забезпечує маршрутизацію між різними машинами на будь-якій ділянці мережі. На верхньому рівні протоколу маршрутизації підтримуються UDP-, TCP- і ICMP-протоколи.

Безпека в Linux

У системі Linux реалізовані що підключають аутентификационные модулі (pluggable authentication modules - PAM засновані на загальній бібліотеці, що може бути використана будь-якими компонентами, де потрібно аутентифицировать користувача).

Керування доступом у системах типу UNIX, включаючи й Linux, здійснюється за допомогою унікальних числових ідентифікаторів користувача й групи ( uidй gid ).

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

Linux доповнює стандартний механізм UNIX ( setuid ) двома способами:

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

· Додано характеристику процесу, що надає лише підмножина повноважень, відповідно до діючого uid.

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





Последнее изменение этой страницы: 2016-07-11; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.156.32 (0.013 с.)