Я пишу виртуальную машину - не эмулятор существующей архитектуры, такой как Virtualbox, а скорее что-то вроде JVM или BEAM - с собственным набором команд, моделью памяти и т. Д. В конце концов я планирую реализовать очень маленькуюпростой (но тьюринг-завершенный) язык высокого уровня, который будет компилироваться в его байт-код, просто для удовольствия.
Конечно, машина должна иметь некоторую поддержку ввода-вывода, но я не хочу ограничивать ее только манипуляциями с stdin / stdout.Я представляю что-то вроде модульных «виртуальных устройств», которые могут быть реализованы в виде разделяемых библиотек, так что виртуальная машина может загружать их во время выполнения и связываться с ними через стандартный интерфейс.Таким образом, например, у нас могут быть «виртуальные устройства» для стандартного ввода / вывода, графика (представьте себе виртуальное устройство, которое позволяет вашей программе VM рисовать вещи внутри окна SDL) или, возможно, даже сеть.
Вопросэто: как программы, написанные для ВМ, должны взаимодействовать с виртуальными устройствами?Я решил подражать методам, которые используются на реальном оборудовании, и узнал о вводе-выводе на основе портов и отображении в памяти.Однако я не уверен, какой из них больше подходит для моих целей.Можете ли вы предложить, какой из них лучше, или, может быть, даже указать совершенно другой метод для работы с вводом / выводом?
Заранее спасибо.