Контент для класса операционных систем Linux - PullRequest
34 голосов
/ 15 июня 2009

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

  1. Какие концепции / компоненты ядра Linux вы считаете наиболее важными в классе?
  2. Что бы вы хотели, чтобы было учтено в ваших исследованиях?

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

Ответы [ 9 ]

21 голосов
/ 15 июня 2009

Мой список :

  1. Что касается операционной системы: Абстракция и расширение физической машины и управление ресурсами .
  2. Как работает процесс сборки , т. Е. Как внедряется специфическая архитектура / машинный код
  3. Как системные вызовы работают и как модули могут соединяться
  4. Управление памятью / Виртуальная память / Пейджинг и все остальное
  5. Как процессы рождаются, живут и умирают в POSIX и других системах
  6. пространство пользователя против потоков ядра и в чем разница между процессом / потоками
  7. Почему монолитный дизайн ядра становится утомительным и каковы альтернативы
  8. Планирование (и некоторые альтернативные / специфичные для домена планировщики)
  9. I / O , Разработка драйверов и как они динамически загружаются
  10. ранние этапы загрузки и что делает ядро ​​для настройки среды
  11. Проблемы с часами, системами без микроконтроллера и т. Д.
  12. ... я мог бы продолжить ...
  13. Я почти забыл IPC и Unix 'eveything is a file' дизайнерские решения
  14. POSIX, почему он существует, почему он не должен

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

Дайте широкое представление о Linux, я переосмыслил

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

13 голосов
/ 15 июня 2009

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

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

5 голосов
/ 17 июня 2009

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

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

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

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

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

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

4 голосов
/ 16 июня 2009

Еще одна хорошая тема (или, возможно, упражнение для студентов) будет посвящена виртуализации. Особенно «lguest» Расти Рассела, который разработан как простое введение в то, что требуется для виртуализации операционной системы. Документы тоже хорошо читают.

4 голосов
/ 15 июня 2009

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

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

4 голосов
/ 15 июня 2009

Ну, я только что закончил курс по ОС в этом семестре, так что я подумал, что я должен войти.

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

Одна лаборатория, которая мне очень понравилась и оказалась полезной, - это написание собственных подпрограмм malloc / free. Это было сложно, но довольно увлекательно.

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

3 голосов
/ 15 июня 2009

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

Веселые задания могут быть:

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

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

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

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

...