Усі системні дії виконує ядро операційної системи Unix. Ядро - звичайний виконуваний файл, розташований у файлі / unix або / stand / unix або / vmunix або / vmlinuz (залежно від конкретної реалізації). Можете подивитися розмір цього файлу - не маленький. При початковому завантаженні системи ядро цілком завантажується в оперативну пам'ять, і надалі резидентно знаходиться в ній, виконуючи всі необхідні роботи.
Що входить в ядро.
ДРАЙВЕРИ ПРИСТРОЇВ. І тих, які є, і тих, яких немає, але можуть бути, а також і такі, які ніколи вам не знадобляться.
КЕРУЮЧІ підпрограми: частини коду, відповідальні за забезпечення роботи користувача програм - поділ часу і інших ресурсів системи.
СЛУЖБОВІ ТАБЛИЦІ І ДАНІ ЯДРА: таблиці поточних процесів, відкритих файлів, керуючі структури ...
СИСТЕМНІ ВИКЛИКИ. (Те, що MS-DOSе називається "21 переривання" - можна вважати певною аналогією / пародією на системні виклики.) З точки зору програміста це звичайна сі-шна функція, тільки виконує вона системно-залежні дії, наприклад: прочитати дані з файлу, встановити з'єднання з мережею, створити каталог, і т.д. і т.п. Усі системні виклики (а всього їх понад 1500 штук) вкомпіліровани в тіло ядра unix. Користувальницькі програми, викликають функції, які є системними викликами, насправді містять тільки jump'и на відповідні адреси пам'яті в ядрі. У налаштовувану програму системні виклики не влінковиваются.
Що знаходиться в оперативній пам'яті.
Ядро операційної системи.
Буферний КЕШ. Частина оперативної пам'яті резервується під кешування читання і запису на диск. Будь-яка операція читання з диска призводить до того, що прочитані з блоки поміщаються в буферний кеш, а з нього вже передаються що запросив дані програмами. Якщо блок потрапив в кеш, то всі наступні звернення до нього будуть отримувати образ блоку з кешу, причому не залежно, від того - та ж сама програма, звертається до блоку, або яка-небудь інша. Кешується так само і запис на диск, знову ж таки, колективна між всіма виконуваними програмами.
ПРОЦЕСИ. Процесом в Unix "е називається виконується програма
Засоби економії пам'яті. Віртуальна пам'ять.
Реєнтерабельним КОДА. Коли одна і та ж програма (виконуваний файл) запущена в кількох примірниках, то в оперативну пам'ять завантажується тільки одна копія виконуваного ассемблерного коду на всіх. Кожен виконуваний процес використовує один і той же текст програми, просто в кожного процесу є свій власний покажчик на поточний оператор.
Отеки. (У Windows є схоже поняття DLL - динамічно підвантажується бібліотека). Деяка кількість часто виконуваних функцій (наприклад printf, та й багато інших) оформляється у вигляді спеціальним чином підготовленої бібліотеки (SHARED LIBRARY). При компіляції програми, що використовує колективні бібліотеки, ці функції не лінкуются всередину коду програми. Вони "висмикуються" з бібліотеки на стадії виконання програми. Цим ми економимо місце на диску і в оперативній пам'яті: у програмах відсутній код поділюваних функцій, а в оперативній пам'яті ця функція присутня в одному примірнику на всіх.
SWAPING. Кожен Unix-процес функціонує у своєму власному 32-х бітному віртуальному адресному просторі, що не перетинається з іншими. Адресний простір процесу може бути більшим, ніж фізична оперативна пам'ять. Віртуальна пам'ять підтримується за допомогою PAGING'а - дозволу віртуальних адрес у фізичні "на льоту", з підкачкою відсутніх сторінок пам'яті з swap-області на жорсткому диску.
Насправді SWAPING'а як такого в Unix "е немає, замість нього застосовується набагато більш гнучкий PAGING. (Swaping - за визначенням, це ПОВНА вивантаження програми на swap-область з метою звільнення місця в оперативній пам'яті).
Область пам'яті, зайнята програмою розділена на три частини: TEXT (що їх коди програми), DATA (статичні дані програми), STACK (динамічні дані). Коли операційка звільняє місце в пам'яті за рахунок Text'а, то вона не займається скиданням його на диск. Вона відразу позначає його як вільний. Дійсно, коли буде потрібно завантажити TEXT назад в пам'ять, його можна буде взяти з самого виконуваного файлу з програмою. Така економія має один побічний ефект. Файл програми, яка в даний момент виконується, неможливо знищити. Операційна система повідомить в цьому випадку: "text file busy", і відмовиться виконувати видалення.
БІТ Нав'язливі. (Sticky bit). Виконувана програма може мати додатковий атрибут. Так званий "біт нав'язливості". Коли така програма закінчує виконання, операційка (по можливості) намагається не займати пам'ять, в якій містився текст програми. Відповідно, повторний її запуск відбудеться дуже швидко - адже програма все ще завантажена в пам'ять, її не потрібно зачитувати з диска. Потрібно просто передати на неї управління.
Файлова система Unix.
Файлова система в Unix - "дерев'яна", складається з файлів і каталогів. На кожному розділі диска створюється власна незалежна файлова система. Окремі файлові системи "зчіплюються" разом, у єдине загальне дерево директорій. Така операція називається "монтуванням". Виглядає це приблизно так:
mount-F ufs / dev/dsk/m197_c0d0s5 / home1 mount-F ufs / dev/dsk/m197_c0d0s4 / usr dfОтримати доступ до файлів "несмонтірованной" файлової системи неможливо. Порочний пракіка MS-DOSа - скільки розділів, стільки й "дисків" (a: b: c: d: e: ... k: l: m: n:) у Unix не застосовується. У Unix завжди є рівно одне загальне дерево каталогів, і, за великим рахунком, користувачам абсолютно все одно, на якому саме диску або розділі диска розташовані його файли / usr / spool / moshkow або / home1/moshkow/bin/mcopy ...
Файлова система Unix кешується буферним кешем. Операція запису на диск виконується не тоді, коли це наказує виконуваний процес, а коли операційна система вважатиме за потрібне це зробити. Це різко піднімає ефективність і швидкість роботи з диском, і підвищує небезпеку її використання. Відключення живлення на "гарячій", що працює Unix-машині призводить до руйнувань структури файлової системи.
При кожній початковій завантаженні Unix перевіряє - чи коректно було вимкнуто машина в минулий раз, і якщо ні - автоматично запускає утиліту fsck (File System Check) - перевірку і ремонт файлових систем ..
Внутрішня структура файлової системи Unix.
Розділ диска, в якому створена файлова система, розбитий на три частини.
Суперблок. Займає 1 Kb. Містить службову інформацію:
Тип файлової системи,Розмір
Початок списку вільних блоків.
. . . щось ще
ОБЛАСТЬ INOD-ів. Займає приблизно 8% загального розміру розділу. inode - Index-node - описувач файлу. Він містить всю інформацію про фото, за винятком імені файлу, і власне даних файлу. У inod'е зберігається:
тип файлу (файл, каталог, іменований канал, спеціальний файл)хто власник
права (атрибути) файлу
час модифікації / створення файлу
адреси блоків, з яких складається файл
щось ще ...
ОБЛАСТЬ ДАНИХ. У цій області розташовані блоки з даними фай лов. Незайняті блоки провязав в СПИСОК ВІЛЬНИХ БЛОКІВ
Файли бувають двох основних типів. ФАЙЛ, КАТАЛОГ.
ФАЙЛ - він і є файл.
КАТАЛОГ - файл фіксованого формату: складається з рядків з іменами файлів, що входять в каталог
імя_файла1 Номер_Інода1 імя_файла2 Номер_Інода2. . .Щоб отримати доступ до файлу по імені, операційна система
знаходить це ім'я в каталозі, що містить файл, бере Номер_Інода файлу, за номером знаходить inod в області inod'ов, з inod'а бере адреси блоків, в яких розташовані дані файлу, за адресами блоків зчитує блоки з області даних.Все.
Формат індексного описувача файлу.
Область Інода розбита на 64-х байтниє структури - inod'и. У inod'е зберігається:
Тип файлу (файл / каталог / спеціальний файл / fifo / socket)Атрибути (права доступу)
Власник файлу
Група-власник файлу
Часи створення, модифікації, останнього доступу до файлу
Довжина файлу
Адреса 1-го блоку файлу
Адреса 2-го блоку файлу
...
Адреса 10-го блоку файлу
Адреса блоку непрямої адресації (блоку з 256 адресами блоків)
Адреса блоку 2-й непрямої адресації (блоку з 256 адресами блоків з адресами)
Адреса блоку третій непрямої адресації (блоку з адресами блоків з адресами блоків з адресами)
Точний формат структури файлової системи, див man fs