OSDev

для всех
Текущее время: 27 апр 2024, 22:40

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Мееедленный malloc
СообщениеДобавлено: 06 май 2013, 00:20 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
Снова всем привет.
В данный момент наконец реализовал системы памяти и прерываний в ОС.
Решил протестировать скорость выделения памяти, и несколько ужаснулся - скорость выделения падает в геометрической прогрессии относительно количества выделенных блоков (посмотреть, как это есть сейчас, можно запустив этот бинарник через GRUB). Видно, что данный код никуда не годится. Как его можно оптимизировать? Какие есть мысли и идеи?
Понятно, что 2 секунды для 255 аллоков - не настолько критично (не думаю, что у ядра будет больше 1000 аллоков, а приложениям память будет выделяться большими блоками и у них будут свои менеджеры памяти), однако хочется больше скорости.

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мееедленный malloc
СообщениеДобавлено: 06 май 2013, 05:54 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Есть трюк. Не надо делать перебора в куче всех диапазонов. Достаточно отгадать где выделить следующий диапазон. Просто запоминаешь месть предыдущего выделенного блока + 1 и/или последнего освобождённого диапазона.При таком подходе в 99.9% отгадаешь. У меня скорость 54 такта для выделения памяти - знаю что медленно.


Последний раз редактировалось pavia 06 май 2013, 13:05, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мееедленный malloc
СообщениеДобавлено: 06 май 2013, 11:47 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
Применил небольшую оптимизацию, скорость заметно выросла.
Теперь ещё один забавный косяк - при большом количестве аллоков внезапно выпадает GPF, конкретно на 19125 аллоке по 16 байт или на 12750 аллоке по 32 байт. Подозреваю, что память, которую хочет аллокнуть код, заезжает на какой-то участок со служебными данными. Вычислить бы, на какой...

======
Вычислил. Пытается аллокнуть страницу 0xC8000. По всем манам там пусто, но видимо не всегда (F#ck the system...)
Заблокировал эти страницы в коде - пока работает.

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мееедленный malloc
СообщениеДобавлено: 06 май 2013, 12:45 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Цитата:
0xC8000. По всем манам там пусто

Какие-то у вас неправильные маны. По всем манам она занята БИОСом.
К примеру Phoenix.
Да она может быть свободно, но тогда её надо вручную перевести в RAM скопировать VGA ROM и можете использовать.


От 0 до BaseMemSize можно пользоваться.
Биос может использует от 0 до 500h так что эту область не трогаем.
От BaseMemSize до 100000h всё занято БИОСОм
А все что выше 1МБ смотрим через карту памяти, что можем использовать, а что нет.
Более того в карте обычно указывают что диапазон 0-BaseMemSize свободен. А диапазон выше занят(или отсутсвует).

Видео БИОС чаще всего меньше 64КБ и равен 32КБ. Тогда диапазон 0C8000h-0CFFFFh можно использовать.
Правда есть ещё несколько условий. если БИОС материнки, туда ничего не накидал. обычно туда БИОС мыши или модема садятся. Некоторые DOS драйвера сажали туда драйвера мыши и модема.

В любом случае первый мегабайт лучше не трогать. Даже Майкрософт его не трогала.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мееедленный malloc
СообщениеДобавлено: 06 май 2013, 17:27 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
pavia писал(а):
Какие-то у вас неправильные маны. По всем манам она занята БИОСом.

Руководствовался этим.
pavia писал(а):
Даже Майкрософт его не трогала.

А вот это вообще не аргумент :)

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мееедленный malloc
СообщениеДобавлено: 06 май 2013, 17:40 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
DJ PhoeniX писал(а):
Руководствовался этим.


Это рисовал безграмотный идиот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мееедленный malloc
СообщениеДобавлено: 06 май 2013, 19:19 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Есть много разных данных о компьютере разного качества. Правдивые и не очень. Я предпочитаю пользоваться первоисточниками. О них ниже.


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

Основным документами для ОС разработчика является документация на IBM PC или IBM PS/2
Современные компьютеры гордо имянуются IBM совместимыми. Это по тому что в 80-тые это была очень удачная а потому популярная платформа.
Материнские платы и процессор делал Intel. BIOS выпускал сам IBM. ОС делалась совместно с Microsoft.

Так как платформа оказалось популярной её начали копировать. А по сути низшие звенья в кооперации съели верхушку. Маленький такой переворот.

Award используя документацию IBM разрабатывает свой БИОС. Создают легенду чистой комнаты, хотя я предполагаю что БИОС они всё таки реверсили, но доказать это не возможно.
В последствии Award выпускает биос под маркой(названием) Phoenix.
Если не путаю это было 2 фирмы которые объединились.

Award - очень популярный разработчик БИОСа. И занимает больше половины рынка.
Поэтому вторым источником является документация от Award и Phoenix.
Второй по популярности БИОС является AMI, его в основном используют на процессорах AMD.
AMI занимает оставшуюся половину на все прочие БИОСы приходиться менее 1 процента.
На AMI документации нет.
Можно вспомнить Таблицы Ральфа Брауна который попробовал систематизировать разные тонкости разных БИОСов полученных из разных источников. Я его не очень жалую. Но одиночному разработчику трудно поддерживать тонкости большого числа моделей. Поэтому я свое внимание сосредотачиваю только на ведущих производителях.

Microsoft создаёт свою ОС Windows. Тесно сотрудничает с Phoenix и Award. Так как ОС главнее, то последние вынуждены подчиняться указке с выше. Microsoft устанавливает ряд стандартов на BIOS. В частности Boot Bios Specification(BBS) - Спецификация загрузки биоса. Хотя на самом деле это спецификация загрузки ОС, вернее MBR и BR.
Параллельно, так как диски начинают рости, то создается EDD.

Ещё раньше при создании Win95 Microsoft создаёт идеологию Plug and Play. Возможно даже раньше чем win 95.
И выпускает ряд стандартов PnP. В частности PnP BIOS, PnP ISA, и тд.

В конце 80 тых становиться популярна идея карт расширения. И встают проблемы использования общих ресурсов памяти портов. Карты как-то надо настраивать. К примерку как сделать чтобы в компьюторе одновременно работали 2 или 3 одинаковых карты? Им всем нужны свои порты. Отсюда и появляется PnP. Он также затрагивает железо.

Поэтому третьим источником является документация от Microsoft. Документы описанные приняты большим числом разработчиков но основная тройка которая создаёт рынок это Intel, Microsoft, Phoenix, AMI.

Официальные документация IBM, доступна в сети в виде не официальных сканов.
Исключение описание IBM DOS которое доступно официально.
BBS, CDBoot, Phoenix Programming Guide, EDD - можно было скачать с сайта Phoenix абсолютно свободно. Собственно я в свое время это сделал. Более двух лет отсутствует на сайте, т.е недоступна.
BIOS PnP, ISA PnP, PCIR итд тоже полезная вещь её можно скачать с сайта Microsoft.
EDD, UEFI, USB - можно скачать с сайта Intel.
Когда стали популярны эмуляторы, то эмулировалася чипсет PIIX4 - Intel убрала документацию на этот чипсет со своего сайта. Благо я успел выкачать абсолютно легально уже выкладывал.
На чипсеты документация полезная, так как является первоисточником.
PCI BIOS - не помню уже откуда скачал но точно у кого-то из этой тройке.
Также полезно иметь документация на PCI, но она платная. Но в сети котрабанда есть.

ACPI - тоже стандарт который заключили основные участники рынка и тоже доступен в сети.
Linux досих пор толком не может его поддержать.

VBE - был создан консорциумом производителей видео карт. Как результат стандарт неудобный много всего может отсутствовать и не поддерживаться и не так тщательно проработан. Официально был доступен на сайте консорциума. А после они решили его раздавать за деньги. Официально был скачен мной с сайта консорциума. А также ряд документов. Слава богу этот стандарт далее не развивался и считается устоявшимся и с ним можно работать.

Стандарты на HHD. Доступны в сети на разных сайтах. t13.org, t10.org, intel. Стандартом это и не пахнет каждые N лет выпускается новый документ который просто описывает баги и ошибки основных производителей - именуемые фичами. Честно сказать далеко не полно описывает.


Последний раз редактировалось pavia 06 май 2013, 19:40, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Мееедленный malloc
СообщениеДобавлено: 06 май 2013, 19:37 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Помимо IBM совместимых компьютеров есть стандарт PC 97 и следующих лет применяемый в промышленных компьютерах.

А каждый разработчик ноутбука так и норовит что-то своё вставить. Один ноут планшет с двумя экранами. Другой видео вентилятор повесить на GPIO CPU(именно центральный) и драйвер только для виндоуса. Третий свой видео биос Ah=5Fh вместо AH=4hf.
Четвёртый ИБП с временем переключения 15 мс.
У пятого вместо FFFFh мусор в старшей части BAR регистра, что противоречит стандарту.
Так что приходиться сосредотачивать своё внимание на идеальном компьютере, а остальное по мере возможности и желания.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

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


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

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


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

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