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


Фотография

Пишу новую OS

OS

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

#61 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 712
  • Уровень сигнала: 0,36%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 07 Сентябрь 2017 - 22:09

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



#62 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 07 Сентябрь 2017 - 22:14

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

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



#63 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 08 Сентябрь 2017 - 00:01

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

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



#64 Оффлайн   eu_tomat

eu_tomat
  • Хранители Кода
  • Сообщений: 813
  • Уровень сигнала: 0,05%
  • В игре: 0 час. 19 мин.

Награды

                          

Отправлено 08 Сентябрь 2017 - 08:09

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

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

#65 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 214
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

5                                 

Отправлено 08 Сентябрь 2017 - 08:20

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

#66 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 08 Сентябрь 2017 - 08:47

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


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

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

#67 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 214
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

5                                 

Отправлено 08 Сентябрь 2017 - 08:53

А что помешает приложению вызвать component.proxy() для доступа к компоненту в обход системы?



#68 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 08 Сентябрь 2017 - 08:53

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

...


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

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

Сообщение отредактировал RccHD: 08 Сентябрь 2017 - 09:00


#69 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 08 Сентябрь 2017 - 08:55

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

Сообщение отредактировал RccHD: 08 Сентябрь 2017 - 08:56


#70 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 214
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

5                                 

Отправлено 08 Сентябрь 2017 - 09:13

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

как то так?



#71 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 08 Сентябрь 2017 - 09:18

как то так?


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

#72 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 712
  • Уровень сигнала: 0,36%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 08 Сентябрь 2017 - 10:03

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

 

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

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

 

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

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

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



#73 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 08 Сентябрь 2017 - 10:08

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


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

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

Если это работает для key_down, то и для модема сработает, я думаю
  • Alex, Totoro и mrlobaker это нравится

#74 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 10 Сентябрь 2017 - 00:53

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

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


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


  • eu_tomat и Quant это нравится

#75 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 720
  • Уровень сигнала: 3,96%
  • В игре: 24 час. 15 мин.
  • ГородСолнце

Награды

   2                        

Отправлено 10 Сентябрь 2017 - 01:10

Для сетевого подключения между программа - нужны сокеты.



#76 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 10 Сентябрь 2017 - 01:12

Для сетевого подключения между программа - нужны сокеты.

Не совсем понимаю, о чем ты



#77 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 720
  • Уровень сигнала: 3,96%
  • В игре: 24 час. 15 мин.
  • ГородСолнце

Награды

   2                        

Отправлено 10 Сентябрь 2017 - 01:19

Не совсем понимаю, о чем ты

Изучай сокеты, это надстройка над сырой сетью. в реальных машинах и сетях портов нету грубо говоря, программы просто резервируют два байта у системы как уникальный id для идентификации. Грубо говоря, 238.34.11.26 - это ip адрес компьютера, но в компьютере работают разные программы, по этому придумали нумеровать их, к ip нужно добавлять порт. 238.34.11.26:80, на 80 порту по стандарту работает http сервер, а на 28763 может работать какой нибудь торрент или скайп.


Сообщение отредактировал NEO: 10 Сентябрь 2017 - 01:22


#78 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 10 Сентябрь 2017 - 01:39

Для сетевого подключения между программа - нужны сокеты.

Не совсем понимаю, о чем ты

Я имел в виду, что не понимаю, как твое утверждение относится к этой теме
В данном случае ты написал про сетевое взаимодействие, хотя речь шла о терминалах.

Вот я и "не понял"

#79 Оффлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 197
  • Уровень сигнала: 9,42%
  • В игре: 57 час. 44 мин.
  • ГородЛуна

Награды

                 

Отправлено 10 Сентябрь 2017 - 11:14

UNIX-сокеты.

#80 Оффлайн   Fingercomp

Fingercomp
  • Гуру
  • Сообщений: 1 972
  • Уровень сигнала: 187,35%
  • В игре: 1148 час. 24 мин.

Награды

                                               

Отправлено 10 Сентябрь 2017 - 11:44

Про IPC должны проги заботиться, а не WM.



#81 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 11 Сентябрь 2017 - 19:33

Про IPC должны проги заботиться, а не WM.

Кому нужна будет тонкая настройка, реализует себе IPC и что угодно еще. Я постараюсь сделать систему кастомизируемой



IPC:
1) механизмы обмена сообщениями;
2) механизмы синхронизации;
3) механизмы разделения памяти;
4) механизмы удалённых вызовов (RPC).
Распишу по пунктам
1) реализуется через process.running().data и computer.pushSignal
2) ???
3) реализовано в интерпретаторе Lua и автором мода
4) можно подменить component.proxy, либо написать свою RPC-библиотеку (EASY)


IPC в OpenComputers -- решенная проблема

Сообщение отредактировал RccHD: 11 Сентябрь 2017 - 19:52


#82 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 11 Сентябрь 2017 - 19:36

IPC заботиться, а не WM.

Изучай сокеты, это надстройка над сырой сетью

для сетевого подключения - нужны сокеты.

UNIX-сокеты.


Не много ли экспертов на квадратный сантиметр? :P

Забавно, что все сообщения не по теме, зато везде использованы программистские термины :)
Флудилка

Сообщение отредактировал RccHD: 11 Сентябрь 2017 - 19:38


#83 Оффлайн   Seryoga

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

Награды

        

Отправлено 11 Сентябрь 2017 - 20:22

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

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

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

 

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


Сообщение отредактировал Seryoga: 11 Сентябрь 2017 - 21:43


#84 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 11 Сентябрь 2017 - 20:56

...

1) Сейчас рамка в 1 пиксель, ее можно будет убрать, наверное
2) Боюсь, может не хватить 2мб оперативки на все это, но я попробую
3) нет такой возможности
4) будет в стандартной реализации оконного менеджера ( настройка через конфиг )
5) да, но на счет шапок не уверен... На маленьких экранах можно будет выключить шапку
6) будет в стандартной реализации оконного менеджера ( настройка через конфиг )
7) не уверен
8) наверное
9) наверное
10) перетаскивание не буду делать, т.к. у нас маленькие экраны и МАЛО оперативки.

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

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

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

Сообщение отредактировал RccHD: 11 Сентябрь 2017 - 20:57


#85 Оффлайн   Seryoga

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

Награды

        

Отправлено 11 Сентябрь 2017 - 21:55

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


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

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

#86 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 12 Сентябрь 2017 - 07:11

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

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

#87 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 214
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

5                                 

Отправлено 12 Сентябрь 2017 - 09:23

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

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

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


  • Alex, Totoro, Doob и еще 1 это нравится

#88 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 712
  • Уровень сигнала: 0,36%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 12 Сентябрь 2017 - 11:14

Даёшь Opendroid!



#89 Оффлайн   RccHD

RccHD
  • Автор темы
  • Пользователи
  • Сообщений: 162
  • Уровень сигнала: 21,14%
  • В игре: 129 час. 34 мин.

Награды

        

Отправлено 12 Сентябрь 2017 - 12:07

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


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

#90 Оффлайн   ECS

ECS
  • Гуру
  • Сообщений: 176
  • Уровень сигнала: 0,04%
  • В игре: 0 час. 13 мин.
  • ГородСанкт-Петербург

Награды

      7               

Отправлено 12 Сентябрь 2017 - 12:24

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

 

mdbvGJr.png?3 y6wh1MJ.png?2


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





Темы с аналогичным тегами OS

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

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

Яндекс.Метрика