Totoro 3 562 Опубликовано: 7 сентября, 2017 Ты хочешь строго разделять - кто пользуется конкретным компонентом? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 7 сентября, 2017 Ты хочешь строго разделять - кто пользуется конкретным компонентом? Не обязательно. Главное, чтобы была возможность разрешения коллизий и распределения компонент между окнами Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 7 сентября, 2017 ААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!Как же оказывается сложно писать свою ОС Очень много приходится проектировать.80% времени проектирую, 20% времени пишу код 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 148 Опубликовано: 8 сентября, 2017 Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту ) Функции должны распределять компоненты одинакового типа между окнами. Например если есть 2 редстоун-адаптера и 2 окна потребовали компонент "redstone", то каждое окно должно получить свой редстоун-адаптерТут еще можно подумать о виртуальных компонентах, т.к. некоторые приложения не нуждаются в монопольном доступе к компонентам. Например, два сетевых приложения могут разделять сетевой адаптер, задействуя только нужные им порты. Другие приложения могут использовать лишь одну сторону красной платы. 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 8 сентября, 2017 Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту ) Эти функции будут вызываться приложением или системой? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 8 сентября, 2017 Эти функции будут вызываться приложением или системой? Хороший вопрос Их будет вызывать специальный распределитель компонент, т.е. система Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 8 сентября, 2017 А что помешает приложению вызвать component.proxy() для доступа к компоненту в обход системы? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 8 сентября, 2017 (изменено) Тут еще можно подумать о виртуальных компонентах, т.к. некоторые приложения не нуждаются в монопольном доступе к компонентам. ... Да, нужно разделять компоненты на 3 типа. 1) компонент, к которому нельзя получить прямой доступ ( только gpu ). Вместо gpu надо вернуть gpuProxy(уже реализован) 2) компонент, который можно поделить между несколькими приложениями 3) компонент, который не может быть использован сразу несколькими приложениями Изменено 8 сентября, 2017 пользователем RccHD Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 8 сентября, 2017 (изменено) @@Zer0Galaxy Я заменяю component.proxy, component.invoke, component.setPrimary, component.getPrimary, component.list Изменено 8 сентября, 2017 пользователем RccHD Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 8 сентября, 2017 Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту ) Функции должны распределять компоненты одинакового типа между окнами. Например если есть 2 редстоун-адаптера и 2 окна потребовали компонент "redstone", то каждое окно должно получить свой редстоун-адаптер local components={} -- тут будем хранить занятые компоненты local getComponent = function(window, componentType, componentAddress) --[[ window - это окно, которое потребовало компоненту componentType - тип компоненты ( игнорировать GPU ) componentAddress - адрес требуемой компоненты (этот параметр, на мой взгляд, не нужен) ]] for address in component.list(componentType) do -- здесь и далее вызываем родные функции component, а не подмену if components[address]==nil then -- если компонент не занят, занимаем его components[address]=window end if components[address]==window then -- если компонент занят этим окном, return component.proxy(address) -- возвращаем его прокси end end -- вернем nil, если свободных компонент не найдено end local freeComponent = function(componentAddress) -- пометить компонент <componentAddress> как незанятый components[componentAddress]=nil end как то так? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 8 сентября, 2017 как то так? Ну вроде должно работать правильно. Я пока не могу это с компа запустить и потестить Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 562 Опубликовано: 8 сентября, 2017 Например, два сетевых приложения могут разделять сетевой адаптер, задействуя только нужные им порты. Кстати, не всегда такой фокус покатит. Порты ведь открываются на весь компонент. И не все приложения проверяют - с их порта пришло сообщение, или с чужого. Предполагается ведь, что твоя прога в конкретный момент времени - единоличный обладатель модема =) Кстати, как там с поглощением эвентов? Два моих приложения висят на модеме, и слушают эвенты. Приложение А поймало modem_message. Поймает ли этот же мессадж приложение Б? Или оно окажется поглощено приложением А? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 8 сентября, 2017 Кстати, как там с поглощением эвентов? Два моих приложения висят на модеме, и слушают эвенты. Приложение А поймало modem_message. Поймает ли этот же мессадж приложение Б? Или оно окажется поглощено приложением А? Не знаю, приду домой -- проверю. Вообще вроде бы все приложения уловят ивент(вспомни пример, когда я управлял сразу двумя змейками) Если это работает для key_down, то и для модема сработает, я думаю 3 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 9 сентября, 2017 Наконец-то смог запустить TTY в виртуальном окружении!Теперь можно сделать полноценные терминалы ( скопировать исходники из OpenOS ) 3 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Seryoga 184 Опубликовано: 11 сентября, 2017 (изменено) Можно как-нибудь пощупать, тот wm что ты сделал?Пожелания по тому, что я увидел на скриншотах из поста. Можешь сделать возможность изменять ширину рамки окна? Например у тебя сейчас у тебя 2 пикселя хотелось бы сделать 1 или вообще убрать Можешь сделать workspaces и разных пользователей (linux: ctrl + alt + Fi)? Можешь сделать язык раскладки компьютера независимым от реальной раскладки? Можешь сделать настраиваемую панель инструментов? Чтобы пользователь сам мог туда поместить номер воркспейса, язык, майн-время, реальное время, кол-во занятой/свободной оперативки и тп. Можешь сделать шапки окошкам и дать возможность окошкам стакаться, разными способами? Можешь поддерживать горячие клавиши из i3 и дать возможность создать свои? Можешь сделать возможность поставить заставку, фон рабочего стола? Так же дать возможность разработчику приложения сделать полупрозрачные окна? Можешь сделать консоль с настраиваемым шрифтом и фоном? Можешь сделать полноценную однострочную консоль запускаемую используя горячую клавишу? По типу той что запускается в i3 на 'mode' + D (только в i3 это не консоль, но ты сделай консоль =)) Можешь сделать возможность изменения размеров окна мышкой, а так же дать возможность программисту делать перетаскиваемые окна. Например отчёт об ошибке или предупреждение так лучше выглядит. (окошечко с одной кнопкой ОК) А у тебя поддерживаются несколько мониторов? псы, ты точно пишешь ОС? Изменено 11 сентября, 2017 пользователем Seryoga Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 11 сентября, 2017 (изменено) ...1) Сейчас рамка в 1 пиксель, ее можно будет убрать, наверное 2) Боюсь, может не хватить 2мб оперативки на все это, но я попробую 3) нет такой возможности 4) будет в стандартной реализации оконного менеджера ( настройка через конфиг ) 5) да, но на счет шапок не уверен... На маленьких экранах можно будет выключить шапку 6) будет в стандартной реализации оконного менеджера ( настройка через конфиг ) 7) не уверен 8) наверное 9) наверное 10) перетаскивание не буду делать, т.к. у нас маленькие экраны и МАЛО оперативки. Поддержки нескольких мониторов наверное не будет, т.к. для операций с gpu у меня используется двойная буфферизация и на несколько рабочих столов/экранов не хватит ОЗУ псы, ты точно пишешь ОС?Изначально я хотел написать оконный менеджер и все. Но как только я начал, стало понятно, что нужно делать еще виртуальную среду для каждого окна, кастомные обработчики событий, подмена _ENV, подмена require и loadfile, подмена event, component, component.gpu и много еще всего То, что я делаю можно назвать "почти ОС" или "надстройка над OpenOS" Изменено 11 сентября, 2017 пользователем RccHD Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Seryoga 184 Опубликовано: 11 сентября, 2017 Сейчас рамка в 1 пиксель, ее можно будет убрать, наверное Я имел в виду, что у вас сейчас на разделение тратится 2 пикселя. А можно тратить 1, если сделать рамку общей для соседних окон. То есть сначала размечаем сетку. А затем отдаём ячейки программам на использование.Если я не прав в первом утверждении, то не могли бы вы скинуть скриншот текущей версии wm? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RccHD Автор темы 136 Опубликовано: 12 сентября, 2017 Я имел в виду, что у вас сейчас на разделение тратится 2 пикселя. А можно тратить 1, если сделать рамку общей для соседних оконОднопиксельные рамки сделать не получится, потому что символ имеет высоту 2 "пикселя" (▀) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 12 сентября, 2017 На мой взгляд, разрешение ОС-монитора не такое большое, чтобы делить его на окна. Если бы я стал писать многозадачную операционку, разделение экрана я бы реализовал не как в Windows, а как в Androidе. Т.е. из всех запущенных приложение только одно захватывает экран, оно же обрабатывает события мыши и клавы. Остальные приложения крутятся в фоне и если что-то пишут, то на свой виртуальный экран. Но, это лишь мое скромное мнение. 6 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 562 Опубликовано: 12 сентября, 2017 Даёшь Opendroid! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах