Привилегированная инструкция на Java
Можно ли сделать некоторые привилегированные инструкции (например, sti, cli) доступными через API Java?
Почему бы и нет? (Или, если это так, не могли бы вы дать мне общее представление о том, как это будет реализовано?)
Спасибо
3 ответа
В обычной реализации Java единственным вариантом является реализация кода, который выполняет привилегированные инструкции в собственном методе, который вы вызываете с использованием JNI или JNA. И это не принесет вам пользы... потому что аппаратное обеспечение / операционная система будет препятствовать выполнению инструкций. (Вы получите незаконную ловушку с инструкциями... и программа будет убита.)
Почему бы и нет?
По сути, если обычное Java-приложение (или любое другое приложение пользовательского пространства) может выполнять привилегированные инструкции, оно может тривиально привести к сбою операционной системы. Это действительно плохая идея.
В простой реализации Java может быть возможно выполнить привилегированные инструкции через собственный код или, возможно, другими способами. (Например, в JNode компилятор собственного кода заменит определенные вызовы "магического" метода привилегированными инструкциями... при тщательно контролируемых обстоятельствах.)
STI и CLI являются низкоуровневыми зависимыми от платформы прерываниями.
Когда вы пишете исходный код на языке Java (язык), вы нацеливаетесь на виртуальную машину Java, которая выполняет байт-код Java. Таким образом, инструкции вашего исходного кода не переводятся напрямую в машинный код для физического компьютера. Он преобразуется в байт-код, который затем запускается (а также перекомпилируется во время выполнения компилятором JIT) для настройки на вашу физическую машину.
Поэтому у вас нет возможности (так как это не было целью разработки Java, и не было бы смысла выставлять это), чтобы легко использовать эти привилегированные инструкции. Они предназначены для абстрагирования.
Мы используем "высокоуровневые" языки по определенной причине.
Не уверен, почему вы заинтересованы в таких вещах, но для начала ознакомьтесь с этой статьей.