Что нужно знать, чтобы написать операционную систему
Создание операционной системы — одна из сложнейших задач в программировании, поскольку требует обширных и комплексных знаний о работе компьютера. Каких именно? Разбираемся ниже.
Что такое ОС
Операционная система (ОС) — это программное обеспечение, которое работает с компьютерным железом и его ресурсами и является мостом между аппаратной и программной частью компьютера.
Компьютеры первого поколения не имели операционных систем. Программы на первых ЭВМ включали в себя код для непосредственной работы системы, связи с периферийными устройствами и вычислений, для выполнения которых эта программа и писалась. Из-за такого расклада даже простые по логике работы программы были сложны в программной реализации.
По мере того как компьютеры становились более разнообразными и сложными, писать программы, которые работали и как ОС, и как приложение, стало попросту неудобно. Поэтому, чтобы программы было легче писать, владельцы компьютеров начали разрабатывать программное обеспечение. Так и появились операционные системы.
ОС предоставляет всё необходимое для работы пользовательских программ. Их появление означало, что теперь программам не нужно контролировать весь объём работ компьютера (это отличный пример инкапсуляции). Теперь программам нужно было работать именно с операционной системой, а система уже сама заботилась о ресурсах и работе с периферией (клавиатура, принтер).
Кратко об истории операционных систем
Первая операционная система была создана в 1956 году компанией General Motors для единственного компьютера IBM. Остальные владельцы этих компьютеров последовали примеру и начали создавать собственные ОС.
Как можно догадаться, первые ОС сильно отличались друг от друга. Почти на каждом компьютере стояла своя система. Хоть они и облегчали написание программ, использовать такие программы можно было только на одном компьютере.
В 1960-х годах IBM стала первой выпускающей компьютеры компанией, которая взяла на себя процесс написания ОС под свои же компьютеры. Компания начала распространять компьютеры вместе со своей операционной системой.
В эти же годы компании Control Data Corporation, Computer Sciences Corporation, Burroughs Corporation, GE, Digital Equipment Corporation и Xerox тоже начали реализовывать свои ОС.
В конце 60-х была разработана первая версия ОС Unix. Написанная на Си, свободно доступная первые годы, Unix привлекала всё больше внимания и аудитории. Она легко портировалась на новые системы и начала набирать обороты.
Многие современные ОС, включая Apple OS X и все разновидности Linux-систем, являются дальними потомками Unix.
Microsoft Windows, в свою очередь, была написана для ряда персональных компьютеров IBM.
Первая ОС от Microsoft называлась не Windows, а MS-DOS. Эта система была создана в 1981 году, когда систему 86-DOS купили у компании Seattle Computer Products и модифицировали её под требования IBM.
Всем привычное название Windows появилось в 1985, когда MS-DOS обзавелась графическим интерфейсом.
Apple OS X, Microsoft Windows и ряд Linux-систем (включая Android) сейчас контролируют большую часть рынка операционных систем.
Составляющие операционной системы
ОС состоит из двух основных частей:
- ядро системы;
- системные программы.
Ядро (англ. kernel)
Сердце операционной системы. Именно оно запускается первым при включении компьютера (не считая BIOS и загрузчик). Ядро контролирует ресурсы компьютера и обрабатывает запросы от системных программ.
Системные программы
Работают поверх ядра. Такие программы нужны, в целом, не для пользователя, а для связи ядра с пользовательскими приложениями и периферией. Примеры системных программ: драйвера устройств, файловая система, сетевые программы, утилиты для дефрагментации диска.
Пользовательские программы
Не являются частью операционной системы. Именно эти программы уже имеют конкретное назначение. Текстовые редакторы, браузеры, медиа-плееры — всё это пользовательские программы. Они контролируются ядром и используют системные программы для доступа к периферии.
Что необходимо знать
Список вещей, которые необходимо знать для создания собственной ОС, очень длинный. Но в нём есть три основных пункта, на которые нужно обратить внимание в первую очередь:
- базовое понимание компьютерной науки (информатики);
- теория и опыт в программировании;
- знание высоко- и низкоуровневых языков программирования.
Изучение информатики
Разработка ОС — это не тоже самое, что, скажем, веб-разработка. Тут нельзя будет просто и быстро разобраться в базовых вещах. Для начала нужно получить крепкий базис информатики и только потом переходить к другим темам.
Coursera: Computer Science 101 — это курс, который подойдёт для тех, кто только начал осваиваться в информатике и программировании. Если у вас уже имеются элементарные знания в в этой области, то пропустите этот курс и переходите к следующему.
Udacity: Intro to Computer Science использует веб-разработку в качестве подхода к обучению компьютерной науке. Хоть курс и не направлен на непосредственную разработку ОС, он даёт мощный базис в области программирования.
edX: Introduction to Computer Science — этот курс является самым исчерпывающим и углублённым в этом списке. Несмотря на это, он полностью бесплатен. Курс был разработан в Гарвардском Университете. В нём вас научат алгоритмам, структурам данных, управлению ресурсами, разработке ПО, а так же познакомят с такими языками программирования, как C, PHP и JavaScript.
Подборка книг для самостоятельного изучения Computer Science.
Изучение программирования
С крепкими знаниями в области информатики и хотя бы базовым пониманием программирования вам нужно набраться опыта в разработке проектов.
Udacity: Software Development Process — отличный курс для тех, кто ещё не принимал участие в крупных проектах. Тут вас ознакомят с подробностями рабочего процесса и работой с инструментарием (например Git), а также расскажут о настройке интегрированной среды разработки.
Изучение языков программирования
Для разработки операционной системы вам понадобится освоить минимум два языка программирования:
- низкоуровневый язык ассемблера;
- высокоуровневый язык программирования.
Первый используется для работы напрямую с процессором. Процессор «понимает» только машинный код, и для каждого типа процессора есть только один соответствующий язык. Одной из самых популярных архитектур процессора является x86. Она была разработана компанией Intel и на текущий момент широко используется многими производителями компьютерного железа, включая AMD. По этой причине в этой статье акцент будет именно на архитектуру x86.
Высокоуровневые языки программирования, в свою очередь, работают сразу на нескольких архитектурах. Самый популярный из таких языков — Cи. Чаще всего именно на нём и пишутся операционные системы. Но это не означает, что этот язык единственный. Для написания ОС можно использовать и более высокоуровневые языки, например C++ или Python.
Прим. перев. Есть пример написания «игрушечных» операционных систем на C#. Cosmos — некий конструктор ОС. В этой статье на практическом примере показывают написание системы всего в нескольких десятках строк.
Язык ассемблера для x86
«x86 Assembly Guide» — неплохо подойдёт для начального изучения ассемблера. Несмотря на то, что эта статья коротка для полного курса, в ней содержится всё необходимое для дальнейшего углубления.
Книга «Programming from the Ground Up» Джонатана Бартлетта является одной из основных по изучению ассемблера. В ней основами языка программирования подкрепляются базисы информатики.
Для изучения ассемблера есть ещё одна показательная книга — «The Art of Assembly Language», написанная Рэнди Гайдом. Изначально книга писалась специально для курсов, которые вёл автор в Калифорнийском университете Cal Poly и UC Riverside. В середине 90-х годов книга была признана определяющей в этой сфере.
Если вдруг вышеописанные материалы вам не подошли, вот ещё пара отличных книг:
Язык Cи
Как уже упоминалось выше, для написания ОС есть несколько высокоуровневых языков программирования. Однако самый популярный из них — Си.
Начать изучать этот язык можно отсюда. Этот ресурс ознакомит вас с базовыми понятиями и подготовит к более сложным задачам.
«Learn C the Hard Way» — название ещё одной книги. Кроме привычной теории в ней собрано много практических решений. Этот учебник расскажет обо всех аспектах языка.
Либо же можете выбрать одну из этих книг:
Разработка ОС
После освоения всего необходимого, что касается информатики, языка ассемблера и Cи, вам стоит прочесть хотя бы одну или две книги про непосредственную разработку ОС. Вот несколько ресурсов для этого:
«Linux From Scratch». Здесь рассматривается процесс сборки операционной системы Linux (учебник переведён на много языков, в том числе и на русский). Тут, как и в остальных учебниках, вам предоставят все необходимые базовые знания. Полагаясь на них можно попробовать себя в создании ОС. Чтобы сделать программную часть ОС более профессиональной, присутствуют дополнения к учебнику: «Beyond Linux from Scratch», «Automated Linux from Scratch», «Cross Linux from Scratch» или «Hardened Linux from Scratch».
«The little book about OS development» Эрика Хэйлина и Адама Ренберга. Этот учебник разработан в рамках продвинутого курса информатики и на момент его написания авторы являлись студентами Королевского Института Технологий в Стокгольме. В этой книге рассматривается разработка ОС для архитектуры x86 (причём с самого начала — с установки среды разработки). В этом курсе рассказывается о многих интересных темах, включая многозадачность, управление памятью и разработку файловой системы.
«Operation System Development Series» Broken Thorn Entertainment — серия из 25 уроков, посвящённых разработке ОС с нуля.
Примечание Эти уроки рассчитаны на то, что вы уже знакомы с IDE и владеете как языком ассемблера, так и Cи.
Вот ещё три книги, которые помогут вам ознакомиться с дисциплиной разработки ОС:
Сообщества, посвященные разработке ОС
Заниматься разработкой ОС в одиночку смело, но сложно. Гораздо проще найти единомышленников, которые, как и вы, решили попытать удачу в этом нелёгком деле. Существует пара подходящих мест:
- OSDev.org — это Вики с исчерпывающей информацией о разработке ОС и отличным форумом, где вы можете попросить о помощи или же наоборот сами кого-нибудь выручить.
- OS Development Channel на Реддите. Канал, также посвящённый разработке ОС.
- Computer Science, Programmers, StackOverflow от StackExchange — площадки, где вы можете задавать различные технические вопросы.
Заключение
Обучение разработке ОС — достаточно сложная задача. Однако в процессе вы разберётесь в работе процессора и аппаратного уровня, что поможет лучше понимать работу и оптимизацию высокоуровневых приложений и их взаимодействие друг с другом. Ну и в глазах коллег вы наверняка будете выглядеть очень крутым (но это не точно).
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
Создаем свой дистрибутив Windows 7.
На сегодняшний день Windows 7 является основной корпоративной системой, де-факто, приняв эстафету от Windows XP. Поэтому для системного администратора актуальным является вопрос ее развертывания, но так как последний официальный образ был собран довольно давно, то установленные с его помощью системы требуют получения довольно большого количества обновлений. Избежать этого можно, если собрать для себя собственный дистрибутив содержащий все текущие обновления системы. Как это сделать мы расскажем в этой статье.
Существует два способа получения актуального дистрибутива Windows 7: интеграция обновлений непосредственно в образ и использование эталонной системы для скачивания и установки обновлений.
Первый способ проще и быстрее, однако имеет серьезный недостаток — требуется скачать все необходимые обновления. А это, даже имея список, сделать довольно непросто. В тоже время в сети имеются уже скачанные наборы обновлений, но мы не рекомендуем их использовать, так как установка компонентов системы из непроверенных источников — это очень плохая идея. Как минимум вы можете получить нестабильно работающую систему из-за непротестированного или несовместимого набора обновлений, а в худшем случае запросто можно получить нежелательное или вредоносное ПО.
Использование эталонной системы позволяет получить все необходимые обновления в автоматическом режиме, установить их, проверить работу системы и только потом переходить к созданию дистрибутива. Поэтому мы будем рассматривать именно этот способ.
Создание эталонной системы
Для этих целей мы рекомендуем использовать виртуальную машину, в которой создадим гостевую систему для Windows 7 и установим ту версию ОС, для которой будем создавать дистрибутив. Если требуется создать дистрибутивы для нескольких версий или разрядностей, то потребуется также несколько эталонных систем.
По завершении установки не спешите, когда отобразится экран приветствия нажмите CTRL + SHIFT + F3
Это перезагрузит систему в режим аудита, если же вы успели создать пользователя и произвести вход, то выполните от имени Администратора команду:
При загрузке в режиме аудита автоматически запускается утилита Sysprep, закрываем это окно, оно нам сейчас не требуется.
Следует помнить, что переведенная в режим аудита система продолжит загружаться в него до тех пор, пока мы снова не запустим Sysprep и не изменим режим. После загрузки открываем Центр обновления Windows и производим поиск и установку обновлений.
Важно! 17 мая 2016 года Microsoft выпустила накопительный пакет обновлений для Windows 7 SP1 KB3125574, включающий в себя обновления с момента выпуска SP1 и до апреля 2016, в целях уменьшения объема скачиваемых обновлений рекомендуем скачать и установить данный пакет вручную. Для его установки требуется наличие обновления KB3020369.
Перезагружаемся и снова проводим поиск и установку обновлений. Перезагружаемся и опять повторяем эту операцию до тех пор, пока система не установит все доступные обновления.
Если ваша цель состояла только в интеграции в дистрибутив всех последних обновлений, то на этом можно закончить. Однако режим аудита позволяет устанавливать и разнообразный софт, который также будет включен в дистрибутив. Этим широко пользуются OEM-производители, мы думаем, каждый сталкивался с дистрибутивами (обычно на ноутбуках) содержащими, кроме OC, разное количество софта сомнительной полезности.
Поэтому никто не мешает нам включить в свой дистрибутив нужный софт, чтобы не тратить время на его последующую установку. Мы обычно ограничиваемся «джентельменским набором»: архиватор, Adobe Reader, Java, Silverlight. Вы можете включить в него весь набор необходимого софта, включая офисный пакет и иное ПО. Не стоит включать в образ программы устанавливающие собственные драйвера и собственно драйвера устройств, так как все сторонние драйвера будут удалены на стадии подготовки системы к захвату образа. Также не следует производить активацию ПО, эта информация также будет утеряна.
Закончив подготовку эталонной системы удалим все скачанные нами файлы и лишнее ПО (если есть), особое внимание следует уделить очистке системы от копий файлов обновлений, для этого воспользуйтесь инструментом Очистка диска:
Важно! После очистки обязательно перезагрузите систему для завершения работы с обновлениями, в противном случае вы рискуете получить неработающий образ.
Теперь подготовим ее к захвату образа при помощи утилиты Sysprep:
Разберем ключи утилиты подробнее:
- oobe — запускает компьютер в режиме экрана приветствия. Экран приветствия Windows позволяет конечным пользователям настраивать операционную систему Windows, создавать новые учетные записи, переименовывать компьютер и выполнять другие задачи.
- generalize — подготавливает установку Windows перед созданием образа. Если этот параметр указан, все уникальные системные сведения удаляются из установки Windows. Идентификатор безопасности (SID) обнуляется, точки восстановления системы сбрасываются, журналы событий удаляются.
- shutdown — завершает работу компьютера после завершения работы программы Sysprep.
Выполнив необходимые действия, система завершит работу. Включать ее до того, как будет захвачен образ, нельзя. На этом работу с эталонной системой заканчиваем и переходим к созданию собственного дистрибутива на ее основе.
Создание собственного дистрибутива
Для дальнейшей работы нам понадобится рабочая станция под управлением Windows 7 с установленным пакетом автоматической установки Windows (WAIK). Разрядность и версия системы никакой роли не играют.
Установка WAIK не должна вызвать затруднений и производится с установками по умолчанию.
Теперь подготовим образ Windows PE для захвата образа эталонной системы. Разрядность WinPE должна соответствовать разрядности эталонной системы.
Откроем Пуск — Все программы — Microsoft Windows AIK — Командная строка средств развертывания и выполним команду для 32-битных систем:
где e:\win_pe желаемое расположение папки с образом. Предварительно папку создавать не надо, так как в этом случае вы получите ошибку, что папка уже существует.
Теперь перейдем в папку назначения и скопируем файл winpe.wim в папку ISO\sources и переименуем его в boot.wim. Затем скопируем в папку ISO из папки C:\Program Files\Windows AIK\Tools\amd64 или C:\Program Files\Windows AIK\Tools\x86, в зависимости от разрядности, файл imagex.exe.
Затем в Командной строке средств развертывания дадим следующую команду:
Результатом работы команды будет образ winpe.iso с которого следует загрузить эталонную систему.
Если вы не выполняли дополнительной разметки диска эталонной системы, то раздел для захвата будет иметь букву D:, а загрузочный диск E:, на всякий случай проверяем командой dir.
Теперь приступим к захвату образа, так как образ создается пофайлово, то его можно сохранять на тот же самый раздел. Введем следующую команду:
В качестве параметров указываем захватить диск D: и сохранить его в образ D:\install.wim, в кавычках указываем собственное название образа, также ставим максимальное сжатие, возможность загрузки и проверку созданного образа. После чего можем сходить выпить кофе, данная операция занимает в среднем около получаса.
Перезагружаем эталонную систему в обычный режим и копируем созданный образ на ПК с установленным WAIK. Перейдем в e:\win_pe и очистим папку ISO, затем скопируем туда содержимое оригинального диска Windows 7, который мы использовали для установки эталонной системы.
После чего заменим файл install.wim в папке sources на захваченный нами образ. Теперь можно приступать к сборке собственного ISO-образа, для этого выполните команду:
разберем ключи команды подробнее:
- u2 -создает образ, который имеет только файловую систему UDF.
- m — снимает ограничения на размер образа.
- o — заменяет дублирующиеся файлы одним экземпляром, позволяет сократить размер образа.
- l — метка тома, вводится без пробелов, необязательный параметр.
- b — расположение загрузочного файла, также без пробелов.
Образ собирается довольно быстро, единственный момент — с большой долей вероятности его размер превысит 4,7 ГБ и записать его на обычную DVD болванку не удастся. В этом случае можно использовать двухслойные болванки DVD9, но они реже встречаются в продаже и могут поддерживаться не всеми моделями дисководов. В этом случае можно разбить дистрибутив на две части, каждый из которых будет помещаться на DVD-диск стандартной емкости. Также следует помнить об ограничении 32-х разрядных систем, которые не умеют работать с wim-образами размером более 4 ГБ.
Разделить образ можно следующей командой:
В результате будет создано два или более swm-файла максимальным размером в 3000 МБ. Затем удалим из папки ISO\sources install.wim и поместим туда install.swm, после чего соберем образ первого диска:
После этого удалим install.swm и скопируем на его место install2.swm. Второй диск нет смысла делать загрузочным, поэтому соберем его более простой командой:
Установка с разделенного образа производится обычным путем, начиная с первого диска, в процессе работы инсталлятор сам попросит сменить диск:
Таким образом можно не беспокоиться о размере создаваемого образа, особенно если в него, кроме обновлений, планируется включать объемное ПО, например, пакет MS Office и т.п. Также мы рекомендуем перед тем, как перейти к развертыванию рабочих станции из созданного дистрибутива, всесторонне проверить его работу на тестовой системе.