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


Фотография

Как грамотно приступить к написанию большой программы


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

#1 Оффлайн   Jet

Jet
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 07 Май 2016 - 19:53

Сразу скажу, я велосипедист, все время учусь на своей шкурке - так понятнее.

 

Есть у меня хотелка, написать свою графическую операционную систему, в прошлом начинал на СС, сейчас перешел на ОС, и я хотел бы в этот раз приступить к этому не с "крыши", а с "фундамента", т.е. сначала продумать и спланировать все, а потом уже писать.

 

Я понимаю тот минимум, который я хочу от своей операционной системы:

  • Многопоточность
  • GUI
  • Файловый менеджер
  • SDK для программ
  • "Эмулятор" OpenOS (для запуска "старых" программ)

Спойлер

 

Алгоритм работы операционной системы я вижу такой:

  1. eeprom ищет файловую систему на которой есть boot-файл и передает управление ему.
  2. boot-файл загружает все системные библиотеки, после чего создает менеджер процессов, заполняет очередь процессов приложениями, прописанными в autorun, и передает управление ему.
  3. Менеджер процессов обрабатывает очередь событий и очередь процессов.
  4. При завершении менеджера процессов компьютер выключается.

Теперь по порядку по "хотелкам":

  • Многопоточность - реализуется менеджером процессов. Обрабатываются все события ввода (клавиатура, мышь и т.д.), формируется очередь событий, и каждое событие из очереди транслируется каждому потоку до тех пор пока либо все потоки не "просмотрят" это событие, либо какой то из потоков не обработает его (например нажатие клавиши обработает только активное поле в активном окне). Сам Процесс представляет из себя переменную типа thread, которая создается функцией coroutine.create(function), в которую передается функция main самого запускаемого приложения. О том как это реализовать ниже. В менеджере процессов есть таблица активных процессов, в которую добавляются значения и удаляются из нее. Сам по себе менеджер процессов, на мой взгляд, должен являться библиотекой.
  • GUI - тут я до конца не уверен как и что реализовать. По идее должен быть менеджер отрисовки всего и вся, который по велению менеджера процессов рисует изменившиеся части экрана. У такого менеджера должен быть свой буффер экрана, на основе которого и происходит рисование. Самое приложение должно уметь предоставить таблицу своих графических элементов для отрисовки. Или нет? Тут хотелось бы услышать мнение аудитории.
  • Файловый менеджер - это просто графическое приложение, написанное по правилам самой ОС, позволяющее делать очевидные вещи для файлового менеджера (просматривать папки, списки файлов в них, создавать/переименовывать/удалять/копировать/перемещать/искать сами папки и файлы, скрывать скрытые папки и файлы, если такие настройки имеются в ОС, учитывать права доступа к файлам и папкам.) И все это в виде окошка и все мышкой. Ну почти все...
  • SDK для программ - собственно сама среда разработки для программ, с подсветкой синтаксиса, возможностями автозаполнения, а так же применением шаблонов. В идеале хорошо бы еще дописать оптимизатор кода. Это будет такое же графическое приложение, написанное по правилам операционной системы. Но в целом для того чтобы определиться как именно писать SDK нужно определится с правилами операционной системы...
  • "Эмулятор" OpenOS - консольное приложение. Его суть будет заключатся в том что для "обычных" приложений будут переодпределены некоторые функции, такие как print, напимер, и этот эмулятор и будет их реализовывать. Вопрос в том как переопределить функции для одной конкретной программы... Я не досканально знаю луа, но мне кажется это как то связанно с переменными окружения, как то так называется, поправьте меня. В общем тут хотелось бы услышать ваши комментарии. 

Спойлер

 

У меня очень много в голове вертится, и я, пока, не могу структурировать это все и изложить в письменном виде, поэтому если вы зададите вопросы по конкретным моментам - мне будет проще структурировать мысли, ответив на него.

 

А теперь по реализациям:

  • Приложение - это содержащий в себе скрипт lua, скелет которого приведен в спойлере. Через dofile выполнив файл такого вида мы получим таблицу, содержащую функцию main, которая и будет передана менеджеру процессов.
    Спойлер

Хотелось бы услышать ваши мысли.


Сообщение отредактировал Jet: 07 Май 2016 - 23:48

  • SergOmarov, davial и Zucker это нравится

#2 Оффлайн   Pofigist

