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


Фотография

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

OC Библиотека

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 Оффлайн   ALeXeR

ALeXeR

    Продвинутый пользователь

  • Пользователи
  • PipPipPipPip
  • 139 сообщений
  • ГородОдесса

Отправлено 12 Ноябрь 2016 - 23:47

Всем привет)

Хочу продемонстрировать свою библиотеку для 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,53К   7 Количество загрузок:

Сообщение отредактировал ALeXeR: 12 Ноябрь 2016 - 23:50

  • Totoro и Sharplook это нравится

#2 Оффлайн   LeshaInc

LeshaInc

    2B |~ 2B

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 159 сообщений
  • ГородЛуна

Награды

                 

Отправлено 13 Ноябрь 2016 - 00:17

Например нужно создать подобие 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. Тут создается виртуальная файловая система.

 

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



#3 Оффлайн   ALeXeR

ALeXeR

    Продвинутый пользователь

  • Автор темы
  • Пользователи
  • PipPipPipPip
  • 139 сообщений
  • ГородОдесса

Отправлено 13 Ноябрь 2016 - 00:21

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


Сообщение отредактировал ALeXeR: 13 Ноябрь 2016 - 00:21


#4 Оффлайн   LeshaInc

LeshaInc

    2B |~ 2B

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 159 сообщений
  • ГородЛуна

Награды

                 

Отправлено 13 Ноябрь 2016 - 00:22

ради другой цели

 

Ради какой?



#5 Оффлайн   ALeXeR

ALeXeR

    Продвинутый пользователь

  • Автор темы
  • Пользователи
  • PipPipPipPip
  • 139 сообщений
  • ГородОдесса

Отправлено 13 Ноябрь 2016 - 00:24

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



#6 Онлайн   Fingercomp

Fingercomp

    Видимый невидимый

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 704 сообщений

Награды

                                      

Отправлено 13 Ноябрь 2016 - 09:13

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



#7 Оффлайн   Quant

Quant

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 466 сообщений
  • Городinterface IQuant

Награды

     

Отправлено 13 Ноябрь 2016 - 10:57

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

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


Сообщение отредактировал Quant: 13 Ноябрь 2016 - 11:41


#8 Оффлайн   Totoro

Totoro

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 140 сообщений

Награды

                                

Отправлено 13 Ноябрь 2016 - 12:26

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

 

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



#9 Оффлайн   ALeXeR

ALeXeR

    Продвинутый пользователь

  • Автор темы
  • Пользователи
  • PipPipPipPip
  • 139 сообщений
  • ГородОдесса

Отправлено 13 Ноябрь 2016 - 15:21

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

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


Сообщение отредактировал ALeXeR: 13 Ноябрь 2016 - 15:28






Темы с аналогичным тегами OC, Библиотека

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных


Яндекс.Метрика