- •Змістовий модуль 1
- •Не 1.1. Структура системного програмного забезпечення Структура спз.
- •Місце ос в спз.
- •Поняття операційного середовища.
- •Операційні системи.
- •Системи керування файлами.
- •Інтерфейсні оболонки для взаємодії користувача з ос і програмні середовища.
- •Системи програмування.
- •Утиліти.
- •Основні функції ос.
- •Не 1.1. Базові поняття сучасних операційних систем Базові поняття операційної системи Linux. Файли, каталоги, робота з файлами. Права доступу до файлів і каталогів.Інструментарій.
- •Програми-фільтри. (немає) Командний інтерпретатор.
- •Змістовий модуль 2
- •Не 2.1. Загальна схема роботи компіляторів Визначення транслятора, компілятора, інтерпретатора.
- •Компілятор.
- •Різниця між інтерпретаторами і трансляторами.
- •Етапи трансляції.
- •Поняття проходу. Багатопрохідні і однопрохідні компілятори.
- •Не 2.2. Таблиці ідентифікаторів. Призначення та особливості побудови таблиць ідентифікаторів.
- •Найпростіші методики побудови таблиць ідентифікаторів.
- •Побудова таблиць ідентифікаторів методом бінарного дерева.
- •Не 2.3 Хеш-функції та хеш–адресація. Принципи роботи хеш-функцій.
- •Побудова таблиць ідентифікаторів на основі хеш-функцій.
- •Побудова таблиць ідентифікаторів методом ланцюжка.
- •Комбіновані способи побудови таблиць ідентифікаторів.
- •Змістовий модуль 3. Не 3.1.Кінцеві автомати. Визначення.
- •Детерміновані і недетерміновані кінцеві автомати.
- •Модель ка.
- •Розпізнавачі і перетворювачі. Визначення. Загальні поняття.
- •Класифікація розпізнавачів.
- •Не 3.2.Формальні мови та граматики. Способи завдання мов.
- •Операції над ланцюжками символів.(немає) Поняття мови.
- •Визначення формальної мови.
- •Визначення грамматики.
- •Класифікація граматик.
- •Способи задання схем грамтик Символічна, форма Наура-Бекуса, ітераційна форма й синтаксичні діаграми.
- •Чотири типи граматик по Хомському.
- •Правила побудови граматики із ланцюжка символів. (немає)
- •Змістовий модуль 4.
- •Не 4.1 Лексичні аналізатори (сканери).
- •Принципи побудови сканерів.
- •Призначення лексичного аналізатору.
- •Принципи побудови лексичних аналізаторів.
- •Граф кінцевого детермінованого автомата, що розпізнає граматику цілих чисел мови Сі(Немає) не 4.2.Синтаксичний та семантичний аналіз. Синтаксично-керований переклад.
- •Основні принципи роботи синтаксичних аналізаторів.
- •Дерево розбору. Перетворення дерева розбору в дерево операцій.
- •Призначення семантичного аналізу.
- •Етапи семантичного аналізу.
- •Ідентифікація лексичних одиниць мов програмування.
- •Розподіл пам’яті.
- •Не 4.3. Способи внутрішнього представлення програм Зв'язані облікові структури, що представляють синтаксичні дерева.
- •Багатоадресний код з явно іменованим результатом (тетради).
- •Багатоадресний код з неявно іменованим результатом (тріади).
- •Обернений (постфиксна) польський запис операцій.
- •Алгоритм Дейкстри.
- •Асемблерний код або машинні команди.
- •Розбір арифметичного виразу. Алгоритм Рутисхаузера.
- •Не 4.4 Генерація коду. Методи генерації коду.
- •Загальні принципи генерації коду.
- •Синтаксично керований переклад.
- •Змістовий модуль 5
- •Не 5.1. Керування процесами та ресурсами. Поняття обчислювального процесу та ресурсу.
- •Класифікація ресурсів.
- •Загальна схема виділення ресурсу.
- •Однопрограмний і мультипрограмний режими.
- •Основні риси мультипрограмного режиму.
- •Обчислювальні процеси.
- •Діаграма станів процесу.
- •Реалізація поняття послідовного процессу в ос.
- •Процеси і треди. (немає) Блок керування процесом.
- •Процеси в ос unix.
- •Події (переривання) - рушійна сила, що змінює стан процесів.
- •Механізм обробки переривань.
- •Функції механізму переривань.
- •Групи переривань.
- •Розподіл переривань по рівнях пріоритету.
- •Дисципліни обслуговування переривань.
- •Обробка переривань за участю супервізорів ос.
- •Не 5.2. Планування процесів та диспетчеризація задач. Функції ос, пов’язані з керуванням задач.
- •Організація черг процесів та ресурсів.
- •Priority queuing - (pq)
- •Стратегії планування.
- •Якість диспетчеризації та гарантії обслуговування.(Немає)
- •Безпріоритетні до: лінійні та циклічні.
- •Пріоритетні до: до з фіксованим пріоритетом та до з абсолютним пріоритетом.
- •Адаптивні до. (Немає) Визначення середнього часу знаходження заявки в системі. (Немає) Недоліки до з фіксованим пріоритетом.
- •Динамічне планування (диспетчеризація). (Немає) Диспетчеризація задач з використанням динамічних пріоритетів. Переваги і недоліки.
- •Критерії ефективності обчислювального процесу. (Немає) Методи підвищення продуктивності системи для багатопроцесорних систем.
- •Механізм динамічних пріоритетів в ос unix.
- •Змістовий модуль 6
- •Не 6.4. Керування пам’яттю. Пам'ять і відображення, віртуальний адресний простір.
- •Простий безперервний розподіл і розподіл з перекриттям (оверлейні структури).
- •Розподіл статичними і динамічними розділами.
- •Розділи з фіксованими границями. Розділи з рухливими границями.
- •Виділення пам'яті під новий розділ: перша придатна ділянка; сама придатна ділянка; сама невідповідна ділянка.
- •Сегментна, сторінкова і сегментно-сторінкова організація пам'яті. Сегментний спосіб організації віртуальної пам'яті.
- •Дисципліни заміщення: fifo; lru (1еаst recently used,); lfu (1еаst frequently used); random.
- •Сторінковий спосіб організації віртуальної пам'яті.
- •Сегментно-сторінковий спосіб організації віртуальної пам'яті.
- •Змістовий модуль 7
- •Не 7.1. Ос однопроцесорних кс. Класифікація ос.
- •Режими організації обчислювального процесу. (Немає) Основні принципи побудови операційних систем.
- •Принцип модульності.
- •Принцип функціональної вибірковості.
- •Принцип генерування ос.
- •Принцип відкритої і нарощуваний ос.
- •Принцип мобільності.
- •Принцип забезпечення безпеки обчислень.
Розділи з фіксованими границями. Розділи з рухливими границями.
Для того, щоб виділяти задачі рівно стільки місця, скільки вона потребує необхідно мати диспетчер задач, який веде список адрес вільної оперативної пам’яті. З появою нової задачі диспетчер переглядає цей список і виділяє для задачі розділ, обсяг якого або дорівнює необхідному, або ненабагато більший… При цьому модифікується список вільної пам’яті, і при звільненні розділів.
Виділення пам’яті може здійснюватися 3-ма способами.
Найперша ділянка
Найпридатніша ділянка
Найбільш непридатна ділянка.
В першому випадку список областей впорядковується наприклад за зростанням. Диспетчер пам’яті переглядає список, і виділяє задачі розділ в тій області, що перша підійде по обсягу.
Переглянути необхідно половину списку. Пам’ять виділяється по області молодших адрес, а це збільшить імовірність того, що в області старших адрес будуть утворюватися фрагменти великого розділу.
Другйи спосіб припускає, зо список вільних областей впорядковано по зростанню задач. Буде використано фрагмент, що найбільш точно відповідає необхідному. Фрагмент що залишився, буде настільки малим, що в ньому не вдасться розмістити ще якийсь розділ, але в цілому дисципліна ефективна.
Третя дисципліна найефективніша. В даному випадку список вільних областей впорядковується по зменшенню обсягу вільного фрагмента. Отже якщо фрагмент існує, то він буде знайдений одразу, без перегляду половини списку, і пам’ять що залишилася, може бути використана в подальшому, але це приводить до фрагментації і вимагає ущільнення пам’яті.
Виділення пам'яті під новий розділ: перша придатна ділянка; сама придатна ділянка; сама невідповідна ділянка.
Методи розподілу пам'яті, при яких задачі вже може не надаватися суцільна область пам'яті, називають розривними. Ідея виділяти пам'ять задачі не однією суцільною областю, а фрагментами вимагає для своєї реалізації відповідної апаратної підтримки — потрібно мати відносну адресацію. Якщо вказувати адреса початку поточного фрагмента програми і величину зсуву щодо цієї початкової адреси, то можна вказати необхідну нам перемінну чи команду. Таким чином, віртуальну адресу можна представити, як таку, що складається з двох полів. Перше поле буде вказувати частину програми (з якою зараз здійснюється робота) для визначення місця розташування цієї частини в пам'яті, а друге поле віртуальної адреси дозволить знайти потрібну нам комірку відносно щодо знайденої адреси. Програміст може або самостійно розбивати програму на фрагменти, або автоматизувати цю задачу і покласти її на систему програмування.
Сегментна, сторінкова і сегментно-сторінкова організація пам'яті. Сегментний спосіб організації віртуальної пам'яті.
Першим серед розривних методів розподілу пам'яті був сегментний. Для цього методу програму необхідно розбивати на частині і вже кожнії такій частині виділяти фізичну пам'ять. Природним способом розбивки програми на частині є розбивка її на логічні елементи — так називані сегменты. У принципі кожен програмний модуль (чи їхня сукупність, якщо
ми того побажаємо) може бути сприйнятий як окремий сегмент, і вся програма тоді буде являти собою безліч сегментів. Кожен сегмент розміщається в пам'яті як самостійна одиниця.
Логічно звертання до елементів програми в цьому випадку буде представлятися як вказівка імені сегмента і зсуву відносно початку цього сегменту. Фізично ім'я (або порядковий номер) сегменту буде відповідати деякій адресі, з якого цей сегмент починається при його розміщенні в пам’яті, і зсув повинний додаватися до цієї базової адреси.
Перетворення імені сегмента в його порядковий номер здійснить система програмування, а операційна система буде розміщати сегменти в пам'ять і для кожного сегмента одержить інформацію про його початок. У такий спосіб, віртуальна адреса для цього способу буде складатися з двох полів - номер сегмента і зсув відносно початку сегмента.
Відповідна ілюстрація приведена на мал. На цьому малюнку зображений випадок звертання до комірки, віртуальна адреса якої дорівнює сегменту з номером 11 і зміщенням від початку цього сегмента, рівним 612. Як Ми бачимо, операційна система розмістила даний сегмент у пам'яті, починаючи з комірки з номером 19 700.
Кожен сегмент, розташований у пам'яті, має відповідну інформаційну структуру, часто називану дескриптором сегмента. Саме операційна система будує для кожного процесу, що виконується, відповідну таблицю дескрипторів сегментів і при розміщенні кожного з сегментів в оперативній чи зовнішній пам'яті в дескрипторі відзначає його поточне місцезнаходження. Якщо сегмент задачі в даний момент знаходится в оперативній пам'яті, то про це робиться позначка в дескрипторе. Як правило, для цього використовується “біт присутності“ (present). У цьому випадку в поле «адреса» диспетчер пам'яті записує адресу фізичної пам'яті, з якого сегмент починається, а в поле «довжина сегмента» (limit) указується кількість адресуємих комірок пам'яті. Це поле використовується не тільки для того, щоби розміщати сегменти без накладання один на “інший” але і для того, щоб проконтролювати, чи не звертається код задачі, що виповнюється, за межі поточного сегмента. В випадку перевищення довжини сегмента унаслідок помилок програмування ми можемо говорити про порушення адресації і за допомогою введення спеціальних апаратних засобів генерувати сигнали переривання» які дозволять фіксувати (виявляти) такого роду помилки.
Отже, якщо необхідного сегмента в оперативній пам'яті немає, то виникає переривання і керування передається через диспетчер пам'яті програмі завантаження сегмента. Поки відбувається пошук сегмента в зовнішній пам'яті і завантаження його в оперативну, диспетчер пам'яті визначає придатне для сегмента місце. Можливо, що вільного місця немає, і тоді приймається рішення про вивантаження якого-небудь сегмента і його переміщення в зовнішню пам'ять. Якщо при цьому ще залишається час, то процесор передається іншій готовій до виконання задачі. Після завантаження необхідного сегмента процесор знову передається задачі, що викликала переривання через відсутність сегмента. Усякий раз при зчитуванні сегмента в оперативну пам'ять у таблиці дескрипторів сегментів необхідно установити адресу початку сегмента й ознаку присутності сегмента.
При пошуці вільного місця використовується одна з перерахованих вище дисциплін роботи диспетчера пам'яті (застосовуються правила «першого придатного» і «самого невідповідного» фрагментів). Якщо вільного фрагмента пам'яті достатнього обсягу зараз немає, але сума вільних фрагментів перевищує вимоги по пам'яті для нового сегмента, то в принципі може бути застосоване «ущільнення пам'яті», про яке ми говорили. В ідеальному випадку розмір сегмента повинний бути досить малим, щоб його можна було розмістити у випадково вивільнюваних фрагментах оперативної пам'яті, але досить великим, щоб містити логічно закінчену частину програми для того, щоб мінімізувати міжсегментні звертання.