Інтерфейс POSIX
POSIX (Portable Operating System Interface for Computer Environments – незалежний від платформи системний інтерфейс для комп'ютерного оточення) – це стандарт IEEE (Institute of Electrical and Electronics Engineers – інститут інженерів з електротехніки та радіоелектроніки), що описує системні інтер-
' У цьому контексті під системними командами слід розуміти якийсь набір програм, що дозволяють керувати обчислювальними процесами, наприклад pstat, kill, dir та ін.
Інтерфейс POSIX___________________________________________________ 305
фейси для відкритих операційних систем, у тому числі оболонки, утиліти та інструментарії. Крім цього, згідно з POSIX, стандартизованими є завдання забезпечення безпеки, завдання реального часу, процеси адміністрування, мережеві функції та обробка транзакцій. Стандарт базується на UNIX-системах, але допускає реалізацію й інших операційних системах.
Інтерфейс POSIX починався як спроба пропаганди інститутом IEEE ідей переносимості додатків у UNIX-середовищах шляхом розробки абстрактного незалежного від платформи стандарту. Однак POSIX не обмежується лише UNIX-системами; існують різні реалізації цього стандарту в системах, які відповідають вимогам, що висуваються стандартом IEEE Standard 1003.1-1990 (POSIX. 1). Наприклад, відома ОС реального часу QNX відповідає специфікаціям цього стандарту, що полегшує перенесення додатків у цю систему, але UNIX-системою не є у жодному вигляді, бо її архітектура використовує абсолютно інші принципи.
Цей стандарт докладно описує систему віртуальної пам'яті (Virtual Memory System, VMS), багатозадачність (Multiprocess Executing, МРЕ) та технологію перенесення операційних систем (CTOS). ТакимТаким чином, насправді POSIX є безліч стандартів POSIX. 1-POSIX. 12. У табл. 9.1 перераховано основні напрями, що описуються цими стандартами. Слід також відзначити, що у POSIX. 1 основною мовою опису системних функцій API передбачається мова С.
Таблиця 9.1. Сімейство стандартів POSIX
Стандарт Стандарт ISO Короткий опис
POSIX.0 Ні Введення до стандарту відкритих систем. Цей документ
не є стандартом у чистому вигляді, а являє собою рекомендації та короткий огляд технологій
POSIX.1 Так Системний інтерфейс API (мова С)
POSIX.2 Ні Оболонки та утиліти (схвалені IEEE)
POSIX.3 Ні Тестування та верифікація
POSIX.4 Ні Завдання реального часу та потоки виконання
POSIX.5 Так Використання мови ADA стосовно
до стандарту POSIX. 1
POSIX.6 Ні Системна безпека
POSIX.7 Ні Адміністрування системи
POSIX.8 Ні Мережі, «прозорий» доступ до файлів, абстрактні
мережеві інтерфейси, які не залежать від фізичних протоколів, виклики RPC, зв'язок системи з додатками, що залежать від протоколу
POSIX.9 Так Використання мови Fortran, стосовно
до стандарту POSIX. 1
POSIX. 10 Ні Super-computing Application Environment Profile (AEP)
POSIX. 11 Ні Обробка транзакцій AEP
POSIX. 12 Ні Графічний інтерфейс користувача (GUI)
306______________________________ Глава 9. Архітектура операційних систем
Таким чином, програми, написані з дотриманням даних стандартів, однаково виконуватимуться на всіх POSIX-сумісних системах. Проте стандарти частково мають лише рекомендаційний характер. Частина стандартів описана дуже суворо, тоді як іншачастина лише поверхово розкриває основні вимоги. Нерідко програмні системи заявляються як POSIX-сумісні, хоча їх назвати не можна. Причини криються у формальному підході до реалізації інтерфейсу POSIX у різних операційних системах. На рис. 9.1 зображено типову схему реалізації строго відповідного POSIX додатка.

Мал. 9.1. Схема реалізації програми, що суворо відповідає стандарту POSIX
З малюнка видно, що з взаємодії з операційною системою програма використовує лише бібліотеки POSIX. 1 та стандартну бібліотеку RTL мови С, в якій можливе використання лише 110 різних функцій, також описаних стандартом POSIX. 1.
На жаль, досить часто з метою збільшення продуктивності тієї чи іншої підсистеми або для введення фірмових технологій, які обмежують сферу застосування відповідним операційним середовищем, при програмуванні використовуються інші функції, що не відповідають стандарту POSIX.
Реалізації стандарту POSIX лише на рівні операційної системи різні. Якщо UNIX-системи у своїй абсолютній більшості спочатку відповідають специфікаціям IEEE Standard 1003.1-1990, WinAPI не є POSIX-сумісним. Однак для його підтримки в операційній системі Windows NT введено спеціальний модуль API для підтримки стандарту POSIX, що працює на рівні привілеїв процесів користувача. Даний модуль забезпечує перетворення і передачу викликів з програми користувача до ядра системи і назад, працюючи з ядром через WinAPI. Інші програми, написані з використанням WinAPI, можуть передавати інформацію POSIX додатків через стандартні механізми потоків введення-виведення stdin та stdout [57].
Приклади програмування для різнихінтерфейсів API____________________ 307
Приклади програмування для різних інтерфейсів API
Для наочної демонстрації принципових відмінностей інтерфейсів API найбільш популярних сучасних операційних систем для персональних комп'ютерів розглянемо найпростіший приклад, у якому необхідно підрахувати кількість прогалин у текстових файлах, імена яких повинні вказуватись у командному рядку. Розглянемо два варіанти програми: для Windows (з використанням WinAPI) та для Linux (POSIX API).
Оскільки нас цікавить робота з паралельними завданнями, нехай при виконанні програми для кожного з перерахованих у командному рядку файлів створюється свій процес або потік виконання (завдання), який паралельно з іншими процесами (потоками) виконує роботу з підрахунку пропусків у «своєму» файлі. Результатом роботи програми буде список файлів з підрахованою кількістю прогалин для кожного.
Слід звернути особливу увагу, що наведені нижче реалізації програм розв'язання цієї завдання є єдино можливими. В обох аналізованих операційних системах існують різні методи роботи з файловою системою та управління процесами. У цьому випадку розглядається лише один, але найбільш характерний для відповідного інтерфейсу API варіант.
Для того, щоб було зручніше порівнювати цю (листинг 9.1) та наступну (листинг 9.2) програми, а також враховуючи, що завдання не вимагає для свого рішення віконного інтерфейсу, в тексті використані ті виклики API, які не торкаються графічного інтерфейсу. Звичайно, нині рідко який додаток не використовує можливостей GUI, зате в нашому випадку відразу можна побачити різницю в організації паралельної роботи обчислень, що запускаються.