Как создаются операционные системы?

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

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

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

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


person stalepretzel    schedule 31.12.2008    source источник
comment
Грр, ты удалил свой первый вопрос или случилось что-то еще. Я написал очень длинный ответ только для того, чтобы получить сообщение, что страница с этим вопросом больше не существует после отправки, и я не мог вернуться и вернуть свой старый текст :(   -  person TravisO    schedule 31.12.2008
comment
Вот почему я никогда не пишу прямо на странице браузера. Я слышал, что Opera решила эту проблему путем кэширования пользовательского ввода.   -  person Chris Noe    schedule 31.12.2008
comment
@TravisO: Вот ваш ответ: pastebin.com/m517b4eb9   -  person Christian C. Salvadó    schedule 31.12.2008
comment
Последний раз я проверял это, написав код.   -  person NotMe    schedule 01.01.2009
comment
TravisO, мы все чувствуем твою боль. ericsink.com/entries/TellYourGeekStory.html   -  person icelava    schedule 01.01.2009
comment
Голосование за закрытие слишком широкое. Аналогично: заголовок stackoverflow.com/questions/130065/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 15.08.2015


Ответы (25)


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

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

Современные операционные системы
(источник: cs.vu.nl)

person Roberto Russo    schedule 31.12.2008
comment
+1 Стоило посмотреть картинку просто ради каламбуров. Я бы с удовольствием сходил в цирк с участием зомби и обедающих философов. - person new123456; 30.07.2011
comment
Мне захотелось похлопать по нескольким вещам на этой картинке. Большое спасибо! Это сделало мой день! = D - person gideon; 03.12.2011

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

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

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

person Christian C. Salvadó    schedule 31.12.2008
comment
Думаю, я мог использовать эту книгу в колледже. Но старая версия с меньшим количеством динозавров. - person Alex Baranosky; 31.12.2008
comment
Я тоже использовал 7-е издание. Хотя мне нравились динозавры, использующие айподы и другие карманные компьютеры, я думаю, что мне больше нравится обложка этого издания :) - person Will Mc; 31.12.2008
comment
@Will: Да, действительно классные иллюстрации на всех обложках, codex.cs.yale.edu/avi/os-book/os8/covers-dir/index.html - person Christian C. Salvadó; 31.12.2008
comment
Я долго не успеваю закончить учебу. Я использовал 6-е издание, но все еще учусь в школе ... - person Adam Peck; 31.12.2008
comment
В прошлом семестре в Marist College я преподавал студентам и выпускникам курсы операционных систем по этой книге. Это отличная книга, и я ее очень рекомендую. - person Alan; 01.01.2009
comment
Ой. Я учусь на втором курсе информатики и читаю пятый выпуск из нашей библиотеки ... - person Mike B; 05.01.2009
comment
Я прошел курс обучения по этой книге в вышеупомянутом колледже, хотя и несколько лет назад, и она мне тоже понравилась. Динозавры призваны опровергнуть сложность этой темы. - person Alex; 20.07.2009
comment
@compie: Спасибо, заменили ссылки и ссылки на обложки книг. - person Christian C. Salvadó; 30.03.2010
comment
@caramba Я, наверное, удалил его в какой-то момент. Теперь это исправлено! - person Christian C. Salvadó; 16.11.2020

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

person Andrew Hare    schedule 31.12.2008
comment
Linux с нуля на самом деле - это просто способ собрать воедино различное программное обеспечение, чтобы сформировать «мета» операционную систему, он не учит вас основам работы операционных систем, таким вещам, как планирование задач, загрузка, управление памятью и т. Д. - все это информатика ... - person Bryan Rehbein; 01.01.2009
comment
Linux с нуля - это не метаоперационная система - вы уверены, что знакомы с ней? - person Andrew Hare; 01.01.2009
comment
LFS - хороший инструмент для изучения Linux. Но только линукс. Я не думаю, что вы можете изучить все тонкости операционной системы с таким высокоуровневым материалом. Высокого уровня как в далеком от железа. Знаю, проходил на виртуальной машине =). - person Marcelo MD; 30.03.2010

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

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

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

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

person Doug T.    schedule 31.12.2008

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

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

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

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

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

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

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

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

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

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

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

Писать ОС - это весело, потому что интересно заставить АППАРАТНОЕ ОБЕСПЕЧЕНИЕ печатать «Hello World», выталкивая данные по 1 байту за раз через какой-то непонятный порт ввода-вывода или вставляя их в какой-то волшебный адрес памяти.

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

person Will Hartung    schedule 31.12.2008

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

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

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

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

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

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

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

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

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

person Community    schedule 31.12.2008

http://en.wikipedia.org/wiki/Linux_startup_process, вероятно, вы ищете. http://en.wikipedia.org/wiki/Windows_NT_startup_process или это.

person mannicken    schedule 31.12.2008

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

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

person TravisO    schedule 31.12.2008
comment
.NET Micro Framework - это полноценная ОС, также разработанная MS Research. - person ctacke; 31.12.2008
comment
Сингулярность не была полностью в C # или .NET, скорее, в основном. - person Lawand; 01.01.2009
comment
COSMOS также является ОС, написанной на C #. - person mmx; 01.01.2009

По сути, есть много споров о том, что на самом деле есть ОС. Если вы все согласились с тем, что конкретно представляет собой ОС (это просто ядро? Все, что работает в режиме ядра? Является ли ОС частью оболочки? Является ли X частью ОС? Является ли веб-браузер частью ОС?), Ваш вопрос ответил! В противном случае на ваш вопрос нет конкретного ответа.

person mmx    schedule 31.12.2008

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

person tmeisenh    schedule 31.12.2008

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

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

person John T    schedule 01.01.2009

операционная система (ОС) - это уровень программного обеспечения, который управляет оборудованием. Чем проще оборудование, тем проще ОС и наоборот ;-)

на заре микрокомпьютеров вы могли бы разместить ОС в ПЗУ объемом 16 КБ и жестко подключить материнскую плату, чтобы начать выполнение инструкций машинного кода в начале адресного пространства ПЗУ. Этот процесс начальной загрузки затем загрузит код для драйверов для других устройств, таких как клавиатура, монитор, дисковод и т. Д., И через несколько секунд ваша машина будет загружена и готова к использованию.

В настоящее время ... тот же принцип, но гораздо более сложное оборудование ;-)

person Steven A. Lowe    schedule 31.12.2008
comment
Мой первый компьютер (Heathkit H8 с 2 МГц 8080) имел, я думаю, 4 КБ ПЗУ. И 16К ОЗУ. - person Darron; 31.12.2008

О, это весело. Я делал все это в тот или иной момент и прошел большую часть эволюции.

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

Этот фрагмент кода обычно загружает что-то еще, но это не обязательно: вы можете написать программу, предназначенную для работы на «голом железе». Такая программа сама по себе делает что-то полезное.

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

Если вы действительно хотите узнать, как это работает, найдите книги Дуга Комера по синю и новейшую книгу по операционной системе Энди Танненбаума на Minix.

person Charlie Martin    schedule 31.12.2008

Попробуйте Как компьютеры загружаются, Процесс загрузки ядра и другие статьи по теме из того же блога для краткого обзора того, что делает компьютер при загрузке.

Что делает компьютер, когда его запуск сильно зависит (может быть, очевиден?) От конструкции процессора и прочие «мелочи низкого уровня»; поэтому трудно предугадать, что сделает ваш компьютер при загрузке.

person cic    schedule 31.12.2008

Что ж, у вас есть кое-что, связывающее запуск микросхемы с «BIOS», а затем с ОС, что обычно является очень сложной задачей, выполняемой множеством сервисов кода.

Если вы ДЕЙСТВИТЕЛЬНО хотите узнать об этом больше, я бы порекомендовал прочитать книгу ... о микроконтроллерах, особенно ту, где вы создаете небольшую ОС на c для 8051 или тому подобное ... или изучите некоторую сборку x86 и создайте очень маленький " загрузчик ОС ».

person DFectuoso    schedule 31.12.2008

Возможно, вы захотите проверить этот вопрос.

person skiphoppy    schedule 31.12.2008

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

Если вы заинтересованы в написании собственной ОС, ответьте на мой вопрос здесь:

Как начать разработку операционной системы

