Как операционные системы "сделаны"? - PullRequest
46 голосов
/ 31 декабря 2008

Создание ОС выглядит как массивный проект. Как кто-нибудь еще может начать?

Например, когда я вставляю Ubuntu в мой привод, как мой компьютер может просто запустить it? (Я думаю, это то, что я действительно хотел бы знать.)

Или, если взглянуть на это с другой стороны, какое наименьшее количество байтов может быть на диске и все же «работать» как ОС?

(Извините, если это расплывчато. У меня просто нет понятия не имею об этом предмете, поэтому я не могу быть очень конкретным. Я притворяюсь, что знаю достаточно о работе компьютеров, но Я совершенно не разбираюсь в этом вопросе.)

Ответы [ 25 ]

36 голосов
/ 01 января 2009

Ну, ответ живет в книгах: Современные операционные системы - Эндрю С. Таненбаум очень хороший. Иллюстрация на обложке ниже.

Самое простое, но полное ядро ​​операционной системы, пригодное для изучения или просто любопытства, это Minix .
Здесь Вы можете просмотреть исходный код .

Modern Operating Systems
(источник: cs.vu.nl )

18 голосов
/ 31 декабря 2008

Операционные системы - огромная тема, лучшая вещь, которую я могу порекомендовать вам, если вы хотите действительно углубиться в то, как проектируются и создаются операционные системы, это хорошая книга:

Operating System Concepts

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

12 голосов
/ 31 декабря 2008

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

11 голосов
/ 31 декабря 2008

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

Теперь, как ОС все настраивает в системе? Ну, у оборудования тоже есть API. Они написаны для системного программиста.

Я видел много пустых ОС, и это действительно абсолютное ядро. Есть много встроенных домашних ОС, и это все, что они делают, и ничего больше.

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

9 голосов
/ 31 декабря 2008

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

По своей сути компьютер начинает выполнение по фиксированному адресу, что означает, что когда компьютер запускается, он устанавливает счетчик программы на заранее определенный адрес и просто начинает выполнять машинный код.

На большинстве компьютеров этот процесс «начальной загрузки» немедленно инициализирует известные периферийные устройства (например, дисковод). После инициализации процесс начальной загрузки будет использовать некоторую предопределенную последовательность для использования этих периферийных устройств. Используя драйвер диска снова, процесс может прочитать код из первого сектора жесткого диска, поместить его в свободное пространство в ОЗУ и затем перейти по этому адресу.

Эта предопределенная последовательность (запуск ЦП, загрузка диска) позволяет программистам начинать добавлять все больше и больше кода на ранних этапах запуска ЦП, что со временем может, в конечном итоге, запускать очень сложные программы. .

В современном мире со сложной периферией, передовой архитектурой ЦП и обширными обширными ресурсами (ГБ или ОЗУ, ТБ диска и очень быстрыми ЦП) операционная система может поддерживать довольно мощные абстракции для разработчика (несколько процессов). , виртуальная память, загружаемые драйверы и т. д.).

Но для простой системы с ограниченными ресурсами вам не нужно много всего для "ОС".

В качестве простого примера, многие небольшие контроллеры имеют очень маленькие ОС, а некоторые могут просто считаться «мониторами», предлагая чуть более простой доступ к последовательному порту (или терминалу, или ЖК-дисплею). , Конечно, в этих условиях не так уж много потребности в большой ОС.

Но также рассмотрим что-то вроде классической системы Форта. Здесь у вас есть система с «ОС», которая дает вам дисковый ввод-вывод, консольный ввод-вывод, управление памятью, а также реальный язык программирования и ассемблер, и это занимает менее 8 КБ памяти на 8-битный компьютер.

или старые времена CP / M с его BIOS и BDOS.

CP / M является хорошим примером того, как простая ОС работает как уровень абстракции, позволяющий запускать переносимые программы на огромном массиве аппаратного обеспечения, но даже тогда системе потребовалось менее 8 КБ ОЗУ для запуска и запуска. .

Очень далеко от мегабайт памяти, используемых современными ОС. Но, если честно, у нас есть МБ памяти, и наша жизнь НАМНОГО более проста (в основном) и гораздо более функциональна из-за этого.

