Study

From ReactOS Wiki
Revision as of 13:07, 10 February 2020 by Fireball (talk | contribs) (Лабораторные работы)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Operating Systems

This is the home page of "Operating Systems" lecture course for Spring 2020, which is being developed and read by Aleksey Bragin at Baumann Moscow State Technical University for 2nd year students of ICS-9 (ИУ9) department (currently in Russian language only).


Dear students! Please check this page often for updates about upcoming classes, whether you have lectures, labs, what you need to prepare, etc.


Dear teachers! If you wish to use these slides in your lectures (modified or unmodified), please let Aleksey know via email and please always reference the author(s) of the slides you're using.


ВНИМАНИЕ: Перед занятием вам нужно самостоятельно посмотреть видео лекции и слайды к ней (ссылки ниже по тексту). На занятиях мы более углублённо разбираем материал, а также я отвечаю на ваши вопросы.

Занятия

Лекции - в лабораторном, а лабораторные - в главном здании. Л - Логика!

  • Лекция: Суббота, 13:50 - 15:25, 228л
  • Лабораторная работа: Суббота (ГЗ)
   10:15 и 12:00 лаб. ИУ9-43Б 309ю
   15:40 лаб. ИУ9-42Б 309ю
   17:25 лаб. ИУ9-41Б 309ю


Слайды

  1. Введение
  2. Основные компоненты ОС
  3. Архитектура ОС
  4. Процессы
  5. Синхронизация
  6. Планирование процессов и потоков
  7. Управление памятью
  8. Управление памятью 2

Видео

Лабораторные работы

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

Структура отчёта

Отчёт должен содержать

  1. Титульный лист (Лабораторная работа "..." по курсу "Операционные системы", выполнил ..., преподаватель ..., дата)
  2. Содержание
  3. Постановка задачи
  4. Практчиская реализация
  5. Результаты (что конкретно вы получили)
  6. Вывод (прим.: "В ходе выполнения были изучены способы проектирования и реализации простейшего драйвера в операционных системах ReactOS и NetBSD. В операционной системе ReactOS это было проще в ..., но сопряжено с трудностями при .... В операционной системе NetBSD основной сложностью стало ..., но при этом ... заняло очень мало времени." и т.п.)

При сдаче (защите) лабораторной работе иметь при себе распечатанный отчёт, а электронную версию направить на электронную почту bmstu сбк alexbragin тчк com.

Лабораторная работа № 1

I. ReactOS. Среда сборки, установка и тестирование в виртуальной машине.

Задание:

Настроить среду сборки и тестирования ReactOS на своём компьютере.

Для этого:

  1. установить среду сборки ReactOS Build Environment (RosBE).
  2. установить систему управления версиями Subversion (TortoiseSVN)
  3. создать у себя рабочую копию (working copy) исходных кодов основной ветки разработки trunk из svn.reactos.org
  4. произвести сборку установочного ISO-образа операционной системы ReactOS
  5. установить полученный образ в виртуальной машине Virtual Box, настроив вывод отладочной информации (debug log) в файл.
  6. модифицировать ядро операционной системы (ntoskrnl) так, чтобы в отладочный лог в момент инициализации ядра выводилась фамилия студента, выполнившего лабораторную работу.
  7. заменить ядро в установленной ОС в виртуальной машине на модифицированное и загрузить снова, убедиться в наличии нужной информации в debug log.

Результат:

  1. Основная ОС – Windows, в которой установлены RosBE, TortoiseSVN, VirtualBox.
  2. Виртуальная машина (ВМ) с установленным ReactOS
  3. При загрузке этой ВМ в отладочный лог на каком-либо этапе инициализации ядра выводится ваша фамилия


II. NetBSD. Среда сборки, установка и тестирование в виртуальной машине.

Аналогично вышенаписанному, но с другой ОС.

Настроить среду сборки и тестирования NetBSD в виртуальной машине на своём компьютере. Пересобрать ядро в этой виртуальной машине, добавив вывод своей фамилии в debug log. Не пытайтесь кросс-компилировать ядро NetBSD в Windows, Linux или OS X! Собирайте его в самой NetBSD, которую установили в виртуальной машине!

