Re: Разыскивается легкая виртуальная машина
От: dmikos Россия dmikos.ru
Дата: 03.09.12 06:55
Оценка: +1
Здравствуйте, kaa.python, Вы писали:

KP>Ничего не могу найти, удовлетворяющее моим требованиям. Итак, что хотелось бы:


KP>

KP>А нужно все это безобразие для безболезненного встраивания машины в код драйвера. Пока что остановился на варианте "выдрать и доработать машину из DTrace", но может есть более простой путь, а я о нем просто не знаю.


Lua?
Re[5]: Разыскивается легкая виртуальная машина
От: FR  
Дата: 04.09.12 02:50
Оценка: +1
Здравствуйте, kaa.python, Вы писали:

KP>Язык уже есть, так что нужна RISC, CISC или стековая машина с простым и понятным набором инструкций.


Я понял что нужна более высокоуровневая VM, а так получается же шило на мыло, или нужна кроссплатформенность?
Попробуй копать в сторону Forth, простую форт машину, даже кроссплатформенную, на шитом коде, несложно сделать.
Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.09.12 01:47
Оценка:
Ничего не могу найти, удовлетворяющее моим требованиям. Итак, что хотелось бы:


А нужно все это безобразие для безболезненного встраивания машины в код драйвера. Пока что остановился на варианте "выдрать и доработать машину из DTrace", но может есть более простой путь, а я о нем просто не знаю.
Re[2]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.09.12 07:02
Оценка:
Здравствуйте, dmikos, Вы писали:

D>Lua?


Хотелось бы именно виртуальную машину, а не интерпретатор.
Re[3]: Разыскивается легкая виртуальная машина
От: FR  
Дата: 03.09.12 08:30
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Хотелось бы именно виртуальную машину, а не интерпретатор.


Посмотри NekoVM.
Я сам правда ее только мельком видел, так что возможно и не совсем то что нужно, но штука очень легкая.
Re[3]: Разыскивается легкая виртуальная машина
От: FR  
Дата: 03.09.12 08:41
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Хотелось бы именно виртуальную машину, а не интерпретатор.


Еще очень легкая виртуальная машина у Caml Light, но получится ли это всунуть в
драйвер не знаю, ну и целевой ML образный язык тоже может не понравится.
Re: Разыскивается легкая виртуальная машина
От: denisko http://sdeniskos.blogspot.com/
Дата: 03.09.12 11:26
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Ничего не могу найти, удовлетворяющее моим требованиям. Итак, что хотелось бы:


KP>

KP>А нужно все это безобразие для безболезненного встраивания машины в код драйвера. Пока что остановился на варианте "выдрать и доработать машину из DTrace", но может есть более простой путь, а я о нем просто не знаю.

А LLVM не устраивает только по размеру или еще по чему нибудь?
<Подпись удалена модератором>
Re: Разыскивается легкая виртуальная машина
От: Аноним  
Дата: 03.09.12 17:10
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Ничего не могу найти, удовлетворяющее моим требованиям. Итак, что хотелось бы:


KP>

KP>А нужно все это безобразие для безболезненного встраивания машины в код драйвера. Пока что остановился на варианте "выдрать и доработать машину из DTrace", но может есть более простой путь, а я о нем просто не знаю.


http://sourceforge.net/projects/obasic/
Re: Разыскивается легкая виртуальная машина
От: Alexéy Sudachén Чили  
Дата: 03.09.12 17:22
Оценка:
KP>А нужно все это безобразие для безболезненного встраивания машины в код драйвера. Пока что остановился на варианте "выдрать и доработать машину из DTrace", но может есть более простой путь, а я о нем просто не знаю.

Пока не до читал до драйвера почему-то подумал что тебе нужно что-то типа qemu )))). Но таки, почему бы и не заюзать что нить типа MIPS симулятора? Их много, твоим требованиям такой финт ушами вроде отвечает. Да и код для VM можно компилировать штатным компилятором.
Re[2]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.09.12 22:40
Оценка:
Здравствуйте, denisko, Вы писали:

D>А LLVM не устраивает только по размеру или еще по чему нибудь?


Я думал о LLVM, но сам LLVM в ядро не затащить. А собирать машинный код в UserSpace а потом заниматься ручной загрузкой на уровне ядра мне не хочется.
Re[2]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.09.12 22:42
Оценка:
Здравствуйте, Alexéy Sudachén, Вы писали:

AS>Пока не до читал до драйвера почему-то подумал что тебе нужно что-то типа qemu )))). Но таки, почему бы и не заюзать что нить типа MIPS симулятора? Их много, твоим требованиям такой финт ушами вроде отвечает. Да и код для VM можно компилировать штатным компилятором.