Pofigist
  • Пользователи
  • Сообщений: 51
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 07 Май 2016 - 20:16

Я сам сейчас занимаюсь подобным. Точнее занимался. Будет настроение - продолжу. Идея сама по себе очень интересная, но и не менее сложная. Сразу хочу сказать, что eeprom трогать не стоит. Он запускает init.lua и этого вполне достаточно, а изменение БИОСа под свою систему - я в этом не вижу смысла. Да и описывать что и как должно быть я тоже не вижу смысла. Все должно приходить по ходу дела. У тебя есть два компа: один с дискетой OpenOS, чтобы форматировать пустой диск; второй - абсолютно чистый комп с видеокартой. Вставил диск в комп, записал нужные файлы, перекинул диск в тестовый ПК и запустил... Процесс немного подбешивает но так и должно быть. По пути тебя ждет много проблем, аля отсутствие loadfile, dofile, require - и все это придется исправлять самому. Иди поэтапно. Как ты видишь себе запуск своей системы? Красивое окошко приветствия? Ну так создай все, чтобы при запуске это окошко появилось. Дальше идет рабочий стол? Вперед и с песней - создавать свой Desktop.

В многопоточности же я смысла не вижу. Оперативки в местных компах не так много, да и зачем тебе открывать сразу несколько программ? Разве что какой-то контроллер дома, который следит за всем и вся...

В итоге я хочу сказать, что не вижу смысла расписывать свою "стратегию" создания ОС. Если у тебя достаточно времени и нервов - твори. Я далеко не профи программирования, но даже у меня постепенно идет продвижение, когда я не ленюсь. Если хочешь, можем списаться в Вк, например, могу поделиться каким-то базовым опытом.


Сообщение отредактировал Pofigist: 07 Май 2016 - 20:19


#3 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 07 Май 2016 - 20:55

В многопоточности же я смысла не вижу.

Вот сидишь ты в какой то проге, например пишешь что то в SDK, и тут тебе нужно посмотреть что то в другом файле... Ты будешь закрывать прогу, ради того чтобы глянуть другой файл?



#4 Оффлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 207
  • Уровень сигнала: 15,49%
  • В игре: 117 час. 1 мин.
  • ГородЛуна

Награды

                       

Отправлено 07 Май 2016 - 21:03

Пили и не слушай никого, делай как хочешь



#5 Оффлайн   Pofigist

Pofigist
  • Пользователи
  • Сообщений: 51
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 07 Май 2016 - 21:22

Вот сидишь ты в какой то проге, например пишешь что то в SDK, и тут тебе нужно посмотреть что то в другом файле... Ты будешь закрывать прогу, ради того чтобы глянуть другой файл?

Ну так да. Если следовать реализму, то многопоточность нужна, но в реале ты врятли встретишь людей которые будут кодить прямо в майнкрафте. Твое дело - так или иначе.



#6 Оффлайн   Quant

Quant
  • Пользователи
  • Сообщений: 537
  • Уровень сигнала: 0,01%
  • В игре: 0 час. 4 мин.
  • Городinterface IQuant

Награды

     

Отправлено 07 Май 2016 - 21:46

Многопоточности не нужно,достаточно переключения между основной программой и фоновые,которые работают всегда.



#7 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 07 Май 2016 - 22:55

Многопоточности не нужно,достаточно переключения между основной программой и фоновые,которые работают всегда.

А как это сделать без многопоточности?


Ну так да. Если следовать реализму, то многопоточность нужна, но в реале ты врятли встретишь людей которые будут кодить прямо в майнкрафте. Твое дело - так или иначе.

Ну не кодят в майне просто потому что редактор там никудышный. Да и в среде разработки преполагается использовать конструктор окошек, наглядно кроме как в майне ты это не увидишь.



#8 Оффлайн   Pofigist

Pofigist
  • Пользователи
  • Сообщений: 51
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 07 Май 2016 - 22:57

А как это сделать без многопоточности?

Я вот в начале как-то не подумал а сейчас согласен с Квантом. Простая реализация открытия в одной программе нескольких файлов решит проблему и многопоточности не понадобится. Я вижу это так: нажимаем "+" открывается новая вкладка, на ней мы открываем файл и вуаля... два файла открыты.



#9 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 07 Май 2016 - 23:08

Я вот в начале как-то не подумал а сейчас согласен с Квантом. Простая реализация открытия в одной программе нескольких файлов решит проблему и многопоточности не понадобится. Я вижу это так: нажимаем "+" открывается новая вкладка, на ней мы открываем файл и вуаля... два файла открыты.

