Study

From ReactOS Wiki
Jump to: navigation, search

Operating Systems

This is the home page of "Operating Systems" lecture course for Spring 2019, 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, 501ю ГЗ
  • Лабораторная работа: Суббота, 15:40 - 17:15, 330аю

Слайды

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

Видео

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

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

Результат:

  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! Драйвер должен компилироваться в отдельный файл, а не быть частью ядра.

Написать отчёт в свободной форме о проделанной работе во второй части (NetBSD) лабораторной работы и послать его по электронной почте.

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

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.

Написать отчёт в свободной форме о проделанной работе во второй части (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.