Учебное пособие: Операционные системы "тонких" клиентов
Шаг2 выполняется при
связывании, он включает в себя верификацию без анализа байт-кодов. На этом шаге
проверяется:
отсутствие нарушений в
использовании классов и методов, объявленных с модификатором final;
наличие у каждого класса
(кроме класса Object) суперкласса;
соответствие
спецификациям содержимого пула констант;
правильность имен классов
и интерфейсов и дескрипторов всех полей и методов, ссылающихся на пул констант.
Проверки правильности
элементов файла класса, выполняемые на этом шаге, - только формальные, не
семантические. Более подробные проверки выполняются на следующих шагах.
Шаг 3 также выполняется
на этапе связывания. На этом шаге верификатор проверяет массив байт-кодов
каждого метода. При этом анализируется поток данных, обрабатывающийся при
выполнении метода. Верификатор исходит из того, что в любой точке программы,
независимо от того, каким образом управление попало на эту точку, должны
соблюдаться определенные ограничения целостности данных, которые сводятся в
основном к следующим:
размер стека операндов
неизменен и стек содержит операнды одного типа;
не выполняется доступ к
локальным переменным неизвестного типа;
доступ к локальным
переменным осуществляется только в пределах массива локальных переменных;
все обращения к пулу
констант производятся к элементам соответствующего типа;
полям класса назначаются
значения соответствующего типа;
все команды байт-кода
используются с операндами (в стеке или в массиве локальных переменных) типа, соответствующего
типу команды;
методы вызываются с
правильными аргументами;
команды перехода передают
управление только внутри байт-кода метода и передача управления всегда
происходит только на первый байт команды байт-кода.
Шаг 4 выполняется при
первом вызове кода любого метода. Это "виртуальный шаг", он
выполняется не в виде отдельного шага проверки всего байт-кода, а при
выполнении каждой отдельной команды.
Для команды, которая
ссылается на тип, при этом:
загружается определение
типа (если оно еще не загружено);
проверяется, может ли
текущий выполняемый метод ссылаться на этот тип;
выполняется инициализация
класса (если он еще не инициализирован).
Для команды, которая
вызывает метод или осуществляет доступ к полю класса, при этом:
проверяется, существует
ли поле или метод в данном классе;
проверяется правильность
дескриптора вызванного метода или поля;
проверяется, имеет ли
текущий выполняемый метод права доступа к этому методу или полю.
В конкретных реализациях
Java VM допускается после выполнения шага 4 заменять проверенную команду
байт-кода альтернативной "быстрой" формой. Например, в Sun Java VM
команда байт-кода new может быть заменена командой new_quick.
"Быстрая" команда выполняется так же, как и исходная, но при ее выполнении
исключается повторная верификация команды. В файле класса "быстрые"
команды не допускаются, они выявляются на предыдущих шагах верификации и
вызывают отказ. "Быстрые" формы не являются спецификациями Java, они
реализуются в конкретной Java VM.
Аплеты являются наиболее
критическими с точки зрения безопасности Java-программами, поскольку аплет
загружается из Internet, возможно, из непроверенного источника. Естественно,
недопустимым является предоставление программе, пришедшей "неизвестно
откуда" доступа к ресурсам локального компьютера. Поэтому для аплетов
введены весьма жесткие ограничения на выполнение. Аплету запрещается:
получать сведения о
пользователе или его домашней директории;
определять свои системные
переменные;
работать с файлами и
директориями на локальном компьютере (читать, изменять, создавать и т.д. и даже
проверять существование и параметры файла);
осуществлять доступ по
сети к удаленному компьютеру, получать список сетевых сеансов связи, которые
устанавливает локальный компьютер с другими компьютерами;
открывать без уведомления
новые окна, запускать локальные программы и загружать локальные библиотеки,
создавать новые нити, получать доступ к группам нитей другого аплета;
получать доступ к любому
нестандартному пакету, определять классы, входящие в локальный пакет.
Модель безопасности Java
еще далека от совершенства, и в ее реализациях иногда обнаруживаются
"лазейки" для несанкционированного проникновения. Следует отметить,
что в сетевых публикациях довольно часто можно встретить критику безопасности в
Java и предупреждение о принципиальной возможности "взлома" защиты
Java тем или иным способам. Вместе с тем, сетевые публикации не дают оснований
говорить о том, что реальные информационные системы, в которых применяется
технология Java, чаще подвергаются взлому, чем системы, эту технологию не
применяющие.
13.6 JavaOS и Java для
тонких клиентов
В конце 90-х годов фирма
Sun Microsystems предприняла разработку новой ОС, базирующейся на технологии
Java - JavaOS. Для доводки этой ОС фирма Sun привлекла фирму IBM, и конечный
продукт JavaOS является собственностью обеих этих фирм.
JavaOS является
операционной системой для широкого спектра вычислительных средств, включая
сетевые и встроенные компьютеры. Целью разработки этой ОС являлось
предоставление среды для выполнения Java-приложений без использования базовой
универсальной ОС.
JavaOS строится по
принципу многослойной архитектуры, показанной на рисунке 13.6, включающей в
себя платформенно-зависимую и платформенно-не
Рисунок 13.6 Архитектура
JavaOS
Платформенно-зависимая
часть состоит из загрузчика, микроядра, виртуальной машины Java и частично -
среды выполнения Java (JavaOS Runtime Environment).
Функции загрузчика
вытекают из его названия. JavaOS ориентирована прежде всего на клиент/серверную
модель вычислений. Это означает, что необходимое программное обеспечение,
постоянно хранящееся на клиентской стороне - минимальное, загрузчик и
составляет тот необходимый и достаточный минимум программного обеспечения,
который обеспечивает загрузку всего остального программного обеспечения с
сервера.
Микроядро JavaOS очень
похоже на микроядра ОС, рассмотренных нами выше (QNX, AMX RTOS и др.). Оно
выполняет функции:
обработки прерываний и
исключений;
поддержки множественных
нитей;
поддержки
многопроцессорных конфигураций;
управления реальной
памятью;
управления реальными
устройствами и каналом ПДП.
JVM обеспечивает:
интерпретацию байт-кода;
управление выполнением;
управление памятью;
нити;
загрузку классов;
верификацию байт-кода.
Программное обеспечение
среды выполнения Java частично создается в кодах Java, частично - в
"родных" (native) кодах целевой платформы. В состав среды выполнения
входит JVM и ряд системных менеджеров, в том числе:
Менеджер Конфигурации,
представляющий собой первый класс, Java-кода, выполняемый JVM, он обеспечивает
запуск компонентов Менеджера Платформы и дополнительных сервисов JavaOS;
Менеджер Платформы,
обеспечивающий запуск и поддержку компонентов, обслуживающих
платформенно-зависимые устройства и шину ввода-вывода платформы;
Менеджер Сервисов, пакет,
обеспечивающий поиск и запуск сервисных утилит JavaOS;
Менеджер Устройств,
компонент, обеспечивающий архитектуру Java-интерфейса устройств (JDI);
Классы Java-интерфейса
платформы (JPI), инкапсулирующие драйверы JDI и решение платформенно-зависимых
вопросов, включая управление временем, памятью и прерываниями.
Дополнительные
(опционные) компоненты среды выполнения включают в себя компоненты конфигурации
(персональной, сетевой, встроенной), наборы драйверов и средства отладки.
Вся среда выполнения
(включая JVM) работает как один процесс в виртуальном адресном пространстве.
Соответствие виртуального адресного пространства физической памяти
обеспечивается микроядром. Также микроядро обеспечивает использование
многопроцессорной архитектуры вычислительной системы для функционирования среды
выполнения и приложений. Вся специфика управления процессорами и памятью
инкапсулирована в JPI.
Большая часть драйверов
устройств JavaOS пишется на языке Java. Платформенная независимость драйверов
поддерживается компонентом JDI, который состоит из:
Менеджера Событий,
обеспечивающего взаимодействие с устройствами по событийной модели;
Системной Базы Данных,
обеспечивающей хранение и получение конфигурационной информации (относящейся к
ОС, устройствам и приложениям) в едином репозитории;
платформенно-зависимых
блоков драйверов;
Менеджера Шины.
Следующий, полностью
платформенно-независимый уровень составляют сервисы JavaOS, такие как: классы,
обеспечивающие базовую графику, ввод-вывод и сетевые коммуникации для
платформы.
Более высокие уровни
составляют стандартные пакеты Java, пакет расширенного графического интерфейса
Swing и, наконец, пользовательские приложения.
К сожалению, JavaOS
"не успела" на рынок тонких клиентов, к тому моменту, когда эта ОС
поступила в продажу, рынок мобильных клиентов, на который она могла
претендовать, был уже занят, в основном, Windows CE, также сложились уже и
операционные среды для сетевых компьютеров, например, IBM Workspace on Demand
для OS/2 и Windows. Поэтому фирмы-производители "законсервировали"
проект и его конечный продукт - JavaOS - не представлен на рынке.
Опыт разработки JavaOS
фирма Sun Microsystems использовала для создания концепции EmbeddedJava [17].
Технология EmbeddedJava является надстройкой над ОС (любой ОС) тонкого клиента
и включает в себя JVM и библиотеку классов Java. Отличие от базовой технологии
Java состоят в том, что и JVM, и библиотека классов являются конфигурируемыми,
то есть, их объем минимизируется таким образом, чтобы в них включались только
те свойства, которые необходимы и достаточны для выполнения Java-приложений
конкретного тонкого клиента. Фирма Sun обеспечивает набор инструментальных
средств для создания такой компактной прикладной среды, в состав которых
входят:
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27 |