Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРВ complete edition епта.docx
Скачиваний:
18
Добавлен:
24.09.2019
Размер:
488.03 Кб
Скачать

140. Какие недостатки стандартного яп Java модифицированы Real-Time Java Specification(rtjs)?

Первое важное нововведение RTSJ это предоставление новых классов потоков реального времени: RealtimeThread и NoHeapRealtimeThread, для которых должен использоваться алгоритм планировки, при котором гарантируется, что потоку с наибольшим приоритетом всегда будет предоставлено процессорное время (fixed priority pre-emptive scheduling), при этом минимальный приоритет для потоков реального времени выше максимального приоритета обычных потоков Java. Это довольно серьёзное отличие от обычной реализации Java, о котором обязательно следует помнить при использовании этих классов.

Другая важная часть RTSJ—это введение новых областей памяти, отличных от обычной кучи (heap), используемой в Java. Работа с этими областями памяти осуществляется с помощью класса ScopedMemory. Объекты ScopedMemory должны создаваться непосредственно программистом.

Применение потоков NoHeapRealtimeThread и новых областей памяти помогает избавиться от проблем, связанных со сборщиком мусора. Но у этого решения есть ряд недостатков, связанных с особенностями использования ScopedMemory. Это область памяти с ограниченным временем жизни, при этом время жизни памяти определяется синтаксическими границами метода ScopedMemory.enter. При завершении данного метода все объекты, созданные в этой области памяти, могут быть уничтожены. Поэтому из соображений безопасности спецификация RTSJ запрещает использовать объекты, размещённые в ScopedMemory, за пределами метода ScopedMemory.enter. В противном случае поток, получивший ссылку на объект из ScopedMemory и не выполняющий при этом метод ScopedMemory.enter, не может гарантировать, что этот объект не будет уничтожен в произвольный момент, а использование объекта, уничтоженного в неподходящее время, может привести к краху приложения.

Для гарантии выполнения этого ограничения RTSJ вводит ряд правил, которые должны выполняться при работе со ссылками. Так, объекты, созданные в куче и ImmortalMemory, не могут ссылаться на объекты, созданные в ScopedMemory. То есть объекты с большим временем жизни не могут ссылаться на объекты с потенциально меньшим временем. Нарушение этого правила во время выполнения приведёт к генерации исключения javax.realtime.IllegalAssignmentError.

Виртуальная машина Sun Java™ Real-Time System 2.0 предоставляет два сборщика мусора:

последовательный сборщик мусора (SerialGC): при его использовании отсутствие пауз, связанных с очисткой памяти, гарантируется только для потоков NoHeapRealtimeThread

сборщик мусора реального времени (RTGC), основанный на приоритетах: не требует использования новых областей памяти и потоков NoHeapRealtimeThread для обеспечения предсказуемого поведения.

141. Назовите оо яп рв.

• Язык С. Философией С является разбиение программ на функции. С - слаботи-пизированный язык и позволяет программисту делать почти все вплоть до манипуляции с регистрами и битами. Такая свобода делает язык небезопасным. Небольшое количество заранее опре¬деленных функций и типов данных делает программы легко переносимыми между разными системами.

• Язык C дает прямой доступ к оборудованию и возможность вызова процедур на других языках. Приложения получаются переносимыми (осо¬бенно, если ОСРВ поддерживают одинаковый стандарт, например POSIX), однако, объектно-ориентированный подход на уровне языковых конструкций отсутствует.

• Язык C++. представляет собой значительно более мощный инструмент, чем С, на основе которого он создан. В C++ значительно улучшена абстрак¬ция данных с помощью понятия класса, похожего на абстрактный тип дан¬ных с четким разделением между данными и операциями. Главным преимуществом языка C++ является его способность поддер¬живать разработку легко используемых библиотек программ. Программиро¬вание в реальном времени непосредственно в C++ не поддерживается, но может быть реализовано с помощью специально разработанных программ¬ных модулей и библиотек классов.

• Java. Как язык интерпретируемого типа, имеет очень низкую эффек¬тивность получаемого кода. Доступ к оборудованию и вызовы процедур на других языках - только посредством библиотечных функций (обычно напи¬санных на C). Java обеспечивает наивысшую переносимость приложения на уровне двоичного кода и является объектно-ориентированным языком.