person Giovanni Galbo    schedule 31.12.2008

Вы спрашиваете, сколько байтов можно было бы поместить на диск и по-прежнему работать как ОС? Ответ зависит от того, что вы ожидаете от своей ОС, но самая маленькая полезная ОС, которую я знаю, умещается в 1,7 мегабайта. Это корневой загрузочный диск Тома, и это очень хорошая, хоть и небольшая ОС с "спасательными" приложениями, которые помещается на одну дискету. В те дни, когда на каждой машине был дисковод для гибких дисков и не на каждой машине был дисковод для компакт-дисков, я часто пользовался им.

person Norman Ramsey    schedule 31.12.2008

Я считаю, что это похоже на вашу собственную жизнь. Во-первых, вы знаете очень мало - ровно столько, чтобы поладить. Это похоже на то, что предоставляет BIOS - он знает достаточно, чтобы искать диск и считывать с него информацию. Затем вы узнаете немного больше, когда пойдете в начальную школу. Это похоже на то, что загрузочный сектор считывается в память и получает управление. Затем вы идете в среднюю школу, что похоже на загрузку ядра ОС. Затем вы поступаете в колледж (водители и другие приложения). Конечно, это тот момент, когда вы подвергаетесь АВАРИИ. ОН ОН.

Суть в том, что постепенно загружаются слои все большего и большего числа возможностей. В ОС нет ничего волшебного.

person Michael Bray    schedule 01.01.2009

Прочтение здесь даст вам представление о том, что потребовалось для создания Linux https://netfiles.uiuc.edu/rhasan/linux/

person jwpfox    schedule 01.01.2009

Еще одна действительно небольшая операционная система, которая умещается на одном диске, - это QNX (когда я последний раз смотрел на нее давным-давно, вся ОС с графическим интерфейсом, веб-браузером, доступом к диску и встроенным веб-сервером умещалась на одном дисководе гибких дисков) .

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

person Sam Schutte    schedule 18.03.2009

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

person ercan    schedule 08.10.2009

По своей сути ОС предельно проста. Вот руководство для начинающих о том, для чего созданы успешные ОС: 1. Управляйте процессором с помощью планировщика, который решает, какой процесс (запущенный экземпляр программы) должен быть запланирован. 2. Управляйте памятью, чтобы решить, какие процессы используют ее для хранения инструкций (кода) и данных (переменных). 3. Управляйте интерфейсами ввода-вывода, такими как дисководы, сигналы тревоги, клавиатура, мышь. Теперь выше 3 требований вызывают необходимость в процессах общаться (а не бороться!), Взаимодействовать с внешним миром, помогать приложениям делать то, что они хотят делать. Чтобы глубже понять, КАК он это делает, прочитайте книгу «Динозавр» :)

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

person NeilBlue    schedule 02.05.2014

Во-первых, читать, читать и читать о том, что такое ОС; тогда каково использование / Типы / природа / цель / потребности / различных ОС. Некоторые ссылки следующие; новичкам понравятся эти ссылки:

Современная ОС - это дает представление об общих ОПЕРАЦИОННЫЕ СИСТЕМЫ.

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

Wiki OS - дает представление о различных ОС, используемых в разных областях, и их использовании (Объекты / особенности ОПЕРАЦИОННЫЕ СИСТЕМЫ.)

Посмотрим в общем, что содержит ОС (не изощренный Linux или Windows)

ОС нужен ЦП, а для сброса в него кода нужен bootloader. ОС должна иметь цели для выполнения, и эти цели должны быть определены в оболочке, которая называется Kernel. Внутри вы можете иметь scheduling time и ISR's (зависит от цели и ОС, которые вам нужно создать)

person np2807    schedule 15.12.2016

Разработка ОС сложна. Есть несколько сайтов, таких как osdev или lowlevel.eu (немецкий), посвященные этой теме. Есть также некоторые книги, о которых другие уже упоминали.

Я не могу не сослаться на серию видеороликов «Напишите свою собственную операционную систему» ​​на YouTube, так как это я сделал :-)

См. https://www.youtube.com/playlist?list=PLHh55M_KZq4OMlApW9.

person Algoman    schedule 13.03.2017