Да мне нужно что-то совсем мелкое и легкое. Задача довольно проста — есть код обрабатывающий определенные события написанный на специальном языке. Надо это дело оттранслировать в промежуточную форму (интерпретировать в ядре, все же, более опасно) и выполнить это дело.
Re[4]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.09.12 23:02
Оценка:
Здравствуйте, FR, Вы писали:

FR>Еще очень легкая виртуальная машина у Caml Light, но получится ли это всунуть в

FR>драйвер не знаю, ну и целевой ML образный язык тоже может не понравится.

Язык уже есть, так что нужна RISC, CISC или стековая машина с простым и понятным набором инструкций.
Re[4]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.09.12 23:04
Оценка:
Здравствуйте, FR, Вы писали:

FR>Посмотри NekoVM.

FR>Я сам правда ее только мельком видел, так что возможно и не совсем то что нужно, но штука очень легкая.

Похоже что тоже не то. Странно, но видимо у меня совсем уж уникальная хотелка
Re[6]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 04.09.12 04:45
Оценка:
Здравствуйте, FR, Вы писали:

FR>Я понял что нужна более высокоуровневая VM, а так получается же шило на мыло, или нужна кроссплатформенность?


Шило на мыло — это что в сравнении с чем?

FR>Попробуй копать в сторону Forth, простую форт машину, даже кроссплатформенную, на шитом коде, несложно сделать.


Да простую RISC машину тоже очень легко сделать, там же команд раз-два и обчелся. Просто думал может уже что-то готовое есть.
Re[7]: Разыскивается легкая виртуальная машина
От: denisko http://sdeniskos.blogspot.com/
Дата: 04.09.12 05:01
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, FR, Вы писали:


FR>>Я понял что нужна более высокоуровневая VM, а так получается же шило на мыло, или нужна кроссплатформенность?


KP>Шило на мыло — это что в сравнении с чем?


По сравнению с интепретаторами. Может, просто tinytcl допилить и всосать?
<Подпись удалена модератором>
Re[8]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 04.09.12 05:05
Оценка:
Здравствуйте, denisko, Вы писали:

KP>>Шило на мыло — это что в сравнении с чем?

D>По сравнению с интепретаторами. Может, просто tinytcl допилить и всосать?

Основной минус интерпретаторов — они задают определенный синтаксис языка. Будь то TCL, будь то ML или еще что-то. Кроме того, они усложняют проверку на потенциальные ошибки в коде за счет более сложных операций. Поэтому, мне бы хотелось именно чистую (или как ее еще назвать) виртуальную машину.
Re[7]: Разыскивается легкая виртуальная машина
От: FR  
Дата: 04.09.12 05:40
Оценка:
Здравствуйте, kaa.python, Вы писали:

FR>>Я понял что нужна более высокоуровневая VM, а так получается же шило на мыло, или нужна кроссплатформенность?


KP>Шило на мыло — это что в сравнении с чем?


По сравнению с высокоуровневыми ВМ, если нет требований кроссплатформенности,
то по моему вместо низкоуровневых проще сразу грузить целевой машинный код,
который для верификации компилировать в песочницу например типа гугловского
Native Client.
Re[8]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 04.09.12 05:59
Оценка:
При таком подходе сразу встает следующий вопрос. Как скомпилировать некую пользовательскую функцию в целевой машинный код и без особо серьезных приседаний вызвать ее в требуемом месте?
Например, у нас есть заданная пользователем функция:
int foo(int a, int b)
{
    return a+b;
}

Да, я могу ее собрать при помощи LLVM и даже выполнить. Остается самая малость — как передать эту фунцию в виде целевого машинного кода в другой процесс и выполнить уже там?
Re[9]: Разыскивается легкая виртуальная машина
От: Ops Россия  
Дата: 04.09.12 06:28
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Да, я могу ее собрать при помощи LLVM и даже выполнить. Остается самая малость — как передать эту фунцию в виде целевого машинного кода в другой процесс и выполнить уже там?


Т.е. задача — выполнять в ядре пользовательский код? Мсье понимает...
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[9]: Разыскивается легкая виртуальная машина
От: FR  
Дата: 04.09.12 06:44
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Да, я могу ее собрать при помощи LLVM и даже выполнить. Остается самая малость — как передать эту фунцию в виде целевого машинного кода в другой процесс и выполнить уже там?


Такую простую функцию, без внешних зависимостей легко, компилируем как position-independent code (-fPIC) в
память, тот же clang должен это уметь.
Вот зависимости да придется как-то разруливать в динамике.
Проще по моему не использовать отдельные функции, а грузить готовые пакеты/модули/плагины тот же
Native Client всю необходимую инфраструктуру представляет.
Re[10]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 04.09.12 06:50
Оценка:
Здравствуйте, FR, Вы писали:

