- •1.1. Поняття операційної системи, її призначення та функції
- •1.1.1. Поняття операційної системи
- •1.1.2. Призначення операційної системи
- •1.1.3. Операційна система як розширена машина
- •1.1.4. Операційна система як розподілювач ресурсів
- •1.2. Історія розвитку операційних систем
- •1.3. Класифікація сучасних операційних систем
- •1.4. Функціональні компоненти операційних систем
- •1.4.1. Керування процесами й потоками
- •1.4.2. Керування пам'яттю
- •1.4.3. Керування введенням-виведенням
- •1.4.4. Керування файлами та файлові системи
- •1.4.5. Мережна підтримка
- •1.4.6. Безпека даних
- •1.4.7. Інтерфейс користувача
- •2.1. Базові поняття архітектури операційних систем
- •2.1.1. Механізми і політика
- •2.1.2. Ядро системи. Привілейований режим і
- •2.2. Реалізація архітектури операційних систем
- •2.2.1. Монолітні системи
- •2.2.2. Багаторівневі системи
- •2.2.3. Системи з мікроядром
- •2.2.4. Концепція віртуальних машин
- •2.3.1. Взаємодія ос і апаратного забезпечення
- •2.3.2. Взаємодія ос і виконуваного програмного коду
- •2.4.1. Базова архітектура unix
- •2.4.2. Архітектура Linux
- •2.5. Особливості архітектури: Windows хр
- •2.5.1. Компоненти режиму ядра
- •2.5.2. Компоненти режиму користувача
- •2.5.3. Об'єктна архітектура Windows хр
- •3.1. Базові поняття процесів і потоків
- •3.1.1. Процеси і потоки в сучасних ос
- •3.1.2. Моделі процесів і потоків
- •3.1.3. Складові елементи процесів і потоків
- •3.2. Багатопотоковість та її реалізація
- •3.2.1. Поняття паралелізму
- •3.2.2. Види паралелізму
- •3.2.3. Переваги і недоліки багатопотоковості
- •3.2.4. Способи реалізації моделі потоків
- •3.3. Стани процесів і потоків
- •3.4. Опис процесів і потоків
- •3.4.1. Керуючі блоки процесів і потоків
- •3.4.2. Образи процесу і потоку
- •3.5. Перемикання контексту й обробка переривань
- •3.5.1. Організація перемикання контексту
- •3.5.2. Обробка переривань
- •3.6. Створення і завершення процесів і потоків
- •3.6.1.Створення процесів
- •3.6.2.Ієрархія процесів
- •3.6.3.Керування адресним простором під час створення процесів
- •3.6.4. Особливості завершення процесів
- •3.6.5. Синхронне й асинхронне виконання процесів
- •3.6.6. Створення і завершення потоків
- •4.1. Загальні принципи планування
- •4.1.1. Особливості виконання потоків
- •4.1.2. Механізми і політика планування
- •4.1.3. Застосовність принципів планування
- •4.2. Види планування
- •4.2.1. Довготермінове планування
- •4.2.2. Середньотермінове планування
- •4.2.3. Короткотермінове планування
- •4.3. Стратегії планування. Витісняльна і невитісняльна багатозадачність
- •4.4. Алгоритми планування
- •4.4.1. Планування за принципом fifo
- •4.4.2. Кругове планування
- •4.4.3. Планування із пріоритетами
- •4.4.4. Планування на підставі характеристик подальшого виконання
- •4.4.5. Багаторівневі черги зі зворотним зв'язком
- •4.4.6. Лотерейне планування
- •4.5. Реалізація планування в Linux
- •4.5.1. Планування процесів реального часу в ядрі
- •6.1. Види міжпроцесової взаємодії
- •6.1.1.Методи розподілюваної пам'яті
- •6.1.2.Методи передавання повідомлень
- •6.1.3.Технологія відображуваної пам'яті
- •6.1.4.Особливості міжпроцесової взаємодії
- •6.2. Базові механізми міжпроцесової взаємодії
- •6.2.1. Міжпроцесова взаємодія на базі спільної пам'яті
- •6.2.2. Основи передавання повідомлень
- •6.2.3. Технології передавання повідомлень
- •8.1. Основи технології віртуальної пам'яті
- •8.1.1. Поняття віртуальної пам'яті
- •8.1.2. Проблеми реалізації віртуальної пам'яті. Фрагментація пам'яті
- •8.1.4. Підхід базового і межового регістрів
- •8.2. Сегментація пам'яті
- •8.2.1. Особливості сегментації пам'яті
- •8.2.2. Реалізація сегментації в архітектурі іа-32
- •8.3. Сторінкова організація пам'яті
- •8.3.1. Базові принципи сторінкової організації пам'яті
- •8.3.2. Порівняльний аналіз сторінкової організації пам'яті та сегментації
- •8.3.3. Багаторівневі таблиці сторінок
- •8.3.4. Реалізація таблиць сторінок в архітектурі іа-32
- •8.3.5. Асоціативна пам'ять
- •8.4. Сторінково-сегментна організація пам'яті
- •8.5. Реалізація керування основною пам'яттю: Linux
- •8.5.1. Використання сегментації в Linux. Формування логічних адрес
- •8.5.2. Сторінкова адресація в Linux
- •8.5.3. Розташування ядра у фізичній пам'яті
- •8.5.4.Особливості адресації процесів і ядра
- •8.5.5.Використання асоціативної пам'яті
- •8.6. Реалізація керування основною пам'яттю: Windows хр
- •8.6.1.Сегментація у Windows хр
- •8.6.2.Сторінкова адресація у Windows хр
- •8.6.3.Особливості адресації процесів і ядра
- •8.6.4. Структура адресного простору процесів і ядра
- •11.1. Поняття файла і файлової системи
- •11.1.1. Поняття файла
- •11.1.2.Поняття файлової системи
- •11.1.3.Типи файлів
- •11.1.4. Імена файлів
- •11.2. Організація інформації у файловій системі
- •11.2.1. Розділи
- •11.2.2. Каталоги
- •11.2.3. Зв'язок розділів і структури каталогів
- •11.3. Зв'язки
- •11.3.1. Жорсткі зв'язки
- •11.3.2. Символічні зв'язки
- •11.4. Атрибути файлів
- •11.5. Операції над файлами і каталогами
- •11.5.1. Підходи до використання файлів процесами
- •12.1. Базові відомості про дискові пристрої
- •12.1.1. Принцип дії жорсткого диска
- •12.1.2. Ефективність операцій доступу до диска
- •12.2. Розміщення інформації у файлових системах
- •12.2.1. Фізична організація розділів на диску
- •12.2.2. Основні вимоги до фізичної організації файлових систем
- •12.2.3. Неперервне розміщення файлів
- •12.2.4. Розміщення файлів зв'язними списками
- •12.2.5. Індексоване розміщення файлів
- •12.2.6. Організація каталогів
- •15.1. Завдання підсистеми введення-виведення
- •15.1.1. Забезпечення ефективності доступу до пристроїв
- •15.1.2. Забезпечення спільного використання зовнішніх пристроїв
- •15.1.3. Універсальність інтерфейсу прикладного програмування
- •15.1.4. Універсальність інтерфейсу драйверів пристроїв
- •15.2. Організація підсистеми введення-виведення
- •15.2.1. Символьні, блокові та мережні драйвери пристроїв
- •15.2.2. Відокремлення механізму від політики за допомогою
- •15.3. Способи виконання операцій введення-виведення
- •15.3.1. Опитування пристроїв
- •15.3.2. Введення-виведення, кероване перериваннями
- •15.3.3. Прямий доступ до пам'яті
- •15.4. Підсистема введення-виведення ядра
- •15.4.1. Планування операцій введення-виведення
- •15.4.2. Буферизація
- •15.7. Керування введенням-виведенням: unix і Linux
- •15.7.1. Інтерфейс файлової системи
- •15.7.2. Передавання параметрів драйверу
- •15.7.3. Структура драйвера
- •15.7.4. Виконання операції введення-виведення для пристрою
- •15.8. Керування введенням-виведенням: Windows хр
- •15.8.1. Основні компоненти підсистеми введення-виведення
- •15.8.2. Виконання операції введення-виведення для пристрою
- •15.8.3. Передавання параметрів драйверу пристрою
- •17.1. Термінальне введення-виведення
- •17.1.1. Організація термінального введення-виведення
- •17.1.3. Термінальне введення-виведення у Win32 api
- •17.2. Командний інтерфейс користувача 17.2.1.
- •17.2.2. Переспрямування потоків введення-виведення
- •17.2.3. Використання каналів
- •17.3. Графічний інтерфейс користувача
- •17.3.1. Інтерфейс віконної та графічної підсистеми Windows хр
- •17.3.2. Система X Window
- •17.4. Процеси без взаємодії із користувачем
- •17.4.1. Фонові процеси на основі posix
- •17.4.2. Служби Windows хр
- •16.1. Загальні принципи мережної підтримки
- •16.1.1. Рівні мережної архітектури і мережні сервіси
- •16.1.2. Мережні протоколи
- •16.2. Реалізація стека протоколів Інтернету
- •16.2.1. Рівні мережної архітектури tcp/ip
- •16.2.2. Канальний рівень
- •16.2.3. Мережний рівень
- •16.2.4. Транспортний рівень
- •16.2.5. Передавання даних стеком протоколів Інтернету
- •16.3. Система імен dns
- •16.3.1. Загальна характеристика dns
- •16.3.2. Простір імен dns
- •16.3.3. Розподіл відповідальності
- •16.3.4. Отримання ір-адрес
- •16.3.5. Кешування ір-адрес
- •16.3.6. Типи dns-ресурсів
- •16.4. Програмний інтерфейс сокетів Берклі
- •16.4.1. Особливості роботи з адресами
- •16.4.2. Створення сокетів
- •16.4.3. Робота з потоковими сонетами
- •16.4.4. Введення-виведення з повідомленням
- •19.1. Загальні принципи завантаження ос
- •19.1.1. Апаратна ініціалізація комп'ютера
- •19.1.2. Завантажувач ос
- •19.1.3. Двоетапне завантаження
- •19.1.4. Завантаження та ініціалізація ядра
- •19.1.5. Завантаження компонентів системи
- •19.2. Завантаження Linux
- •19.2.1. Особливості завантажувача Linux
- •19.2.2. Ініціалізація ядра
- •19.2.3. Виконання процесу init
- •19.3. Завантаження Windows хр
- •20.1. Багатопроцесорні системи
- •20.1.1. Типи багатопроцесорних систем
- •20.1.2. Підтримка багатопроцесорності в операційних системах
- •20.1.3. Продуктивність багатопроцесорних систем
- •20.1.4. Планування у багатопроцесорних системах
- •20.1.5. Спорідненість процесора
- •20.1.6. Підтримка багатопроцесорності в Linux
- •20.1.7. Підтримка багатопроцесорності у Windows хр
- •20.2. Принципи розробки розподілених систем
- •20.2.1. Віддалені виклики процедур
- •20.2.2. Використання Sun rpc
- •20.2.3. Використання Microsoft rpc
- •20.2.4. Обробка помилок і координація в розподілених системах
- •20.3. Розподілені файлові системи
- •20.3.1. Організація розподілених файлових систем
- •20.3.2. Файлова система nfs
- •20.3.3. Файлова система Microsoft dfs
- •20.4. Сучасні архітектури розподілених систем
- •20.4.1. Кластеры системи
- •20.4.2. Grid-системи
- •18.1. Основні завдання забезпечення безпеки
- •18.2. Базові поняття криптографії
- •18.2.1. Поняття криптографічного алгоритму і протоколу
- •18.2.2. Криптосистеми з секретним ключем
- •18.2.3. Криптосистеми із відкритим ключем
- •18.2.4. Гібридні криптосистеми
- •18.2.5. Цифрові підписи
- •18.2.6. Сертифікати
- •18.3. Принципи аутентифікаціїі керування доступом
- •18.3.1. Основи аутентифікації
- •18.3.2. Основи керування доступом
- •18.4. Аутентифікація та керування доступом в unix
- •18.4.1. Облікові записи користувачів
- •18.4.2. Аутентифікація
- •18.4.3. Керування доступом
- •18.5. Аутентифікація і керування доступом у Windows xp
- •18.5.1. Загальна архітектура безпеки
- •18.5.2. Аутентифікація
- •18.5.3. Керування доступом
- •18.6. Аудит
- •18.6.1. Загальні принципи організації аудиту
- •18.6.2. Робота із системним журналом unix
- •18.6.3. Журнал подій Windows xp
- •18.7. Локальна безпека даних
- •18.7.1. Принципи шифрування даних на файлових системах
- •18.7.2. Підтримка шифрувальних файлових систем у Linux
- •18.7.3. Шифрувальна файлова система Windows xp
- •18.8. Мережна безпека даних
- •18.8.1. Шифрування каналів зв'язку
- •18.8.2. Захист інформації на мережному рівні
- •18.8.3. Захист інформації на транспортному рівні
- •18.9. Атаки і боротьба з ними
- •18.9.1. Переповнення буфера
- •18.9.2. Відмова від обслуговування
- •18.9.3. Квоти дискового простору
- •18.9.4. Зміна кореневого каталогу застосування
18.6.3. Журнал подій Windows xp
Архітектура аудиту Windows XP
Повідомлення аудиту можуть бути згенеровані виконавчою підсистемою під час перевірки правдоступу, при цьому за передавання таких повідомлень у режим користувача для реєстрації відповідає SRM. Крім того, повідомлення можуть надходити від компонентів режиму користувача, зокрема від прикладних процесів (для цього у програмах необхідно використовувати відповідні функції Win32 АРІ). Інформацію про такі повідомлення зберігають у журналі подій (event log). Для роботи із ним процес повинен мати необхідні привілеї.
Необхідність аудиту конкретної події визначає локальна політика безпеки (local security policy). Цю політику підтримує LSASS у межах загальної політики безпеки і передає SRM під час ініціалізації системи. LSASS отримує повідомлення аудиту від SRM або компонентів режиму користувача і відсилає їх окремому процесові журналу подій, що зберігає записи аудиту в журналі.
Використання журналу подій у застосуваннях
Розглянемо особливості використання журналу подій у застосуваннях [32]. Насамперед необхідно зазначити, що процедура виведення повідомлень у журнал відокремлена від процедури задання тексту повідомлень. Фактично під час виведення повідомлення зазначають лише його код, а всю текстову інформацію, що відповідає цьому коду, задають в окремих файлах повідомлень журналу. Спочатку ознайомимося із процесом створення файлів повідомлень, а потім перейдемо до організації виведення повідомлень у журнал.
Розробка файлів повідомлень
Вихідні файли повідомлень - це текстові файли спеціального формату, які мають розширення .mc. Структура такого файла проста - він складається з пар і м'я_параметра=значення.
Журнал подій дає змогу задавати повідомлення кількома мовами. При цьому вибір варіанта повідомлення, що відображатиметься під час перегляду журналу за допомогою вікна перегляду подій (Event Viewer), залежить від мовних налаштувань OC Для визначення допустимих мов на початку файла повідомлень необхідно задати параметр LanguageNames зі значенням у вигляді списку специфікацій мов, розділених пробілами (у форматі ін'я_нови=код_мови:ім"я_файла):
LanguageNames=(Englі sh=Ox409:msg_en Ukrainian=Ox422:msg_ua)
Блок інформації для окремого повідомлення має такий вигляд:
MessageId=Ox1
Symbol і cName=MSG_MYMSG
Language=English
Application started (executable file: %1) Language=Ukrainian
Програму запущено (виконується файл: %1)
Параметр MessageId задає код повідомлення, SymbolicName визначає символьну константу, яка буде доступна в застосуванні як позначення цього повідомлення. Параметр Language починає блок тексту повідомлення, що відповідає заданій мові (ім'я мови треба задати раніше за допомогою параметра LanguageNames). Завершенням такого блоку є рядок із єдиним символом ".". У тексті повідомлення можливі специфікації підстановки %1, %2 тощо, замість них підставляються параметри, задані під час виведення повідомлення.
Після створення mc-файл обробляє компілятор повідомлень (mc.exe).
mc -A msgfile.mc
Параметр -А означає, що вихідні дані, як і вхідні, будуть у форматі ASCII. У результаті буде згенеровано такі файли:
♦ заголовний файл msgfile.h із оголошеннями констант, заданих параметрами SymbolicName;
♦ набір файлів із визначеннями текстів для різних мов (наприклад, під час компіляції msgfile.mc будуть згенеровані msg_en.bin та msg_ua.bin);
♦ файл ресурсів msgfile.rc, що містить посилання на файли із визначеннями текстів. Після компіляції mc-файла потрібно створити двійковий файл повідомлень.
Звичайно його компонують у DLL за два етапи:
♦ текстовий файл ресурсів компілюють у двійкове подання за допомогою компілятора ресурсів
rc -r -fo msgfile.res msgfile.rc
♦ на основі двійкового подання ресурсів компонують динамічну бібліотеку
link -dll -noentry -out:msgfile.uU msgfile.res
Реєстрація двійкового файла повідомлень у реєстрі
Файл повідомлень повинен реєструватися у системному реєстрі. Для цього необхідно задати ключ:
HKLM\SYSTEM\CurrentControlSet\Services\EventLog\ АррlісаІіоп\;імя_джерела_повідомлень
і в ньому - рядкове значення EventMessageFile, яке повинно містити повний шлях до двійкового файла повідомлень Ім'я джерела повідомлень з'являтиметься у відповідному стовпчику вікна перегляду повідомлень.
Після реєстрації повідомлення, пов'язані із джерелом даних, будуть відображені із використанням зазначеного файла повідомлень.
Виведення повідомлень у журнал
Після підготовки і реєстрації у системі двійкового файла повідомлень застосування може працювати із журналом подій.
Для виведення повідомлень у журнал використовують їхні коди, у ролі яких задають константи з отриманого раніше заголовного файла. Цей файл потрібно підключати до застосувань, що використовують журнал
#include "msgfile.h"
Перед виведенням повідомлень у журнал необхідно зареєструвати у системі джерело повідомлень, після завершення виведення - скасувати цю реєстрацію. Для цього використовують функції RegisterEventSource() і DeregisterEventSource():
// myapp повинен збігатися з ім'ям джерела, заданим у реєстрі
HANDLE hlog = RegisterEventSource(NULL."myapp");
// ... робота з журналом через дескриптор hlog
Deregi sterEvervtSource(hl og);
Для виведення повідомлення в журнал використовують функцію ReportEvent():
BOOL ReportEvent(HANDLE hlog. WORD etype. WORD ecategory. DWORD ecode.
PSID userid. WORD parnum. DWORD dsize. LPCTSTR *params. LPV0ID data);
де: hlog - дескриптор журналу;
etype - тип повідомлення (EVENTLOGERRORTYPE - повідомлення про помилку, EVENTLOG_WARNING_TYPE - попередження, EVENTL0G_INF0RMATI0N_TYPE - інформаційне повідомлення);
ecode - код повідомлення (відповідна константа із заголовного файла);
parnum - кількість параметрів повідомлення (елементів масиву params);
params - масив параметрів повідомлення (під час виведення повідомлення ці параметри будуть послідовно підставлені замість специфікацій підстановки).
Ця функція у разі помилки повертає значення FALSE:
const char *messages[] - { argv[0] }: // ім'я виконуваного файла
// HANDLE hlog = RegisterEventSource(...);
ReportEvent(hlog. EVENTL0G_INF0RMATI0N_TYPE. 0.
MSG_MYMSG, NULL. 1. 0. messages. NULL):
Унаслідок виконання цього фрагмента коду в журналі подій для джерела myapp у системі із встановленими українськими локальними налаштуваннями відобразиться таке повідомлення:
Програму запущено (виконується файл: с:\path\myapp.ехе)
Для використання функцій роботи із журналом під час компонування застосування необхідно зазначати бібліотечний файл advapi32.lib.