Ну ты мне говоришь сейчас про текстовый редактор...



#10 Оффлайн   Pofigist

Pofigist
  • Пользователи
  • Сообщений: 51
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 07 Май 2016 - 23:16

Ну ты мне говоришь сейчас про текстовый редактор...

А чем SDK отличается от текстового редактора? Функциональностью и не более. Берешь базовый Виндосовский блокнот, суешь в него всяких наворотов под кодинг и SDK готова. Опять таки если очень серьезно и программа запускается в отдельной среде и т.д. То тут конечно сложнее. Но, опять таки, я не думаю, что нужно будет смотреть на работу программы и попутно что-то редактировать.

Так или иначе, ОС твоя и тебе решать что в ней делать. Считаешь нужным многопоточность - на здоровье. Но до этого нужно решить еще кучу других вопросов и создать хотя бы базу. Собственная ОСь особенно в таких масштабах о которых ты говоришь, достаточно большая, может пока лучше стоит ставить более простые цели? Небольшой редактор, поддержка нескольких дисков/мониторов и т.д.?



#11 Оффлайн   Asummonster

Asummonster
  • Пользователи
  • Сообщений: 570
  • Уровень сигнала: 48,77%
  • В игре: 368 час. 28 мин.
  • ГородКиев

Награды

                    

Отправлено 07 Май 2016 - 23:54

Реализовать функции для конкретной программы очень просто

load(код:string,  "пока не разобрался,что это, ставлю всегда nil", "пока не разобрался,что это, ставлю всегда nil", среда:table)


Сообщение отредактировал Asummonster: 14 Май 2016 - 11:11


#12 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 08 Май 2016 - 00:30

Реализовать функции для конкретной программы очень просто

load(код:string,  "пока не разобрался,что это, ставлю всегда nil", "пока не разобрался,что это, ставлю всегда nil", среда:table)

Что за "среда:table"? Что там должно быть?

 

udp:

Суперштука!!! Не знал, спасибо! Для тех кто читает - в "среде" должна быть таблица с переопределенными функциями.

Теперь вопрос - что за два загадочных параметра? Т.е. есть функция load(arg1, arg2, arg3, arg4), где arg1 - строка с загружаемым кодом, arg2 - строка, непонятного назначения, arg3 - таблица непонятного назначения, arg4 - таблица окружения, в которой переопределенные функции. Интересуют параметры arg2, и arg3.


Сообщение отредактировал Jet: 08 Май 2016 - 01:12


#13 Оффлайн   Seryoga

Seryoga
  • Пользователи
  • Сообщений: 108
  • Уровень сигнала: 0,34%
  • В игре: 2 час. 33 мин.
  • ГородSaint-Petersburg

Награды

        

Отправлено 08 Май 2016 - 01:29

Jet, лучше сделай, осserver. В чём суть, есть некое ядро операционной системы, которое умеет создавать несколько потоков по желанию программиста. При количестве ядер в "процессоре" меньшем, чем количество потоков, ос должна сама уметь переключать контекст, чтобы программы не зависали. Так же она должна уметь создавать и останавливать потоки. Потоки должны иметь вложенную структуру, то есть Есть главный поток в нём содержатся несколько переменных и несколько потоков, причём внутренние потоки имеют схожую структуру, что позволит выделить области видимости и дать возможность потокам общаться между собой. Далее должна быть возможность добавления ядер в "процессор", подключением второго компа рядом или сервера. Также в каждом ядре должен иметься стек операций. Общение с этим ядром должно быть посредством программного кода. Сделай некий аналог JVM под open computers.


Как грамотно подойти к разработке большого проекта? 

  1. Нужно найти команду из 3-х и более человек
  2. Нужно найти хорошего лидера
  3. Нужно найти кучу свободного времени, не менее 20-ти часов в неделю

Сообщение отредактировал Seryoga: 08 Май 2016 - 01:29

  • SergOmarov это нравится

#14 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 08 Май 2016 - 01:30

