Как читать руководство

В последующих PA вам снова и снова понадобится читать полученные ранее руководства по выживанию. Поскольку некоторые студенты однобоко считают, что «смотреть руководство» значит «прочитать руководство целиком», и поэтому «за короткое время его невозможно дочитать», в конце PA1 поговорим, как смотреть руководство научно.

Научиться пользоваться оглавлением

Самый быстрый способ узнать, что есть в книге, — посмотреть оглавление, особенно когда вы первый раз открываете новую книгу. Посмотреть оглавление не значит, что вы уже знаете, о чём там конкретно говорится, но у вас появится первое впечатление о содержании, и когда упомянут какое-то понятие, вы примерно будете знать, в каких главах руководства оно встретится. Для работы с руководством это крайне важно: каждый раз, когда мы смотрим в руководство, нас занимает какой-то один вопрос, и если каждый раз нужно прочитать руководство с начала до конца, чтобы понять, где этот вопрос, эффективность будет очень низкой. На самом деле так никто и не делает — важность чтения оглавления очевидна. На бумаге всё кажется проще, чем есть, так что давайте попробуем сами!

Попробовать через оглавление найти интересующий вопрос

Предположим, сейчас вам нужно понять понятие под названием selector; по оглавлению руководства i386 определите, какие места в руководстве нужно прочитать. Даже если выбранная вами ISA — не x86, тоже попробуйте найти это понятие.

Ну как, просто, правда? Вы всё ещё не понимаете, что такое selector, но уже знаете, что нужно прочитать. Разобраться, что такое selector, — уже дело ближайшего времени.

Постепенно сужать область поиска

Иногда интересующий вас вопрос в оглавлении напрямую не найти, например «что значит бит PG в регистре CR0». Такие детали обычно появляются в тексте, а не прямо в оглавлении, поэтому соответствующее место по оглавлению сразу не локализовать. В зависимости от того, впервые ли вы сталкиваетесь с CR0, смотреть этот вопрос можно по-разному:

  • Если вы уже знаете, что CR0 — это control register, можно прямо в оглавлении найти главу, где находится "control register", а затем в тексте этих глав искать "CR0".
  • Если о CR0 вы ничего не знаете, можно воспользоваться поиском в программе просмотра, поискать "CR0" — связанное с "CR0" всё равно найдётся быстро. Но лучший способ — сначала воспользоваться поисковиком: сразу узнаете, что «CR0 — это control register», и дальше сможете смотреть руководство как в первом способе.

Однако иногда вы обнаружите, что понятие в руководстве упоминается в нескольких местах. Тогда нужно ясно понимать, какая сторона понятия вас занимает: обычно какая-то одна сторона понятия подробно излагается в руководстве только в одном месте. Нужно будет дополнительно отфильтровать эти несколько мест, но вы уже отсеяли много глав, к этому понятию не относящихся. Фильтрация тоже со стратегией: не нужно прочитывать всё содержимое всех мест, чтобы отфильтровать. Подзаголовки, первое предложение каждого абзаца, подписи к схемам и таблицам — всё это помогает быстро понять, о чём примерно эта часть. Разве это не то самое быстрое чтение, что на школьном экзамене по английскому? Верно, именно оно. Если кажется, что этой способности пока не хватает, сейчас хороший случай потренироваться.

Поиск и отбор информации — процесс trial and error, нет метода, который с первого поиска гарантирует успех, но опыт всё же есть. Когда поиск не удался, стоит попробовать искать снова с другими ключевыми словами. Как менять ключевые слова — зависит от понимания сути вопроса, иначе говоря, как спросить, чтобы попасть в точку. Разве это не та выразительность, на которой настаивает школьный курс родного языка? Верно, именно она.

На самом деле, чтобы научиться смотреть материалы, достаточно некоторых базовых навыков общения с информацией, и к содержанию материалов это не привязано: возьмите «Свод гражданского права», «инструкцию к телефону XX», «кадровые записи компании YY» — смотреть их всё равно так же. «Работа со справочными материалами» — базовая способность, не зависящая от области; в какой бы отрасли вы ни оказались, она нужна. Если не хотите, чтобы в будущей работе способность смотреть материалы повлияла на ваши перспективы, начинайте тренироваться сейчас!

Обязательные вопросы

В лабораторном отчёте нужно ответить на следующие вопросы:

  • Программа — конечный автомат Нарисуйте конечный автомат программы, которая вычисляет 1+2+...+100; конкретно см. [здесь](1.2.md#A computer is a state machine.).

  • Понять инфраструктуру Через несколько простых подсчётов ощутим роль простого отладчика. Сначала сделаем следующие предположения:

    • Предположим, чтобы выполнить PA, нужно скомпилировать NEMU 500 раз.
    • Предположим, из этих 500 компиляций 90% уходят на отладку.
    • Предположим, простой отладчик вы не реализовали и можете отлаживать гостевую программу, работающую в NEMU, только через GDB. В каждой отладке, поскольку GDB не может напрямую наблюдать гостевую программу, на то, чтобы из GDB получить и разобрать одну информацию, у вас уходит 30 секунд.
    • Предположим, чтобы устранить один баг, нужно получить и разобрать 20 информаций.

    Сколько времени за семестр вы потратите на отладку?

    Поскольку простой отладчик может напрямую наблюдать гостевую программу, предположим, что через простой отладчик на получение и разбор той же информации уходит только 10 секунд. Сколько времени на отладку за семестр простой отладчик поможет вам сэкономить?

    На самом деле эти цифры, возможно, ещё слегка оптимистичны: например, даже если отлаживать гостевую программу напрямую через GDB, эти цифры предполагают, что один баг вы устраняете за 10 минут. Если на деле в процессе отладки нужно получать и разбирать больше информации, выгода от инфраструктуры простого отладчика ещё больше.

  • RTFM Поняв научный способ смотреть руководство, попробуйте в руководстве выбранной вами ISA найти, где находятся следующие вопросы, и запишите в лабораторный отчёт диапазон, который нужно прочитать:

    • x86
      • Что значит бит CF в регистре EFLAGS?
      • Что такое байт ModR/M?
      • Каков конкретный формат инструкции mov?
    • mips32
      • Какие форматы инструкций есть у mips32?
      • Что такое регистры CP0?
      • Если делитель инструкции деления равен 0, каким будет результат?
    • riscv32
      • Какие форматы инструкций есть у riscv32?
      • Каково поведение инструкции LUI?
      • Какова структура регистра mstatus?
  • команда shell После выполнения содержимого PA1 сколько всего строк кода во всех файлах .c и .h в каталоге nemu/? Какой командой вы получили этот результат? По сравнению с каркасным кодом сколько строк кода вы написали в PA1? (Hint: сейчас в ветке pa0 как раз записано состояние до PA1; подумайте, как вернуться в «прошлое»?) Эту команду можно записать в Makefile, и по мере продвижения эксперимента вы сможете удобно считать число строк кода в проекте, например введя make count автоматически запустится команда подсчёта строк кода. Теперь посложнее: без пустых строк сколько всего строк кода во всех файлах .c и .h в каталоге nemu/?

  • RTFM Откройте файл nemu/scripters/build.mk; в переменной CFLAGS вы увидите некоторые опции компиляции gcc. Объясните, какую роль в gcc играют -Wall и -Werror? Почему используют -Wall и -Werror?

Подсказка

На этом заканчивается PA1. Напишите лабораторный отчёт (не забудьте ответить в нём на обязательные вопросы), затем поместите файл отчёта с именем studentID.pdf в каталог проекта, выполните make submit, чтобы сдать проект на указанный сайт.