- •Учбово - методичні матеріали Основна література
- •Додаткова література
- •Методичні вказівки
- •Методичні вказівки до виконання лабораторних робіт
- •Лабораторна робота №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.3. Вступ до мови програмування Java
1.3.1. Виконання Java-програми
Як ви знаєте, програма, написана на одній з мов високого рівня, до яких відноситься і мова Java, так званий початковий модуль ("исходнік" або "сирець" на жаргоні, від англійського "source"), не може бути відразу ж виконана. Її спочатку треба відкомпілювати, тобто перевести в послідовність машинних команд — об'єктний модуль. Але і він, як правило, не може бути відразу ж виконаний: об'єктний модуль треба ще скомпоновать з бібліотеками використаних в модулі функцій і вирішити перехресні посилання між секціями об'єктного модуля, отримавши в результаті завантажувальний модуль — повністю готову до виконання програму.
Початковий модуль, написаний на Java, не може уникнути цих процедур, але тут виявляється головна особливість технології Java — програма компілюється відразу в машинні команди, але не команди якогось конкретного процесора, а в команди так званої віртуальної машини Java (JVM, Java Virtual Machine). Віртуальна машина Java — це сукупність команд разом з системою їх виконання. Команди JVM короткі, більшість з них має довжину 1 байт, чому команди JVM називають байт-кодами (bytecodes), хоча є команди завдовжки 2 і 3 байти. Згідно статистичним дослідженням середня довжина команди складає 1,8 байта. Повний опис команд і всієї архітектури JVM міститься в специфікації віртуальної машини Java (VMS, Virtual Machine Specification). Якщо ви хочете в точності дізнатися, як працює віртуальна машина Java, ознайомтеся з цією специфікацією.
Інша особливість Java — всі стандартні функції, що викликаються в програмі, підключаються до неї тільки на етапі виконання, а не включаються в байт-коды. Як говорять фахівці, відбувається динамічна компоновка (dynamic binding). Це теж сильно зменшує об'єм програми, що відкомпілювалася.
Отже, на першому етапі програма, написана на мові Java, переводиться компілятором в байт-коды. Ця компіляція не залежить від типу якого-небудь конкретного процесора і архітектури якогось конкретного комп'ютера. Вона може бути виконана один раз відразу ж після написання програми. Байт-коди записуються в одному або декількох файлах, можуть зберігатися в зовнішній пам'яті або передаватися по мережі. Це особливо зручно завдяки невеликому розміру файлів з байт-кодами. Потім отримані в результаті компіляції байт-коды можна виконувати на будь-якому комп'ютері, що має систему, реалізовуючу JVM. При цьому не важливий ні тип процесора, ні архітектура комп'ютера. Так реалізується принцип Java "Write once, run anywhere" — "Написано одного разу, виконується де завгодно".
Інтерпретація байт-кодов і динамічна компоновка значно уповільнюють виконання програм. Це не має значення в тих ситуаціях, коли байт-коды передаються по мережі, мережа все одно повільніше за будь-яку інтерпретацію, але в інших ситуаціях потрібний могутній і швидкий комп'ютер. Тому постійно йде удосконалення інтерпретаторів у бік збільшення швидкості інтерпретації. Розроблені JIT -компиляторы (Just-In-Time), інтерпретовані ділянки коди, що запам'ятовують вже, в машинних командах процесора і що просто виконують ці ділянки при повторному зверненні, наприклад, в циклах. Це значно збільшує швидкість обчислень, що повторюються. Фірма SUN розробила цілу технологію Hot-Spot і включає її в свою віртуальну машину Java. Але, звичайно, найбільшу швидкість може дати тільки спеціалізований процесор.
Фірма SUN Microsystems випустила мікропроцесори PicoJava, що працюють на системі команд JVM, і збирається випускати цілу лінійку все більш могутніх Java-процесорів. Є вже і Java-процесори інших фірм. Ці процесори безпосередньо виконують байт-коди. Але при виконанні програм Java на інших процесорах потрібна ще інтерпретація команд JVM в команди конкретного процесора, а значить, потрібна програма-інтерпретатор, причому для кожного типу процесорів, і для кожної архітектури комп'ютера слід написати свій інтерпретатор.
Це завдання вже вирішене практично для всіх комп'ютерних платформ. На них реалізовані віртуальні машини Java, а для найбільш поширених платформ є декілька реалізацій JVM різних фірм. Все більше операційних систем і систем управління базами даних включають реалізацію JVM в своє ядро. Створена і спеціальна операційна система JAVAOS, вживана в електронних пристроях. У більшість браузеров вбудована віртуальна машина Java для виконання аплетів.
Уважний читач вже відмітив, що окрім реалізації JVM для виконання байт-кодів на комп'ютері ще потрібно мати набір функцій, що викликаються з байт-кодів і динамічно компонуються з байт-кодами. Цей набір оформляється у вигляді бібліотеки класів Java, що складається з одного або декількох пакетів. Кожна функція може бути записана байт-кодами, але, оскільки вона зберігатиметься на конкретному комп'ютері, її можна записати прямо в системі команд цього комп'ютера, избегнув тим самим інтерпретації байт-кодов. Такі функції називають "рідними" методами (native methods). Застосування "рідних" методів прискорює виконання програми.
Фірма SUN Microsystems — творець технології Java — безкоштовно поширює набір необхідних програмних інструментів для повного циклу роботи з цією мовою програмування: компіляції, інтерпретації, відладки, що включає і багату бібліотеку класів, під назвою JDK (Java Development Kit). Є набори інструментальних програм і інших фірм. Наприклад, великою популярністю користується JDK фірми IBM.