Jet, лучше сделай, осserver. В чём суть, есть некое ядро операционной системы, которое умеет создавать несколько потоков по желанию программиста. При количестве ядер в "процессоре" меньшем, чем количество потоков, ос должна сама уметь переключать контекст, чтобы программы не зависали. Так же она должна уметь создавать и останавливать потоки. Потоки должны иметь вложенную структуру, то есть Есть главный поток в нём содержатся несколько переменных и несколько потоков, причём внутренние потоки имеют схожую структуру, что позволит выделить области видимости и дать возможность потокам общаться между собой. Далее должна быть возможность добавления ядер в "процессор", подключением второго компа рядом или сервера. Также в каждом ядре должен иметься стек операций. Общение с этим ядром должно быть посредством программного кода. Сделай некий аналог JVM под open computers.

Аля Azure... Облачные сервера.. Круто конечно, но очень трудно. В качестве следующих шагов, имея на рука ОСь с многопоточностью можно, но не с нуля.



#15 Оффлайн   Seryoga

Seryoga
  • Пользователи
  • Сообщений: 108
  • Уровень сигнала: 0,34%
  • В игре: 2 час. 33 мин.
  • ГородSaint-Petersburg

Награды

        

Отправлено 08 Май 2016 - 01:36

Ты ведь понимаешь, что многопоточность на калькуляторе бессмысленна? Да и несколько потоков на одном ядре работают в разы медленнее, чем один поток выполняющий ту же задачу. Как говорится, А игра стоит свеч?


Сообщение отредактировал Seryoga: 08 Май 2016 - 01:45


#16 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 08 Май 2016 - 01:58

Ты ведь понимаешь, что многопоточность на калькуляторе бессмысленна? Да и несколько потоков на одном ядре работают в разы медленнее, чем один поток выполняющий ту же задачу. Как говорится, А игра стоит свеч?

Стоит, мне интересно разобраться как работает ОСь, а так же попрактиковаться в lua.



#17 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 13 Май 2016 - 20:38

Уважаемый администратор. Возможно ли перенести эту тему в раздел "Разработка проектов и схем", а так же поменять имя на "Разработка операционной системы [OC]"? Если да, то сделай это пожалуйста.



#18 Оффлайн   Kartze

Kartze
  • Пользователи
  • Сообщений: 435
  • Уровень сигнала: 40,56%
  • В игре: 306 час. 24 мин.

Награды

              

Отправлено 14 Май 2016 - 09:01

Уважаемый администратор. Возможно ли перенести эту тему в раздел "Разработка проектов и схем", а так же поменять имя на "Разработка операционной системы [OC]"? Если да, то сделай это пожалуйста.

Если ты после всей критики еще одержим своей идеей, то ты, думаю, сможешь сделать то, что тебе нужно. Удачи!



#19 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 14 Май 2016 - 10:01

Если ты после всей критики еще одержим своей идеей, то ты, думаю, сможешь сделать то, что тебе нужно. Удачи!

О да, еще как одержим.))) И есть уже кое какие наработки. Ща определюсь с рисовалкой до конца и уже смогу что то продемонстрировать.


  • SergOmarov это нравится

#20 Оффлайн   Kartze

Kartze
  • Пользователи
  • Сообщений: 435
  • Уровень сигнала: 40,56%
  • В игре: 306 час. 24 мин.

Награды

              

Отправлено 14 Май 2016 - 12:38

О да, еще как одержим.))) И есть уже кое какие наработки. Ща определюсь с рисовалкой до конца и уже смогу что то продемонстрировать.

Так держать! Ждем-с... :)



#21 Оффлайн   Asummonster

Asummonster
  • Пользователи
  • Сообщений: 570
  • Уровень сигнала: 48,77%
  • В игре: 368 час. 28 мин.
  • ГородКиев

Награды

                    

Отправлено 14 Май 2016 - 13:40

Где можно посмотреть то, что уже есть?



#22 Оффлайн   Jet

Jet
  • Автор темы
  • Пользователи
  • Сообщений: 80
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.
  • ГородМосква

Отправлено 14 Май 2016 - 14:01

Где можно посмотреть то, что уже есть?

Пока нигде, я не выкладывал никуда еще.



#23 Оффлайн   SergOmarov

SergOmarov
  • Пользователи
  • Сообщений: 564
  • Уровень сигнала: 0,34%
  • В игре: 2 час. 36 мин.

Награды

     

Отправлено 20 Июль 2016 - 19:52

Ну так да. Если следовать реализму, то многопоточность нужна, но в реале ты врятли встретишь людей которые будут кодить прямо в майнкрафте. Твое дело - так или иначе.
 

Это как минимум полезно для саморазвития






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

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