Difference between revisions of "Study"

From ReactOS Wiki
Jump to: navigation, search
(Лабораторные работы)
 
(39 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== Operating Systems ==
 
== Operating Systems ==
This is the home page of "Operating Systems" lecture course for Summer 2015, which is being developed and read by [[Aleksey Bragin]] at [http://www.bmstu.ru Baumann Moscow State Technical University] for 2nd year students of ICS-9 ([http://iu9.bmstu.ru ИУ9]) department (currently in Russian language only).
+
This is the home page of "Operating Systems" lecture course for Spring 2023, which is being developed and read by [[Aleksey Bragin]] at [http://www.bmstu.ru Baumann Moscow State Technical University] for 2nd year students of ICS-9 ([http://iu9.bmstu.ru ИУ9]) department (currently in Russian language only).
  
  
Line 9: Line 9:
  
  
'''ВНИМАНИЕ''': К 21.03.2015 вам нужно самостоятельно посмотреть видео лекции [http://www.youtube.com/watch?v=au1o82AoESE 6. Планирование процессов] и слайды к ней (ссылка ниже по тексту).
+
'''ВНИМАНИЕ''': Перед занятием вам нужно самостоятельно посмотреть видео лекции и слайды к ней (ссылки ниже по тексту). На занятиях мы более углублённо разбираем материал, а также я отвечаю на ваши вопросы.
 +
 
 +
'''ВНИМАНИЕ 2''': Самая актуальная информация по заданиям написана в методичке и [https://tg.me/opersys телеграм-канале]
  
 
=== Занятия ===
 
=== Занятия ===
  
* Лекция: Суббота 13:50 - 15:25, 330аю ГЗ МГТУ
+
* Лабораторная работа: Суббота, 15:40 - 17:15, 309ю
* Лабораторная работа: Суббота 15:40 - 17:15, 330аю ГЗ МГТУ
+
* Лекция: Суббота, 17:25 - 19:00, 424ю
  
 
=== Слайды ===
 
=== Слайды ===
Line 24: Line 26:
 
# [http://www.slideshare.net/AlekseyBragin/2015-5-45978867 Синхронизация]
 
# [http://www.slideshare.net/AlekseyBragin/2015-5-45978867 Синхронизация]
 
# [http://www.slideshare.net/AlekseyBragin/2015-6-45978896 Планирование процессов и потоков]
 
# [http://www.slideshare.net/AlekseyBragin/2015-6-45978896 Планирование процессов и потоков]
 +
# [http://www.slideshare.net/AlekseyBragin/7-46337552 Управление памятью]
 +
# [http://www.slideshare.net/AlekseyBragin/2015-8-60523897 Управление памятью 2]
  
 
=== Видео ===
 
=== Видео ===
* [http://www.youtube.com/playlist?list=PLjSDyY6BQPVe2Zhxew5rJy2S-2_9t1vvn Видеолекции 2012 года]
+
* [https://www.youtube.com/playlist?list=PLJcGJBfGQVIhIDki33reNnH0VEAmlU2Kw Видеолекции 1 - 5]
 +
* [https://www.youtube.com/playlist?list=PLjSDyY6BQPVe2Zhxew5rJy2S-2_9t1vvn Остальные видеолекции]
 +
* [http://www.intuit.ru/studies/courses/16518/1299/info Архитектура Windows. Программирование в ядре Windows. Алексей Костюшко, Parallels]
  
 
=== Лабораторные работы ===
 
=== Лабораторные работы ===
 +
 +
Минимум 4 лабораторные работы, каждая из которых состоит из двух частей, которые обязательны к выполнению, но могут быть выполнены и сданы в разное время.
 +
Сдача лабораторной работы подразумевает демонстрацию непосредственно самой работы и её результатов, исходных кодов программ и драйверов, разработанных во время выполнения и письменного отчёта (один на две части).
 +
 +
Дополнительные задание по операционной системе Minix 3 будут выданы позже.
 +
 +
'''При выполнении руководствуйтесь методическими указаниями, которые будут вам выданы.'''
 +
  
 
==== Лабораторная работа № 1 ====
 
==== Лабораторная работа № 1 ====
'''Срок сдачи: 28 февраля 2015'''
 
  
 
I. ReactOS. Среда сборки, установка и тестирование в виртуальной машине.
 
I. ReactOS. Среда сборки, установка и тестирование в виртуальной машине.
Line 59: Line 72:
 
Аналогично вышенаписанному, но с другой ОС.
 
Аналогично вышенаписанному, но с другой ОС.
  
Настроить среду сборки и тестирования NetBSD в виртуальной машине на своём компьютере. Пересобрать ядро, добавив вывод своей фамилии в debug log.
+
Настроить среду сборки и тестирования NetBSD в виртуальной машине на своём компьютере. Пересобрать ядро в этой виртуальной машине, добавив вывод своей фамилии в debug log.
 +
'''Не пытайтесь кросс-компилировать ядро NetBSD в Windows, Linux или OS X! Собирайте его в самой NetBSD, которую установили в виртуальной машине!'''
  
 
Результат:
 
Результат:
Line 67: Line 81:
 
# Внутри этой ВМ установлено новое ядро, которое выводит в debug log вашу фамилию на на каком-либо этапе инициализации ядра
 
# Внутри этой ВМ установлено новое ядро, которое выводит в debug log вашу фамилию на на каком-либо этапе инициализации ядра
 
# Краткая пошаговая инструкция с тем, как вы сделали эту работу
 
# Краткая пошаговая инструкция с тем, как вы сделали эту работу
 
  
 
==== Лабораторная работа № 2 ====
 
==== Лабораторная работа № 2 ====
'''Срок сдачи: 14 марта 2015'''
 
  
 
Разработать простой загружаемый модуль ядра (драйвер), который выводит в отладочный лог вашу фамилию.
 
Разработать простой загружаемый модуль ядра (драйвер), который выводит в отладочный лог вашу фамилию.
Line 89: Line 101:
 
''NB! Драйвер должен компилироваться в отдельный файл, а не быть частью ядра.''
 
''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
  
 
Справочные материалы:
 
Справочные материалы:
Line 96: Line 132:
  
 
==== Лабораторная работа № 3 ====
 
==== Лабораторная работа № 3 ====
'''Срок сдачи: 28 марта 2015'''
 
  
 
Разработать загружаемый модуль ядра (драйвер), который выводит в отладочный лог список процессов в системе.
 
Разработать загружаемый модуль ядра (драйвер), который выводит в отладочный лог список процессов в системе.
Line 109: Line 144:
 
То же, что написано выше, но в ОС NetBSD.
 
То же, что написано выше, но в ОС NetBSD.
  
Написать отчёт в свободной форме о проделанной работе во второй части (NetBSD) лабораторной работы и послать его по электронной почте.
+
 
 +
==== Лабораторная работа № 4 ====
 +
 
 +
Разработать загружаемый модуль ядра (драйвер), работающий с виртуальной памятью.
 +
 
 +
I. ReactOS
 +
 
 +
Используя созданный в лабораторной работе № 2 минимальный драйвер, совместимый с операционными системами Windows NT / ReactOS, реализовать следующее:
 +
# Зарезервировать 10 страниц виртуальной памяти, используя ZwAllocateVirtualMemory(NtCurrentProcess(), MEM_RESERVE, …)
 +
# Обеспечить 5 первых страниц из выделенных 10-ти физическими страницами памяти, используя ZwAllocateVirtualMemory(NtCurrentProcess(), MEM_COMMIT, …)
 +
# Вывести физические адреса и значения PTE для этих 5 страниц.
 +
# Освободить выделенную память.
 +
 
 +
Драйвер должен загружаться и выгружаться динамически с помощью утилит, идущих в комплекте поставки ОС ReactOS и Windows.
  
 
Справочные материалы:
 
Справочные материалы:
 +
# http://www.symantec.com/avcenter/reference/memory.scanning.winnt.pdf
 +
 +
 +
II. NetBSD
 +
 +
Реализовать драйвер, выполняющий те же операции в той же последовательности (резерв 10 страниц, комит 5 страниц, вывод информации о них), но использующий функции ядра NetBSD.
 +
 +
Драйвер должен загружаться и выгружаться динамически с помощью команды modload.
 +
 +
[[Category:Courseware]]

Latest revision as of 19:09, 10 February 2023

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.