OS 5 autumn 2016 — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
Строка 15: Строка 15:
  
 
* [[Медиа:Lec1.pdf|лекция 9 сентября pdf]], [[Медиа:Lec1.zip|latex исходники и картинки]]
 
* [[Медиа:Lec1.pdf|лекция 9 сентября pdf]], [[Медиа:Lec1.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec2.pdf|лекция 16 сентября pdf]], [[Медиа:Lec2.zip|latex исходники и картинки]]
  
 
=== Как пользоваться QEMU и gdb ===
 
=== Как пользоваться QEMU и gdb ===
Строка 79: Строка 80:
 
* [https://www.recurse.com/blog/5-learning-c-with-gdb введение в gdb]
 
* [https://www.recurse.com/blog/5-learning-c-with-gdb введение в gdb]
 
* [http://pages.cs.wisc.edu/~remzi/OSTEP/ довольно компактный и довольно содержательный учебник по ОС]
 
* [http://pages.cs.wisc.edu/~remzi/OSTEP/ довольно компактный и довольно содержательный учебник по ОС]
 +
* [[Медиа:Pic.pdf|справка про преывания в x86]], [[Медиа:Pic.zip|исходники latex]]
 +
* [[Медиа:Pit.pdf|справка про PIT]], [[Медиа:Pit.zip|исходники latex]]
 +
* [[Медиа:Serial.pdf|справка про последовательный интерфейс]], [[Медиа:Serial.zip|исходники latex]]

Версия 19:03, 14 сентября 2016

Общая информация

Лектор — Кринкин Михаил (krinkin.m.u@gmail.com)

Практики — Кринкин Михаил (krinkin.m.u@gmail.com), Новокрещенов Константин (k.novokreshchenov@gmail.com )

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

Примеры кода

  • первая порция кода - к лекции/практике 16 сентября его нужно научиться собирать, запускать и отлаживать;

Слайды с лекций

Как пользоваться QEMU и gdb

Чтобы запустить ОС (пусть файл ОС называется kernel) в QEMU нужно выполнить следующую команду:

   qemu-system-x86_64 -kernel kernel

Чтобы перенаправить вывод последовательного порта в консоль используйте опцию -serial stdio:

   qemu-system-x86_64 -kernel kernel -serial stdio

Чтобы подключать gdb к QEMU используйте опцию -s:

   qemu-system-x86_64 -kernel kernel -serial stdio -s

Чтобы подключиться gdb к QEMU запущенному с опцией -s сделайте следующее:

   gdb kernel

Из файла kernel gdb возьмет отладочную информацию. Например, какие строки кода каким процессорным командам соответсвуют, из каких файлов собрано приложение, какие имена у переменных и каким адресам в памяти они соответсвуют.

Далее внутри gdb:

   set architecture i386:x86-64
   target remote localhost:1234

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

Чтобы вы могли оставновиться в самом начале функции main и не проскачить мимо кода, который вы хотите отлаживать, соберите исходники с ключем -DEBUG:

   make clean && make -DEBUG

Этот ключик активирует бесконечный цикл:

   static volatile int wait = 1;
   while (wait);

После запуска приложение остановится в этом цикле. Чтобы продолжить выполнение нужно изменить значение переменной wait с помощью gdb следующим образом:

   set var wait=0

Вообще, в QEMU есть также ключик -S, который останавливает QEMU сразу после старта приложения, но в связи с тем, что перед вызовом main процессор переводится из 32-битного защищенного режима в 64-битный Long Mode, а у gdb такой переход вызывает шок, то этим ключиком мне воспользоваться по назначению не удалось (если вы найдете способ это сделать, то поделитесь со мной за 1 доп балл).

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


Полезные материалы