OSDev

для всех
Текущее время: 15 май 2024, 05:46

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 81 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
Автор Сообщение
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 19 фев 2012, 18:59 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Yoda писал(а):
А вы точно уверены, что именно спинлок а не мьютекс здесь нужен? Ведь в случае спинлока все процессоры, которым понадобилось выполнить этот защищённый код, вместо того, чтобы выполнять другую полезную работу, будут крутиться в ожидании освобождения спинлока.

Допустим, функция отправки сообщения занимает 1000 тактов процессора (в L4 - 37 тактов). Если перед ней воткнуть спинлок, то один поток будет ждать другого 1000 тактов. Если воткнуть мутекс, то попытка потока войти в занятую КС вызовет переключение контекста на другой поток. А переключение может занимать и 10.000 - 100.000 тактов. Проще немного подождать - переключаться дольше будем. Если число процессоров больше двух, то нужно крутить "спинлоки с очередью".
Yoda писал(а):
А вот фраза "самостоятельный высокоуровневый механизм" осталось немножко мутновата для меня. Не хотите ли вы сказать, что обмен сообщениями никак не использует мьютексы, спинлоки, семафоры и прочие, по сути тождественные понятия?

Да он-то может и использует, но логика работы низкоуровневых механизмов никак не отражена в логике самого обмена сообщениями. Мутексы оперируют критическими секциями, блокировками и т.д. У сообщений своё: синхронность, асинхронность... Совершенно другой уровень логики. Нельзя ведь сказать, что русского от американца отличает только уровень сахара в крови или длина ногтей на ногах?!
Yoda писал(а):
Кстати, перед командой xchg не обязательно ставить префикс lock. См. страницу 365 второго тома руководства Интела по системе команд. Эта инструкция атомарная от природы.

Ты наизусть знаешь талмуд Интела???!!!:))) Вот это круто!
Код:
Глава 4, стих 20: к Системным Разработчикам: И сказал Интел: перед обработкой прерываний установите стек, дабы не порочить славное Имя Его (стека)...
:)))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 19 фев 2012, 20:17 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Yoda, вот система Станислава - отличный пример восходящего проектирования. Ещё не решён вопрос ни динамической загрузки программ, ни разделения и планирования ресурсов, ни механизмов защиты и IPC.. Но зато есть отлаженный механизм загрузки с флешки монолитного образа системы, и отличная векторная графика. Система - открытка. Времени, надо думать, немало ушло на написание.. Как в Менуете: для того, чтобы поменять иконку на рабочем столе - нужно ядро перекомпилить. Станислав, нужно бы с общим функционалом определиться сначала, а потом можно и иконки для устройств рисовать.
Перво-наперво, определись с тем, как будут подгружаться новые программы. Т.е. твоя ось сперва должна научиться шарить ФС. Потом, каждой программе нужно выделить свой отрезок памяти. Потом система должна зарегистрировать новую программу в очереди на исполнение. Раздели все программы по функционалу: одна ФС шарит, другая памятью заведует, третья иконки рисует и т.д. А ядро пусть сообщения/события между ними крутит. Вот тебе практически микроядерная ОС получилась. По-первой можно и без страниц и подкачки обойтись: пусть все программы в одной линейной области памяти находятся. Но если захочешь динамически программы запускать, их код должен быть позиционно-независимым. Опять же, придётся делать модуль, управляющий кучей памяти. Определись с тем, что должен содержать дескриптор загруженной программы, например: Имя программы, Идентификатор, Занимаемая область памяти, Состояние и т.п. Дальше, если система у тебя кооперативная, а приоритетов программ не ожидается, то для всех программ можно сделать одну общую очередь сообщений. Т.е. все запросы будут обрабатываться в порядке поступления. Выглядит это так: Сообщение имеет идентификатор отправителя, идентификатор получателя и указатель на область памяти в которой лежат данные (ключ от квартиры, где деньги лежат). Когда программа работает, она кидает в конец общей очереди сообщения. Потом передаёт управление диспетчеру (ядру). Диспетчер берёт из общей очереди первое сообщение, читает идентификатор получателя, ищет получателя в таблице процессов, и передаёт ему управление. А сообщение можно оставлять в стеке. Т.к. у тебя кооперативка, то все процессы могут использовать один общий стек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 19 фев 2012, 21:08 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Mr.McD. писал(а):
Да он-то может и использует, но логика работы низкоуровневых механизмов никак не отражена в логике самого обмена сообщениями.

