Главная » Правописание слов » Как пишутся операционные системы

Слово Как пишутся операционные системы - однокоренные слова и морфемный разбор слова (приставка, корень, суффикс, окончание):


Морфемный разбор слова:

Однокоренные слова к слову:

Насколько сложно написать свою операционную систему?


Концептуальная плата REX и простой процессор WRAMP разработаны специально для обучения студентов компьютерной архитектуре, системному программированию и ассемблеру

Десять лет назад ходили анекдоты про Дениса Попова, который долго и упорно настаивал, что написал свою операционную систему «с нуля». Это считалось своеобразным синонимом «изобрести велосипед», то есть совершенно бессмысленной тратой времени. Анекдотизм ситуации состоял в том, что школьник из Нижнего Тагила скопировал Ubuntu, но был искренне убеждён в уникальности своего проекта.

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

Если бы ядро Unix писали сегодня, оно выглядело бы иначе. Подобные эксперименты могут напомнить о некоторых фундаментальных изъянах, несовершенствах или рудиментах современных ОС, на которые мы привычно закрываем глаза.

Человек, которого до сих пор вспоминают

Наверное, на фразе «новая операционная система с нуля» линуксоиды со стажем тепло и ласково улыбаются, вспоминая легендарную BolgenOS.

История началась с поста на ЛОРе от 31 декабря 2009 года, который впоследствии разошёлся на мемы:

«Привет всем кто пользуется системой Linux! Я пишу систему (точнее собираю для нее дистрибутив, вскоре будет готова). Назвал ее Bolgenos. Дописал на qt4 программы для GNOME (пока это основная среда рабочего стола), добавил апплеты для панелей и переписал модуль загрузки на свой лад. Систему я делаю с нуля (не переделывая Debian или Ubuntu). В качестве шелла Bash, а загрузчик GRUB. Установщик для системы я написал, и работает он в графическом режиме. Будет ориентирована на российских пользователей (но английский я оставил).

Уважаемые пользователи Linux пишите то что Вы хотите увидеть в этой системе или как говорится ваши пожелания. По возможности постараюсь включить всё в дистрибутив и сделать его как можно удобнее, обещаю его онлайн поддерживать :-)»

Как выяснилось впоследствии, автор не шутил. «Гениальным» программистом оказался Денис Попов, ученик 11-го класса школы №55 из Нижнего Тагила. На некоторое время «российский умелец» стал звездой теленовостей, презентация своей сборки Ubuntu он провёл на форуме «Юные интеллектуалы Среднего Урала».

В вышеупомянутом треде Денис пожаловался на недоброжелателей: «Такие люди как вы постоянно пишут, что у меня это не получится. Я докажу всем, что мой проект станет лучше, чем Debian».

Хотя имя Дениса Попова со временем стало нарицательным, как сама BolgenOS, «Антивирус Попова» (ClamAV) и «нескучные обои», однако всей компьютерной тусовке школьник убедительно доказал: синдром Даннинга-Крюгера существует. Как заявил Денис на форуме: «Когда я чего-то хочу, то я добьюсь это с такой скоростью, с какой вам это не снилось!» Здесь комментарии излишни.

Концепция научного прогресса

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

Ведь никто не будет спорить, что появление новых операционных систем и браузеров неизбежно. Да, стоимость таких проектов в трудозатратах с каждым годом растёт. Но это не отменяет фундаментальный закон о неизбежности научного прогресса. В современной науке распространена идея, что научное знание аккумулируется со временем. Поэтому прогресс часто считается «объективным законом реальности». Другими словами, многие учёные современности уверены в том, что учёные будущего будут знать больше их. И чем дальше в будущее — тем больше их знание. Кто-то может сделать вывод, что если прогресс стремится к бесконечности в случае линейного накопления знаний, то современные знания о мире стремятся к нулю.

Так или иначе, но желание создавать глобальные проекты «с нуля» кажется вполне естественным следствием концепции научного прогресса.

«Улучшенный Unix»

Создатели Unix — Деннис Ритчи, Кен Томпсон и их коллеги из Bell Labs — гениальные люди. Естественно, они понимают, что никакая программа по определению не может быть идеальна. Многое зависит от контекста, в котором создаётся проект.

