Введение

Операционная система

Nachos (Not Another Completely Heuristic Operating System – не ещё одна полностью эвристическая операционная система) – это учебное программное обеспечение, предназначенное для преподавания курсов по операционным системам на уровне бакалавриата и, возможно, магистратуры. Она была разработана в Калифорнийском университете в Беркли под руководством Томаса Андерсона и используется во многих учебных заведениях по всему миру. Изначально написанная на C++ для архитектуры MIPS, Nachos работает как пользовательский процесс в хост-операционной системе. Симулятор MIPS выполняет код любых пользовательских программ, работающих поверх операционной системы Nachos. Существуют порты кода Nachos для различных архитектур. Помимо кода Nachos, в состав системы включены различные учебные задания. Цель Nachos – познакомить студентов с концепциями проектирования и реализации операционных систем, требуя от них реализации значительных функциональных блоков внутри системы Nachos. В случае с Nachos, симулятор операционной системы означает, что можно запустить операционную систему (гостевую ОС) поверх другой операционной системы (хост-ОС), подобно Bochs/VMware. Она обеспечивает эмуляцию:
- центрального процессора (MIPS);
- жесткого диска;
- контроллера прерываний, таймера и других компонентов,
необходимых для запуска приложений пользовательского пространства Nachos. Это означает, что вы можете писать программы для Nachos, компилировать их с помощью реального компилятора (старая версия gcc, генерирующая код для MIPS) и запускать их. Ядро Nachos компилируется для платформы хост-ОС и, следовательно, работает непосредственно на процессоре хост-ОС. Версия 3.4 Nachos на протяжении многих лет была стабильной и наиболее распространенной версией. Версия 4.0 Nachos существует в бета-статусе примерно с 1996 года.

Реализация

Нахос имеет различные модули, реализующие функциональность базовой операционной системы. Функции-обертки для различных системных вызовов ядра ОС обычно реализуются аналогично системным вызовам UNIX. Различные части ОС создаются как объекты с использованием нативного кода. Например, класс Machine используется как главный класс для имитируемой машины. Он содержит различные объекты, такие как FileSystem, Processor, Timer и т.д., которые определены для моделирования различных аппаратных аспектов.

Основные компоненты

NachOS моделирует машину, приближенно имитирующую архитектуру MIPS. Машина имеет регистры, память и центральный процессор. Машина NachOS/MIPS реализована объектом Machine, экземпляр которого создается при запуске NachOS. Он содержит методы, такие как Run, ReadRegister, WriteRegister и другие. Также определяется объект прерывания для обработки прерываний. Таймер и статистика также реализованы в нем.

NachOS Потоки В NachOS определен класс потоков. Поток имеет связанное с ним состояние, которое может быть готовым, выполняющимся, заблокированным или только что созданным. Объект потока имеет различные методы, такие как PutThreadToSleep, YieldCPU, ThreadFork, ThreadStackAllocate и т.д. Каждый поток выполняется в собственном виртуальном адресном пространстве.

NachOS Пользовательские программы NachOS запускает пользовательские программы в их собственном изолированном адресном пространстве. NachOS может запускать любые двоичные файлы MIPS, при условии, что они используют только те системные вызовы, которые понимает NachOS. В Unix файлы "a.out" хранятся в формате "coff". NachOS требует, чтобы исполняемые файлы были в более простом формате "Noff". Для преобразования двоичных файлов из одного формата в другой используйте программу coff2noff.

Преемники

Поскольку Nachos уже несколько лет не находится в активной разработке и имеет ряд известных недостатков (особенно в отношении переносимости: Nachos использует ассемблерный код MIPS и требует портирования для работы на архитектуре x86), были начаты проекты-преемники. В 2004 году Стэнфордский университет разработал Pintos – систему, вдохновлённую Nachos, написанную на языке C и предназначенную для работы на реальном оборудовании x86. В 2000 году Дэн Хеттена из Калифорнийского университета в Беркли портировал Nachos на Java, создав Nachos 5.0j, с целью повышения переносимости, доступности для студентов и снижения подверженности тонким ошибкам в студенческом коде, которые в предыдущих версиях часто занимали большую часть времени, отводимого на разработку студенческих проектов. Ещё одна версия на основе Java была создана профессором Питером Друшелем в Университете Райса. Позже, в 2003 году, профессор Юджин Старк из Университета Стоуни Брук адаптировал её и использовал в курсе операционных систем. В Технологическом университете Граца (Австрия) была реализована система SWEB ("Schon wieder ein Betriebssystem"), которая используется для обучения основам операционных систем.