Перейти к содержимому
ALeXeR

OC Виртуализация устройств

Рекомендуемые сообщения

Всем привет)

Хочу продемонстрировать свою библиотеку для OpenOS, она берет свое начало как компонент API ядра ос, которую мы пишем с другом (пока что все в ступоре :rolleyes: )

Данная библиотека позволяет создавать виртуальны компоненты.

А зачем они нужны?

Например нужно создать подобие NFS (NetworkFileSystem), можно написать отдельныю систему, работающую под OpenOS, но как бы хотелось просто примонтировать его куда нибудь в дерево файловой системы, можно для этого изменить библиотеку filesystem, но это может повлиять на другие системы (например на подобие NFS от другого автора, уоторый тоже изменяет библиотеку filesystem, но имеет другой стандарт). А вместо этого можно создать виртуальный компонент, и сама OpenOS будет воспринимать его как реальный, и соответственно виртуальный компонент типа filesystem можно будет примонтировать и пользоватся как обычной ФС.

Установка библиотеки:

Код можно взять сдесь http://pastebin.com/2vixEPRc

По идее комманда pastebin get 2vixEPRc /lib/vdevice.lua должна установить библиотеку, но я не пробовал (не ищу легких путей :D )

Также файлик будет прикреплен к теме

Короче файл vdevice.lua с кодом библиотеки должен быть в /lib

 

Использование:

  1. Для этого нужно подключить библиотеку;
  2. Создать таблицу с методами (функциями), ключи к ним должны быть в виде строки, эти методы будет содержать виртуальный компонент (как например component.redstone.setOutput());
  3. Вызвать метод библиотеки addVDevice и передать в качестве параметра тип компонента (тип может быть как у руальных компонентов, так и кастомный) и созднную таблицу с методами, метод вернет адресс виртуального компонента.

После выполнения данных действий будет создан виртуальный компонент, его можно удалить вызвав метод delVDevice и передасть в качестве параметра адресс виртуального устройства.

 

Пример:

20161110210455.png

 

В данном примере создается 2 компонента типа mycom, с методом hello который выводит на экран hello (кэп :D ), которые приобретают адресса #1 и #2, после чего производится определение типа по адрессу, вывод списка компонентов этого типа и вызов метода hello тремя способами.

 

Всем спасибо за внимание) Если кто хаметит баги или недочеты - сообщайте плс)

P.S. Либа по какой-то причине не прикрепилась в виде файла .lua поэтому все в архиве

vdevice.tar.gz

Изменено пользователем ALeXeR

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Например нужно создать подобие NFS (NetworkFileSystem), можно написать отдельныю систему, работающую под OpenOS, но как бы хотелось просто примонтировать его куда нибудь в дерево файловой системы, можно для этого изменить библиотеку filesystem, но это может повлиять на другие системы (например на подобие NFS от другого автора, уоторый тоже изменяет библиотеку filesystem, но имеет другой стандарт). А вместо этого можно создать виртуальный компонент, и сама OpenOS будет воспринимать его как реальный, и соответственно виртуальный компонент типа filesystem можно будет примонтировать и пользоватся как обычной ФС.

 

 

Если либа нужна только для NFS, то можно обойтись и без нее.

 

filesystem.mount(fs: table or string, path: string): boolean or nil, string
Монтирует файловую систему по заданному пути. Первый параметр может быть прокси, адресом, или меткой файловой системы. Второй аргумент — путь до точки монтирования. Возвращает true если файловая система примонтирована, или nil с сообщением об ошибке в противном случае.

 

-- /boot/10_devfs.lua

require("filesystem").mount(
setmetatable({
  address = "f5501a9b-9c23-1e7a-4afe-4b65eed9b88a"
},
{
  __index=function(tbl,key)
    local pass
    local passthrough = function() return pass end
    if key == "getLabel" then
      pass = "devfs"
    elseif key == "spaceTotal" or key == "spaceUsed" then
      pass = 0
    elseif key == "isReadOnly" then
      pass = false
    else
      return require("devfs")[key]
    end
    return passthrough
  end
}), "/dev")

