Операционные системы "тонких" клиентов

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

, в тот же стек помещаются и результаты выполнения команд.

Среда выполнения метода содержит информацию, необходимую для динамического связывания, возврата из метода и обработки исключений. Код класса (размещенный в области класса) обращается к внешним методам и переменным, используя символические ссылки. Динамическая компоновка переводит символические ссылки в фактические. Среда выполнения содержит ссылки на таблицу символов метода, через которую производятся обращения к внешним методам и переменным.

В среде выполнения содержится также информация, необходимая для возврата из метода: указатель на кадр вызывающего метода, значение регистра pc для возврата, содержимое регистров вызывающего метода и указатель на область для записи возвращаемого значения.

Информация обработки исключений содержит ссылки на секции обработки исключений в методе класса.

Через среду выполнения также происходят обращения к данным, содержащимся в области класса, в том числе, к константам и к переменным класса.

Команды Java VM состоят из однобитного кода операции, а также могут содержать операнды. Число и размер операндов определяются кодом операции, некоторые команды не имеют операндов. Основной алгоритм работы Java VM сводится к простейшему циклу, приведенному на рисунке 13.4.

 

Рисунок 13.4 Основной цикл работы Java VM

 

Каждый из типов данных Java VM обрабатывается своими командами. Основные типы команд Java VM:

Команды загрузки и сохранения, в том числе:

загрузка в стек локальной переменной;

сохранение значения из стека в локальной переменной;

загрузка в стек константы (из пула констант).

Команды манипулирования значениями (большинство этих операций работают с операндами из стека и помещают результат в стек), в том числе:

арифметические операции;

побитовые логические операции;

сдвиг;

инкремент (операция работает с операндом - локальной переменной).

Команды преобразования типов.

Команды создания ссылочных данных и доступа к ним, в том числе:

создания экземпляров класса;

доступа к полям класса;

создания массивов;

чтения в стек и сохранения элементов массивов;

получения свойств массивов и объектов.

Команды прямого манипулирования со стеком.

Команды передачи управления, в том числе:

безусловный переход;

условный переход;

переход по множественному выбору.

Команды вызова методов и возврата (включая специальные команды вызова синхронизированных методов).

Команды генерации и обработки исключений.

Принятые в спецификациях Java VM структуры данных и алгоритмы таковы, что позволяют реализовать виртуальную машину с минимальными затратами памяти и сделать ее работу максимально эффективной.

Другим ключевым элементом спецификаций Java является файл класса. Каждый файл класса описывает один класс или интерфейс. Файл класса содержит поток байт, структурированный определенным образом. Все реализации компилятора Java должны генерировать файлы классов, структура которых соответствует определенной в спецификациях. Все реализации Java VM должны "понимать" структуру файлы класса, соответствующую определенной в спецификациях.

Основные компоненты файла класса следующие:

Некоторая верификационная информация: "магическое число" - сигнатура файла класса, номер версии.

Флаг доступа, отображающий модификаторы, заданные в определении класса (public, final, abstract и т.д.), а также признак класса или интерфейса.

Пул констант - таблица структур, представляющих различные строковые константы - имена классов и интерфейсов, полей, методов и другие константы, на которые есть ссылки в файле класса.

Ссылки на имена this-класса и суперкласса в пуле констант.

Перечень интерфейсов, реализуемых классом (в виде ссылок в пул констант).

Описание полей класса с указанием их имен, типов, модификаторов и т.д.

Методы класса - каждый метод представляется в виде определенной структуры, в которой содержится описание метода (имя, модификаторы, и т.д.), одним из атрибутов этой структуры является массив байт-кодов метода.

Многие компоненты файла класса (пул констант, перечень интерфейсов и др.) имеют нефиксированную длину, такие компоненты предваряются 2-байтным полем, содержащим их длину.

 

13.3 Многопоточность и синхронизация

 

Java, по-видимому, является единственным универсальным языком программирования, в котором механизмы создания нитей поддерживаются встроенными средствами языка. В традиционных языках программирования (например, C) создание нитей обеспечивается системно-зависимыми библиотеками, обеспечивающими API ОС. В Java средства создания нитей системно-независимые.

В Java-программе нить представляет отдельный класс, который может быть создан

либо как подкласс (наследник) суперкласса Tread;

либо как класс, реализующий интерфейс Runnable, внутри этого класса должна быть переменная экземпляра класса - ссылка на объект класса Tread.

Суперкласс Tread и интерфейс Runnable определены в базовой библиотеке языка Java - пакете java.lang. При любом варианте создания в классе-нити должен быть реализован метод run(). Выполнение метода start() для экземпляра такого класса вызывает выполнения метода run() в отдельном потоке вычисления.

Как мы увидели в предыдущем разделе, Java VM обеспечивает для каждой нити собственную среду вычисления - собственный набор регистров и стек (в некоторых реализациях Java VM обеспечивает для нити также и собс