mandrookin
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Так и разовор о нем тогда еще рано вести... | Не совсем - дело в том, что уже сейчас L4 может (и начинает) успешно использоваться в различных микроконтроллерах и специализированных устройствах. Благо, что это микроядро уже портировано под все наиболее распространённые на настоящий момент микропроцессоры. Добавлено: Немного о процессе загрузки систем на базе L4Ka::Pistachio для архитектур IA32 и AMD64 и об общих приницпах организации L4. Разработчики Pistachio не стали изобратеть велосипед и в качестве загрузчика выбрали GNU grub. Типичный пример menu.lst title = L4Ka::Pistachio/ia32 demo kernel=/boot/kickstart bootinfo=on mbi=on decode-all=on module=/boot/ia32-kernel module=/boot/sigma0 module=/demotask Как видно, первым загружается модуль kickstart. На самом деле это не ядро, а дополнительный загрузчик. Если указанные модули содержат ELF сигнатуру, то kickstart парсит их и готовит в памяти исполняемый образ модуля. Если какой-либо модуль не является исполняемым файлом, он остаётся в памяти без изменения. Затем kickstart стартует ядро. Следующий модуль - ia3-kernel. Собственно, микроядро. О нём расскажу позже. Третий модуль - sigma0. Это диспетчер памяти. Он спроектирован таким образом, что первоначально обладает всей доступной в системе памятью. Различные процессы, в том числе и ядро, запрашивают память у sigma0. Процесс запроса памяти, как вы уже поняли, происходит посредством IPC. Запрошенные страницы отображаются в адресное пространство запрашиваюшего процесса. Имеется возможность запросить определённую физическую страницу памяти или же любую свободную. Четвёртый модуль - demotask. В терминологии L4 называется roottask. Это первая пользовательская задача. Если проводить аналогию, это нечто программы init в юниксах. Этой задаче передаётся управление после старта и инициализации ядра. Конечно, вы имеете возможность добавить ещё любое колчиство модулей. Однако, автоматически они стартоваться не будут. Процедуру старта модулей, указанных после roottask, должна выполнять сама roottask. Информацию о загруженных модулях любезно предоставляет grub, поддерживающщий MBI протокол. Пожалуй, следует более внимательно рассмотреть процесс старта дополнительных модулей. Существует два пути их исполнения - в том же адресном пространстве, что и roottask и в своём собственном адресном пространстве. Первый случай наиболее простой. Однако, все модули должны быть слинкованы в непересекющихся диапазонах адресов. В этом случае исполнение модулей будет очень похоже на потоки (threads). Любая ошибка в таком модуле способна "положить" систему. Второй способ более сложный. Необходимо создать новое адрессное пространство и запустить модуль в этом адресном пространстве. Кроме того, потребуется pager. Pager - это такая задача, которая получает сигналы при обращении задачи к неотображённой странице памяти. Получив такой сигнал, pager выделяет память (например, запросив её у sigma0) и отображает её в адресное пространство задачи. Преимущества такого подхода очевидны - процесс не может обратиться к памяти, которая ему не принадлежит. Точнее, pager строго следит за тем, чтобы задача обращалась только к своей памяти. Продолжение следует. :) | Всего записей: 21 | Зарегистр. 29-04-2006 | Отправлено: 15:55 05-05-2006 | Исправлено: mandrookin, 17:37 05-05-2006 |
|