Ответ 1
Отладка ядра сложна, потому что вы, вероятно, не можете полагаться на машину сбой, чтобы сообщить, что происходит. Кроме того, неверные коды, вероятно, находятся в таких страшных местах, как обработчики прерываний.
Существует четыре основных метода отладки операционной системы, о которых я знаю:
-
Проверка работоспособности вместе с выходом на экран.
Паука ядра в Linux (известная как "Oops" es) - отличный пример этого. Лица Linux написали функцию, которая выведет то, что они могут узнать (включая трассировку стека), а затем остановит все.
Даже предупреждения полезны. У Linux есть защита, созданная для ситуаций, когда вы случайно можете спать в обработчике прерываний. Например, функция mutex_lock проверит (в can_lele) независимо от того, находитесь ли вы в небезопасном контексте и распечатываете трассировку стека, если вы находитесь.
-
Отладчик
Традиционно при отладке все, что делает компьютер, выводится по последовательной линии на стабильную тестовую машину. С появлением виртуальных машин вы можете подключить одну последовательную линию выполнения VM к другой программе на той же самой физической машине, что очень удобно. Естественно, однако, это требует, чтобы ваша операционная система опубликовала то, что она делает, и дождитесь соединения отладчика. KGDB (Linux) и WinDBG (Windows) являются некоторые такие отладчики в ОС. VMWare явно поддерживает эту историю.
Совсем недавно разработчики VM выяснили, как отлаживать ядро без последовательной линии или расширения ядра. VMWare внедрил это в своих последних материалах.
Проблема с отладкой в операционной системе (на мой взгляд) связана с принципом Неопределенность. Прерывания (где большинство ваших жестких ошибок обязательно) являются асинхронными, частыми и недетерминированными. Если ваша ошибка связана с перекрытием двух прерываний определенным образом, вы не будете подвергать ее отладчику; ошибка, вероятно, даже не произойдет. Тем не менее, возможно, и тогда отладчик может быть полезен.
-
Детерминированное воспроизведение
Когда вы получаете ошибку, которая появляется только в процессе производства, вы хотите, чтобы вы записали то, что произошло, и воспроизвести ее, как камера безопасности. Благодаря профессору, которого я знал в Иллинойсе, теперь вы можете сделать это на виртуальной машине VMWare. VMWare и родственные люди описывают все лучше, чем я могу, и они предоставляют то, что выглядит как хорошая документация.
Детерминистский повтор является совершенно новым на сцене, поэтому до сих пор я не знаю о каких-либо особенно идиоматических целях. Они говорят, что это должно быть особенно полезно для ошибок безопасности.
-
Перемещение всего в пространство пользователя.
В конце концов, все еще более хрупкое в ядре, поэтому есть огромное преимущество в разработке для проектирования Nucleus (или Microkernel), где вы бреете компоненты режима ядра до минимума. Для всего остального вы можете использовать множество инструментов для создания пользовательского пространства там, и вы будете намного счастливее. FUSE, расширение файловой системы в пространстве пользователя, является каноническим примером этого.
Мне нравится эта последняя идея, потому что она похожа на то, что вы написали программу для записи. Циклический, нет?