2010-11-20 4 views
1

Я пишу виртуальную машину - не существующий эмулятор архитектуры, такой как Virtualbox, но скорее нечто вроде JVM или BEAM - с собственным набором команд, моделью памяти и т. Д. В конце концов я планирую реализовать очень малое и простое (но завершающий) язык высокого уровня, который будет компилироваться в его байт-код, просто для удовольствия.Лучший способ реализовать ввод-вывод в виртуальной машине?

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

Вопрос: как программы, написанные для виртуальной машины, взаимодействуют с виртуальными устройствами? Я решил имитировать методы, которые используются с реальным оборудованием, и узнал о портах ввода-вывода и ввода-вывода с памятью. Однако я не уверен, какой из них более подходит для моих целей. Можете ли вы предложить, какой из них лучше или, может быть, даже указать на совершенно другой метод решения проблемы ввода/вывода?

Заранее спасибо.

ответ

0

Оба устройства с памятью и порт не подходят для большинства операций ввода-вывода.

Запрос DMA с блочным копированием обычно является тем, что вы хотите.