Перейти к публикации
Форум - ComputerCraft
RccHD

Разработка новой операционной системы. WinOS.

Рекомендованные сообщения

Ты хочешь строго разделять - кто пользуется конкретным компонентом?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!
Как же оказывается сложно писать свою ОС  :unsure: 
Очень много приходится проектировать.

80% времени проектирую, 20% времени пишу код

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту ) Функции должны распределять компоненты одинакового типа между окнами. Например если есть 2 редстоун-адаптера и 2 окна потребовали компонент "redstone", то каждое окно должно получить свой редстоун-адаптер

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту )
Эти функции  будут вызываться приложением или системой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Эти функции  будут вызываться приложением или системой?

Хороший вопрос

 

Их будет вызывать специальный распределитель компонент, т.е. система

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут еще можно подумать о виртуальных компонентах, т.к. некоторые приложения не нуждаются в монопольном доступе к компонентам.

 

...

Да, нужно разделять компоненты на 3 типа.

 

1) компонент, к которому нельзя получить прямой доступ ( только gpu ). Вместо gpu надо вернуть gpuProxy(уже реализован)

2) компонент, который можно поделить между несколькими приложениями

3) компонент, который не может быть использован сразу несколькими приложениями

Изменено пользователем RccHD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@Zer0Galaxy

Я заменяю component.proxy, component.invoke, component.setPrimary, component.getPrimary, component.list

Изменено пользователем RccHD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Нужно написать функции 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 

как то так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

как то так?

Ну вроде должно работать правильно. Я пока не могу это с компа запустить и потестить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Например, два сетевых приложения могут разделять сетевой адаптер, задействуя только нужные им порты.

 

Кстати, не всегда такой фокус покатит. Порты ведь открываются на весь компонент.

И не все приложения проверяют - с их порта пришло сообщение, или с чужого. Предполагается ведь, что твоя прога в конкретный момент времени - единоличный обладатель модема =)

 

Кстати, как там с поглощением эвентов?

Два моих приложения висят на модеме, и слушают эвенты. Приложение А поймало modem_message. Поймает ли этот же мессадж приложение Б?

Или оно окажется поглощено приложением А?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Кстати, как там с поглощением эвентов?

Два моих приложения висят на модеме, и слушают эвенты. Приложение А поймало modem_message. Поймает ли этот же мессадж приложение Б?

Или оно окажется поглощено приложением А?

Не знаю, приду домой -- проверю.

 

Вообще вроде бы все приложения уловят ивент(вспомни пример, когда я управлял сразу двумя змейками)

 

Если это работает для key_down, то и для модема сработает, я думаю

  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Наконец-то смог запустить TTY в виртуальном окружении!

vokoscreen-2017-09-10_01-46-44.gif


Теперь можно сделать полноценные терминалы ( скопировать исходники из OpenOS )

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно как-нибудь пощупать, тот wm что ты сделал?
Пожелания по тому, что я увидел на скриншотах из поста.

  1. Можешь сделать возможность изменять ширину рамки окна? Например у тебя сейчас у тебя 2 пикселя хотелось бы сделать 1 или вообще убрать
  2. Можешь сделать workspaces и разных пользователей (linux: ctrl + alt + Fi)?
  3. Можешь сделать язык раскладки компьютера независимым от реальной раскладки?
  4. Можешь сделать настраиваемую панель инструментов? Чтобы пользователь сам мог туда поместить номер воркспейса, язык, майн-время, реальное время, кол-во занятой/свободной оперативки и тп.
  5. Можешь сделать шапки окошкам и дать возможность окошкам стакаться, разными способами?
  6. Можешь поддерживать горячие клавиши из i3 и дать возможность создать свои?
  7. Можешь сделать возможность поставить заставку, фон рабочего стола? Так же дать возможность разработчику приложения сделать полупрозрачные окна?
  8. Можешь сделать консоль с настраиваемым шрифтом и фоном?
  9. Можешь сделать полноценную однострочную консоль запускаемую используя горячую клавишу? По типу той что запускается в i3 на 'mode' + D (только в i3 это не консоль, но ты сделай консоль =))
  10. Можешь сделать возможность изменения размеров окна мышкой, а так же дать возможность программисту делать перетаскиваемые окна. Например отчёт об ошибке или предупреждение так лучше выглядит. (окошечко с одной кнопкой ОК)

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

 

псы, ты точно пишешь ОС?

Изменено пользователем Seryoga

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

...

1) Сейчас рамка в 1 пиксель, ее можно будет убрать, наверное

2) Боюсь, может не хватить 2мб оперативки на все это, но я попробую

