Study

From ReactOS Wiki
Jump to: navigation, search

Operating Systems

This is the home page of "Operating Systems" lecture course for Spring 2023, 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.


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

ВНИМАНИЕ 2: Самая актуальная информация по заданиям написана в методичке и телеграм-канале

Занятия

  • Лабораторная работа: Суббота, 15:40 - 17:15, 309ю
  • Лекция: Суббота, 17:25 - 19:00, 424ю

Слайды

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

Видео

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

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

Дополнительные задание по операционной системе Minix 3 будут выданы позже.

При выполнении руководствуйтесь методическими указаниями, которые будут вам выданы.


Лабораторная работа № 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.