OSDev

для всех
Текущее время: 28 мар 2024, 13:16

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




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7
Автор Сообщение
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 15 май 2012, 18:05 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Станислав писал(а):
Почему самопальное значит хуже имеющегося...
По факту. Я в принципе ничего против самопального софта не имею (сам себе не враг :P), когда он стабильный, полнофункциональный, ну в общем вы поняли...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 15 май 2012, 18:14 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
phantom-84 писал(а):
если делать прослойку на уровне ядра, а не на уровне прикладных библиотек, то реализовать fork не так уж и сложно. Он меня раздражает в принципе, а не из-за того, что его трудно реализовать.


Так в том-то и дело, что реализация такой поддержки означает "внутриядерные" извращения только из-за обеспечения совместимости с уродским API левой системы. Так что делать такое надо лишь снаружи ядра, чтобы оно оставалось чистым, без всяких дурацких конструкций.

Цитата:
Я пытался сделать поддержку линуховых дров на уровне бинарной совместимости - оказалось трудно.... С виндовыми дровами будет еще сложнее.


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

Цитата:
Лучше писать собственные дрова, опираясь на исходники дров для линуха (если они хорошо написаны). Плюс, обсуждая линуховые дрова, можно делать какие-то выводы, полезные для разработки собственных дров.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 15 май 2012, 18:23 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
SII писал(а):
Ну, технически там не копирование, а разделение общей области памяти, доступной только для чтения

Да я в курсе, как это делается в современных *nix-ах, просто беда в том, что подобный финт без поддержки со стороны ядра не сделать.

phantom-84 писал(а):
если делать прослойку на уровне ядра, а не на уровне прикладных библиотек, то реализовать fork не так уж и сложно.

Я, видимо, не очень чётко выразил свою мысль:
Yoda писал(а):
АПИ имеющихся систем может иметь такую кривизну, которую не сэмулируешь (по крайней мере, разумными средствами), а тащить это гуано в свой АПИ не хочется.

И ещё, под эмуляцией обычно подразумевается реализация какого-то чужого АПИ через библиотечный код, чтобы это работало на родном АПИ. Т.е. эмуляция, это когда родной АПИ не имеет поддержки fork, а я его пытаюсь сделать на уровне [опциональных] библиотек. А если я его сделал в ядре, то это будет уже не эмуляция, а реализация.

Объясню, почему не хочу тащить чужую кривизну в свой АПИ. Если в ядре ОС появился какой-то системный вызов, то он, можно сказать, высечен в камне. На него опирается прикладной софт, специально разработанный под эту ОС и уже так просто от него не избавиться. Эмуляция слоя POSIX, например, - да, пожалуйста, на переходный период, пока нет родной начинки. Потому что от эмуляции впоследствии можно отказаться.

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

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 15 май 2012, 18:49 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Естественно "вшивать" в ядро левый API никто не собирается. Я имел в виду реализацию в режиме ядра, возможно, с инсталляцией специальной точки входа в режим ядра для бинарной совместимости. Мне этот вариант значительно удобнее использовать, т.к. в режиме ядра я могу обращаться не только к прикладному системному сервису (user-space service), но и к драйверному системному сервису (kernel-space service), плюс сокрытие всей этой кухни от приложений видится более элегантным и надежным подходом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 16 май 2012, 06:15 
Заблокирован

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 16 май 2012, 11:38 

Зарегистрирован: 13 окт 2008, 17:38
Сообщения: 46
Откуда: Владимир
Насчет фасма согласен, имхо это просто эталонный пример того, как надо писать портируемые (в плане ОС) программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 16 май 2012, 16:14 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Станислав писал(а):
Написанные вещи под конкретную систему портировать не возможно если у систем различные АПИ

Если есть эмуляция чужого АПИ через родной, то многие приложения можно запустить на новой системе даже без их перекомпиляции и портирования как такового. Пример - тот же Wine в линуксе. Конечно это медленно, и глюки бывают, но все же многое работает исправно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 17 май 2012, 15:26 
Заблокирован

Зарегистрирован: 28 окт 2011, 12:14
Сообщения: 555
Откуда: Новосибирск
Причём портировать прще код на асме и вызывать функции у которых пораметры в регистрах. Винда привязывает функцию к имени её для вызова, сохраняет текстовое имя в исполняемый файл и при вызове функции ищет её переберая все имена функций(не самый быстрый способ, но имена получаются уникальные, т.е. у несколько модулей(длл) имена вызываемых функций не совпадут, перебор идёт со всех модулей переберая в свою очередь их также по имени). Такую систему эмулировать не просто, потому, что во первых формат файла уникальный, во вторых нужно эмулировать АПИ, в третьих всё это закрыто.

Система конечно не супер, переберать имена всех функций, это же медленно. Хотябы системные функции вызывать по номерам, номера в доках писать, как Колибри.
Приложение запрашиваемое функцию получает ссылку на неё при открытии и поиск функции по имени идёт только при загрузке приложения, из плюсов такой системы то, что запущенные модули проще находить. Мне кажется, что определять функцию в модуле можно было бы по порядковому номеру в библиотеке. Сами библиотеки можно былобы хранить в порядке загрузки и вызывать по её номеру загрузки, но тогда если ошибёшся с порядком загрузки то уже не вызвать, а по имени не важно в каком порядке загрузили и так же в самой библиотеке вызывая по имени не важно в каком порядке она там забита.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Стоит ли писать ОСЬ
СообщениеДобавлено: 17 май 2012, 18:39 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
Станислав писал(а):
Винда привязывает функцию к имени её для вызова, сохраняет текстовое имя в исполняемый файл и при вызове функции ищет её переберая все имена функций(не самый быстрый способ, но имена получаются уникальные, т.е. у несколько модулей(длл) имена вызываемых функций не совпадут, перебор идёт со всех модулей переберая в свою очередь их также по имени)..


Во-первых, имена не уникальны - несколько DLL могут использовать одинаковое имя одновременно. Просто импорты сгруппированы по библиотеке.
Во-вторых, в винде используется DLL import hinting: линкер при сборке пишет в таблицу импорта индекс нужной функции в таблице экспорта целевой DLL. При загрузке проверяется, находится ли по этому индексу нужная функция (проверяется, действителен ли индекс и нужное ли там имя). Если функция нашлась, то поиск не производится, иначе загрузчик ищет имя, как обычно. Так как функции редко перемещаются по таблице экспорта между сборками, этот механизм обычно работает и значительно ускоряет загрузку.
Еще есть DLL import binding, но он не актуален с вводом ASLR.
Импорт по индексу (ординалу) в винде так же используется, но особых преимуществ он не дает.


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

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Ствнислав, не путай обращение к API-функциям в дллках и обращение к ядру через int 2Eh/sysenter. Кстати формат дллок позволяет импортировать/экспортировать функцию по индексу экспотра и по "ординалу" (числовому идентификатору). При обращении к одноименным функциям из разных библиотек учитывается принадлежность этих функций к конкретным библиотекам - это заложено в формате таблицы импорта. Кстати у меня дрова импортируют системные функции по номерам, хотя к прикладному системному сервису можно обращаться и обычным (для приложений) способом (тоже по номерам, но через int 60h/sysenter).

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


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

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


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

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


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

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