ОС осень 2016 — различия между версиями
Krinkin.m (обсуждение | вклад) |
Krinkin.m (обсуждение | вклад) |
||
Строка 7: | Строка 7: | ||
* Если у вас появляются вопросы по материалам/содержанию курса, или по каким-то смежным темам, то вы можете задавать их по почте, после лекции или на практике. | * Если у вас появляются вопросы по материалам/содержанию курса, или по каким-то смежным темам, то вы можете задавать их по почте, после лекции или на практике. | ||
* Если у вас возникают проблемы с выполнением домашних заданий, то приходите на практику с компьютером, будем разбираться вместе. | * Если у вас возникают проблемы с выполнением домашних заданий, то приходите на практику с компьютером, будем разбираться вместе. | ||
+ | |||
+ | === Распределение по группам === | ||
+ | |||
+ | Группа Новокрещенова: | ||
+ | |||
+ | Белова Татьяна | ||
+ | Богомолов Егор | ||
+ | Веселов Иван | ||
+ | Винерский Глеб | ||
+ | Винниченко Максим | ||
+ | Горохов Никита | ||
+ | Гусев Андрей | ||
+ | Жидков Николай | ||
+ | Зуев Михаил | ||
+ | Кайсин Илья | ||
+ | Кощенко Екатерина | ||
+ | Лобанов Артём | ||
+ | |||
+ | Группа Кринкина: | ||
+ | |||
+ | Плющенко Даниил | ||
+ | Привалихин Алексей | ||
+ | Сазанович Никита | ||
+ | Свидченко Олег | ||
+ | Севастюк Дмитрий | ||
+ | Смирнов Даниил | ||
+ | Софронова Анастасия | ||
+ | Тонких Андрей | ||
+ | Федорова Анна | ||
+ | Черепанов Валерий | ||
+ | Шавкунов Михаил | ||
+ | Шевченко Илья | ||
+ | Щербин Егор | ||
=== Примеры кода === | === Примеры кода === |
Версия 10:07, 15 сентября 2016
Содержание
Общая информация
Лектор — Кринкин Михаил (krinkin.m.u@gmail.com)
Практики — Кринкин Михаил (krinkin.m.u@gmail.com), Новокрещенов Константин (k.novokreshchenov@gmail.com )
- Если у вас появляются вопросы по материалам/содержанию курса, или по каким-то смежным темам, то вы можете задавать их по почте, после лекции или на практике.
- Если у вас возникают проблемы с выполнением домашних заданий, то приходите на практику с компьютером, будем разбираться вместе.
Распределение по группам
Группа Новокрещенова:
Белова Татьяна Богомолов Егор Веселов Иван Винерский Глеб Винниченко Максим Горохов Никита Гусев Андрей Жидков Николай Зуев Михаил Кайсин Илья Кощенко Екатерина Лобанов Артём
Группа Кринкина:
Плющенко Даниил Привалихин Алексей Сазанович Никита Свидченко Олег Севастюк Дмитрий Смирнов Даниил Софронова Анастасия Тонких Андрей Федорова Анна Черепанов Валерий Шавкунов Михаил Шевченко Илья Щербин Егор
Примеры кода
- первая порция кода - к лекции/практике 13 сентября его нужно научиться собирать, запускать и отлаживать;
Слайды с лекций
- лекция 6 сентября pdf, latex исходники и картинки
- лекция 13 сентября pdf, latex исходники и картинки
Домашние задания
- домашнее задание pdf, latex исходники - последний день сдачи 4 октября
Как пользоваться 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.
Полезные материалы
- введение в ассемблер для x86
- x86-64 ABI
- Intel Manual
- спецификация Intel 8259
- спецификация Intel 8254
- введение в gdb
- довольно компактный и довольно содержательный учебник по ОС
- справка про преывания в x86, исходники latex
- справка про PIT, исходники latex
- справка про последовательный интерфейс, исходники latex