
- •Лекція 4 «Операційні системи сімейства Unix, MacOs, Windows»
- •Сімейство Microsoft Windows.
- •Підсистеми ядра ос. Інтерфейс ядра операційної системи
- •Підсистема управління введенням-виведенням
- •Підсистема управління оперативною пам'яттю
- •Поняття планувальника операційної системи.
- •Типи планувальників ос.
- •Реалізація планувальників у різних ос.
- •Взаємодія між процесами.
- •Засоби міжпроцесної взаємодії.
- •Поняття Бібліотеки.
- •Статичні та динамічні бібліотеки.
- •Використання бібліотек.
- •Додаткова функціональність ос.
- •Безпека ос.
- •Командний інтерпретатор операційної системи.
- •Характеристики Кожному процесу мають бути виділені наступні ресурси: процесор, пам'ять, доступ до пристроїв вводу-виводу, файли
- •Робочий цикл процесу
- •Виконання процесів
- •Завершення процесів
- •Особливості написання драйверів для Windows nt.
- •Сервісні системні виклики.
- •Система відслідковування та обробки помилок у ос.
- •Види помилок.
- •Робота з відеоадаптером.
- •Структура відеоадаптера.
- •Особливості функціонування відеоадаптера у текстовому та графічному режимах.
- •Отримання та зміна атрибутів.
- •Позиціонування та організація пошуку даних.
- •Основні функції для роботи з bios.
- •Системний реєстр.
- •Функції bios для роботи з консоллю.
- •Функції bios для роботи з клавіатурою.
- •Функції bios для роботи з екраном.
- •Робота з портами.
- •Інтерфейс rs – 232.
- •Отримання та передача даних через порти.
- •Таймер bios.
- •Керування пам’яттю за допомогою функцій biosmemory.
- •Резидентні програми.
- •Структура та особливості тsr –програм.
- •Модульне програмування.
- •Організація інтерфейсу.
- •Зв’язок Асемблера з мовами високого рівня.
- •Структура об’єктного та завантажувального модуля.
- •Зовнішні виклики.
- •Поняття “extern” та компоновка кількох об’єктних модулів.
- •Основні поняття тестування програмного забезпечення.
- •Розробка test-cases, test-suites.
- •Атрибути test-cases, test-suites.
- •1. Процес тестування програмного забезпечення
- •2. Чорна скринька - функціональне тестування
- •3. Розробка test-cases, test-suites. Атрибути test-cases, test-suites.
- •Атрибути тс
- •Атрибути тs
- •Цикли розробки та тестування програмного забезпечення.
- •Особливості та порядок виконання.
- •Класифікація видів тестування програмного забезпечення.
- •Призначення тестування програмного забезпечення.
- •Класифікація видів тестування
- •Методи генерації, методи відбору тестування програмного забезпечення.
- •Виконання процесу тестування.
- •Файлові системи та Бази даних.
- •Технології доступу до даних. Dao, ado, odbc.
- •Архітектура odbc
- •Список зареєстрованих драйверів
- •Створення dsn для бази даних Mіcrosoft sql Server
- •Застосування Structured Query Language (sql).
- •Open DataBase Connectivity (odbc) для доступу до даних.
- •Використання та dao у базах даних.
- •Інтернет – системи з підтримкою бд.
Підсистеми ядра ос. Інтерфейс ядра операційної системи
Функції ядра операційної системи можуть бути виконані в наслідок виконання в прикладних програмах спеціальних функцій - системних викликів. Призначення системного виклику полягає в тому, що прикладні програми не взмозі самотужки визначити, за якими адресами знаходяться функціїї ядра.
Системний виклик в один з машинно-залежних способів реалізує механізм отримання адрес функцій ядра та передачу в ці функціїї необхідних параметрів системного виклику, а також отримання результату системного виклику. Найчастіше системні виклики забезпечуються через систему переривань, завдяки чому адреса функціїї ядра не тільки обраховується апаратно (в процесі обробки переривання), але й забезпечується захист інформаційних ресурсів ядра.
Системні виклики найчастіше мають синтаксис функції мови програмування, на якій написано ядро ОС.
Підсистема управління введенням-виведенням
Підсистема управління введенням-виведенням реалізує базові механізми обміну даними між пристроями введення-виведення та оперативною пам'яттю обчислювальної машини та забезпечує організацію файлів в файлові системи.
Операція введення виконується як читання даних з зовнішнього пристрою в оперативну пам'ять, операція виведення - як запис даних з оперативної пам'яті на зовнішній пристрій.
При роботі з файлами система введення-виведення впроваджує спеціальну абстракцію - поток вводу-виводу, що дозволяє програмам, які звертаються за сервісами введення-виведення, використовувати одноманітний перелік функцій роботи з файлами не залежно від типу пристрою, на якому знаходиться файл, та типу файлової системи, яка містить цей файл. Відмінності доступу до різних пристроїв та файлових систем забезпечуються додатковими програмними модулями - драйверами пристроїв та файлових систем.
В окремих операційних системах підсистема управління введенням-виведенням також може впроваджувати механізми, які призвані підвищити швидкість обміну даними між задачами та файлами. Найчастіше використовується механізм буферизації (кешування) даних, який полягає в тому, що при читанні даних з файлу підсистема намагається за одну операцію введення читати дані блоками зручного (звичайно досить великого) розміру, а не порціями, які запитує задача. Завдяки цьому за одну операцію введення в оперативну пам'ять потрапляють також додаткові дані, які зберігаються в кеші і в подальшому передаються в програму без додаткових звернень до пристрою. Подібним чином цей механізм працює і при виконанні операцій запису.
Підсистема управління оперативною пам'яттю
Будь яка програма може виконуватись лише тоді, коли вона завантажена в оперативну пам'ять, так само, будь які дані з файлів можуть оброблятись лише тоді, коли вони завантажені в оперативну пам'ять. Завантаження програми та даних в оперативну пам'ять призводить до того, що в оперативній пам'яті одночасно знаходяться одразу кілька компонениів: ядро операційної системи, командний інтерпретатор, програма, що виконується, та дані, що обробляються. Крім того, програма в процесі свого виконання може звертатись до підсистеми управління оперативною пам'яттю з запитами на виділення додаткової - динамічної - оперативної пам'яті.
В багатозадачних операційних системах кількість компонентів, що одночасно можуть знаходитись в оперативній пам'яті зростає пропорційно кількості задач і може сягати сотень.
Підсистема управління оперативною пам'яттю забезпечує розподіл оперативної пам'яті між різними компонентами, а також розподіляє пам'ять під кеш системи введення-виведення.
В окремих багатозадачних операційних системах підсистема управління оперативною пам'яттю також забезпечує віртуалізацію оперативної пам'яті, завдяки чому кожна задача (процес) отримує власну віртуальну пам'ять, причому таким чином, що нестача реальної (фізичної) пам'яті покривається за рахунок перерозподілу даних між оперативною пам'яттю та зовнішнім накопичувачем і переміщення даних між фізичною оперативною пам'яттю і зовнішнім накопичувачем приховується від задач. Цей переміщення називається пейджінгом (англ. paging) або свопінгом (англ. swapping — обмін) — в залежності від термінології конкретної ОС.
Введення механізму віртуалізації оперативної пам'яті дозволяє отримати два корисних наслідки:
кожна задача фактично виконується у власному адресовому просторі, тобто таким чином, якби вона виконувалась в одно-задачній операційній системі, завдяки чому значно зменьшується вплив окремих задач однією на одну та на ядро ситеми, а завдяки цьому - і надійність системи;
кожна задача отримує стільки віртуальної оперативної пам'яті, скільки потрібно, а не стільки, скільки є наявної фізичної оперативної пам'яті.
Віртуалізація оперативної пам'яті вимагає апаратної підтримки і звичайно забезпечується через спеціальну таблицю сторінок пам'яті, котра містить відповідності між віртуальними та фізичними адресами.
Підсистема управління задачами (процесами)
Процес — це одне з найважливіших понять інформатики. За визначенням це екземпляр виконуваної програми, включаючи змінні та стан програми. Процеси слід відрізняти від нитей виконання — ниті є складовими процесу, так що кожен процес має власний адресний простір, а ниті розподіляють спільний адресний простір процесу. Процес складається щонайменше з одної, головної ниті виконання.
Контрольні запитання:
Підсистеми ядра ОС. Інтерфейс ядра операційної системи
Підсистема управління введенням-виведенням
Підсистема управління оперативною пам'яттю
Підсистема управління задачами (процесами)
Лекція 6 «Ядро Linux. Розробка програм для Linux»
Архітектура ядра Linux.
Особливості роботи та розробки системних програм для Linux.
Навчальна мета: Засвоїти основні поняття застосування операційної ситеми Linux, вивчити архітектуру ядра Linux та особливості роботи та розробки системних програм для Linux.
Виховна мета: Виховати у студентів кросплатформену терпимість.
Актуальність: На сьогоднішній день все більше користувачів стають клієнтами Linux.
Мотивація: Знання операційної системи Linux підвищує шанси на працевлаштування у десятки разів.
Архітектура
Ядро Linux підтримує багатозадачність, віртуальну пам'ять, динамічні бібліотеки, відкладене завантаження, продуктивну систему управління пам'яттю і багато мережних протоколів.
На сьогоднішній день Linux — монолітне ядро з підтримкою завантажуваних модулів. Драйвери пристроїв і розширення ядра зазвичай запускаються на з повним доступом до устаткування. На відміну від звичайних монолітних ядер, драйвери пристроїв легко збираються у вигляді модулів і завантажуються або вивантажуються під час роботи системи.
Структура
Операційну систему можна умовно розділити на два рівні.
На верхньому рівні розташований користувацький простір (простір виконування прикладних програм). Тут виконуються застосунки користувача. Під призначеним для користувача простором розташовується простір ядра. Тут функціонує ядро Linux.
Є також бібліотека GNU C (glibc). Вона надає інтерфейс системних викликів, який забезпечує зв'язок з ядром і дає механізм для переходу від програми, що працює в просторі користувача, до ядра. Це важливо, оскільки ядро і програма користувача розташовуються в різних захищених адресних просторах. При цьому, тоді як кожен процес в просторі користувача має свій власний віртуальний адресний простір, ядро займає один загальний адресний простір.
GNU Compiler Collection (обычно используется сокращение GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC является свободным программным обеспечением, распространяется фондом свободного программного обеспечения. Он используется как стандартный компилятор для свободных UNIX-подобных операционных систем.
Изначально названный GNU C Compiler, он поддерживал только язык Си. Позднее, GCC был расширен для компиляции исходных кодов на таких языках программирования как C++, Java.
В настоящее время GCC поддерживается группой программистов со всего мира. GCC является лидером по количеству процессоров и операционных систем, которые он поддерживает.
Будучи официальным компилятором системы GNU, GCC также является главным компилятором для сборки ряда других операционных систем, среди них: различные варианты Linux и BSD, а также ReactOS, Mac OS X, OpenSolaris, NeXTSTEP, BeOS и Haiku. GCC часто выбирается для разработки программного обеспечения, которое должно работать на большом числе различных аппаратных платформ.
При использовании GCC для компиляции кода под разные платформы будет использован один и тот же синтаксический анализатор. Поэтому если удалось собрать программу для одной из целевых платформ, то велика вероятность, что программа нормально соберётся и для других платформ.
Ядро Linux можна, у свою чергу, розділити на три великі рівні. Вгорі розташовується інтерфейс системних викликів, який реалізує базові функції, наприклад, читання і запис. Нижче за інтерфейс системних викликів розташовується незалежний код ядра. Цей код є загальним для всіх процесорних архітектур, підтримуваних Linux. Ще нижче розташовується архітектурно-залежний код, що утворює так званий BSP (Board Support Package — пакет підтримки апаратної платформи). Цей код залежить від процесора і платформи для конкретної архітектури.
Ядро по суті є диспетчером ресурсів. Незалежно від того, що є керованим ресурсом — процес, пам'ять або апаратний пристрій, — ядро організовує й упорядковує доступ до ресурсу безлічі конкуруючих користувачів (як у просторі ядра, так і в просторі користувача).
Властивості ядра Linux
У ядрі Linux реалізована ціла низка важливих архітектурних елементів. І на найзагальнішому, і на детальніших рівнях ядро можна підрозділити на безліч різних підсистем. З іншого боку, Linux можна розглядати як монолітне ціле, оскільки всі базові сервіси зібрані в ядрі системи. Такий підхід відрізняється від архітектури з мікроядром, коли ядро надає тільки найзагальніші сервіси, такі як обмін інформацією, ввод/вивід, управління пам'яттю і процесами, а конкретніші сервіси реалізуються в модулях, що підключаються до рівня мікроядра.
Інтерфейс системних викликів
Інтерфейс системних викликів (SCI) — це тонкий рівень, що надає засоби для виклику функцій ядра з простору користувача. Цей інтерфейс може бути архітектурний залежним, навіть в межах одного процесорного сімейства. SCI фактично є службою мультиплексування і демультиплексування виклику функцій.
Керування процесами
Керування процесами сконцентроване на виконанні процесів. У ядрі ці процеси називаються нитями (англ. threads); вони відповідають окремим віртуалізованим об'єктам процесора (код ниті, дані, стек, процесорні регістри).
Ще одне завдання керування процесами — сумісне використання процесора активними нитями. У ядрі реалізований новаторський алгоритм планувальника, час роботи якого не залежить від числа нитей, що претендують на ресурси процесора.
Управління пам'яттю
Інший важливий ресурс, яким управляє ядро, — це оперативна пам'ять. Для підвищення ефективності, враховуючи механізм роботи апаратних засобів з віртуальною пам'яттю, пам'ять організовується у вигляді так званих сторінок (у більшості архітектури розміром 4 КБ). У Linux є засоби для управління наявною пам'яттю, а також апаратними механізмами для встановлення відповідності між фізичною і віртуальною пам'яттю.
Проте управління пам'яттю — це значно більше, чим просто управління буферами по 4 КБ. Linux надає абстракції над цими 4 КБ буферами, наприклад, механізм розподілу slab allocator. Цей механізм управління базується на 4 КБ буферах, але потім розміщує структури усередині них, стежачи за тим, які сторінки повні, які частково заповнені і які порожні. Це дозволяє динамічно розширювати і скорочувати схему залежно від потреб розміщеної системи.
В умовах наявності великого числа користувачів у пам'яті можливі ситуації, коли вся наявна пам'ять буде вичерпана. У зв'язку з цим сторінки можна видаляти з пам'яті і переносити на диск. Цей процес обміну сторінок між оперативною пам'яттю і жорстким диском називається підкачкою.
Віртуальна файлова система
Ще один важливий аспект ядра Linux — віртуальна файлова система (VFS), яка надає загальну абстракцію інтерфейсу до файлових систем. VFS надає рівень комутації між SCI і файловими системами, підтримуваними ядром. На верхньому рівні VFS розташовується єдина API-абстракція таких функцій, як відкриття, закриття, читання і запис файлів. На нижньому рівні VFS розташовані абстракції файлових систем, які визначають, як реалізуються функції верхнього рівня.
Нижче за рівень файлової системи міститься кеш буферів, що надає загальний набір функцій до рівня файлової системи (незалежний від конкретної файлової системи). Цей рівень кешування оптимізує доступ до фізичних пристроїв за рахунок короткострокового зберігання даних (або попереджувального читання, що забезпечує готовність даних до того моменту, коли вони знадобляться). Нижче за кеш буферів містяться драйвери пристроїв, що реалізовують інтерфейси для конкретних фізичних пристроїв.
Мережевий стек
Мережевий стек за своєю конструкцією має багаторівневу архітектуру, що повторює структуру самих протоколів. Протокол Internet Protocol (IP) — це базовий протокол мережевого рівня, розташований нижче за транспортний протокол Transmission Control Protocol, TCP). Вище TCP розташований рівень сокетів, що викликається через SCI.
Рівень сокетів є стандартним API до мережевої підсистеми. Він надає користувацький інтерфейс до різних мережевих протоколів. Рівень сокетів реалізує стандартизований спосіб управління з'єднаннями і передачі даних між кінцевими точками, від доступу до "чистих" кадрів даних і блоків даних протоколу IP (PDU) і до протоколів TCP і User Datagram Protocol (UDP).
Драйвери пристроїв
Переважна більшість початкового коду ядра Linux припадає на драйвери пристроїв, що забезпечують можливість роботи з конкретними апаратними пристроями. У дереві початкових кодів Linux є підкаталог драйверів, в якому, у свою чергу, є підкаталоги для різних типів підтримуваних пристроїв, таких як Bluetooth, I2C, послідовні порти тощо.
Архітектурно-залежний код
Хоча основна частина Linux незалежна від архітектури, на якій працює операційна система, в деяких елементах для забезпечення нормальної роботи і підвищення ефективності необхідно враховувати архітектуру.
Контрольні запитання:
Архітектура та структура Linux
Властивості ядра Linux
Інтерфейс системних викликів та керування процесами
Управління пам'яттю
Віртуальна файлова система
Мережевий стек
Драйвери пристроїв
Архітектурно-залежний код
Лекція 7 «GUI – інтерфейс користувача»
Інтерфейс користувача.
Елементи інтерфейсу.
Віджети.
Навчальна мета: Засвоїти основні поняття інтерфейсу користувача, його елементи. Поняття віджетів.
Виховна мета: Допомогти студентам усвідомити вагому роль застосування інтерфейсу користувача.
Актуальність: Нині усе без винятку користувацьке програмне забезпечення має інтерфейс користувача.
Мотивація: Навіть у системному програмування існує тенденція до розробки інтерфейсу користувача.
Графі́чний інтерфе́йс кори́стувача (ГІК, англ. GUI, Graphical user interface) — інтерфейс між комп'ютером і його користувачем, що використовує піктограми, меню, і вказівний засіб для вибору функцій та виконання команд. Зазвичай, можливе відкриття більше, ніж одного вікна на одному екрані.
GUI — система засобів для взаємодії користувача з комп'ютером, заснована на представленні всіх доступних користувачеві системних об'єктів і функцій у вигляді графічних компонентів екрану (вікон, значків, меню, кнопок, списків і т. п.). При цьому, на відміну від інтерфейса командного рядка, користувач має довільний доступ (за допомогою клавіатури або пристрою координатного введення типу «миша») до всіх видимих екранних об'єктів.
Елементи інтерфейсу
Элеме́нт интерфе́йса — примитив графического интерфейса пользователя, имеющий стандартный внешний вид и выполняющий стандартные действия.
Другие названия: ви́джет (англ. widget), контро́л (control) и элемент управления.
В большинстве существует стандартный набор элементов интерфейса, включающий следующие элементы управления:
кнопка (button)
список (list box)
ниспадающее меню (pull down menu)
раскрывающийся список (en:combo box, drop-down list)
флажок/переключатель (check box)
радио-кнопка (radio button)
поле редактирования (textbox, edit field)
значок (icon)
панель инструментов (toolbar)
строка состояния (status bar)
всплывающая подсказка (tooltip, hint)
полоса прокрутки (scrollbar)
вкладка (tab)
элемент для отображения табличных данных (grid view)
меню (menu)
главное меню окна (main menu)
контекстное меню (popup menu)
окно (window)
панель (panel)
диалоговое окно (dialog box)
модальное окно (modal window)
дерево — элемент для отображения иерархии (tree view)
Віджети призначені як інструмент для швидкого доступу до певної інформації чи сервісів.
Контрольні запитання:
Елементи інтерфейсу
Графі́чний інтерфе́йс користувача
Елементи керування
Лекція 8 «Планувальник ОС»