- •Змістовий модуль 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. Ос однопроцесорних кс. Класифікація ос.
- •Режими організації обчислювального процесу. (Немає) Основні принципи побудови операційних систем.
- •Принцип модульності.
- •Принцип функціональної вибірковості.
- •Принцип генерування ос.
- •Принцип відкритої і нарощуваний ос.
- •Принцип мобільності.
- •Принцип забезпечення безпеки обчислень.
Ідентифікація лексичних одиниць мов програмування.
Ідентифікація змінних, типів, процедур, функцій та інших лексичних одиниць мов програмування - це встановлення однозначної відповідності між цими об'єктами і їх іменами в тексті вихідної програми. Ідентифікація лексичних одиниць мови найчастіше виконується на етапі семантичного аналізу.
Як правило, більшість мов програмування вимагають, щоб у вихідній програмі імена лексичних одиниць не збігалися як між собою, так і з ключовими словами синтаксичних конструкцій мови. Проте, найчастіше цього буває недостатньо, щоб встановити однозначне співвідношення між лексичними одиницями та їх іменами, оскільки існують додаткові смислові обмеження, що накладаються мовою на вживання ці імен.
Наприклад локальні змінні в більшості мов програмування маю область видимості, яка обмежує вживання імені змінної рамками того блоку вихідної програми, де ця змінна описана. Це означає, що з одного боку, така змінна не може бути використана поза межами своєї області видимості. З іншого боку, ім'я змінної може бути не унікальним, оскільки у двох різних областях видимості допускається існування двох різних змінних з однаковими іменами. Повний перелік таких обмежень залежить від семантики конкретної мови програмування. Всі вони чітко задані в описі мови і не можуть допускати неоднозначності в тлумаченні, але не можуть бути повністю визначені на етапі лексичного розбору, а тому вимагають від компілятора додаткових дій на етапах синтаксичного та семантичного аналізу. Загальна спрямованість цих дій така, щоб дати кожній лексичної одиниці мови унікальне ім'я в межах всієї вихідної програми і потім використовувати це ім'я при синтезі результуючої програми. Можна дати приблизний перелік дій компіляторів для ідентифікації змінних, констант, функцій, процедур та інших лексичних одиниць мови:
· Імена локальних змінних доповнюються іменами тих блоків (функцій, процедур), в яких ці змінні описані;
· Імена внутрішніх змінних і функцій модулів вихідної програми доповнюються ім'ям самих модулів, причому це стосується тільки внутрішніх імен і не повинно відбуватися, якщо змінна або функція доступна ззовні модуля;
· Імена процедур і функцій, що належать об'єктам (класами), в об'єктно-орієнтованих мовах програмування доповнюються найменуванням типу об'єкта (класу), якому вони належать;
· Імена процедур і функцій модифікуються залежно від типів їх формальних аргументів. Звичайно, це далеко не повний перелік можливих дій компілятора, кожна реалізація компілятора може припускати свої набір дій. Те, які з них будуть використовуватися і як вони будуть реалізовані на практиці, залежить від мови початкової програми і розробників компілятора.
Як правило, унікальні імені, які компілятор присвоює лексичним одиницям мови, використовуються тільки у внутрішньому представленні вихідної програми компілятором, і людина, що створила вихідну програму, не стикається з ними. Але вони можуть знадобитися користувачеві в деяких випадках - наприклад, при налагодженні програми, при породженні тексту результуючої програми на асемблері або при використанні бібліотеки, створеної версією компілятора для однієї мови програмування і іншою мовою (або навіть просто в іншій версії компілятора). Тоді користувач повинен знати, за якими правилами компілятор породжує унікальні імена для лексичних одиниць вихідної програми.
У багатьох сучасних компіляторах (і оброблюваних ними вхідних мовах) передбачені спеціальні настройки і ключові слова, які дозволяють відключити процес породження компілятором унікальних імен для лексичних одиниць мови. Ці слова враховані в спеціальних синтаксичних конструкціях мови (як приплив, це конструкції, що містять слона export плі external). Якщо користувач використовує ці кошти, то компілятор не застосовує механізм породження унікальних імен для зазначених лексичних одиниць. У цьому випадку розробник програми сам відповідає за унікальність імені даної лексичної одиниці в межах всієї вихідної програми або навіть в межах всього проекту, Якщо вимога унікальності не буде виконуватися, можуть виникнути синтаксичні або семантичні помилки па стадії компіляції або ж інші помилки на більш пізніх етапах розробки програмного забезпечення. Оскільки найбільш широко використовуваними лексичними одиницями в різних мовах програмування є, як правило, імена процедур і функцій, то це питання, перш за все, стосується саме їх.