Другими словами, если бы ядро Unix писали сегодня, оно бы выглядело иначе. Это довольно важный факт, учитывая статус *nix-подобных систем в современном мире как самого популярного семейства ОС практически на всех типах компьютеров, кроме десктопов.

Сами создатели Unix в 80-е годы реализовали альтернативный дизайн операционной системы, которую в шутку назвали Plan 9. Эта система должна была преодолеть принципиальные недостатки Unix. В частности, дизайн базируется на трёх основных принципах:

В отличие от современных операционных систем, в которых пользователь получает доступ к конкретному компьютеру, в Plan 9 он получает доступ к распределённой вычислительной среде. Например, в оригинальной статье «Использование пространств имён в Plan 9» (Роб Пайк, Дэйв Пресотто, Кен Томпсон, Говард Трики, Фил Уинтерботтом) приводится такой пример: файл /dev/mouse на компьютере содержит последний 1 байт состояния кнопки и 4 байта состояния каждой из координат курсора мыши, причём это может быть не тот компьютер, к которому физически подключена мышь. Наверное, формулировка звучит немного странно для пользователей, привыкших к терминам централизованной вычислительной среды. По факту в Plan 9 команда cpu запускает удалённую сессию на вычислительном сервере, куда экспортируется локальное пространство имён, включая мышь и дисплей. Таким образом, удалённые программы могут нормально взаимодействовать с мышью на локальном терминале, словно это их мышь.

Впоследствии некоторые идеи Plan 9 были частично реализованы в других ОС:

Мини-Unix

Одна из современных попыток создания новых ОС — Winix. Минималистичная ОС, написанная исключительно в образовательных целях для микропроцессорной архитектуры Waikato RISC Architecture Microprocessor (WRAMP). Процессор сам про себе разработан в образовательных целях, с кастомным ассемблером, похожим на MIPS. Автор говорит, что в разработке вдохновлялся идеями ОС Minix (сокращение от mini-Unix).

Winix включает в себя полнофункциональное ядро с управлением процессами и памятью, файловую систему в памяти (in-memory file system, типа ramdisk) с почти полной поддержкой стандарта POSIX, контроль исключений и оболочку Bourne с интерактивным терминалом, поддержкой конвейеров из нескольких команд с перенаправлением ввода-вывода и т.д.

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

В него загружаем бинарник Winix (кнопка Quick Load ). Терминал работает через Serial Port 1 :

Список поддерживаемых команд см. здесь. Например, вот snake.c, игра «Змейка».

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

Winix разработана для платформы RISC, а сейчас стремительно набирает популярность открытая архитектура RISC-V. Всё больше компаний начинают выпускать совместимое оборудование, да и разные ОС начинают поддерживать RISC.

В наше время появление новой операционной системы — вовсе не уникальное событие. Например, из последних концептуальных ОС можно назвать Barrelfish, Unikraft, RedLeaf, ту же Fuchsia, хотя она ориентирована на мобильные устройства. Активность на конференциях вроде SOSP, OSDI, EuroSys и HotOS демонстрирует, что в системной разработке в последние годы идут очень бурные и интересные исследования. Хотя 20 лет назад Роб Пайк пессимистично высказался о застое в данной области, но сейчас это точно не так. Может быть, количество новых операционных систем на конференциях даже вернулось на пиковый уровень 1980-х годов (6-7 в год). Но остаётся некое ощущение, что академические разработки в сфере системного программирования получают недостаточно внимания со стороны бизнеса и государства, поэтому учёные уходят в другие области computer science вроде дата-майнинга и аналитики, где финансирование куда лучше.

Источник

Пишем операционную систему. Часть 1. Загрузчик

Всем привет! Сегодня мы напишем загрузчик, который будет выводить «Hello World» и запустим его на VirtualBox. Писать будем на ассемблере FASM. Скачать его можно отсюда. Также нам понадобится собственно VirtualBox и UltraISO. Перед тем как писать код, разберемся как загружаются операционные системы.

Итак, когда мы нажимаем большую кнопку включения на нашем компьютере запускается система, которая есть на любом компьютере — BIOS (Basic Input/Output System или базовая система ввода/вывода). Задача BIOS это:

