Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Operating System Concepts

Концепции операционной системы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как правило, операционная система запускается с использования большого объема памяти (опять же, непосредственно из центрального процессора, поскольку библиотечные команды, такие как 'GlobalAlloc' и т.д., недоступны, поскольку они предоставляются еще не загруженной операционной системой) и начинает создавать структуры для самой операционной системы.

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

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

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

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

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

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

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

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

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

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

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

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

В наши дни...тот же принцип, но гораздо более сложное аппаратное обеспечение ;-)

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

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

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

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

Если вы хотите действительно узнать, как это работает, найдите Книги Дуга Комера "Сину", и Энди Tannenbaumновейшая книга по операционной системе Миникс.

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

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

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

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

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

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

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

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

Ты спрашиваешь сколько байтов вы могли бы поместить на диск и при этом работать как операционная система?Ответ зависит от того, чего вы ожидаете от своей операционной системы, но самый маленький полезный ОПЕРАЦИОННАЯ система, о которой я знаю, умещается в 1,7 Мегабайта.Это так Корневой Ботинок Тома диск, и это очень приятная, хотя и небольшая ОС с "спасательными" приложениями, которые помещается на одной дискете.В те времена, когда у каждой машины был дисковод для гибких дисков и не у каждой машины был дисковод для компакт-дисков, я часто им пользовался.

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

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

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

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

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

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

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

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

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

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

Запуск операционной системы - это дает представление о том, что на самом деле нужно для СОЗДАНИЯ ОС, как мы можем это сделать и как человек может самостоятельно модифицировать существующий открытый исходный код ОС.

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

Давайте посмотрим в общих чертах, что содержит операционная система (Не сложный Linux или Windows)

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

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

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

Видишь https://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top