
- •Лекція 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 у базах даних.
- •Інтернет – системи з підтримкою бд.
Поняття Бібліотеки.
Статичні та динамічні бібліотеки.
Використання бібліотек.
Навчальна мета: Засвоїти основні поняття застосування динамічних та статичних бібліотек.
Виховна мета: Допомогти студентам усвідомити різницю між статичними та динамічними бібліотеками та способами їх підключення.
Актуальність: Донести до відома студентів, що на сьогоднішній день вагома частка програмного забезпечення, яке використовується на виробництві, має модулі, що підключаються, тобто, бібліотеки.
Мотивація: Мотивацією вивчати даний напрямок у курсі ситемного програмування є основним при написанні курсового проекту.
Бібліотека (від англ. library) — збірка об'єктів чи підпрограм для вирішення близьких по тематиці задач. Бібліотеки містять первинний код та дані, допоміжні для задіяння та інтеграції нових можливостей в програмні рішення.
Бібліотека може означати те саме, що модуль, або декілька модулів.
З точки зору комп'ютерних наук бібліотеки діляться на статичні та динамічні.
Статичні бібліотеки
Можуть бути у вигляді початкового тексту, що підключається програмістом до своєї програми на етапі написання, або у вигляді об'єктних файлів, що приєднуються (лінкуються) до виконуваної програми на етапі компіляції (у Microsoft Windows такі файли мають розширення .lib, у UNIX-подібніх ОС — зазвичай .a). В результаті програма включає всі необхідні функції, що робить її автономною, але збільшує розмір.
Динамічні бібліотеки
Також називаються розподілюваними бібліотеками (англ. shared library), або бібліотеками, що динамічно підключаються (англ. Dynamic Link Library, DLL). Це окремі файли, що надають програмі набір використовуваних функцій для завантажування на етапі виконання при зверненні програми до ОС із заявкою на виконання функції з бібліотеки. Якщо необхідна бібліотека вже завантажена в оперативну пам'ять, програма використуватиме завантажену копію бібліотеки. Такий підхід дозволяє зекономити час і пам'ять, оскільки декілька програм використовують одну копію бібліотеки, вже завантажену в пам'ять.
Динамічні бібліотеки зберігаються зазвичай у визначеному місці й мають стандартне розширення. Наприклад, файли .library у логічному томі Libs: у AmigaOS; у Microsoft Windows і OS/2 файли бібліотек загального користування мають розширення .dll; у UNIX-подібних ОС — зазвичай .so; у MacOS — .dylib.
При написанні програми програмістові досить вказати транслятору мови програмування (компілятору або інтерпретатору), що слід підключити таку-от бібліотеку і використовувати таку-от функцію зі вказаної бібліотеки. Ні початковий текст, ні виконуваний код функції до складу програми не входить.
З формальної точки зору DLL (динамічна бібліотека) - особливим образом оформлений відносно незалежний виконуваний модуль.
Особливий спосіб оформлення передбачає наявність в DLL так званих секцій імпорту й експорту. Секція експорту вказує ті ідентифікатори об'єктів (функцій, класів, змінних), доступ до яких надає дана DLL. У цьому випадку говорять про експортування ідентифікаторів з DLL. У загальному випадку, саме секція експорту найбільш важлива для розробників. Хоча цілком можливо реалізувати DLL, що не має даної секції, проте виконує корисну роботу.
Відносна незалежність пов'язана з наявністю/відсутністю секції імпорту в DLL (тобто секції, у якій описуються зовнішні залежності даної DLL від інших). Переважна більшість DLL імпортує функції із системних DLL (kernel32.dll, user32.dll, gdі32.dll і ін.). У більшості випадків при створенні бібліотеки до неї автоматично підключається стандартний набір таких бібліотек. Іноді в цей список необхідно додати необхідні DLL (наприклад, у випадку використання бібліотеки сокетів потрібно додатково підключити бібліотеку ws2_32.dll).
Виконуваний код в DLL не припускає автономного використання. Перед тим, як можна буде викликати функції та користуватись ресурсами бібліотеки, необхідно завантажити відповідну DLL в область пам'яті поточного процесу (тобто DLL не може виконуватися сама по собі - їй обов'язково необхідна програма-клієнт). Це явище зветься "проектування DLL на адресний простір процесу". У кінцевому коді exe-файлу програми-клієнта, що генерує компілятор, код викликуваної функції не буде включений. Замість цього буде згенерована інструкція виклику відповідної функції (call). Поскільки бібліотека DLL завантажена і спроєктована на адресний простір процесу, то відповідна функція буде легко доступний по call-виклику.
Таким чином, DLL - особливим образом оформлений програмний компонент, доступ до виконуваного коду в якому програма одержує в момент старту (DLL неявного завантаження) або в момент використання (DLL явного й відкладеного завантаження).
Основні переваги використання цього типу бібліотек полягають в наступному:
економія дискового простору за рахунок багаторазового використання коду (reusіng). Якщо всі ваші додатки використовують той самий код, немає необхідності поставляти його в коді кожного. Досить розробити DLL.
економія фізичної пам'яті (RAM) за рахунок завантаження в неї лише одного екземпляра DLL. Саме тоді з'явилися лічильники посилань користувачів DLL - при кожному виклику функції ОС перевіряє наявність завантаженого екземпляра бібліотеки. У випадку позитивного результату лічильник посилань користувачів даної DLL збільшується на одиницю. Якщо ж екземпляр даної DLL у пам'яті не виявлений, то операційна система завантажує файл на згадку й присвоює лічильнику значення "1". Механізм поділу коду зветься memory mappіng (картування пам‘яті). При вивантаженні DLL з пам'яті зменшується значення лічильника числа користувачів, у випадку рівності його нулю DLL негайно вивантажується.
ізолювання й модифікація коду DLL незалежно від іншого коду програми. Наприклад, код візуалізації ізолюється від математичної частини. При зміні математичного апарата (наприклад, при розробці нового, більше швидкого алгоритму) перекомпіляція коду клієнтського додатка (відповідального за візуалізацію результатів) не потрібна. Цей фактор може відігравати значну роль у тому випадку, якщо число користувачів досить велике.
Це дає наступні сфери використання динамічних бібліотек.
різноманітні модулі розширення функціональності додатків - так звані plug- іn (см. приклад з MatLab, Far та ін.);
локалізація додатка (можна створювати DLL, які містять виключно ресурси);
спільне використання об'єктів абстракції (функцій, класів та ін.) різними додатками;
незалежність модифікації коду - DLL може бути в будь-який момент переписана зі збереженням експортованих інтерфейсів;
реалізація певних дій, які можна зробити тільки за допомогою DLL, наприклад, перехоплення системних подій;
сховище ресурсів з можливістю незалежної зміни цих ресурсів.
Динамічні бібліотеки широко використовуються в технології COM (а до цього в OLE 1.0) - як основу при побудові так званих іnproc- серверів (внутріпроцесних серверів) використовуються DLL. Це дозволяє спростити взаємодію з додатком, завдяки завантаженню використовуваних ActіveX-об'єктів в адресний простір клієнта. У цьому випадку накладні витрати, пов'язані з подоланням границь адресних просторів при передачі даних (параметрів функцій і т.д.) - так званий marshallіng, зводяться до нуля.
Всі абстракції, з якими користувач працює в повсякденному програмістському житті, можуть бути реалізовані в DLL - класи, об'єкти, таймери, потоки, функції та ін. Інша справа, що не завжди зручно й правильно працювати із цими об'єктами поза DLL. Зв'язано це з тим, що не завжди логічне представлення того або іншого об'єкта може бути однозначно представлене (переведене) у фізичне. Відбувається це тому, що використання DLL не накладає обмежень на використовувану мову (точніше, обмежує тільки тими мовами, які дозволяють такі бібліотеки створювати). Більше того, як правило, DLL розробляється на іншій мові програмування, ніж та, в котрій вона буде застосовуватись. Найчастіше динамічні бібліотеки пишуться на асемблері, або С/С++.
Контрольні запитання:
Поняття бібліотеки
Поняття статичної бібліотеки
Поняття динамічної бібліотеки
Сфери використання динамічних бібліотек
Лекція 11 «Додаткові функції ОС»