Портирование jvm в пространство ядра?

Это возможно, посмотрите на раздел отображения идентификатора пользователя в странице справочника экспорта.

В основном Вы хотите это в строке экспорта: all_squash anonuid=whatever anongid=whatever

Если Вы не находитесь на Linux, а на BSD, сделайте то, что сказал Chris S.

2
26.05.2014, 20:19
2 ответа
[1180936] Я думаю, что это был бы очень большой проект, так как вам понадобилась бы реализация JVM [1181266], написанная на C[1181267] с пользовательскими частями, использующими API ядра. Точкой доступа openjdk является [1181268]видимо 250K+ LOC[1181269] на языках Си и Си++. Обратите внимание, что вы не можете использовать C++ с ядром linux.

Метинги, которые могут быть реализованы за несколько [1181270]человеко-лет[1181271]. Очень маловероятно, что в таком случае вы сможете включить его в официальное дерево исходных текстов, но это не так уж и важно.

Учитывая этот масштаб по отношению к тому, что вы называете "наибольшим преимуществом":

Конечно, наибольшим преимуществом такой системы было основное упрощение разработки пространства ядра.

Я не уверен, что вы имеете в виду под этим. Для людей, которые могут программировать на Java, но не на C, я полагаю, что это очевидно правда. Но если вы имеете в виду в общем смысле, то я не понимаю, как это могло бы быть. Мне удобно и на Си, и на Java, и у меня нет сильного предпочтения одному, а не другому (контекст, или кто-то другой, как правило, принимает такое решение за меня). Возможно, Java немного проще в использовании, т.к., например, не нужно делать ММ (но действительно ли ММ настолько сложен?) и т.п. -- но IMO также может показаться более неудобным и ограниченным.

Лично я бы не считал это стоящим занятием, но это не значит, что я считаю это невозможным или плохой идеей. Вашим главным препятствием будет поиск других людей, которые могли бы внести свой вклад. [1180947]
7
27.01.2020, 21:49
[1181556]Похоже, что наличие JVM в ядре на самом деле мало что решает. Правда, что отсутствие указателей обеспечивает разумную изоляцию независимых частей кода, но и втягивает в себя либо Java байткодный интерпретатор (который навсегда медленнее нативного кода), либо JIT компилятор (который в начале крайне медленен). И я не говорю о сборщике мусора, который, как я подозреваю, вы, возможно, надеетесь автоматически решить некоторые проблемы (а это не так).

Другой проблемой, которую нужно решить, будет взаимодействие с любым оборудованием. Вам понадобился бы довольно нетривиальный кусок кода, который позволил бы Java-коду получить доступ, например, к сетевой карте, SATA, (i)SCSI, USB, FibreChannel и мириадам других контроллеров, аудиокарте и (наверное, одному из самых хитрых битов) графическому ускорителю. Это привело бы к тому, что существенная часть кода была бы написана на другом языке, более близком к "голому металлу" (будь то ассемблерка или C/C++ - что на самом деле не намного больше, чем более читабельная ассемблерка с более высоким уровнем абстракции).

xinput list

В конце концов, если бы написание кода ядра на Java было конечной целью, то, вероятно, было бы принято решение сделать это немного по-другому: написать его на Java и скомпилировать его непосредственно в родной код.

xinput test <ID>

1) Каждый разработчик Java с относительно небольшим уровнем знаний смог разработать модуль ядра.

Написание модуля ядра, который в 90% случаев [1181992]связан с аппаратным обеспечением [1181993], требует более чем "незначительного" уровня знаний об аппаратном обеспечении. Люди, которые знают Java, но не понимают C в глубине души, определённо не являются подходящими кандидатами на написание драйверов аппаратуры (или любых других модулей ядра).

xinput set-button-map <ID> 1 2 3 4 5 0 0
Взгляните с другой стороны: доверяете ли вы свои самые важные данные (а я даже не говорю о том, чтобы быть на системе жизнеобеспечения, управляемой таким ядром) чему-то, что работает на ядре, написанном [1181994] людьми, которые не понимают Си и ассемблера [1181995] настолько, чтобы написать на нём разумный драйвер?

function ipfor() {
  ping -c 1 $1 | grep -Eo -m 1 '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}';
}

2) (И это действительно намеченная цель): JVM мог бы решить самую большую проблему разработки ядра, и это - отсутствие защиты памяти. Двоичный сегмент кода, скомпилированный из java, никогда не причинял вреда структурам данных вне его рамок, если нет другой проблемы (например, ошибка jit-компилятора или низкоуровневая проблема hw), хотя проверки безопасности во время выполнения такого двоичного кода привели к хорошо измеряемому недостатку скорости.

Защита памяти JIT? Она требует, чтобы страницы были как доступными для записи, так и исполняемыми. Это кошмар безопасности даже при отсутствии прямого доступа к памяти (в смысле возможности использовать указатели)

Если безопасность (а значит, и изоляция кода среди прочих) вас беспокоит, то микроядра - это то, за чем вы охотитесь. Вы даже можете иметь [1181998]формально верифицированное [1181999]. И опять же, код может быть хорош только настолько, насколько хорош худший программист, чей код все еще находится - в лучшем случае. Язык как таковой не так важен, как люди, его использующие.

Кстати, Настоятельно рекомендую прочитать [1182000] этот ответ по системному программированию на различных языках [1182001] по SO.[1181575].

5
27.01.2020, 21:49

Теги

Похожие вопросы