NightFury 45 Опубликовано: 24 августа, 2016 (изменено) Операционная система LunaOS (Самописное ядро) Всем доброго времени суток. Однажды я решил узнать, как же создать операционную систему в OpenComputers, однако создавать вторую OpenOS я не хотел.Потому пытался придумать "изюминку" своей ОС. Тут пришла мысль о том, чего очень не хватает в ядре OpenOS - многопоточность. Я уже читал на форумах, что данная особенность "не нужна", "нет смысла" и т. п. Однако данная возможность добавит несколько особенностей в OpenComputers: SSH клиент. Подключение к компьютеру; Удаленный рабочий стол; Система пользователей; Сервера; Кластер. Само собой это не полный список возможных программ, которые можно написать в многопоточной системе. Однако это уже большой аргумент, для ее создания. Начал я с реализации многопоточности. Я надеялся, что в Lua есть удобные потоки, через которые данный процесс не вызовет проблем, однако такой возможности не оказалось.Я уже думал забросить создание многопоточности и просто создать операционную систему, а вскоре и совсем забросить создание операционки. Спустя неделю, я все же придумал как реализовать многопоточность и все благодарю моему другу, который не дал мне "опустить руки". Идея пришла не сразу и как и все идеи - в дУше (на самом деле в уборной). На помощь мне пришли coroutine. Среди читающих наверняка есть 3 типа: те кто понял, как все это работает; те кто знает, что такое coroutine, но не знает как на их основе создать псведо-многопоточность; те кто в танке. Настоящая операционная система является многопоточной, хотя процессор - однопоточный. Но как?На самом деле, все достаточно просто. Операционная система переключается с одного процесса на другое через определенные промежутки. Это зоны являются атомарными (неделимыми).Так же я решил поступить и с OpenComputers.Многие думают, что это невозможно, но тут к нам приходят на помощь coroutine'ы. Через некоторое время мне удалось проработать ядро операционной системы. Вот структура операционной системы: Вот диаграмма жизни операционной системы: На данный момент ядро уже почти готово. Уже скоро я начну работать над самой операционной системой. Как только мне будет что показать (помимо исходного кода) я выложу это в этой теме. На данной момент у меня есть к вам несколько вопросов и предложений: [Вопрос] Будет ли иметь смысл данная операционная система? [Вопрос] Какие еще возможности вы хотите предложить? [Вопрос] Из-за многопоточности, прямая работа с компонентами должна быть недоступна. Как вы думаете, стоит ли программно запрещать это. Так же я уже придумал реализацию и буду писать следующие программы: apt-get ssh client and server ftp client and server teamviewer cluster software raid sudo Спасибо за внимание и ждите обновлений! Обновления: Обновление 25.08.2016 (не известно)====================Теперь в этой области будут появляться все обновления системы. Обновление 26.08.2016 (22:40) ==================== Реализованы модули control, hardware и signals в ядре. В процессе - исправление ошибок и недочетов. Разработка модуля filesystem. Обновление 27.08.2016 (1:50) ==================== Написана текстовая документация на 50% После завершения и доработок - будет выложен для совместной доработки. P.S. В нем будет виден принцип работы ядра, но я думаю это не столь так важно, ибо отыскать к нему доступ смогут лишь только опытные пользователи OpenComputers. Обновление 29.08.2016 (12:10) ==================== Ядро реализовано. Написание API. Решение проблем с удобством написания программ при работе по SSH. Изменено 29 августа, 2016 пользователем NightFury 16 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 748 Опубликовано: 25 августа, 2016 (изменено) Нормальный мультиюзер, как в настоящих осях и больше ничего не надо. Изменено 25 августа, 2016 пользователем Doob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
davial 1 972 Опубликовано: 25 августа, 2016 Эмм ... Можно сейчас её попользовать ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SDV 784 Опубликовано: 25 августа, 2016 Так же я уже придумал реализацию и буду писать следующие программы: apt-get Кто-то форум не читал и не знает что уже 100600 раз пытались это сделать. Дубль #1 Неудачно. Дубль #2 Более успешная попытка. Даже репу запилили. Результат => никто не использует это. LOL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NightFury Автор темы 45 Опубликовано: 25 августа, 2016 (изменено) Эмм ... Можно сейчас её попользовать ? На данный момент есть только ядро. Как только я его доделаю я начну писать саму ось. Как только в операционке добавится shell - выложу. Кто-то форум не читал и не знает что уже 100600 раз пытались это сделать. Дубль #1 Неудачно. Дубль #2 Более успешная попытка. Даже репу запилили. Результат => никто не использует это. LOL Ничего страшного. Их проблемы, если они не знают, насколько удобен apt-get. Мое дело написать, а будут ли использовать - не моя забота. Изменено 25 августа, 2016 пользователем NightFury Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 392 Опубликовано: 25 августа, 2016 Омфигеть. Серьёзно. Однако, потеря совместимости с сотнями, тысячами! Программ для OpenOS. Это явный отталкивающий фактор: я не хочу переписывать более 8-10 тысяч строк кода моих программ под новую OS. Да и никто не собирается, очевидно. Желаю удачи и мотивации. Много мотивации. Много амбициозных проектов померло на земле бренной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NightFury Автор темы 45 Опубликовано: 25 августа, 2016 Омфигеть. Серьёзно. Однако, потеря совместимости с сотнями, тысячами! Программ для OpenOS. Это явный отталкивающий фактор: я не хочу переписывать более 8-10 тысяч строк кода моих программ под новую OS. Да и никто не собирается, очевидно. Желаю удачи и мотивации. Много мотивации. Много амбициозных проектов померло на земле бренной. Вероятно я напишу транслятор для программ, написанных под OpenOS. Это не сложно. Кроме того, тебе по сути нужно не переписать, а портировать прогу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy 1 165 Опубликовано: 25 августа, 2016 (изменено) Воу, круто! Многопоточность это здорово, а особенно, мне нравится идея удаленного рабочего стола. Насчет многопоточности советую изучить уже готовые решения от ZeroGalaxy и из OPPM. Насчет вопросов: [Вопрос] Будет ли иметь смысл данная операционная система?Конечно, идея отличная, даже если до конца не реализуешь. [Вопрос] Какие еще возможности вы хотите предложить?Минимальный размер и стабильная работа из под самой маленькой оперативной платы [Вопрос] Из-за многопоточности, прямая работа с компонентами должна быть недоступна. Как вы думаете, стоит ли программно запрещать это.Запрещать не нужно, так как многие готовые программы работают напрямую с компонентами. А вообще, почему недоступно? Кстати, плюс за аккуратно оформленную тему, сразу видно ты - человек серьезный.P.S. Неужели тут кто то кроме меня увлекается пони? Изменено 25 августа, 2016 пользователем Krutoy 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 25 августа, 2016 [Вопрос] Будет ли иметь смысл данная операционная система? Лично я скептически отношусь к написанию осей под OpenComputers. Существующая ось более чем достаточна для решения любой задачи, которая может возникнуть перед майнкрафтером. Но это не значит, что нельзя пробовать. Если знаешь как сделать лучше - делай. Другое дело, взялся ты за задачу слишком глобальную. Может начать с доработки OpenOS? Например, реализовать многозадачность. Не многопоточность, а именно многозадачность на уровне ОС. Так что бы можно было запускать параллельно несколько приложений, которые не предусматривались специально для работы в параллельном режиме. Но тут возникает проблема разделения ресурсов. Если несколько приложений начнет писать на экран, начнется чехорда. Экран должно захватывать только одно приложение и оно же должно реагировать на события клавиатуры/мыши. Остальные приложения работают в фоновом режиме. Переключения между приложениями, например, по Alt+Tab. В этом случае очень многие либы OpenOS можно оставить без изменения. Допилить только event, компонент gpu и оболочку shell (может еще чего забыл). Вот если такая ось будет максимально похожа на OpenOS, тогда она возможно будет пользоваться спросом. [Вопрос] Какие еще возможности вы хотите предложить? Сделай, хотя бы половину того, что задумал. [Вопрос] Из-за многопоточности, прямая работа с компонентами должна быть недоступна. Как вы думаете, стоит ли программно запрещать это. Думаю не стоит этого делать из-за потери совместимости с уже существующими программами. 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NightFury Автор темы 45 Опубликовано: 25 августа, 2016 Воу, круто! Многопоточность это здорово, а особенно, мне нравится идея удаленного рабочего стола. Насчет многопоточности советую изучить уже готовые решения от ZeroGalaxy и из OPPM. Насчет вопросов: [Вопрос] Будет ли иметь смысл данная операционная система? Конечно, идея отличная, даже если до конца не реализуешь. [Вопрос] Какие еще возможности вы хотите предложить? Минимальный размер и стабильная работа из под самой маленькой оперативной платы [Вопрос] Из-за многопоточности, прямая работа с компонентами должна быть недоступна. Как вы думаете, стоит ли программно запрещать это. Запрещать не нужно, так как многие готовые программы работают напрямую с компонентами. А вообще, почему недоступно? Кстати, плюс за аккуратно оформленную тему, сразу видно ты - человек серьезный. P.S. Неужели тут кто то кроме меня увлекается пони? Да. Не один ты. Спасибо за развернутый ответ. Само собой буду стараться оптимизировать систему для всех систем, включая самых "деревянных". Запрет связан с тем, что например в цикле пользователь может сделать прорисовку экрана через .set(). Пока компьютер все это будет обрабатывать - многопоточность не будет работать. К сожалению это связано с недостатками самого мода. И для того, чтобы такого не происходило, после каждого вызова gpu.set() мне нужно ставить ее на паузу. В общем ночью, после написания данной темы, ко мне пришла еще одна идея, как это исправить. Лично я скептически отношусь к написанию осей под OpenComputers. Существующая ось более чем достаточна для решения любой задачи, которая может возникнуть перед майнкрафтером. Но это не значит, что нельзя пробовать. Если знаешь как сделать лучше - делай. Другое дело, взялся ты за задачу слишком глобальную. Может начать с доработки OpenOS? Например, реализовать многозадачность. Не многопоточность, а именно многозадачность на уровне ОС. Так что бы можно было запускать параллельно несколько приложений, которые не предусматривались специально для работы в параллельном режиме. Но тут возникает проблема разделения ресурсов. Если несколько приложений начнет писать на экран, начнется чехорда. Экран должно захватывать только одно приложение и оно же должно реагировать на события клавиатуры/мыши. Остальные приложения работают в фоновом режиме. Переключения между приложениями, например, по Alt+Tab. В этом случае очень многие либы OpenOS можно оставить без изменения. Допилить только event, компонент gpu и оболочку shell (может еще чего забыл). Вот если такая ось будет максимально похожа на OpenOS, тогда она возможно будет пользоваться спросом. Сделай, хотя бы половину того, что задумал. Думаю не стоит этого делать из-за потери совместимости с уже существующими программами. Спасибо за развернутый ответ. 1) Я уже писал реализацию многопоточности в OpenOS. Однако это не то, что я хочу. Все равно, если я в одной из написанных программ сделаю цикл (как отписал в сообщении выше), то этот процесс "затмит" все фоновые. Плюс в OpenOS крайне сложно создать систему пользователей и дать подключение как по SSH. 2) Хорошо. 3) Уже отписал об этом выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 722 Опубликовано: 25 августа, 2016 P.S. Неужели тут кто то кроме меня увлекается пони? Эм... ты не один такой 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 623 Опубликовано: 25 августа, 2016 Плюс в OpenOS крайне сложно создать систему пользователей и дать подключение как по SSH. Да в общем то нельзя запустить сервер SSH на любой системе под OpenComputers, как минимум потому что открытие TCP-слушателя невозможно. Да, можно мост, но это уже совсем другая история. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 25 августа, 2016 Все равно, если я в одной из написанных программ сделаю цикл (как отписал в сообщении выше), то этот процесс "затмит" все фоновые. Если цикл бесконечный, то он в любом случае, даже если программа работает в однозадачном режиме, должен содержать os.sleep, event.pull или другую функцию, ожидающую событие. В противном случае компьютер отключится. Именно ожидание события и есть переключение между задачами. У меня, по крайней мере так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 25 августа, 2016 Так что бы можно было запускать параллельно несколько приложений, которые не предусматривались специально для работы в параллельном режиме. Но тут возникает проблема разделения ресурсов. Если несколько приложений начнет писать на экран, начнется чехорда. Экран должно захватывать только одно приложение и оно же должно реагировать на события клавиатуры/мыши. Остальные приложения работают в фоновом режиме. Переключения между приложениями, например, по Alt+Tab. В этом случае очень многие либы OpenOS можно оставить без изменения. Допилить только event, компонент gpu и оболочку shell (может еще чего забыл). Вот если такая ось будет максимально похожа на OpenOS, тогда она возможно будет пользоваться спросом. вот именно и это абсолютно верное направление и цель, и если мне не изменяют ощущения и память, то в computercraft именно всё так и происходит и там shell многозадачный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 25 августа, 2016 Не знаю, в чем проблема gpu.set убрать или запретить? Мне как то нужно было сделать динамическую таблицу открытых портов, я просто переопределил open close, все глобалки лежат в _G Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 623 Опубликовано: 25 августа, 2016 Переключения между приложениями, например, по Alt+Tab. В этом случае очень многие либы OpenOS можно оставить без изменения. Допилить только event, компонент gpu и оболочку shell (может еще чего забыл). Вот если такая ось будет максимально похожа на OpenOS, тогда она возможно будет пользоваться спросом. Появляется проблема, скажем если в фоне запущен mc, после чего мы переключаемся к нему, мы увидим сломанную графическую составляющую, ибо нарисует он все только один раз. Создавать буффер для каждой программы - дорого. Нужно что бы операционной системой можно было пользоваться на Т1 компе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NightFury Автор темы 45 Опубликовано: 25 августа, 2016 Если цикл бесконечный, то он в любом случае, даже если программа работает в однозадачном режиме, должен содержать os.sleep, event.pull или другую функцию, ожидающую событие. В противном случае компьютер отключится. Именно ожидание события и есть переключение между задачами. У меня, по крайней мере так. Увы, но нет. Если я там поставлю gpu.set(), который без задержки. Компьютер не выключится. Не знаю, в чем проблема gpu.set убрать или запретить? Мне как то нужно было сделать динамическую таблицу открытых портов, я просто переопределил open close, все глобалки лежат в _G Вот так же хочу поступить и я. Появляется проблема, скажем если в фоне запущен mc, после чего мы переключаемся к нему, мы увидим сломанную графическую составляющую, ибо нарисует он все только один раз. Создавать буффер для каждой программы - дорого. Нужно что бы операционной системой можно было пользоваться на Т1 компе. Однако никто не запрещает сохранять буфер в диск. Как по сути и работает swap память. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 25 августа, 2016 Появляется проблема, скажем если в фоне запущен mc, после чего мы переключаемся к нему, мы увидим сломанную графическую составляющую, ибо нарисует он все только один раз. Создавать буффер для каждой программы - дорого. Нужно что бы операционной системой можно было пользоваться на Т1 компе. Отчего же дорого? Именно это я и имел в виду под "допилить gpu". И чем меньше монитор, тем меньше нужен буфер. А! У вас памяти не хватает на пятьдесят задачек и буферов к ним? Ну тогда многозадачность не для вас. Кто сказал, что Windows 10 должна идти на калькуляторе? Увы, но нет. Если я там поставлю gpu.set(), который без задержки. Компьютер не выключится. Не знал. Но коль уж мы взялись переписывать gpu, то можем переключаться и по gpu.set. Не всякий раз, а через тысячу знаков, скажем. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NightFury Автор темы 45 Опубликовано: 25 августа, 2016 (изменено) Не знал. Но коль уж мы взялись переписывать gpu, то можем переключаться и по gpu.set. Не всякий раз, а через тысячу знаков, скажем. Вот это мне уже больше нравится. Изменено 25 августа, 2016 пользователем NightFury Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SDV 784 Опубликовано: 25 августа, 2016 Ничего страшного. Их проблемы, если они не знают, насколько удобен apt-get. Мое дело написать, а будут ли использовать - не моя забота. - будут ли использовать? - ответ, НЕТ Зачем вообще это нужно, если надо что-то скачать то есть или pastebin или напрямую через wget (я как понял автор любитель линупса, раз так хочет всякие менеджеры пакетов делать). Может не стоит вообще делать майнкрафт в майнкрафте OpenOS в OpenOS. Уже один сделал такое чудо, так потыкать пойдет, но использовать постоянно не удобно и не нужно. Если кто не понял, то я про ОСь Элиты 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах