- •Призначення та основні функції операційної системи.
- •Моделі операційних систем.
- •Класифікація операційних систем.
- •Виникнення та розвиток Unix - подібних систем.
- •Принципи структуризації побудови ос.
- •Підходи до архітектурної ос.
- •Основні функціональні підсистеми сучасних ос.
- •Підсистема управління оперативною пам'яттю
- •Підсистема управління задачами (процесами)
- •Апаратна підтримка функціонування ос.
- •Призначення та принципи роботи основних функціональних підсистем.
- •Інтерфейс системних викликів, статичні та динамічні бібліотеки.
- •Процес. Дескриптор процесу. Створення та завершення процесів.
- •Порядок запуску програм засобами базового інтерфейсу управління процесами.
- •Основні можливості та функції базового інтерфейсу управління процесами.
- •Ідентифікатор процесу. Основні атрибути процесу. Оперування атрибутами процесу.
- •Організація взаємодії між батьківським та дочірніми процесами.
- •Створення та завершення процесів. Поняття про дескриптор процесу.
- •Отримання ідентифікаторів процесів. Стани процесу.
- •Загальний порядок та фізичний зміст створення нового процесу.
- •Поняття процесу з позиції концепції багатопотокового виконання.
- •Поняття про життєвий цикл процесу.
- •Основні можливості та функції базового інтерфейсу управління сигналами. Диспозиція сигналу процесу.
- •Загальний порядок генерування та доставки сигналів процесу. Типи та властивості сигналів.
- •Основні можливості та функції базового інтерфейсу управління потоками.
- •Порядок створення та завершення потоків.
- •Принципи застосування базового інтерфейсу введення/виведення. Порядок роботи з файлом.
- •Основні можливості та функції стандартної бібліотеки введення/виведення.
- •Принципи застосування стандартної бібліотеки введення/виведення. Порядок роботи з файлом.
- •Поняття файлу. Типи файлів. Дані та метадані файлу.
- •Особливості застосування базового інтерфейсу та стандартної бібліотеки введення/виведення.
- •Загальні концепції синхронізації задач.
- •Сутність проблеми змагань між задачами. Умови виникнення змагань. Критичний код, критичний ресурс.
- •Загальні відомості про інтерфейси користувача ос.
- •Графічний інтерфейс
- •Порівняння графічного інтерфейсу та інтерфейсу командного рядка.
- •Приклади графічних середовищ користувача. Організація текстового сеансу роботи користувача.
- •Загальний порядок завантаження ос. Ланцюгове завантаження.
- •Досистемний етап завантаження.
- •Системний етап завантаження. Реалізація системного етапу завантаження Linux.
- •Процес init. Файли /etc/inittab, /etc/rc.D/rc.Sysinit.
- •Сценарії ініціалізації ос. Приклади системних демонів.
- •Компіляція та компоновка. Основні прийоми розробки початкових текстів, компіляції і компоновки програм. Статична компоновка. Динамічне зв’язування.
- •Створення та підключення бібліотек. Види бібліотек. Управління вибором способу підключення бібліотек, наявних у двох варіантах.
- •Види бібліотек та порядок створення бібліотек.
- •Поняття файлу та файлової системи. Імена файлів. Символічне посилання на файл.
- •Фізична організація файлових систем. Типи фізичної організації файлових систем. Поняття фрагментації даних.
- •Типи файлів. Власники файлів. Права доступу до файлів.
- •Основні атрибути файлів.
- •Призначення та приклади використання утиліт: mkdir, mknod, mkfifo, cp, mv, rename.
- •Типи користувачів. Облікові даних користувачів. Групи користувачів.
- •Призначення та зміст файлів, що утворюють традиційну базу обліку користувачів Unix. Псевдокористувачі.
- •Призначення та приклади застосування базових утиліт управління обліком користувачів Unix: useradd, usermod, userdel, groupadd.
- •Призначення та приклади застосування базових утиліт управління обліком користувачів Unix: groupmod, groupdel, passwd, gpasswd.
- •Програма, задача, процес. Привілейовані та непривілейовані процеси.
- •Ідентифікатор процесу. Родинні відносини між процесами.
- •Призначення та приклади застосування базових утиліт управління задачами Unix: ps, kill, nice, renice, su, sudo.
- •Поняття мережевої та розподіленої ос. Вимоги до розподілених ос.
- •Поняття обчислювального кластера. Розподілена подільна пам’ять.
- •Принципи та обмеження основних способів оповіщення задач про настання подій (синхронізації).
- •Основні програмні інтерфейси синхронізації виконання процесів.
- •Командний сценарій. Потоки введення/виведення, конвеєри.
- •Стандартне виведення
Досистемний етап завантаження.
Незважаючи на те, що досистемне завантаження не залежить від типу операційної системи, яка починає роботу після неї, більшість систем надають власні засоби по її огранізації. У Linux найбільш популярні підсистеми завантаження LILO (LInux LOader) і GRUB (GRand Unified Bootloader). Обидві ці підсистеми мають текстовий і графічний варіанти інтерфейсу, який надає користувачеві можливість вибрати певний заздалегідь налаштований тип завантаження Досистемне завантаження проходить в три етапи.
1.Завантажувач з ПЗУ визначає, з яких пристроїв можна грузиться і, можливо, пропонує користувачеві вибрати одне з них. Він завантажує з вибраного пристрою первинний завантажувач і передає йому управління.
2.Первинний завантажувач визначає (а найчастіше - знає), де знаходиться вторинний завантажувач - велика і досить розумна програма. Йому це зробити простіше, ніж програмі з ПЗУ: по-перше, тому що для кожного пристрою первинний завантажувач свій, а по-друге, тому що його можна легко змінювати при зміні налаштувань завантажуваної системи. У схемі, запропонованій LILO і GRUB, первинний завантажувач не вступає в розмови з користувачем, а негайно завантажує вторинний і передає йому управління.
3.Вторинний завантажувач досить розумний, щоб знати, де знаходиться ядро системи (можливо, не одне), пропонувати користувачу кілька варіантів завантаження на вибір, і навіть, в разі GRUB, дозволяє задавати власні варіанти завантаження. Його завдання - завантажити в пам'ять ядро і все необхідне для старту системи (іноді - модулі, іноді - стартовий віртуальний диск), налаштувати все це і передати управління ядру.
Системний етап завантаження. Реалізація системного етапу завантаження Linux.
Системний етап: реалізується ядром ОС і спеціальними процесами породженими цим самим ядром. Ядро працює в спеціальному режимі, т. зв. «Режимі супервізора», що дозволяє йому мати доступ відразу до всієї оперативної пам'яті і апаратною таблиці задач. Процеси запускаються в «режимі користувача»: кожен жорстко прив'язаний ядром до одного запису таблиці завдань, в якій, серед інших даних, зазначено, до якої саме частини оперативної пам'яті цей процес має доступ. Ядро постійно знаходиться в пам'яті, виконуючи системні виклики - запити від процесів на виконання цих підпрограм. Робота ядра після того, як йому передано управління, і до того, як воно почне працювати в штатному режимі, виконуючи системні виклики, зводиться до наступного.
Спочатку ядро визначає апаратне оточення. Одне і те ж ядро може бути успішно завантажено і працювати на різних комп'ютерах однаковою архітектури, але з різним набором зовнішніх пристроїв. Завдання ядра - визначити список зовнішніх пристроїв, складових комп'ютер, на який воно влучило, класифікувати їх (визначити диски, термінали, мережеві пристрої і т. п.) і, якщо треба, налаштувати. При цьому на системну консоль (зазвичай перша віртуальна консоль Linux) виводяться діагностичні повідомлення (згодом їх можна переглянути утилітою dmesg).
Потім ядро запускає кілька процесів ядра. Процес ядра - це частина ядра Linux, зареєстрована в таблиці процесів. Такому процесу можна послати сигнал і взагалі користуватися засобами між процесами взаємодії, на нього поширюється політика планувальника завдань, проте ніякої задачі в режимі користувача він не відповідає, це просто ще одна іпостась ядра. Команда ps-ef показує процеси ядра в квадратних дужках, крім того, в Linux прийнято (але не обов'язково), щоб імена таких процесів починалися на «k»: [kswapd], [keventd] і т. п.
Далі ядро підключає (монтує) кореневу файлову систему відповідно до переданих параметрів (в наших прикладах - root = / dev/hda5). Підключення це відбувається в режимі «тільки для читання» (read-only): якщо цілісність файлової системи порушена, цей режим дозволить, не посилюючи положення, прочитати і запустити утиліту fsck (file system check). Пізніше, в процесі завантаження, коренева файлова система підключиться на запис.
Нарешті, ядро запускає з файлу / sbin / init перший справжній процес. Ідентифікатор процесу (PID) у нього дорівнює одиниці, він - перший у таблиці процесів, навіть незважаючи на те, що до нього там були зареєстровані процеси ядра. Процес init - дуже, дуже старе винахід, він мало не старше самої історії (історії UNIX, звичайно), і з давніх пір його ідентифікатор дорівнює 1. З запуску init починається завантаження самої системи
