Подтвердить что ты не робот

Содержание для класса операционных систем Linux

Я буду TA для класса операционных систем в следующем семестре. Лаборатории будут работать конкретно с ядром Linux.

  • Какие понятия/компоненты ядра Linux, по вашему мнению, наиболее важны для покрытия в классе?
  • Что бы вы хотели, в ваших исследованиях было упущено?

Любые предложения относительно ядра Linux или общих систем операционных систем будут высоко оценены.

4b9b3361

Ответ 1

Мой список:

  • Что касается операционной системы: Абстракция и расширение физической машины и управление ресурсами.
  • Как работает процесс сборки, т.е. как внедряется материал, специфичный для архитектуры/машинного кода.
  • Как работают системные вызовы и как модули могут связываться
  • Управление памятью/виртуальная память/пейджинг и все остальные
  • Как процессы рождаются, живут и умирают в POSIX и других системах.
  • userpace vs kernel threads и какая разница между процессом/потоками
  • Почему дизайн монолитного ядра становится утомительным и каковы альтернативы
  • Планирование (и некоторые из планировщиков, относящихся к альтернативным/доменным данным)
  • I/O, Разработка драйверов и их динамическая загрузка
  • ранние стадии загрузки и то, что ядро ​​делает для настройки среды
  • Проблемы с часами, безмятежными системами и т.д.
  • ... Я мог бы продолжить...
  • Я почти забыл IPC и Unix 'eveything - это проектные решения файла
  • POSIX, почему он существует, почему он не должен

В конце концов, просто запустите их, чтобы пройти через современные операционные системы tanenbaum, а также провести тематические исследования на некоторых других ядрах, таких как настройка микроядра Mach/Hurd и, возможно, некоторые распространенные и exokernel вещи.

Дайте широкий обзор и перед Linux, я заново

Для тех, кто супер geeky, истории операционных систем и почему они такие, как они.

Ответ 2

Уровень виртуальной файловой системы является абсолютным обязательным для любого класса операционной системы Linux.

Я учился в колледже аналогичным классом. Самый неприятный, но в то же время полезный проект заключался в создании небольшой файловой системы для операционной системы Linux. Чтобы это работало, требуется ~ 2-3 недели для группы из 4 человек и действительно учит вас входы и выходы ядра.

Ответ 3

Недавно я взял класс операционных систем, и я нашел проекты сложными, но существенными для понимания концепций в классе. Проекты были также забавными, поскольку они задействовали нас , фактически работающих с исходным кодом Linux (версия 2.6.12 или около того).

Вот список довольно хороших проектов/концепций, которые, как мне кажется, должны быть рассмотрены в любом классе операционных систем:

  • Разница между пользовательским пространством и пространством ядра
  • Управление процессами (т.е. fork(), exec() и т.д.)
  • Напишите небольшую оболочку, которая демонстрирует знание fork() и exec()
  • Как работают системные вызовы, то есть как мы переключаемся с режима пользователя в режим ядра.
  • Добавьте простой системный вызов к ядру Linux, напишите тестовое приложение, которое вызывает системный вызов, чтобы продемонстрировать, что он работает.
  • Синхронизация в ядре и из него
  • Внедрить примитивы синхронизации в пользовательском пространстве
  • Понять, как примитивы синхронизации работают в пространстве ядра
  • Понять, как примитивы синхронизации отличаются между однопроцессорными архитектурами и SMP
  • Добавьте простой системный вызов к ядру Linux, который демонстрирует знания о том, как использовать примитивы синхронизации в ядре Linux (то есть что-то, что нужно приобрести, например, блокировку списка задач и т.д., но также сделать что-то там, где вам нужно kmalloc, который нельзя сделать, удерживая блокировку (если вы не GFP_ATOMIC, но вы не должны этого делать))
  • Алгоритмы планирования и способы планирования в ядре Linux
  • Измените планировщик задач Linux, добавив собственную политику расписания.
  • Что такое пейджинг? Как это работает? Почему у нас есть пейджинг? Как это работает в ядре Linux?
  • Добавить системный вызов в ядро ​​Linux, которое, учитывая адрес, сообщит вам, присутствует ли этот адрес или если он был заменен (или другое назначение, связанное с поисковым вызовом).
  • Файловые системы - что это такое? Почему они существуют? Как они работают в ядре Linux?
  • Алгоритмы планирования диска - зачем они существуют? Кто они такие?
  • Добавить VFS в ядро ​​Linux

Ответ 4

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

Я был расстроен тем, что мы фактически не играли с самой ОС, а просто программировали систему. Я бы рекомендовал, чтобы лаборатории были на том, что находится в самой ОС, что и похоже на то, что вы хотите сделать.

Одна лаборатория, которую я действительно наслаждался и считала полезной, но писала наши собственные malloc/бесплатные процедуры. Это было сложно, но довольно интересно.

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

Ответ 5

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

Если бы я снова был в университете, я бы, конечно, был бы более ценен уроки о примитивах синхронизации, concurrency и т.д.... это трудные вопросы, которые труднее подойти без правильного руководства. Я помню, что я пришел к выступление Пола "Расти" Рассела о спинлоках и других примитивах синхронизации, которые были абсолютно рад, возможно, вы могли бы найти его на YouTube и одолжить некоторые идеи.

Ответ 6

Еще одна хорошая тема (или, возможно, упражнение для студентов) - это смотреть на виртуализацию. Особенно Rusty Russel "lguest", который разработан как простое введение в то, что требуется для виртуализации операционной системы. Документы также хорошо читаются.

Ответ 7

На самом деле я просто взял класс, который идеально подходит для вашего описания (OS Design using linux) в spring. Меня это очень расстроило, потому что я чувствовал, что учитель слишком узко ориентируется на проекты, а не дает более широкое понимание. Например, наш последний проект вращался вокруг futexes. Мой партнер и я едва узнали, что они были, заставили его работать (kinda), а затем включили его. Я ушел без каких-либо общих знаний о чем-либо из этого проекта. Я хотел бы, чтобы один из проектов заключался в том, чтобы написать простой драйвер устройства или что-то в этом роде.

Другими словами, я считаю, что хорошо убедиться, что представлен хороший широкий обзор с такой же детальностью, как вы можете себе позволить, но в конечном счете широким. Я чувствовал, что мой учитель поддразнивал эти крошечные области и заставлял нас интенсивно фокусироваться на них, в то время как в конце концов я не ушел с таким большим пониманием внутренней работы Linux.

Еще одна вещь, которую я хотел бы отметить, - это то, почему я не сохранил знания в классе, - это отсутствие организации. Темы вышли из ниоткуда на какой-то неделе, и не было дорожной карты. Дайте материалу логический поток. Ментальная организация является ключом к сохранению знаний.

Ответ 8

Сетевая подсистема также весьма интересна. Вы можете следить за пакетом, как он идет от вызова системы сокета к проводу, и наоборот.

Увлекательные назначения могут быть:

  • создать полный брандмауэр с использованием netfilter
  • создать балансировщик нагрузки HTTP
  • разработать и реализовать простой протокол туннелирования

Ответ 9

Входы/выходы с отображением памяти и 1g/3g vs 2g/2g разделены между адресным пространством ядра и адресным пространством пользователя в 32-разрядных операционных системах.

Ограничения 32-битной архитектуры на размер жесткого диска и что это означает для проектирования файловых систем.

На самом деле все плюсы и минусы идут на 64 бит, что это значит и почему, а также история и почему их еще нет.