3) нет такой возможности

4) будет в стандартной реализации оконного менеджера ( настройка через конфиг )

5) да, но на счет шапок не уверен... На маленьких экранах можно будет выключить шапку

6) будет в стандартной реализации оконного менеджера ( настройка через конфиг )

7) не уверен

8) наверное

9) наверное

10) перетаскивание не буду делать, т.к. у нас маленькие экраны и МАЛО оперативки.

 

Поддержки нескольких мониторов наверное не будет, т.к. для операций с gpu у меня используется двойная буфферизация и на несколько рабочих столов/экранов не хватит ОЗУ

 

псы, ты точно пишешь ОС?

Изначально я хотел написать оконный менеджер и все. Но как только я начал, стало понятно, что нужно делать еще виртуальную среду для каждого окна, кастомные обработчики событий, подмена _ENV, подмена require и loadfile, подмена event, component, component.gpu и много еще всего

То, что я делаю можно назвать "почти ОС" или "надстройка над OpenOS"

Изменено пользователем RccHD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Сейчас рамка в 1 пиксель, ее можно будет убрать, наверное


Я имел в виду, что у вас сейчас на разделение тратится 2 пикселя. А можно тратить 1, если сделать рамку общей для соседних окон. То есть сначала размечаем сетку. А затем отдаём ячейки программам на использование.

Если я не прав в первом утверждении, то не могли бы вы скинуть скриншот текущей версии wm?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я имел в виду, что у вас сейчас на разделение тратится 2 пикселя. А можно тратить 1, если сделать рамку общей для соседних окон

Однопиксельные рамки сделать не получится, потому что символ имеет высоту 2 "пикселя" (▀)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На мой взгляд, разрешение ОС-монитора не такое большое, чтобы делить его на окна.

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

Но, это лишь мое скромное мнение.

  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Но, это лишь мое скромное мнение.

Дам тебе(и другим кодерам) возможность реализовать такой оконный менеджер. Будет удобное API для описания того, как распределять пространство на экране. Все можно будет поменять через конфиг

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@Zer0Galaxy, кстати, чет похожее писал давненько. Работало сносно, хоть это и не полноценный мультитрединг:

 

mdbvGJr.png?3 y6wh1MJ.png?2

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Графическая составляющая(оконный менеджер, буфферизация, виртуальная gpu) -- ничтожно простая часть ОС, которую я реализовал в первый же день

 

Сейчас я бьюсь над тем, чтобы разделять порты ввода-вывода программ(term, tty, sh, io, buffer)

Изменено пользователем RccHD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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


Эта фича является под фичей фичи 5, которую RccHD обещал сделать.
Если в i3 нажать 'mode' + W, то все окна примут вид горизонтального стека. Так видно только одно окно, a остальные прячутся за ним:

jX8c25Ml.png

 

5. Можешь сделать шапки окошкам и дать возможность окошкам стакаться, разными способами?

5) да, но на счет шапок не уверен... На маленьких экранах можно будет выключить шапку

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сейчас я боюсь над тем, чтобы разделять порты ввода-вывода программ(term, tty, sh, io, buffer)

Сейчас есть желание забить на это все и сделать так

io = {
    write = nil
   ,read = nil
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Когда будет готов оконный менеджер(в конце недели, я занят :/ ), объявлю начало разработки конфигов к нему :)

Учасники форума смогут оформить конфиг(API я выложу) и прислать его. Им будет предоставлен ранний доступ к ОС.
Пример рабочего конфига я выложу(с мегатоннами комментов и пояснений). Чтобы было с чего "срисовывать"

Хорошие конфиги я добавлю в систему как дефолтные, один из них можно будет выбрать зайдя в настройки

Что думаете? Будет ли кто-то пилить конфиг оконного менеджера или мне сделать все самому?

P.S. Вы сможете сделать "как в андроиде",  "не как в андроиде", да вообще как захотите

Изменено пользователем RccHD

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@RccHD, делай полноценную многозадачность с деревом процессов и сигналами.

Уже готово. Дерево процессов встроено в OpenOS(неожиданно)

 

YK7HQHF.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@RccHD, а теперь делай сигналы, SIGTERM, SIGKILL, SIGINT и другие.

Главное не забывать, что программы пишутся под OpenOS, и если программа сама ничего с сигналами не делает, то исполнять их придётся системе. Не помню, какой там за что именно отвечает, но посылать сигнал мягкого выключения программе, которое она обработать не может, так себе идея.

Можно посылать сигнал shutdown, который имеется в openOS в качестве сигнала мягкого выключения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×