Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ«ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЕОМ
Звіт
лабораторна робота №6
«Дослідження принципів віртуалізації програмного оточення на прикладі Java Virtual Machine»
з дисципліни:
«Проектування віртуальних машин»
Мета: Дослідити роботу засобів програмної віртуалізації на прикладі Java Virtual Machine
Завдання:
№
Функція
Кількість вхідних аргументів
05
Середнє арифметичне
2
Порядок виконання роботи:
1. Схема та стислий опис роботи JVM.
Програми, що написані мовою Java, є незалежними від фізичної платформи. Це означає, що можна скомпілювати Java-програму на одній архітектурі (наприклад, Pentium), а потім запустити її на виконання в іншій архітектурі (скажімо, на Sun workstation) без додаткових модифікацій і перекомпіляції.
Компілятор Java-програм не враховує архітектуру машини, на якій має викликатися результат компіляції, наприклад, число регістрів, розмір пам’яті, порти введення-виведення тощо. Після завершення компіляції для виконання програми нам потрібна так звана віртуальна машина Java - Java Virtual Machine (JVM), аби надати архітектуру для запуску і виконання скомпільованої програми. При цьому віртуальною машиною Java називають програмне забезпечення, що емулює реальну машину. VM є за своєю сутністю обгорткою ("wrapper"), в яку загорнуто реальну апаратну архітектуру. З боку Java-програми така обгортка надає стандартний інтерфейс, а з боку апаратури інтерфейс обгортки залежить від апаратної архітектури і є досить складним. Тому JVM для платформи Pentium відрізняється від JVM для платформи Sun workstation, яка, в свою чергу, відрізняється від JVM для платформи Macintosh тощо. Хоча JVM є віртуальною, вона надає яскравий приклад елегантно розробленої архітектури рівня машинних інструкцій.
Віртуальна машина Java для конкретної платформи реалізується на машинних інструкціях цієї платформи. JVM діє як інтерпретатор так званого байткоду Java (Java bytecode), що інтерпретуються під час виконання в машинні інструкції відповідної обчислювальної машини. Байткод Java є результатом компіляції текстів програм, написаних мовою Java (рис.1). Робота JVM подібна до виконання оператора switch (case) - JVM «розбирає» одну інструкцію байткоду за один раз. При цьому кожна інструкція байткоду спричиняє перехід на відповідний блок машинного коду (в архітектурі платформи виконання), який власне реалізує цю інструкцію байткоду.
Рис.1. Схема віртуалізаії програмного оточення на основі JVM
2. Порядок створення, компіляції та запуску Java-програм.
Для того щоб створювати та компілювати Java-програми потрібно встановити Java Development Kit. Далі була набрана програма згідно варіанту. Та збережена з назвою my_lab.java. Наступним кроком була її компіляція javac my_lab.java. Далі отримання її байт коду java –c my_lab та вивід її у файл. Останнім кроком був запуск скомпільованої програми java my_lab.
3. Текст створеної Java-програми.
public class my_lab{
public static void main (String[] Args) {
int a,b,res = 0;
a = Integer.parseInt(Args[0]);
b = Integer.parseInt(Args[1]);
res = Calc(a,b);
System.out.println(res);
}
public static int Calc(int i, int j)
{
int sum = (i + j) / 2;
return sum;
}
}
4. Результати компіляції та запуску на виконання створеної Java-програми.
Рис.2. Схема конфігурації віртуальної мережі на основі мостового з’єднання.
5. Текст байткоду створеної Java-програми у вигляді інструкцій JVM з поясненнями.
Compiled from "my_lab.java"
public class my_lab {
public my_lab();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_3
2: aload_0
3: iconst_0
4: aaload
5: invokestatic #2 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
8: istore_1
9: aload_0
10: iconst_1
11: aaload
12: invokestatic #2 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
15: istore_2
16: iload_1
17: iload_2
18: invokestatic #3 // Method Calc:(II)I
21: istore_3
22: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream;
25: iload_3
26: invokevirtual #5 // Method java/io/PrintStream.println:(I)V
29: return
public static int Calc(int, int);
Code:
0: iload_0
1: iload_1
2: iadd
3: iconst_2
4: idiv
5: istore_2
6: iload_2
7: ireturn
}
Висновок: Під час даної лабораторної роботи я дослідив роботу засобів програмної віртуалізації на прикладі Java Virtual Machine
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!