Этот код требует немного пояснений. Командой

мы говорим, что код нужно загружать в ОЗУ по адресу 0x7C00. В строках

мы устанавливаем видео режим 80х25 (80 символов в строке и 25 строк) и тем самым очищаем экран.

Здесь мы устанавливаем курсор. За это отвечает функция 2h прерывания 10h. В регистр dh мы помещаем координату курсора по Y, а в регистр dl — по X.

Печатаем строку. За это отвечает функция 13h прерывания 10h. В регистр bp мы помещаем саму строку, в регистр cx — число символов в строке, в регистр bl — атрибут, в нашем случае цвет, он будет зеленым. На цвет фона влияют первые 4 бита, на цвет текста — вторые 4 бита. Ниже представлена таблица цветов

Откомпилируем код нажатием клавиш Ctrl + F9 и сохраним полученный файл как boot.bin.

Запуск

Запускаем UltraISO и перетаскиваем наш бинарник в специальную область (отмечено красной стрелкой).

Далее кликаем правой кнопкой мыши по бинаринку и нажимаем кнопку примерно с такой надписью: «Установить загрузочным файлом». Далее сохраняем наш файл в формате ISO.
Открываем VIrtualBox и создаем новую виртуальную машину (если вы не знаете, как это делается, кликайте сюда). Итак, после того, как вы создали виртуальную машину, нажимаем «Настроить, выбираем пункт „Носители“, нажимаем на „Пусто“, там где „Привод“ есть значок оптического диска. Нажимаем на него и выбираем „Выбрать образ оптического диска“, ищем наш ISO файл, нажимаем „Открыть“. Сохраняем все настройки и запускаем виртуальную машину. На экране появляется наш „Hello World!“.

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

Источник

Пишем свою ОС: Выпуск 1

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

Каждый решает проблему обучения по-своему. Кто-то читает много литературы, кто-то старается поскорее перейти к практике и разбираться по ходу дела, кто-то пытается объяснять друзьям всё, что сам изучает. А мы решили совместить эти подходы. Итак, в этом курсе статей мы будем шаг за шагом демонстрировать, как пишется простая операционная система. Статьи будут носить обзорный характер, то есть в них не будет исчерпывающих теоретических сведений, однако мы будем всегда стараться предоставить ссылки на хорошие теоретические материалы и ответить на все возникающие вопросы. Чёткого плана у нас нет, так что многие важные решения будут приниматься по ходу дела, с учётом ваших отзывов.

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

Мы будем предполагать, что читатель уже знаком с основами языков ассемблер и Си, а также элементарными понятиями архитектуры ЭВМ. То есть, мы не будем объяснять, что такое регистр или, скажем, оперативная память. Если вам не будет хватать знаний, вы всегда можете обратиться к дополнительной литературе. Краткий список литературы и ссылки на сайты с хорошими статьями есть в конце статьи. Также желательно уметь пользоваться Linux, так как все инструкции по компиляции будут приводиться именно для этой системы.

А теперь — ближе к делу. В оставшейся части статьи мы с вами напишем классическую программу «Hello World». Наш хеллоуворлд получится немного специфическим. Он будет запускаться не из какой-либо операционной системы, а напрямую, так сказать «на голом железе». Перед тем, как приступить непосредственно к написанию кода, давайте разберёмся, как же конкретно мы пытаемся это сделать. А для этого надо рассмотреть процесс загрузки компьютера.

Итак, берем свой любимый компьютер и нажимаем самую большую кнопочку на системном блоке. Видим веселую заставку, системный блок радостно пищит спикером и через какое-то время загружается операционная система. Как вы понимаете, операционная система хранится на жёстком диске, и вот тут возникает вопрос: а каким же волшебным образом операционная система загрузилась в ОЗУ и начала выполняться?

На картинке изображена поверхность дискового накопителя. У дискеты 2 поверхности. На каждой поверхности есть кольцеобразные дорожки (треки). Каждый трек делится на маленькие дугообразные кусочки, называемые секторами. Так вот, исторически сложилось, что сектор дискеты имеет размер 512 байт. Самый первый сектор на диске, загрузочный сектор, читается BIOS’ом в нулевой сегмент памяти по смещению 0x7С00, и дальше по этому адресу передается управление. Начальный загрузчик обычно загружает в память не саму ОС, а другую программу-загрузчик, хранящуюся на диске, но по каким-то причинам (скорее всего, эта причина — размер) не влезающую в один сектор. А поскольку пока что роль нашей ОС выполняет банальный хеллоуворлд, наша главная цель — заставить компьютер поверить в существование нашей ОС, пусть даже и на одном секторе, и запустить её.

