- •Учбово - методичні матеріали Основна література
- •Додаткова література
- •Методичні вказівки
- •Методичні вказівки до виконання лабораторних робіт
- •Лабораторна робота №1
- •1.2. Кешування даних
- •1.2.2. Принцип дії кеш-пам'яті
- •1.3. Вступ до мови програмування Java
- •1.3.1. Виконання Java-програми
- •1.3.2. Що таке jdk
- •1.3.3. Як використовувати jdk
- •1.3.4. Проста програма на Java
- •1.4. Завдання до лабораторної роботи
- •Лабораторна робота № 2
- •2. Створення програм моделювання кількох процесів, що конкурують за спільні ресурси
- •2.1. Понятие процесса
- •2.2. Понятие ресурса
- •2.3. Модель процесса
- •2.4. Создание процесса
- •2.5. Завершение процесса
- •2.6. Состояние процессов
- •2.7. Описание процессов
- •2.8. Управляющие структуры ос
- •2.9. Структуры управления процессами
- •2.9.1. Местоположение процесса
- •2.9.2. Атрибуты процессов
- •Идентификация процессов
- •Информация о состоянии процесса
- •Управляющая информация процесса
- •2.10. Управление процессами
- •2.11. Потоки. Симметричная многопроцессорная обработка
- •2.11.1. Понятие потока
- •2.11.2. Модель потока
- •2.11.3. Использование потоков
- •2.12. Потоки на уровне пользователя и на уровне ядра
- •2.12.1. Потоки на уровне пользователя (ult)
- •2.12.2. Потоки на уровне ядра (klt)
- •2.12.3. Комбинированные подходы
- •2.12.4. Всплывающие потоки
- •Многозадачность в Java. Учебный пример создания и запуска потоков в Java, часть 1
- •Вопросы для самопроверки
- •2.14. Принципы параллельных вычислений
- •2.14.1. Участие операционной системы
- •2.14.2. Взаимодействие процессов
- •2.14.3. Требования к взаимным исключениям
- •2.14.4. Многозадачность в Java. Учебный пример Производитель-Потребитель, часть 2
- •Результаты выполнения программы, 1-й вариант
- •Результаты выполнения программы, 2-й вариант
- •Результаты выполнения программы, 3-й вариант
- •Вопросы для самопроверки
- •2.15. Взаимоисключения: программный подход
- •2.15.1. Алгоритм Деккера
- •2.15.2. Алгоритм Петерсона
- •2.16. Семафоры
- •2.17. Взаимные исключения
- •Листинг 2.8. Взаимоисключения с использованием семафоров
- •2.18. Задача “Производителя-Потребителя” ("Писатель-Читатель")
- •2.19. Мониторы
- •2.19.1. Мониторы с сигналами (мониторы Хоара)
- •2.19.2. Мониторы с оповещением и широковещанием
- •2.19.3. Многозадачность в Java. Учебный пример Производитель-Потребитель, часть 3
- •Результаты выполнения программы, 1-й вариант
- •Результаты выполнения программы, 2-й вариант
- •Вопросы для самопроверки
- •2.20. Завдання на виконання роботи
- •Таб. 2.1. Варіанти завдань
- •Лабораторна робота № 3
- •3. Створення програм моделювання кількох процесів-виробників та процесів-споживачів, що обмінюються інформацією через буферний пул
- •3.1. Теоретичні відомості
- •3.2. Завдання на виконання роботи
- •Лабораторна робота № 4
- •4. Моделювання процесів, що конкурують за спільні ресурси з використанням методів планування
- •4.1. Призупинені процеси
- •4.2. Завдання на виконання роботи
- •Лабораторна робота № 5
- •5. Моделювання Управління процесами та потоками в ос linux Мета роботи. Засвоєння методу планування процесів ос linux, основаному на керуванні пріоритетами та їхнього моделювання засобами мови java.
- •5.1. Процеси у linux
- •5.2. Потоки у linux
- •5.3. Завдання на виконання роботи
1.2. Кешування даних
Користувачеві хотілося б мати і недорогу і швидку пам'ять. Кеш-пам'ять представляє деяке компромісне вирішення цієї проблеми (мал. 1.2.).
Мал. 1.2. Ієрархія кеш-пам'яті
1.2.1. Кеш-пам'ять
Кеш-пам'ять - це спосіб організації сумісного функціонування двох типів запоминаючих пристроїв, які відрізняються часом доступу і вартістю зберігання даних, який дозволяє зменшити середній час доступу даним за рахунок динамічного копіювання в "швидке" ЗУ найбільш часто використовуваній інформації з "повільного" ЗУ.
Кеш-пам'яттю, або кешем, також часто називають не тільки спосіб організації роботи двох типів запоминаючих пристроїв, але й один з пристроїв - "швидке" ЗУ. Воно коштує дорожче і, як правило, має порівняно невеликий об'єм. Важливо, що механізм кеш-пам'яті є прозорим для користувача, який не повинен повідомляти ніякої інформації про інтенсивність використання даних і не повинен ніяк брати участь в переміщенні даних із ЗУ одного типу в ЗУ іншого типу, все це робиться автоматично системними засобами.
Кешування — це універсальний метод, придатний для прискорення доступу до оперативної пам'яті, до диска і до інших видів запоминаючих пристроїв. Якщо кешування застосовується для зменшення середнього часу доступу до оперативної пам'яті, то як кеш використовують швидкодіючу статичну пам'ять. Якщо кешування використовується системою введення-виводу для прискорення доступу до даним, що зберігаються на диску, то в цьому випадку роль кеш-пам'яті виконують буфери в оперативній пам'яті, в яких осідають найбільш активно використовувані дані.
Віртуальну пам'ять також можна рахувати одним з варіантів реалізації принципу кешування даних, при якому оперативна пам'ять виступає в ролі кеша по відношенню до зовнішньої пам'яті — жорсткого диска. Правда, в цьому випадку кешування використовується не для того, щоб зменшити час доступу даним, а для того, щоб змусити диск частково підмінити оперативну пам'ять за рахунок переміщення тимчасово невживаної коди і даних на диск з метою звільнення місця для активних процесів. В результаті найбільш інтенсивно використовувані дані «осідають» в оперативній пам'яті, решта інформації ж зберігається в об'ємнішою і менш дорогій зовнішній пам'яті.
1.2.2. Принцип дії кеш-пам'яті
Розглянемо окремий випадок використання кеш-пам'яті для зменшення середнього часу доступу до даних, що зберігаються в оперативній пам'яті. Для цього між процесором і оперативною пам'яттю поміщається швидке ЗУ, зване просто кеш-пам'яттю (мал. 1.3).
Вмістом кеш-пам'яті є сукупність записів про всі завантажені в неї елементи даних. Кожен запис про елемент даних включає:
значення елементу даних;
адреса, яку цей елемент даних має в оперативній пам'яті;
управляючу інформацію: ознака модифікації та ознака звернення до даних за деякий останній період часу.
У системах, оснащених кеш-пам'яттю, кожен запит до оперативної пам'яті виконується відповідно до наступного алгоритму.
Відбувається пошук даних в кеш-пам'яті з метою визначення, чи не знаходяться потрібні дані в кеш-пам'яті; кеш-пам'ять не є такою, що адресується, тому пошук потрібних даних здійснюється по вмісту - значенню поля "адреса в оперативній пам'яті", узятому із запиту.
Якщо дані виявляються в кеш-пам'яті, тобто відбулося кеш-попадання (cache-hit), то вони прочитуються з неї, і результат передається в джерелу запиту (наприклад, процесор).
Мал. 1.3. Схема функціонування кеш-пам'яті
Якщо потрібних даних немає в кеш-пам'яті, тобто відбувся кеш-промах (cache-miss), то вони разом зі своєю адресою копіюються з оперативної пам'яті в кеш-пам'ять, і результат виконання запиту передається джерелу запиту. При копіюванні даних може опинитися, що в кеш-пам'яті немає вільного місця, тоді вибираються дані, до яких в останній період було менше всього звернень (або за допомогою другого алгоритму), для витіснення їх з кеш-пам'яті.
Якщо дані, що витісняються, були модифіковані за час знаходження в кеш-пам'яті, то вони переписуються в оперативну пам'ять. Якщо ж ці дані не були модифіковані, то їх місце в кеш-пам'яті оголошується вільним.
На практиці в кеш-пам'ять прочитується не один елемент даних, до якого відбулося звернення, а цілий блок даних, це збільшує вірогідність так званого "попадання в кеш", тобто знаходження потрібних даних в кеш-пам'яті.
Інтуїтивно зрозуміло, що ефективність кешування залежить від вірогідності попадання в кеш. Покажемо це шляхом знаходження залежності середнього часу доступу до основної пам'яті від вірогідності кэш-попаданий. Нехай є основний запоминаючий пристрій з середнім часом доступу до даних tl і кеш-пам'ять, що має час доступу t2, очевидно, що t2 < tl. Хай t — середній час доступу до даних в системі з кеш-пам'яттю, а р — вірогідність кэш-попадания. По формулі повної вірогідності маємо:
t = t1(1 - p)+ t2p.
Середній час доступу до даним в системі з кеш-пам'яттю лінійно залежить від вірогідності попадання в кеш і змінюється від середнього часу доступу в основний пристрій t1, що запам'ятовує, при р=0 до середнього часу доступу безпосередньо в кеш-пам'ять t2 при р=1. Звідси видно, що використання кеш-пам'яті має сенс тільки при високій вірогідності кэш-попадання.
Вірогідність виявлення даних в кеші залежить від різних чинників, таких, наприклад, як об'єм кеша, об'єм кэшируемой пам'яті, алгоритм заміщення даних в кеші, особливості виконуваної програми, час її роботи, рівень мультипрограмування і інших особливостей обчислювального процесу. Проте в більшості реалізацій кеш-пам'яті відсоток кэш-попаданий виявляється вельми високим — понад 90 %. Таке високе значення вірогідності знаходження даних в кеш-пам'яті пояснюється наявністю у даних об'єктивних властивостей: просторовій і тимчасовій локальності.
Просторова локальність. Якщо відбулося звернення за деякою адресою, то з високим ступенем вірогідності найближчим часом відбудеться звернення до сусідніх адрес.
Тимчасова локальність. Якщо відбулося звернення за деякою адресою, то наступне звернення за цією ж адресою з великою вірогідністю відбудеться найближчим часом.
Саме грунтуючись на властивості тимчасової локальності, дані, тільки що считані з основної пам'яті, розміщують в пристрої швидкого доступу, припускаючи, що скоро вони знову знадобляться. Спочатку роботи системи, коли кеш-пам'ять ще порожня, майже кожен запит до основної пам'яті виконується «за повною програмою»: проглядання кеша, констатація промаху, читання даних з основної пам'яті, передача результату джерелу запиту і копіювання даних в кеш. Потім, у міру заповнення кеша, в повній відповідності з властивістю тимчасової локальності зростає вірогідність звернення до даних, які вже були використані на попередньому етапі роботи системи, тобто до даних, які містяться в кеші і можуть бути считані значно швидше, ніж з основної пам'яті.
Властивість просторової локальності також використовується для збільшення вірогідності кэш-попадания: як правило, в кеш-пам'ять прочитується не один інформаційний елемент, до якого відбулося звернення, а цілий блок даних, розташованих в основній пам'яті в безпосередній близькості з даним елементом. Оскільки при виконанні програми дуже висока вірогідність, що команди вибираються з пам'яті послідовно одна за одною з сусідніх осередків, то має сенс завантажувати в кеш-пам'ять цілий фрагмент програми. Аналогічно якщо програма веде обробку деякого масиву даних, то її роботу можна прискорити, завантаживши в кеш частину або навіть весь масив даних. При цьому враховується висока вірогідність того, що значне число звернень до пам'яті виконуватиметься до адрес масиву даних.
Всі попередні міркування справедливі і для інших пар запоминаючих пристроїв, наприклад, для оперативної пам'яті і зовнішньої пам'яті. В цьому випадку зменшується середній час доступу до даних, розташованих на диску, і роль кеш-пам'яті виконує буфер в оперативній пам'яті.