FR>Вот зависимости да придется как-то разруливать в динамике.


Само собой, зависимости будут, так что все сложнее.

FR>Проще по моему не использовать отдельные функции, а грузить готовые пакеты/модули/плагины тот же

FR>Native Client всю необходимую инфраструктуру представляет.

При передаче готовых пакетов выходит потенциально охрененно огромная дыра — возможность передать левый пакет и выполнить его в ядре. Т.е. все же я хотел бы решить задачу именно в рамках виртуальной машины.
Re[11]: Разыскивается легкая виртуальная машина
От: FR  
Дата: 04.09.12 07:05
Оценка:
Здравствуйте, kaa.python, Вы писали:

FR>>Вот зависимости да придется как-то разруливать в динамике.


KP>Само собой, зависимости будут, так что все сложнее.


В низкоуровневых VM это тоже придется разруливать.

KP>При передаче готовых пакетов выходит потенциально охрененно огромная дыра — возможность передать левый пакет и выполнить его в ядре. Т.е. все же я хотел бы решить задачу именно в рамках виртуальной машины.


Так песочница и валидация, смотри тот же Native Client
Re[3]: Разыскивается легкая виртуальная машина
От: uzhas Ниоткуда  
Дата: 04.09.12 07:09
Оценка:
Здравствуйте, kaa.python, Вы писали:

D>>Lua?


KP>Хотелось бы именно виртуальную машину, а не интерпретатор.


не так давно на этом форуме (рсдн) обсуждали луа\яваскрипт в эпическом треде, рекомендую еще разок просмотреть
в частности, если не ошибаюсь, там приводились положительные качества луа: маленький размер, возможность кастрировать\допиливать, голый си и тд
там внутри есть виртуальная машина, ее можно попытаться вытащить\заюзать
вики: http://en.wikipedia.org/wiki/Lua_(programming_language)
зы. сам с луа не работал =\

успехов
Re[3]: Разыскивается легкая виртуальная машина
От: sts  
Дата: 04.09.12 09:31
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, Alexéy Sudachén, Вы писали:


AS>>Пока не до читал до драйвера почему-то подумал что тебе нужно что-то типа qemu )))). Но таки, почему бы и не заюзать что нить типа MIPS симулятора? Их много, твоим требованиям такой финт ушами вроде отвечает. Да и код для VM можно компилировать штатным компилятором.


KP>Да мне нужно что-то совсем мелкое и легкое. Задача довольно проста — есть код обрабатывающий определенные события написанный на специальном языке. Надо это дело оттранслировать в промежуточную форму (интерпретировать в ядре, все же, более опасно) и выполнить это дело.


Вообще, конечно, так делать не стоит.
Нужен отдельный процесс в юзер-спэйсе который когда нужно обращается к драйверу для выполнение специфичных заранее определенных функций.
Простейшая стековая VM с возможностью определенния пользовательских инструкций (при компиляции, понятно) пишется за неделю (недавно такое делал).
Далее нужен протокол обращения к драйверу, системный сервис/демон.
Я бы таким путем пошел.
Re[4]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 04.09.12 11:36
Оценка:
Здравствуйте, sts, Вы писали:

sts>Вообще, конечно, так делать не стоит.


К сожалению, иногда это единственный приемлемый по скорости работы вариант.

sts>Нужен отдельный процесс в юзер-спэйсе который когда нужно обращается к драйверу для выполнение специфичных заранее определенных функций.


Да, но это сильно зависит от частоты необходимых обращений. Ну и ряда других специфичных моментов.
Re[5]: Разыскивается легкая виртуальная машина
От: denisko http://sdeniskos.blogspot.com/
Дата: 04.09.12 18:59
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Да, но это сильно зависит от частоты необходимых обращений. Ну и ряда других специфичных моментов.

Ну тогда может посмотреть на "компиляцию и валидацию" ?, шустрая, мелкая и вылизанная до работы в режиме ядра ВМ звучит довольно фантастично.
<Подпись удалена модератором>
Re[6]: Разыскивается легкая виртуальная машина
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 05.09.12 01:38
Оценка:
Здравствуйте, denisko, Вы писали:

D>Ну тогда может посмотреть на "компиляцию и валидацию" ?, шустрая, мелкая и вылизанная до работы в режиме ядра ВМ звучит довольно фантастично.


Ну почему-же? Машина из DTrace умещается в паре тройки сишных файлов, делает почти все, что мне нужно и при этом очень простая внутри. Собственно я к своей изначальной идее взять машину из DTrace и допилить и вернулся.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.