ОС осень 2016 — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
 
(не показано 15 промежуточных версий этого же участника)
Строка 3: Строка 3:
 
Лектор — Кринкин Михаил (<b>[mailto:krinkin.m.u@gmail.com krinkin.m.u@gmail.com]</b>)
 
Лектор — Кринкин Михаил (<b>[mailto:krinkin.m.u@gmail.com krinkin.m.u@gmail.com]</b>)
  
Практики — Кринкин Михаил (<b>[mailto:krinkin.m.u@gmail.com krinkin.m.u@gmail.com]</b>), Новокрещенов Константин (<b>[mailto:k.novokreshchenov@gmail.com k.novokreshchenov@gmail.com ]</b>)
+
Практики — Кринкин Михаил (<b>[mailto:krinkin.m.u@gmail.com krinkin.m.u@gmail.com]</b>)
  
 
* Если у вас появляются вопросы по материалам/содержанию курса, или по каким-то смежным темам, то вы можете задавать их по почте, после лекции или на практике.
 
* Если у вас появляются вопросы по материалам/содержанию курса, или по каким-то смежным темам, то вы можете задавать их по почте, после лекции или на практике.
 
* Если у вас возникают проблемы с выполнением домашних заданий, то приходите на практику с компьютером, будем разбираться вместе.
 
* Если у вас возникают проблемы с выполнением домашних заданий, то приходите на практику с компьютером, будем разбираться вместе.
* [https://docs.google.com/spreadsheets/d/143kzsLQqk9vNPMoAVrssFn7ndYKHn5KrjZBq6JXlevE/edit?usp=sharing Текущие результаты]
+
* [https://docs.google.com/spreadsheets/d/1EfpjiE04xEuLyErC-m2zlWpderVzYa9k1CKXD1mMVvQ/edit?usp=sharing Текущие результаты]
 
+
=== Распределение по группам ===
+
 
+
Группа Новокрещенова:
+
 
+
    Белова Татьяна
+
    Богомолов Егор
+
    Веселов Иван
+
    Винерский Глеб
+
    Винниченко Максим
+
    Горохов Никита
+
    Гусев Андрей
+
    Жидков Николай
+
    Зуев Михаил
+
    Кайсин Илья
+
    Кощенко Екатерина
+
    Лобанов Артём
+
 
+
Группа Кринкина:
+
 
+
    Плющенко Даниил
+
    Привалихин Алексей
+
    Сазанович Никита
+
    Свидченко Олег
+
    Севастюк Дмитрий
+
    Смирнов Даниил
+
    Софронова Анастасия
+
    Тонких Андрей
+
    Федорова Анна
+
    Черепанов Валерий
+
    Шавкунов Михаил
+
    Шевченко Илья
+
    Щербин Егор
+
  
 
=== Примеры кода ===
 
=== Примеры кода ===
Строка 53: Строка 20:
 
* лекция 27 сентября была отменена
 
* лекция 27 сентября была отменена
 
* [[Медиа:Lec4.pdf|лекция 4 октября pdf]], [[Медиа:Lec4.zip|latex исходники и картинки]]
 
* [[Медиа:Lec4.pdf|лекция 4 октября pdf]], [[Медиа:Lec4.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec5.pdf|лекция 11 октября pdf]], [[Медиа:Lec5.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec6.pdf|лекция 18 октября pdf]], [[Медиа:Lec6.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec7.pdf|лекция 25 октября pdf]], [[Медиа:Lec7.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec8.pdf|лекция 8 ноября pdf]], [[Медиа:Lec8.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec9.pdf|лекция 15 ноября pdf]], [[Медиа:Lec9.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec10.pdf|лекция 22 ноября pdf]], [[Медиа:Lec10.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec11.pdf|лекция 29 ноября pdf]], [[Медиа:Lec11.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec12.pdf|лекция 6 декабря pdf]], [[Медиа:Lec12.zip|latex исходники и картинки]]
 +
* [[Медиа:Lec13.pdf|лекция 13 декабря pdf]], [[Медиа:Lec13.zip|latex исходники и картинки]]
  
 
=== Домашние задания ===
 
=== Домашние задания ===
  
 
* [[Медиа:OShw1.pdf|домашнее задание pdf]], [[Медиа:OShw1.zip|latex исходники]] - последний день сдачи 4 октября, [[Медиа:OShw1s.zip|решение]]
 
* [[Медиа:OShw1.pdf|домашнее задание pdf]], [[Медиа:OShw1.zip|latex исходники]] - последний день сдачи 4 октября, [[Медиа:OShw1s.zip|решение]]
* [[Медиа:OShw2.pdf|домашнее задание pdf]], [[Медиа:OShw2.zip|latex исходники]] - последний день сдачи 25 октября
+
* [[Медиа:OShw2.pdf|домашнее задание pdf]], [[Медиа:OShw2.zip|latex исходники]] - последний день сдачи 25 октября (<b>продлено: последний день сдачи
 +
1 ноября</b>) (<b>ВНИМАНИЕ: в файле bootstrap.S была найдена ошибка, если вы столкнулись с page fault-ами замените файл bootstrap.S на файл по ссылке
 +
[[Медиа:bootstrap.S.zip|bootstrap.S]]</b>) [[Медиа:OShw2s.zip|решение]]
 +
* [[Медиа:OShw3.pdf|домашнее задание pdf]], [[Медиа:OShw3.zip|latex исходники]] - последний день сдачи 29 ноября [[Медиа:OShw3s.zip|решение]]
 +
* [[Медиа:OShw4.pdf|домашнее задание pdf]], [[Медиа:OShw4.zip|latex исходники]] - до конца семестра ([[Медиа:make_initramfs.zip|make_initramfs.sh]])
  
 
=== Как пользоваться QEMU и gdb ===
 
=== Как пользоваться QEMU и gdb ===

Текущая версия на 14:36, 13 декабря 2016

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

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

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

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

Примеры кода

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

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

Домашние задания

1 ноября) (ВНИМАНИЕ: в файле bootstrap.S была найдена ошибка, если вы столкнулись с page fault-ами замените файл bootstrap.S на файл по ссылке bootstrap.S) решение

Как пользоваться 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=1:

   make clean && make DEBUG=1

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

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

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

   set var wait=0

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

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


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