То есть, для реализации высокоуровневого понятия "передача сообщения" в SMP-системе с общей памятью всё же придётся использовать спинлоки или мьютексы. Иными словами, передача сообщения - обёртка для мьютексов.
Что и требовалось доказать. :)

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 19 фев 2012, 21:17 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Yoda писал(а):
Иными словами, передача сообщения - обёртка для мьютексов.

Да так можно до бесконечности крутить тогда: API - обёртка для передачи параметров ядру, GUI - обёртка над драйвером видеокарты, вызовы процедур - обёртки над джампами, и т.д. Фраза: сообщения - обёртка для мьютексов прозвучала в теме взаимных блокировок. Мутексы вызывают блокировки, сообщения не вызывают*. Не смотря на то, что сам механизм передачи сообщений может скрывать в своей реализации и мутексы, и спинлоки, и запрет прерываний... Да что угодно.
В этом всё отличие.

*вообще, обмен сообщениями тоже может вызвать дэдлок. Но это в более крутых, экзотических задачах. В случае с мутесами блокировки возможны повсеместно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 19 фев 2012, 22:37 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Предлагаю вернуться к теме проектирования... Вот это нагло выдернул из Википедии:
Википедия писал(а):
Целью Проектирования является определение внутренних свойств системы и детализации её внешних (видимых) свойств на основе выданных заказчиком требований к ПО (исходные условия задачи). Эти требования подвергаются анализу.
Первоначально программа рассматривается как чёрный ящик. Ход процесса проектирования и его результаты зависят не только от состава требований, но и выбранной модели процесса, опыта проектировщика.

Т.е. эволюцию системы (восходящую, нисходящую, встречную) лучше всё-таки представлять. Я предлагал в виде нисходящего дерева с бэктрекингом (для придания бонусов "встречного подхода"). Далее момент, который всех сильно смутил...
Цитата:
В зависимости от класса создаваемого ПО, процесс проектирования может обеспечиваться как «ручным» проектированием, так и различными средствами его автоматизации. В процессе проектирования ПО для выражения его характеристик используются различные нотации — блок-схемы, ER-диаграммы, UML-диаграммы, DFD-диаграммы, а также макеты.
Проектированию обычно подлежат:
Архитектура ПО;
Устройство компонентов ПО;
Пользовательские интерфейсы.

Конечно, предметная область (в данном случае - ОС) накладывает свои специфические ограничения. Они могут быть определены отдельно. А в качестве языка представления, наверное, лучше полистать UML (лучше пока ничего не нашёл).
Вот полезный ресурс по нему (uml2.ru): http://www.uml2.ru/forum/index.php?board=19.0
Для UML можно найти кучу открытого софта, а в проектировании он уже практически стандарт "дефакто". Формат UML проектов - XML/XMI, так что с поддержкой ни у кого проблем не должно возникнуть. Единственное: немного сложноват. Конечно, рано ещё думать об автоматизированном проектировании, но задуматься о стандартизованном подходе к "ручному" проектированию и представлению системы, OSDev'ерам не мешало бы... Ваши предложения.


Последний раз редактировалось Mr.McD. 20 фев 2012, 01:42, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 19 фев 2012, 22:48 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Смущает автоматизация?
Тогда взгляни на Rational Rose. Популярный IBM-овский продукт для автоматизированного (визуального) UML-моделирования.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 19 фев 2012, 22:55 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Yoda писал(а):
Смущает автоматизация?
Тогда взгляни на Rational Rose. Популярный IBM-овский продукт для автоматизированного (визуального) UML-моделирования.

Я имел в виду автоматизацию разработки всей оси (что пока рано). Хорошо, взгляну..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 19 фев 2012, 23:19 

Зарегистрирован: 25 май 2010, 20:58
Сообщения: 136
Похоже IBM Rational Rose платный?
Приглянулся Umbrello UML Modeller: http://uml.sourceforge.net/ Из плюсов: открытый, XMI есть (возможно и XML), может экспортировать проект в исходники на любимом языке.
Руководство на русском: http://www.nundesign.com/st/uml_doc/

Ещё один + в пользу UML в общем и Umbrello в частности - поддержка CORBA (CCM) (И то и другое разрабатывается сообществом OMG). Так что, если кто-то планирует делать свою систему с возможностью распределения, и по последним стандартам компонентной моды, то лучший выбор: UML + CCM. =)
А вот, откуда ноги растут: http://ru.wikipedia.org/wiki/Object_Management_Group


Последний раз редактировалось Mr.McD. 20 фев 2012, 01:59, всего редактировалось 4 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 20 фев 2012, 01:30 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Yoda писал(а):
То есть, для реализации высокоуровневого понятия "передача сообщения" в SMP-системе с общей памятью всё же придётся использовать спинлоки или мьютексы. Иными словами, передача сообщения - обёртка для мьютексов.
Что и требовалось доказать. :)