Написание ОС - это весело, потому что интересно, чтобы ТС печатал «Hello World», перетаскивая данные по 1 байту за раз, через какой-то неясный порт ввода-вывода, или вставляя их в какой-то магический адрес памяти.

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

4 голосов
/ 31 декабря 2008

В основном ... ваш компьютер может просто запустить диск, потому что:

BIOS включает это дисковое устройство в порядок загрузки.

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

CPU выполняет эти инструкции. В вашем случае эти инструкции собираются запустить ОС Ubuntu. С таким же успехом это могут быть инструкции по остановке или добавлению 10 + 20 и т. Д.

Как правило, ОС запускается, забирая большой кусок памяти (опять же, непосредственно из ЦП, поскольку библиотечные команды, такие как «GlobalAlloc» и т. Д., Недоступны, поскольку они предоставляются еще не готовыми к использованию). загружен-ОС) и начинает создавать структуры для самой ОС.

ОС предоставляет набор «функций» для приложений: управление памятью, файловая система, ввод / вывод, планирование задач, работа в сети, управление графикой, доступ к принтерам и т. Д. Это то, что он делает, прежде чем вы «получаете контроль»: создаете / запускаете все сервисы, чтобы более поздние приложения могли работать вместе, не топать памятью друг друга и иметь хороший API для сервисов, предоставляемых ОС.

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

Например, без ОС каждое приложение должно было бы иметь дело с ситуацией, когда другая программа пытается печатать, и в любом случае «делать что-то», например, печать, или отменять другое задание и т. Д. Вместо этого только ОС имеет чтобы справиться с этим, приложения просто говорят ОС «напечатать этот материал», и ОС гарантирует, что одно приложение печатает, а всем остальным приложениям просто нужно дождаться, пока завершится первое, или пользователь отменит его.

Наименьшее количество байтов для ОС не имеет смысла, поскольку «ОС» может подразумевать множество или очень мало функций. Если все, что вам нужно, это выполнить программу с компакт-диска, это будет очень мало байтов. Однако это не ОС. Задача ОС состоит в том, чтобы предоставлять службы (я назвал их функциями), позволяющие запускать множество других программ, и управлять доступом к этим службам для программ. Это сложно, и чем больше общих ресурсов вы добавляете (сети, Wi-Fi, устройства записи компакт-дисков, джойстики, видео iSight, два монитора и т. Д. И т. Д.), Тем труднее становится это.

3 голосов
/ 31 декабря 2008

Одним из самых последних проектов операционной системы, который я видел, который получил серьезную поддержку, был проект MS Research под названием Singularity , который полностью написан на C # .NET с нуля.

Чтобы понять, сколько работы нужно, есть 2 основных разработчика, но у них есть до десятка стажеров в любой момент времени, и им все равно потребовалось два года, прежде чем они смогли даже довести ОС до точки, где она будет загружаться и отображать изображения BMP (это, как они используют, чтобы сделать свои презентации). Потребовалось гораздо больше работы, прежде чем они смогли добраться до точки, где была командная строка (примерно 4 года).

3 голосов
/ 31 декабря 2008
2 голосов
/ 31 декабря 2008

Возможно, вы захотите получить книгу Разработка и внедрение операционной системы FreeBSD для очень подробного ответа. Вы можете получить его из Amazon или эта ссылка на сайт FreeBSD.org выглядит как книга, насколько я помню: текст ссылки

2 голосов
/ 01 января 2009

Не могу поверить, что об этом не упоминалось ... но классическая книга для обзора дизайна операционной системы - Операционные системы - разработка и реализация , написанная Эндрю С. Таненбаумом, создателем MINIX. Многие примеры в книге также направлены непосредственно на MINIX.

Если вы хотите узнать немного больше, OS Dev - отличное место для начала. Особенно вики. Этот сайт полон информации, а также разработчиков, которые пишут персональные операционные системы для небольшого проекта / хобби. Это также отличный учебный ресурс, так как на OSDev есть много людей, которые работают в той же лодке, что и вы, и хотят узнать, что входит в ОС. В конце концов, вы тоже можете попробовать сами!

...