Как устроен загрузочный сектор? На PC единственное требование к загрузочному сектору — это содержание в двух его последних байтах значений 0x55 и 0xAA — сигнатуры загрузочного сектора. Итак, уже более-менее понятно, что нам нужно делать. Давайте же писать код! Приведённый код написан для ассемблера yasm.

Эта короткая программа требует ряда важных пояснений. Строка org 0x7C00 нужна для того, чтобы ассемблер (имеется в виду программа, а не язык) правильно рассчитал адреса для меток и переменных ( puts_loop, puts_loop_exit, message ). Вот мы ему и сообщаем, что программа будет загружена в память по адресу 0x7C00.
В строках

происходит установка сегмента данных ( ds ) равным сегменту кода ( cs ), поскольку в нашей программе и данные, и код хранятся в одном сегменте.

В строке « times 0x1FE-finish+start db 0 » производится заполнение остатка кода программы (за исключением последних двух байт) нулями. Делается это для того, чтобы после компиляции в последних двух байтах программы оказалась сигнатура загрузочного сектора.

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

Полученный файл hello.bin нужно записать в зарузочный сектор дискеты. Делается это примерно так (разумеется, вместо fd нужно подставить имя своего дисковода).

Поскольку далеко не у всех остались дисководы и дискеты, можно воспользоваться виртуальной машиной, например, qemu или VirtualBox. Для этого придётся сделать образ дискеты с нашим загрузчиком и вставить его в «виртуальный дисковод».
Создаём образ диска и заполняем его нулями:

Записываем в самое начало образа нашу программу:

Запускаем полученный образ в qemu:

После запуска вы должны увидеть окошко qemu с радостной строчкой «Hello World!». На этом первая статья заканчивается. Будем рады увидеть ваши отзывы и пожелания.

Источник

Написание собственной Операционной Системы №1

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

Итак, начнем. Давайте рассмотрим приблизительно работу известных ОС.

Адресное пространство в DOS:

Объем Физ. Адрес Сегм. Адрес
1Кбайт Векторы прерываний 00000h 0000h
256байт Область данных BIOS 00400h 0040h
ОС MS-DOS 00500h 0050h
Область для программ
64Кбайт Графический видео буфер A0000h A000h
32Кбайт Свободные адреса B0000h B000h
32Кбайт Текстовый видеобуфер B8000h B800h
64Кбайт ПЗУ-расширения BIOS C0000h C000h
128Кбайт Свободные адреса D0000h D000h
64Кбайт ПЗУ BIOS F0000h F000h
64Кбайт HMA 100000h
До4Гбайт XMS 10FFF0h

Первые 640 Кбайт (до графического видеобуфера) называются стандартной (conventional) памятью. Начинается стандартная память с килобайта, который содержит векторы прерываний, их 256 на каждый отводится по 4 байта.
Затем идет область данных BIOS (при включение компьютера BIOS выполняет POST – диагностику, которая проверяет все оборудование на наличие ошибок, если проверка завершилась удачно то BIOS грузит самый первый сектор (там находится загрузочная программа ОС) с выбранного устройства (дискеты, винчестера) по адресу 0x7C00h куда и передает управление). Где находятся данные необходимые для корректной работы функций BIOS. Но также можно модифицировать эту область, тем самым мы влияем на ход выполнения системных функций, по сути дела меняя что либо в этой области мы передаем параметры BIOS и его функциям, которые становятся более гибкими. В случае установленной DOS с сегментного адреса 500h начинается сама операционная система. После ОС до 640 Кбайт находятся прикладные или системные программы, которые были загружены ОС.

