В этом годе мне навесили еще одну курсовую.
По дисциплине "Системное ПО и ОС".
Уважаемый народ, кто какие темы может предложить?
С учетом того, что первая лаба по системному ПО выглядит так:
Написать интерпретатор виртуального компьютера по заданной архитектуре.
Требования к реализации
1. Объектно-ориентированный подход.
2. Модульный подход.
Процессор – отдельный класс, разделение на интерфейс и реализацию;
Выполнение команд – вызов функтора (не использовать оператор-переключатель!)
Память – динамический массив – поле-указатель в классе
Команды – иерархия классов-функторов;
Базовый класс – абстрактный класс Command с перегруженной операцией operator()
3. Во всех вариантах реализовать:
– целую арифметику знаковую и беззнаковую;
– дробную арифметику
– переходы
– команды ввода-вывода данных
Разработать и реализовать самостоятельно необходимые команды пересылки, если требуется по архитектуре.
-----------------------------------------------------------------------------------------------------------------
4. Тестирование виртуальной машины выполняет не ее разработчик.
Для тестировщика будут отдельно поставлены требования по написанию программ для тестируемой виртуальной машины с целью проверки ее работоспособности.
5. Разработанная и протестированная виртуальная машина будет передана на доработку другому программисту с целью дополнить систему команд новыми командами:
– битовые операции
– сдвиги
– двоично-десятичная арифметика
Фактически тут три лабы.
Тестирование — для того, чтобы учились тестировать чужой код. Будем писать все это в некоторый баг-трекер...
Доработка — чтобы а) учились анализировать чужой код; б) чтобы при написании своего думали о последователях...
Еще для виртуальной машины нужно написать загрузчик программ, а для этого — продумать структуру загружаемого кода...
Потом будет написание транслятора с ассемблера — с генерацией двоичного кода и соответственно, переписывания загрузчика.
Еще будет отладчик. Сначала командный, потом доделать его в оконнный — опять не сам, а передав другому.
И еще хотелось бы тут же втолкнуть Unit-тестирование.
Только не понимаю пока, где.
В кусовой хотелось бы такой раздел завести: Unit-тесты.
Но не всякая прога для этого подходит.
Поэтому прошу кидать идеи.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
1. Реализовать различные алгоритмы кеширования — LRU/LFU/MQ/2Q/ACR/FIFO. Для некоторых алгоритмов нет описания в учебниках/книжках и нужно будет прочитать соответствующие статьи. Можно взять реальные логи запросов в какую-нибудь СУБД и предложить алгоритм, которые даёт наибольший кэш хит на данном конкретном ворклоаде.
2. Реализовать планировщик дискового ввода-вывода, который не позволяет деградировать запросам на произвольное чтение с диска на фоне последовательного чтения с диска. Задача вполне прикладная, т.к. в различных хранилищах часто возникает ситуация, когда идёт какая-то дисковая активность в фоне, при этом нужно обслуживать запросы к базе.
Здравствуйте, LaptevVV, Вы писали:
LVV>В этом годе мне навесили еще одну курсовую. LVV>По дисциплине "Системное ПО и ОС". LVV>Уважаемый народ, кто какие темы может предложить?
Виртуальная машина — это, конечно, хорошо. Но это ИМХО скорее ближе к языкам программирования, чем к ОС.
Я бы в качестве темы предлагал написание модулей ядра/драйверов. Во-первых, к теме курса должно быть ближе. Во-вторых, практические навыки как-никак. Если к тому же найдется какая-то специализированная учебная железяка, типа интерфейсной карты, программатора — то еще лучше.
Как альтернатива — модификация кода ОС. Имплементация собственных системных вызовов, thread scheduler'a (хотя, в современном линуксе это может быть сложновато), может какой-то простенькой файловой системы...
Здравствуйте, ArtK, Вы писали:
AK>2. Реализовать планировщик дискового ввода-вывода, который не позволяет деградировать запросам на произвольное чтение с диска на фоне последовательного чтения с диска. Задача вполне прикладная, т.к. в различных хранилищах часто возникает ситуация, когда идёт какая-то дисковая активность в фоне, при этом нужно обслуживать запросы к базе.
Мне вот интересно, когда такой планировщик майкрософт напишет ? А то ведь если идет фоновый процесс антивируса, или архиватор какой, или копирование файла большого — все, система умирает, тормоза дикие.
Здравствуйте, elmal, Вы писали:
E>Мне вот интересно, когда такой планировщик майкрософт напишет ? А то ведь если идет фоновый процесс антивируса, или архиватор какой, или копирование файла большого — все, система умирает, тормоза дикие.
Здравствуйте, smeeld, Вы писали:
S>Этот писал планировщики для Linux.
Мне сложно сказать насколько в линуксе с этой проблемой дела обстоят лучше или хуже. Мне интересно когда хорошо будет в винде ? Или хотя б какое железо нужно в винде чтоб такого не было. Обязательно террабайтный SSD?
Здравствуйте, elmal, Вы писали:
E>Мне вот интересно, когда такой планировщик майкрософт напишет ? А то ведь если идет фоновый процесс антивируса, или архиватор какой, или копирование файла большого — все, система умирает, тормоза дикие.
Постепенно доходят до этого. До недавнего времени планировщик в Винде масштабировался как O(n) от числа процессов.
Только в Линуксе к этому времени будет полное tickless-ядро
Здравствуйте, LaptevVV, Вы писали:
LVV>В этом годе мне навесили еще одну курсовую. LVV>По дисциплине "Системное ПО и ОС". LVV>Уважаемый народ, кто какие темы может предложить?
Написать программу которая работает с файлом, как с диском — виртуальный диск со свое файловой системой
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, smeeld, Вы писали:
S>>Этот писал планировщики для Linux. E>Мне сложно сказать насколько в линуксе с этой проблемой дела обстоят лучше или хуже. Мне интересно когда хорошо будет в винде ? Или хотя б какое железо нужно в винде чтоб такого не было. Обязательно террабайтный SSD?
Такой планировщик сильно специализированный, чтобы делать его для пользовательского десктопа, т.к. чудес не бывает, и низкая латентность произвольного чтения сказывается на скорости последовательного чтения. Не думаю, что пользователь будет в восторге, если фильм будет воспроизводиться с тормозами.
Тоже самое было с планировщиком процессов в Linux. Изначальный вариант (уже не помню название) давал большую производительность системы в целом, но был не очень отзывчивым. Для серверного ПО это самое то, но для десктопа не подходит, т.к. пользователи начинают нервничать, когда перетаскивание окна тормозит на их 2-х ядерном проце.
Здравствуйте, LaptevVV, Вы писали:
LVV>И еще хотелось бы тут же втолкнуть Unit-тестирование. LVV>Только не понимаю пока, где. LVV>В кусовой хотелось бы такой раздел завести: Unit-тесты. LVV>Но не всякая прога для этого подходит. LVV>Поэтому прошу кидать идеи.
Мне кажется, что Unit-тестирование вообще лежит вне системного программирования. Это ООП технология, которая мало применима в реалиях, когда большая часть кода это вызовы системных функций, обращение к железу + карго-культы. То же и с виртуальной машиной, ее написать можно хоть на LISP, не говоря про PHP, что совсем далеко от атмосферы отладки драйверов, когда ошибка приводит к зависанию системы (hang), BSOD или kernel panic. Когда ошибки вылавливаются внимательным всматриванием в исходный текст программы, или ее изменениями чтобы по эффектам сделать диагноз. Вы предлагаете обычное офисное программирование со всеми удобствами, что мало поможет в бою.
Я бы смотрел на такие варианты:
1. Заказать (или разработать самим) PCI-железку с некоторым процессором внутри, с которым можно общаться. Появится целое поле от написания драйверов под Lunux/Free BSD/Windows + firmware. Плюс все прелести, о которых я написал выше.
2. Какие-нить фильтры под Windows для логирования обращений к драйверам.
3. Посмотрел бы в сторону MINIX (Linux как вариант) и написания разных улучшений/изменений. Например, свой планировщик задач, и т. п.
4. Что-нить, что бы грузилось и общалось с UEFI. В далекие-далекие времена я как-то подумал о том, что если за всю жизнь ты не написал ни строчки кода в ring 0, то ты как-бы виртуальный программист. Плюс достали на форумах люди, которые говорили о том, что на Delphi нельзя написать операционную систему. Так родился этот проект, где загрузчик MBR загружает программу на Turbo Pascal. Программа на Turno Pascal, работая исключительно с прерываниями BIOS (без 21h) подготавливает к загрузке DLL, написанную на Delphi. Потом переключается в защищенный режим и передает управление по адресу экспортируемой функции EntryPoint. А уже Delphi программа, будучи запущенной без всякого Windows, вешается на IRQ таймера и клавиатуры и что-то пишет в видеопамять. Дальше захотел прикрутить менеджер памяти, чтобы заработали классы, строки и т. п., но надхнення меня покинуло. Переписать все по нынешним стандартам, чем не курсовая?
5. Просто ПО, которое использует низкоуровневые особенности той или иной OS.
Здравствуйте, ArtK, Вы писали:
AK>Такой планировщик сильно специализированный, чтобы делать его для пользовательского десктопа, т.к. чудес не бывает, и низкая латентность произвольного чтения сказывается на скорости последовательного чтения. Не думаю, что пользователь будет в восторге, если фильм будет воспроизводиться с тормозами.
А комбинированный планировщик сделать нельзя? Чтоб в случае, если было четко видно, что наблюдаются дикие тормоза из за параллельно выполняющихся операций копирования или еще чего, алгоритм менялся на более адекватный. Пусть с задержкой даже 30 секунд будет переключение, главное чтоб система не помирала. А то иногда такое случается, что проще reset нажать, даже завершать работу штатно полчаса.
AK>Такой планировщик сильно специализированный, чтобы делать его для пользовательского десктопа, т.к. чудес не бывает, и низкая латентность произвольного чтения сказывается на скорости последовательного чтения. Не думаю, что пользователь будет в восторге, если фильм будет воспроизводиться с тормозами. AK>Тоже самое было с планировщиком процессов в Linux. Изначальный вариант (уже не помню название) давал большую производительность системы в целом, но был не очень отзывчивым. Для серверного ПО это самое то, но для десктопа не подходит, т.к. пользователи начинают нервничать, когда перетаскивание окна тормозит на их 2-х ядерном проце.
Не понятен смысл поста. В Linux планировщики свой для каждую задачу:
Десктоп и вообще общий случай-выбараем CFQ.
СУБД и вообще необходимость гарантированности сброса данных на диск в определённый отрезок времени,
то есть эффект real time в дисковом IO-выбираем DEADLINE.
Если есть дисковая аппаратура, в которой планирование IO производится на уровне контроллера устройства
и взаимодействия с драйверами-выбираем самый простой, не нагружающий CPU планировщик NOOP.
Если накопители слабые и тормознутые, то, чтоб не грузить всю систему-выбираем ANTICIPATORY.
Переключение между планировщиками-от рута выполнить
Здравствуйте, LaptevVV, Вы писали:
LVV>В этом годе мне навесили еще одну курсовую. LVV>По дисциплине "Системное ПО и ОС". LVV>Уважаемый народ, кто какие темы может предложить?
Темы предложить не проблема Берем какое-нибудь существующее решение и предлагаем написать его эмулятор. Эмулятор файловой системы, виртуальной памяти, командный процессор , стек TCP/IP и т.д.
Вопрос в другом. Сколько времени по учебному плану отведено студентам на эту курсовую ? И что значит "еще одну курсовую" ? Сколько их у студентов в семестре всего ?
То о чем я писал выше, тянет на 50-100 часов серьезной работы. Они есть по плану ? Если есть — вперед и с песнями. А если по плану 20 часов, то придется ограничиться рефератом на тему "Виртуальная память, ее симптомы и последствия"
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Темы предложить не проблема Берем какое-нибудь существующее решение и предлагаем написать его эмулятор. Эмулятор файловой системы, виртуальной памяти, командный процессор , стек TCP/IP и т.д.
Интересно. Подумаю.
Помится у меня студенты из первых выпусков писали метод близнецов — еще на турбопаскале... PD>Вопрос в другом. Сколько времени по учебному плану отведено студентам на эту курсовую ? И что значит "еще одну курсовую" ? Сколько их у студентов в семестре всего ? PD>То о чем я писал выше, тянет на 50-100 часов серьезной работы. Они есть по плану ? Если есть — вперед и с песнями. А если по плану 20 часов, то придется ограничиться рефератом на тему "Виртуальная память, ее симптомы и последствия"
У студентов 1 курсовая в семестре.
Как ты знаешь, самостоятельная работа составляет примерно столько же, сколько аудиторная нагрузка — по любому нашему учебному классу.
Поэтому — вперед, и с песней!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>В этом годе мне навесили еще одну курсовую. LVV>По дисциплине "Системное ПО и ОС". LVV>Уважаемый народ, кто какие темы может предложить?
Прерывания будут реализованы? Например, вызов несуществующей команды, и т.п.
Здравствуйте, FoolS.Top, Вы писали:
LVV>>В этом годе мне навесили еще одну курсовую. LVV>>По дисциплине "Системное ПО и ОС". LVV>>Уважаемый народ, кто какие темы может предложить?
FT>Прерывания будут реализованы? Например, вызов несуществующей команды, и т.п.
В каком смысле?
Если в виртуальной машине, то это можно сделать — как развитие лабы по виртуальным машинам.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
M>4. Что-нить, что бы грузилось и общалось с UEFI.
UEFI это круто. Там много всего интересного. Я вот только не уверен, что это задача из области системного программирования. Вполне себе прикладное API. Да, есть шанс получать кирпич вместо системы (если она перестанет грузится). Да, есть проблемы с отладкой. Но в целом, UEFI не очень сложен. У меня правда был небольшой опыт, всего несколько месяцев. Возм, если начать копать...
PS: Жаль, что у меня таких лаб не было. Хотя, не уверен, что смог бы работать полный день при таких нагрузках.
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Mystic, Вы писали:
M>>4. Что-нить, что бы грузилось и общалось с UEFI. LD>UEFI это круто. Там много всего интересного. Я вот только не уверен, что это задача из области системного программирования. Вполне себе прикладное API. Да, есть шанс получать кирпич вместо системы (если она перестанет грузится). Да, есть проблемы с отладкой. Но в целом, UEFI не очень сложен. У меня правда был небольшой опыт, всего несколько месяцев. Возм, если начать копать...
LD>PS: Жаль, что у меня таких лаб не было. Хотя, не уверен, что смог бы работать полный день при таких нагрузках.
Ну... а что такое системное программирование? По-моему, его отличают такие аспекты:
1. Отсутствие комфортных средств отладки. В некоторых местах отладка вообще невозможна (взаимодействие с другим железом)
2. Работа с другим низкоуровневым API (куча значений пакуется в байты/биты)
3. Знание архитектуры
Имхо, для развития таких навыков UEFI вполне себе подходит.
M>Ну... а что такое системное программирование? По-моему, его отличают такие аспекты: M>1. Отсутствие комфортных средств отладки. В некоторых местах отладка вообще невозможна (взаимодействие с другим железом) M>2. Работа с другим низкоуровневым API (куча значений пакуется в байты/биты) M>3. Знание архитектуры
M>Имхо, для развития таких навыков UEFI вполне себе подходит.
Да, наверное соглашусь.