Подтвердить что ты не робот

Отладка операционной системы

Я просматривал некоторые общие сведения об операционных системах и задавал вопрос. Как разработчик отлаживается при разработке операционной системы, то есть отладки самой ОС? Какие инструменты доступны для отладки для разработчика ОС?

4b9b3361

Ответ 1

Отладка ядра сложна, потому что вы, вероятно, не можете полагаться на машину сбой, чтобы сообщить, что происходит. Кроме того, неверные коды, вероятно, находятся в таких страшных местах, как обработчики прерываний.

Существует четыре основных метода отладки операционной системы, о которых я знаю:

  • Проверка работоспособности вместе с выходом на экран.

    Паука ядра в Linux (известная как "Oops" es) - отличный пример этого. Лица Linux написали функцию, которая выведет то, что они могут узнать (включая трассировку стека), а затем остановит все.

    Даже предупреждения полезны. У Linux есть защита, созданная для ситуаций, когда вы случайно можете спать в обработчике прерываний. Например, функция mutex_lock проверит (в can_lele) независимо от того, находитесь ли вы в небезопасном контексте и распечатываете трассировку стека, если вы находитесь.

  • Отладчик

    Традиционно при отладке все, что делает компьютер, выводится по последовательной линии на стабильную тестовую машину. С появлением виртуальных машин вы можете подключить одну последовательную линию выполнения VM к другой программе на той же самой физической машине, что очень удобно. Естественно, однако, это требует, чтобы ваша операционная система опубликовала то, что она делает, и дождитесь соединения отладчика. KGDB (Linux) и WinDBG (Windows) являются некоторые такие отладчики в ОС. VMWare явно поддерживает эту историю.

    Совсем недавно разработчики VM выяснили, как отлаживать ядро ​​без последовательной линии или расширения ядра. VMWare внедрил это в своих последних материалах.

    Проблема с отладкой в ​​операционной системе (на мой взгляд) связана с принципом Неопределенность. Прерывания (где большинство ваших жестких ошибок обязательно) являются асинхронными, частыми и недетерминированными. Если ваша ошибка связана с перекрытием двух прерываний определенным образом, вы не будете подвергать ее отладчику; ошибка, вероятно, даже не произойдет. Тем не менее, возможно, и тогда отладчик может быть полезен.

  • Детерминированное воспроизведение

    Когда вы получаете ошибку, которая появляется только в процессе производства, вы хотите, чтобы вы записали то, что произошло, и воспроизвести ее, как камера безопасности. Благодаря профессору, которого я знал в Иллинойсе, теперь вы можете сделать это на виртуальной машине VMWare. VMWare и родственные люди описывают все лучше, чем я могу, и они предоставляют то, что выглядит как хорошая документация.

    Детерминистский повтор является совершенно новым на сцене, поэтому до сих пор я не знаю о каких-либо особенно идиоматических целях. Они говорят, что это должно быть особенно полезно для ошибок безопасности.

  • Перемещение всего в пространство пользователя.

    В конце концов, все еще более хрупкое в ядре, поэтому есть огромное преимущество в разработке для проектирования Nucleus (или Microkernel), где вы бреете компоненты режима ядра до минимума. Для всего остального вы можете использовать множество инструментов для создания пользовательского пространства там, и вы будете намного счастливее. FUSE, расширение файловой системы в пространстве пользователя, является каноническим примером этого.

    Мне нравится эта последняя идея, потому что она похожа на то, что вы написали программу для записи. Циклический, нет?

Ответ 3

В сценарии начальной загрузки (ОС с нуля) вам, вероятно, придется сначала внедрять возможности удаленного отладки (сброс памяти, ведение журнала и т.д.) в ядре ОС и использовать отдельную машину. Или вы можете использовать виртуальную машину/гипервизор.

В Windows CE имеется компонент, называемый независимым транспортным уровнем KITL - Kernel. Думаю, название говорит за его.

Ответ 4

printf logging приложить к процессу серьезные модульные тесты и т.д..

Ответ 5

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

Ответ 6

Отладка операционной системы не для слабонервных. Поскольку ядро ​​отлаживается, ваши варианты будут весьма ограниченными. Копирование количества операторов printf - это один трюк, и, кроме того, это зависит от того, какая "операционная система" отлаживается, мы могли бы говорить о

  • Filesystem
  • Водители
  • Управление памятью
  • Вход/выход Raw Disk
  • Экран ввода/вывода
  • Kernel

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

Некоторые ядра могут (не все из них) иметь простой отладочный монитор, фактически, если я правильно напомню, в книге под названием "Разработка собственной 32-битной операционной системы" Ричарда Бергересса, опубликованной Sams, он включил монитор отладки, который отображает различные состояния процессора, регистры и т.д.

Снова учтите, что для двоичных исполняемых файлов требуется определенный механизм загрузки, например эквивалент gdb, если среда для загрузки двоичных файлов не настроена, то ваши варианты довольно ограничены.

При использовании большого количества операторов printf для отображения ошибок, журналов и т.д. на отдельный терминал или в файл - лучшая линия отладки, это звучит кошмаром, но это стоит того, чтобы сделать это.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.