Результат:

  1. Основная ОС – любая, в которой установлен VirtualBox
  2. Виртуальная машина (ВМ) с установленным NetBSD
  3. Внутри этой ВМ установлена вся необходимая среда сборки для того, чтобы пересобрать новое ядро с изменениями
  4. Внутри этой ВМ установлено новое ядро, которое выводит в debug log вашу фамилию на на каком-либо этапе инициализации ядра
  5. Краткая пошаговая инструкция с тем, как вы сделали эту работу

Лабораторная работа № 2

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

I. ReactOS.

В созданном в лабораторной работе № 1 рабочем дереве операционной системы ReactOS разработать новый модуль, реализующий простейший драйвер, совместимый с операционными системами Windows NT / ReactOS. Драйвер должен реализовать минимальный набор функций, необходимый для загрузки и выгрузки этого драйвера. В функции DriverEntry этого драйвера осуществить вывод в debug log через DPRINT1() фамилию студента, выполнившего работу.


II. NetBSD

В виртуальной машине с NetBSD, созданной в лабораторной работе № 1, создать новый загружаемый модуль ядра (loadable kernel module), реализующий простейший драйвер. Драйвер должен реализовать минимальный набор функций, необходимый для загрузки и выгрузки этого драйвера. В функции инициализации этого драйвера осуществить вывод в debug log фамилию студента, выполнившего работу.

NB! Драйвер должен компилироваться в отдельный файл, а не быть частью ядра.


Методические указания по выполнению работы:

1. Создать файл /usr/src/sys/dev/lab2.c

2. Добавить минималистичную реализацию драйвера:

#include <sys/module.h>
MODULE(MODULE_CLASS_MISC, lab2, NULL);
static int lab2_modcmd(modcmd_t cmd, void* arg) {
    printf("driver LAB2");
    return 0;
}

3. Создать файл /usr/src/sys/modules/lab2/Makefile:

.include "../Makefile.inc"
KMOD=lab2
.PATH: ${S}/dev
SRCS=lab2.c
.include <bsd.kmodule.mk>

4. Выполнить команду make

5. Выполнить команду modload ./lab2.kmod

Справочные материалы:

  1. http://www.home.unix-ag.org/bmeurer/NetBSD/howto-lkm.html
  2. Список загружаемых драйверов NetBSD можно получить командой "find /stand -type f", а затем найти исходники этого модуля

Лабораторная работа № 3

Разработать загружаемый модуль ядра (драйвер), который выводит в отладочный лог список процессов в системе.

I. ReactOS.

В созданном в лабораторной работе № 2 драйвере, совместимым с операционными системами Windows NT / ReactOS реализовать получения списка всех процессов в системе и вывод их в отладочный лог. Драйвер должен загружаться и выгружаться динамически с помощью утилит, идущих в комплекте поставки ОС ReactOS и Windows.


II. NetBSD

То же, что написано выше, но в ОС NetBSD.


Лабораторная работа № 4

Разработать загружаемый модуль ядра (драйвер), работающий с виртуальной памятью.

I. ReactOS

Используя созданный в лабораторной работе № 2 минимальный драйвер, совместимый с операционными системами Windows NT / ReactOS, реализовать следующее:

  1. Зарезервировать 10 страниц виртуальной памяти, используя ZwAllocateVirtualMemory(NtCurrentProcess(), MEM_RESERVE, …)
  2. Обеспечить 5 первых страниц из выделенных 10-ти физическими страницами памяти, используя ZwAllocateVirtualMemory(NtCurrentProcess(), MEM_COMMIT, …)
  3. Вывести физические адреса и значения PTE для этих 5 страниц.
  4. Освободить выделенную память.

Драйвер должен загружаться и выгружаться динамически с помощью утилит, идущих в комплекте поставки ОС ReactOS и Windows.

Справочные материалы:

  1. http://www.symantec.com/avcenter/reference/memory.scanning.winnt.pdf


II. NetBSD

Реализовать драйвер, выполняющий те же операции в той же последовательности (резерв 10 страниц, комит 5 страниц, вывод информации о них), но использующий функции ядра NetBSD.

Драйвер должен загружаться и выгружаться динамически с помощью команды modload.