
Наша контора создала собственный язык программирования для написания бизнес-приложений. Проблема в том, что рантайм работает на Джаве. Я пробовал генерировать исходники в С++ и потом их компилировать, использовал там смарт-поинтеры, короче, получил очень ощутимый прирост в производительности. В связи с этим возникла идея: а почему не пойти дальше и не написать свою ОС, которая будет заточена именно под этот язык? Просто тупо убрать все эти ненужные слои и вычислять все на голом железе. Мысли?
Зачем тратить кучу времени на изобретение велосипеда? Ты хоть представляешь, сколько времени ты потратишь на написание и портирование драйверов оборудования, помимо написания ОС?
Компили исходники C++ в бинарный файл безо всяких рантаймов. Тогда, считай, у тебя код будет исполняться почти на голом железе, при необходимости дёргая API операционки. Естественно, ОС обеспечивает защиту памяти, переключение потоков, но от этого никуда не деться.
Собери свой дистрибутив Linux, из которого выкинуто всё лишнее (или возьми какой-нибудь минималистичный дистрибутив), поставь приоритет твоего процесса повыше - результат будет не хуже, чем если написать свою ОС.
Компили исходники C++ в бинарный файл безо всяких рантаймов. Тогда, считай, у тебя код будет исполняться почти на голом железе, при необходимости дёргая API операционки. Естественно, ОС обеспечивает защиту памяти, переключение потоков, но от этого никуда не деться.
Собери свой дистрибутив Linux, из которого выкинуто всё лишнее (или возьми какой-нибудь минималистичный дистрибутив), поставь приоритет твоего процесса повыше - результат будет не хуже, чем если написать свою ОС.
>>84281 (OP)
Java os была в девяностых, но чтото не пошло
Java os была в девяностых, но чтото не пошло
>>85207
А в чем проблема использовать уже существующие драйвера?
А в чем проблема использовать уже существующие драйвера?
>>84281 (OP)
А сейчас как "вычисляется"? Единственный overhead у user space программок это сисколы с копированием памяты с какого-нибудь сокбафера, например.
>вычислять все на голом железе
А сейчас как "вычисляется"? Единственный overhead у user space программок это сисколы с копированием памяты с какого-нибудь сокбафера, например.
>>91229
Проиграл
Проиграл
>>91193
На таких масштабах - много. При переключении контекста весь стейт процессора выгружается и загружается заново на входе и выходе из сискола.
Но на практике это копейки по сравнению с ожиданием мютекса.
>>84281 (OP)
Так делали до появления ОС. Знаешь почему перестали? Потому что компьютеры заточенные под одну программу большую часть времени простаивают, а когда надо сделать больше чем одну - у тебя появляются управление памятью, переключения контекстов, шедулер с различними политиками передачи исполнения и т.д.
А то что ты хочешь теперь делается на микроконтроллерах, да может в разработке под RTOS.
Ну а если хочешь - бери qemu, запинь ей конкретное ядро, загрузись готовым бутлоадером с гитхаба, переключиcь в long mode, реализуй страничную память и аллокатор поверх неё и дальше пиши что хочешь.
На расте такое пишется где-то за месяц если знать что делать. Если не знать, то в универах это занимает 1-2 семестра.
На таких масштабах - много. При переключении контекста весь стейт процессора выгружается и загружается заново на входе и выходе из сискола.
Но на практике это копейки по сравнению с ожиданием мютекса.
>>84281 (OP)
> Мысли?
Так делали до появления ОС. Знаешь почему перестали? Потому что компьютеры заточенные под одну программу большую часть времени простаивают, а когда надо сделать больше чем одну - у тебя появляются управление памятью, переключения контекстов, шедулер с различними политиками передачи исполнения и т.д.
А то что ты хочешь теперь делается на микроконтроллерах, да может в разработке под RTOS.
Ну а если хочешь - бери qemu, запинь ей конкретное ядро, загрузись готовым бутлоадером с гитхаба, переключиcь в long mode, реализуй страничную память и аллокатор поверх неё и дальше пиши что хочешь.
На расте такое пишется где-то за месяц если знать что делать. Если не знать, то в универах это занимает 1-2 семестра.
>>91248
Можешь литературу по теме посоветовать. Я в общих чертах представляю, как оно там работает, но с ходу не смогу написать. И вообще сначала хотелось бы какие-то тесты сделать, чтобы знать, какой производительности ожидать. Плюс если цифры молотить, то можно использовать какой-нибудь SIMD, хз, как сама виртуалка Джавы это делает.
Можно подробнее этот момент?
Можешь литературу по теме посоветовать. Я в общих чертах представляю, как оно там работает, но с ходу не смогу написать. И вообще сначала хотелось бы какие-то тесты сделать, чтобы знать, какой производительности ожидать. Плюс если цифры молотить, то можно использовать какой-нибудь SIMD, хз, как сама виртуалка Джавы это делает.
>на микроконтроллерах
Можно подробнее этот момент?
Буду следить за тредом. Тоже тема интересует
>>91248
Я забыл как это называется, были же какие-то шпециальные операционки, даже название было какое-то для них.
На Си за пару вечеров.
Я забыл как это называется, были же какие-то шпециальные операционки, даже название было какое-то для них.
>На расте такое пишется где-то за месяц если знать что делать
На Си за пару вечеров.
ОП на связи. Ещё такой вопрос: я когда делал эту хуйню на смарт-поинтерах, заметил такую вещь, что если создавать какой-то объект каждый раз при вызове рекурсивной функции при хвостовой рекурсии, то эти объекты начинают деаллоцироваться только после того, как рекурсия отработает. Что это за хуйня? Почему они сразу не уничтожаются?
>>92890
А почему они должны? Вообще TCO скорее всего не включается при наличии нетривиальных деструкторов в скоупе, но FYI компилятор может переставлять вызов деструктора по своему желанию в рамках всего скоупа.
Если хочешь что-то явное - создай явно scope для временных объектов, и деструктор вызовется при выходе из него.
А почему они должны? Вообще TCO скорее всего не включается при наличии нетривиальных деструкторов в скоупе, но FYI компилятор может переставлять вызов деструктора по своему желанию в рамках всего скоупа.
Если хочешь что-то явное - создай явно scope для временных объектов, и деструктор вызовется при выходе из него.