Фрагмент кода из исходников OpenOS. Тут создается виртуальная файловая система.

 

Вообще либа полезная, но пример неудачный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я привел NFS как пример) ну такое) я вообще ее переписал под OpenOS ради другой цели)

Изменено пользователем ALeXeR

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Аппаратное ускорение видео) знаю, это будет грузить сервер, но хочется замутить графический кластер)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Аппаратное ускорение видео) знаю, это будет грузить сервер, но хочется замутить графический кластер)

То есть прилепленая интегральная схема из,например, SCM(Super Circuit Maker)?

Изменено пользователем Quant

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Одна проблема: такая либа уже есть. Давным-давно есть. Рабочая. https://github.com/OpenPrograms/gamax92-Programs/blob/master/vcomponent/

 

У неё есть фатальный недостаток.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Quant, ну типа к одному монитору прибиндить видеокарты нескольких компов, которые будут ждать сообщений от центрального и рендерить все это добро, тоесть задержка на вывод будет разпарралелена, тоесть пока один элемент кластера рисует один фрагмент, второй сразу же рисует второй фрагмент)

А вот по поводу второй либы - что если допустим я создам компонент виртуальный а потом вставлю реальный с таким же адрессом?

Изменено пользователем ALeXeR

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 13.11.2016 в 11:26, Totoro сказал:

 

У неё есть фатальный недостаток.

Какой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 12.11.2016 в 23:47, ALeXeR сказал:

Всем привет)

Хочу продемонстрировать свою библиотеку для OpenOS, она берет свое начало как компонент API ядра ос, которую мы пишем с другом (пока что все в ступоре :rolleyes: )

Данная библиотека позволяет создавать виртуальны компоненты.

А зачем они нужны?

Например нужно создать подобие NFS (NetworkFileSystem), можно написать отдельныю систему, работающую под OpenOS, но как бы хотелось просто примонтировать его куда нибудь в дерево файловой системы, можно для этого изменить библиотеку filesystem, но это может повлиять на другие системы (например на подобие NFS от другого автора, уоторый тоже изменяет библиотеку filesystem, но имеет другой стандарт). А вместо этого можно создать виртуальный компонент, и сама OpenOS будет воспринимать его как реальный, и соответственно виртуальный компонент типа filesystem можно будет примонтировать и пользоватся как обычной ФС.

Установка библиотеки:

Код можно взять сдесь http://pastebin.com/2vixEPRc

По идее комманда pastebin get 2vixEPRc /lib/vdevice.lua должна установить библиотеку, но я не пробовал (не ищу легких путей :D )

Также файлик будет прикреплен к теме

Короче файл vdevice.lua с кодом библиотеки должен быть в /lib

 

Использование:

  1. Для этого нужно подключить библиотеку;
  2. Создать таблицу с методами (функциями), ключи к ним должны быть в виде строки, эти методы будет содержать виртуальный компонент (как например component.redstone.setOutput());
  3. Вызвать метод библиотеки addVDevice и передать в качестве параметра тип компонента (тип может быть как у руальных компонентов, так и кастомный) и созднную таблицу с методами, метод вернет адресс виртуального компонента.

После выполнения данных действий будет создан виртуальный компонент, его можно удалить вызвав метод delVDevice и передасть в качестве параметра адресс виртуального устройства.

 

Пример:

20161110210455.png

 

В данном примере создается 2 компонента типа mycom, с методом hello который выводит на экран hello (кэп :D ), которые приобретают адресса #1 и #2, после чего производится определение типа по адрессу, вывод списка компонентов этого типа и вызов метода hello тремя способами.

 

Всем спасибо за внимание) Если кто хаметит баги или недочеты - сообщайте плс)

P.S. Либа по какой-то причине не прикрепилась в виде файла .lua поэтому все в архиве

vdevice.tar.gz 1 \u041a\u0431 · 438 загрузок

кто помнит vcomponent? она вроде как пропала с github, покрайней мери я ее не нашел, но у меня она осталась

незнаю почему решил про нее написать, просто так

Изменено пользователем logic

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...