Основные недостатки микроядра:
1) Затрата времени на дополнительное переключение между задачами.
2) Трудности с синхронизацией.
Есть несколько предложений насчёт того, как от них избавиться:
1) а) Есть простые способы, позволяющие переключать задачи за десятки тактов вместо сотен и тысяч.
б) Можно использовать схему не "посылка сообщения клиентом -> ответ сервера", а схему с накоплением заданий. То есть, если процесс хочет получить страницу из определённого файла, то он добавляет запрос в список заданий демона файловой системы. Демон файловой системы удовлетворяет эти запросы по мере срабатывания дисковода. Чтобы не допустить зависаний, можно ограничить размер списка заданий каким-нибудь разумным пределом.
2) Все беды микроядра от того, что его пихают туда, куда не надо. Если что-то удобнее делать в "монолитном" ядре, то это надо делать там. Например, низкоуровневые части драйверов устройств.