За 640 килобайтами начинается старшая память или верхняя (upper) память, она располагается до 1 мегабайта (до HMA), т.е. она составляет 384 Кбайт. Тут располагаются ПЗУ (постоянно запоминающее устройство ) : текстовый видеобуфер (его микросхема рассчитана на диапазон B8000h…BFFFFh) и графический видеобуфер (A0000h…AFFFFh). Если требуется вывести текст то его ASCII коды требуется прописать в текстовый видеобуфер и вы немедленно увидите нужные символы. F0000h…FFFFFh, а вот и сам BIOS. Так же есть еще одна ПЗУ – ПЗУ расширений BIOS (C0000h…CFFFFh), её задача обслуживание графических адаптеров и дисков.

За первым мегабайтом, с адреса 100000h, располагается память именуемая как расширенная память, конец которой до 4 гигабайт. Расширенная память состоит из 2х подуровней: HMA и XMS. Высокая память (High Memory Area, HMA) доступна в реальном режиме, а это еще плюс 64 Кбайт (точнее 64 Кбайт – 16 байт), но для этого надо разрешить линию A20 (открыв вентиль GateA20). Функционирование расширенной памяти подчиняется спецификации расширенной памяти (Expanded Memory Specification, XMS), поэтому саму память назвали XMS-памятью, но она доступна только в защищенном режиме.

Давайте вернемся к началу адресного пространства в представлении DOS и рассмотрим его более подробно.

1) Векторы прерываний таковы (это нам понадобится, когда мы будем составлять свою таблицу прерываний):

IRQ INT Причина возникновения
IRQ0 8h Системный таймер
IRQ1 9h Клавиатура
IRQ2 10h Ведомый контроллер
IRQ3 11h Порт COM2, модем
IRQ4 12h Порт COM1, мышь
IRQ5 13h Порт LPT2
IRQ6 14h Дисковод
IRQ7 15h Порт LPT1, принтер
IRQ8 70h Часы реального времени
IRQ9 71h Прерывание обратного хода луча
IRQ10 72h Для дополнительных устройств
IRQ11 73h Для дополнительных устройств
IRQ12 74h PS мышь
IRQ13 75h Ошибка математического сопроцессора
IRQ14 76h Первый IDE-контроллер
IRQ15 77h Второй IDE-контроллер, жесткий диск

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

Итак, BIOS (я буду говорить об AWARD BIOS, так как это наиболее популярные версии, поэтому возможно незначительные расхождения с другими
BIOS) – это последовательность запакованных файлов, которые заканчиваются файлом bootblock. Структура первого мегабайта памяти, отведенного под BIOS такова:

17FFEh Оставшееся свободным пространство

1C000* – 1FFFFh Bootblock

До свободного пространства идет основная часть BIOS, а именно:

original.tmp – главная часть, в которой располагается подпрограмма BIOS Setup, а так же части, необходимые для инициализации.
CRC – контрольная сумма BIOS
awardext.rom – подпрограмма вывода конфигурации компьютера
awardepa.bin – изображение
Так же могут встречаться другие необязательные модули.

Итак, при включении компьютера bootblock инициализирует регистры чипсета, распаковывает заархивированные (с помощью LHA) модули и отправляет их в память.
Соответственно данные файлы можно перепрограммировать, изменив или добавив что-то в BIOS. Таким образом можно изменить все настройки БИОС (начиная от надписей и кончая добавлением возможности работы с новыми устройствами, информации о которых нет в данной версии
BIOS). Делается это достаточно легко: например используя modbin (стандартная программа от Award) можно распаковать данные файлы
(взятые, например, из Интернета), изменить их по своему усмотрению и записать в
BIOS. Только при изменении заархивированных модулей не забывайте исправлять CRC, иначе BIOS подумает, что он испорчен.

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

Итак, наша программа будет располагаться в ПЗУ (постоянное запоминающее устройство). BIOS передаст ей управление, но для этого он должен ее найти. Соответственно наша программа должна находиться в области с С800:0 до E000:0 в памяти, так как эта область сканируется BIOS на наличие определенной сигнатуры 0AA55H. В байте за этой подписью количество байт для подсчета их контрольной суммы. Если контрольная сумма равно нулю, то это ПЗУ и управление передается в область памяти, где была найдена данная сигнатура со смещением 3. Для того, чтобы «уровнять» контрольную сумму, необходимо в конце программы дописать байт, в котором будет число, равное разнице 100h и полученной контрольной суммы.

Итак, вот так должна выглядеть ваша программа, которую Вы запишите в ПЗУ.

LENGTHROM EQU 2000H ; Размер ПЗУ в байтах = числу после подписи * 200H
CODE SEGMENT BYTE PUBLIC
ASSUME CS:CODE,DS:CODE
ORG 0
START:
DB 55h
DB 0AAh; Размер ПЗУ по модулю 200H
DB LENGTHROM SHR 9; Первая выполняемая команда
JMP BEGIN
BEGIN:
; Заносим в регистры нужные значения
MOV AX,CS
MOV DS,AX
; Код программы
; Вернуть управление БИОС
RETF
; Сюда запишем дополняющий байт
DB (0)
CodeEnd:
; заполнение оставшегося кода нулями
DB (LENGTHROM-(OFFSET CodeEnd-OFFSET START)) DUP (0FFH)
LastByte:
CODE ENDS
END START

Загрузка Linux и Windows

Это базовая и очень важная тема. Вспомним о БИОС, который загружает самый первый сектор (Master Boot Record) с выбранного в его настройках устройства (дискеты, винчестера, CD-ROM привода и пр.) по адресу 0x7C00h куда и передает управление. Программа, находящаяся в этой памяти называется первичным загрузчиком. У него не очень много возможностей, так как его размер ограничен 512 байтами. Его задачей является подготовка компьютера, а именно: запись в память вторичный загрузчик, предварительно считанный с HDD,
включить линию A20 и перевести процессор в защищенный режим. После этого управление передается вторичному загрузчику, цели работы которого точно не определены. Я считаю, что его главными задачами являются формирование таблицы прерываний, подготовка компьютера к работе с файловой системой, определение периферийных устройств, подключенных к компьютеры, передача управления ядру, скачанному им с диска заложенному в памяти.

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

Linux может загружаться как через специализированный загрузчик (Lilo), так и через boot sector диска. Поскольку загрузчика у нас нет, а есть только желание более полно узнать об устройстве загрузки, рассмотрим второй случай:

1) boot sector записывает свой код в 9000h
2) Загружает с диска Setup, который находится в нескольких последующих секторах (9000h:0200h;)
3) Загружает ядро в 1000h. Ядро так же следует после Setup. Ядро должно быть меньше 508 килобайт
4) Управление передается Setup
5) Setup проверяется на корректность
6) С помощью BIOS определяется оборудование, размер памяти, наличие жестких дисков, наличие шины Micro channel bus, PC/2 mouse, Advanced power management, инициализируются клавиатура и видеосистема
7) Процессор переводится в защищенный режим
8) Управление передается ядру
9) Ядро переписывается по адресу 100000h (если оно было заархивировано, то оно предварительно разархивируется)
10) Управление передается ядру
11) Активируется страничная адресация
12) Происходит инициализация IDT и GDT, при этом в кодовый сегмент и в сегмент данных ядра входит вся виртуальная память
13) Инициализируются драйвера
14) Управление передается процессу init;
15. init запускает все остальные необходимые программы в соответствии с файлами конфигурации(init.X);

Теперь рассмотрим загрузку Windows (NT, так как ранние версии устарели):

1) boot sector загружает NTLDR
2) Процессор переходит в защищенный режим;
3) Делаются таблицы страниц
4) Механизм преобразования страниц;
5) Чтение boot.ini, используя код FS под названием read only. Выводит на экран выбор загрузки ОС (из boot.ini)
6) Из boot.ini считывается адрес директории Windows
7) Управление получает ntdetect.com, определяющий устройства, установленные на компьютере
8) Из %dir%\system32 загружается ntoskrnl.exe, в котором находится ядро.
9) Управление передается hal.dll с информацией об аппаратном обеспечении;
10) Загружаются драйвера и важные файлы
11) Стартует графическая оболочка и пр.

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

1) Первичный загрузчик

Загружаться мы будем с дискеты, а следовательно нам необходимо читать с нее данные по секторам.

2) Вторичный загрузчик

А теперь вторичный загрузчик:

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

Источник

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

Какие вы еще знаете однокоренные слова к слову Как пишутся операционные системы:



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *