- •Призначення та основні функції операційної системи.
- •Моделі операційних систем.
- •Класифікація операційних систем.
- •Виникнення та розвиток 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.
- •Поняття мережевої та розподіленої ос. Вимоги до розподілених ос.
- •Поняття обчислювального кластера. Розподілена подільна пам’ять.
- •Принципи та обмеження основних способів оповіщення задач про настання подій (синхронізації).
- •Основні програмні інтерфейси синхронізації виконання процесів.
- •Командний сценарій. Потоки введення/виведення, конвеєри.
- •Стандартне виведення
Порядок запуску програм засобами базового інтерфейсу управління процесами.
Запуск нових програм в UNIX відокремлений від створення процесів і реалізований
за допомогою системних викликів сімейства ехес(). На практиці звичайно
реалізують один виклик (у Linux це — execveO). Послідовность кроків виконання execveO у Linux. Вхідними параметрами цього виклику є рядок з ім'ям виконуваного файла програми, масив аргументів командного рядка (до яких у коді процесу можна буде дістати доступ за допомогою масиву argv) і масив змінних оточення (що є парами ім'я=значення). Виклик execveO відбувається так.
1. Відкривають виконуваний файл програми.
2. Використовуючи вміст цього файла, ініціалізують спеціальну структуру даних
bprm, що містить інформацію, необхідну для виконання файла, зокрема відомості
про його двійковий формат.
3. Виконують дії для забезпечення безпеки виконання коду.
4. На базі параметрів виклику формують командний рядок і набір змінних оточення
програми (це спеціальні поля структури bprm).
5. Для кожного зареєстрованого оброблювача бінарного формату викликають
процедуру завантаження виконуваного файла через покажчик 1 oad_bi nary і перевіряють
результат цього виклику:
а) у разі коректного завантаження оброблювач починає виконувати код нової
програми;
б) якщо жоден з оброблювачів не зміг коректно завантажити код, повертають
помилку.
Основні можливості та функції базового інтерфейсу управління процесами.
Основу інтерфейсу управління процесами Unix складають наступні функції (перелік містить тільки ті функції, що визначені стандартом Single Unix Specification 3): _exit(), abort(), execl(), execle(), execlp(), execv(), execve(), execvp(), exit(), fork(), getegid(), geteuid(), getgid(), getpgid(), getpid(), getppid(), getrlimit(2), getrusage(2), getsid(), getuid(), setegid(), seteuid(), setgid(), setpgid(), setrlimit(2), setsid(), setuid(), wait(), waitid(), waitpid().
Ідентифікатор процесу. Основні атрибути процесу. Оперування атрибутами процесу.
Із кожним процесом у системі пов’язана ідентифікаційна інформація. PID - ідентифікатор процесу багатозадачного операційної системи. В операційних системах сімейства Windows є цілочисловим типом. В операційних системах стандарту POSIX тип ідентифікатора визначається в кожній операційній системі індивідуально. Наприклад, в операційній системі Linux ідентифікатор процесу є цілим типом.
До основних атрибутів процесу належить:
PID – ідентифікатор процесу
PPID – Ідентифікатор батьківського процесу
NI – Поправка пріорітету
TTY - Термінальна лінія
UID & EUID - Реальний і ефективний ідентифікатори користувача
GID & EGID - Реальний і ефективний ідентифікатори групи
Організація взаємодії між батьківським та дочірніми процесами.
Неіменовані канал є засобом взаємодії між пов'язаними процесами - батьківським і дочірнім. Батьківський процес створює канал за допомогою системного виклику:
int pipe(int fd[2]);
Масив з двох цілих чисел є вихідним параметром цього системного виклику. Якщо виклик виконався нормально, то цей масив містить два файлових дескриптора. fd[0] є дескриптором для читання з каналу, fd[1] - дескриптором для запису у канал. Коли процес породжує інший процес, дескриптори батьківського процесу успадковуються дочірнім процесом, і, таким чином, прокладається трубопровід між двома процесами. Природно, що один з процесів використовує канал лише для читання, а інший - тільки для запису (самі уявіть собі, що станеться, якщо це правило буде порушуватися). Тому, якщо, наприклад, через канал повинні передаватися дані з батьківського процесу в дочірній, батьківський процес відразу після запуску дочірнього процесу закриває дескриптор каналу для читання, а дочірній процес закриває дескриптор для запису. Якщо потрібен двосторонній обмін даними між процесами, то батьківський процес створює два канали, один з яких використовується для передачі даних до одну сторону, а інший - в іншу. Після отримання процесами дескрипторів каналу для роботи з каналом використовуються файлові системні виклики:
int read(int pipe_fd, void *area, int cnt);
int write(int pipe_fd, void *area, int cnt);
Перший аргумент цих викликів - дескриптор каналу, другий - вказівник на область пам'яті, з якої відбувається обмін, третій - кількість байт. Обидва виклику повертають кількість переданих байт (або -1 - при помилку).
Виконання цих системних викликів може переводити процес в стан очікування. Це відбувається, якщо процес намагається читати дані з пустого каналу або писати дані в переповнений канал. Процес виходить з очікування, коли в каналі з'являються дані або коли в каналі з'являється вільне місце, відповідно.
При завершенні використання каналу процес виконує системний виклик:
int close(int pipe_fd);
Якщо батьківський процес, який створив канал, породжує кілька дочірніх процесів, то всі дочірні процеси підключені до іншого кінця каналу. Якщо, наприклад, батьківський процес виводить дані в канал, то вони "дістануться" дочірній процес, який раніше виконає системний виклик read.