Вот с этим я не соглашусь. Обёртка по определению не добавляет принципиально новой функциональности, а лишь слегка подкрашивает уже имеющуюся (ну или вообще ничего не делает). Например, функции Win32 API типа CreateFile являются обёртками над недокументированными функциями собственно ядра Винды. Однако передача сообщений по своему функционалу с мутексами совершенно не схожа -- это другой механизм с другим назначением. Вот что в своей реализации сообщения опираются на мутексы или другие подобные примитивы синхронизации -- это да.

Но с оффтопом точно надо завязывать. Если есть желание и дальше разбираться, является ли сообщение мутексом или нет, для этого создаём отдельную тему :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проектирование ОС
СообщениеДобавлено: 20 фев 2012, 05:44 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Mr.McD. писал(а):
Yoda, вот система Станислава - отличный пример восходящего проектирования. Ещё не решён вопрос ни динамической загрузки программ, ни разделения и планирования ресурсов, ни механизмов защиты и IPC.. Но зато есть отлаженный механизм загрузки с флешки монолитного образа системы, и отличная векторная графика. Система - открытка. Времени, надо думать, немало ушло на написание.. Как в Менуете: для того, чтобы поменять иконку на рабочем столе - нужно ядро перекомпилить. Станислав, нужно бы с общим функционалом определиться сначала, а потом можно и иконки для устройств рисовать.
Перво-наперво, определись с тем, как будут подгружаться новые программы. Т.е. твоя ось сперва должна научиться шарить ФС. Потом, каждой программе нужно выделить свой отрезок памяти. Потом система должна зарегистрировать новую программу в очереди на исполнение. Раздели все программы по функционалу: одна ФС шарит, другая памятью заведует, третья иконки рисует и т.д. А ядро пусть сообщения/события между ними крутит. Вот тебе практически микроядерная ОС получилась. По-первой можно и без страниц и подкачки обойтись: пусть все программы в одной линейной области памяти находятся. Но если захочешь динамически программы запускать, их код должен быть позиционно-независимым. Опять же, придётся делать модуль, управляющий кучей памяти. Определись с тем, что должен содержать дескриптор загруженной программы, например: Имя программы, Идентификатор, Занимаемая область памяти, Состояние и т.п. Дальше, если система у тебя кооперативная, а приоритетов программ не ожидается, то для всех программ можно сделать одну общую очередь сообщений. Т.е. все запросы будут обрабатываться в порядке поступления. Выглядит это так: Сообщение имеет идентификатор отправителя, идентификатор получателя и указатель на область памяти в которой лежат данные (ключ от квартиры, где деньги лежат). Когда программа работает, она кидает в конец общей очереди сообщения. Потом передаёт управление диспетчеру (ядру). Диспетчер берёт из общей очереди первое сообщение, читает идентификатор получателя, ищет получателя в таблице процессов, и передаёт ему управление. А сообщение можно оставлять в стеке. Т.к. у тебя кооперативка, то все процессы могут использовать один общий стек.


Зачем это вы мне систему усложняете? Всё, что вы мне предлагаете сделать у меня уже есть. Те же иконки или из проводника можно запустить любую прогу с таблицей релокации для пересчёта адресов, чтобы код мог находиться в любом месте оперативки и переноситься от туда опять в другое место с перепросчётом очередным адресов. Стек событий уже есть, т.к. проги могут поставить свои обработчики на постоянную обработку в массив, но самое главное это обработка событий простым нажатием мыши на объект без перебора объектов, и очередь там не нужна. Для каждого диска свой заголовок файловой системы и файл имеет ссылку на неё, а там есть номер этого диска для функции чтения файлов и их загрузки, которая указана в том же файле. Так же в нём данные о его первом кластере. Всё, что делает например винда моя система будет прекрасно делать, даже с плюсом.
Как например вы решите проблему, для своей оси, переключения окошек, посылания им сообщений о нажатии мыши на них, после реализации файловой системы и памяти и драйверов(у вас получится командная строка в текстовом режиме)? А вы будете переписывать всё это заново и от этой системы вашей прежнего кода останется мало, или получится приспособничество с большим числом глюков. А я могу сейчас дописать всё что угодно к системе.
Если проектируеш систему не до конца, то добавление к ней чегото будет мучительным, а иногда и невозможным. Поэтому я сразу задумался о конечном этоге, как шрифты рисоваться будут с окошками и иконками.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 81 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB