OSDev
http://osdev.ru/

Story OS
http://osdev.ru/viewtopic.php?f=4&t=2
Страница 1 из 2

Автор:  whitequark [ 26 апр 2007, 19:11 ]
Заголовок сообщения:  Story OS

Story OS - микроядерная операционная система с объектно-ориентированным интерфейсом к сервисам. При разработке основное внимание уделяется: во-первых, удобству программирования драйверов и прикладных программ и во-вторых, стабильности системы в целом. Сайт системы http://story.osdev.ru. На сайте регулярно выкладываются новые версии системы. В ближайшее время появится документация.
Система работает на 32-разрядных процессорах Intel, начиная с 386. Для нормальной работы необходимо как минимум 10Мб памяти.
UPD: в версии 0.45 минимальный размер памяти уменьшен до 3 Мб

Скриншоты:
Изображение Изображение

Изображение Изображение

Автор:  orl [ 26 апр 2007, 21:42 ]
Заголовок сообщения:  Re: Story OS

А зачем ОС так много памяти? Основа вроде требовала совсем мало памяти.

Автор:  whitequark [ 27 апр 2007, 19:16 ]
Заголовок сообщения:  Re: Story OS

ОС грузится по адресу 0x200000, два мегабайта зарезервированы под ядро и модули (уже 4) и каждая Page Directory - еще +2Мб (нижние 512 страниц). Получаем при загрузке с 3мя модулями 10мб.
Кстати, что подразумевается под основой?

Автор:  orl [ 27 апр 2007, 23:11 ]
Заголовок сообщения:  Re: Story OS

Зарезервированы? Не стоит ли озаботится реализацией динамического выделения ресурсов заместо статического указания?

Цитата:
каждая Page Directory - еще +2Мб (нижние 512 страниц).

//Quark


Насколько я помню, на таблицы страниц для каждого нового процесса требуется ресурсов:

1 страница PageDir.
+1 страница PageTable на каждые 4 мегабайта памяти процесса (при использовании стандартных 4-килобайтных страниц)

Для таких процессов, как у _тебя_ в системе - на первых порах достаточно 8 килобайт на процесс.

Для монтирования страниц ядра не нужно заново создавать PageTable в каждом новом процессе. Достаточно вписать в PageDir создаваемого процеса записи, указывающие на уже существующие PageTable ядра. (банально копировать первые 512 записей из существующего PageDir).

При выполнении процессом запросов на выделение памяти - дополнительные PageTable создавать/добавлять динамически.

Автор:  whitequark [ 28 апр 2007, 17:59 ]
Заголовок сообщения:  Re: Story OS

Цитата:
Для монтирования страниц ядра не нужно заново создавать PageTable в каждом новом процессе. Достаточно вписать в PageDir создаваемого процеса записи, указывающие на уже существующие PageTable ядра. (банально копировать первые 512 записей из существующего PageDir).

Спасибо, исправил.
Цитата:
При выполнении процессом запросов на выделение памяти - дополнительные PageTable создавать/добавлять динамически.

Я так и делаю.
Цитата:
Зарезервированы? Не стоит ли озаботится реализацией динамического выделения ресурсов заместо статического указания?

Сделал.

Автор:  orl [ 28 апр 2007, 23:59 ]
Заголовок сообщения:  Re: Story OS

Хорошая экономия памяти получилась?

Автор:  sadko [ 02 май 2007, 14:34 ]
Заголовок сообщения:  Re: Story OS

У меня, например, для этого в системе выделяется пул физических страниц. Каждый дескриптор описывает физическую (!) страницу. Размер пула прямиком зависит от объёма ОЗУ и кратен размеру страницы. Всего существует три пула: каталогов, таблиц и самих страниц. Очень удобно, особенно при будущей реализации LRU или NFU. Но пока страничная адресация у меня не работает на полную мощь.

Автор:  orl [ 02 май 2007, 14:55 ]
Заголовок сообщения:  Re: Story OS

Хм.. Над этим надо поразмыслить.

Автор:  Игорь [ 02 май 2007, 17:26 ]
Заголовок сообщения:  Re: Story OS

Странно это все на консоль тратить 10 метров,ты видел Миракуликс Ос,так там ясно на что идет 22 метра рам а у тебя?)))

Автор:  pushkoff [ 02 май 2007, 17:57 ]
Заголовок сообщения:  Re: Story OS

у меня зоздается 2 списка свободных страниц
один для обнуленных, второй для грязных

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

для добавления страниц в список использую такие ф-ции

void slist_push(SLIST* slist, SLIST_ITEM* item)
{
__asm
{
mov esi, slist
mov ebx, item
mov eax, [esi] // top
mov edx, [esi+4] // seq
L1], eax // next = top
lea ecx, [edx+1] // new seq = seq + 1
lock cmpxchg8b qword ptr [esi]
jne L1 // Failed, retry! (edx] // top
mov edx, [esi+4] // seq
L1] // new top = top->next
lea ecx, [edx+1] // new seq = seq + 1
lock cmpxchg8b qword ptr [esi]
jne L1 // Failed, retry! (edx:eax now contain most recent seq:top)
L2:
}
}

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/