Как сделать свою операционную систему на html

Обновлено: 05.07.2024

В этой серии статей я хотел бы рассказать о написании собственной ОС (прошу подождать с истерическим смехом по этому поводу). Конечно же, не на самом подробном уровне, тем не менее, какие-то азы, с которых будет полезно стартовать, я все же постараюсь рассказать. Я сразу хочу заметить, что я предполагаю, что некоторый опыт в программировании на 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 такова:

00000 – xxxxx+1 original.tmp и байт под CRC
xxxxx+1 – yyyyy Запакованный модуль
yyyyy – zzzzz Другие запакованные модули
zzzzz - ~17FFEh Оставшееся свободным пространство
~1C000* – 1FFFFh Bootblock

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

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

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

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

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) Первичный загрузчик

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

// Принцип работы такой: читать можем только в первые 64к, поэтому сначала считывается цилиндр в 0x50:0 - 0x50:0x2400, а затем копируется туда, куда необходимо. При этом первый цилиндр считываем в конце.

// Сигнатура бутсектора:
TIMES 510 - ($-$$) db 0
db 0xAA, 0x55

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

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

Можно ли использовать HTML, CSS и JavaScript для создания десктопных приложений?

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

Electron может быть использован для создания десктопных приложений, также эти приложения будут мультиплатформенными — Windows, Mac, Linux и другие.

Electron объединяет Chromium и Node.js в одну среду исполнения. Это позволяет нам запускать код HTML, CSS и JavaScript в виде десктопного приложения.

Если Electron используется напрямую, то перед сборкой приложения потребуется определённая ручная настройка. Также, если вы хотите использовать Angular, React, Vue или любой другой фреймворк или библиотеку, вам нужна будет ручная настройка.

Electron Forge значительно упрощает все вышеперечисленное.

Он предоставляет шаблонные приложения с Angular, React, Vue и другими фреймворками, что позволяет избежать дополнительных танцев с бубном.

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

Убедитесь, что у вас установлен Node.js. Если нет, то его можно скачать отсюда. Установите Electron Forge глобально, используя следующую команду:

Используйте следующую команду для создания вашего приложения:

simple-desktop-app-electronicjs — это название приложения.

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

Это должно открыть окно как на скрине ниже:


Приложение имеет определенную структуру папок. Здесь я перечислю некоторые важные моменты в этой структуре папок.

package.json

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

Путь config.forge содержит все конфигурации конкретно для Electron. Например, make-target используется для указания целевых файлов для различных платформ, таких как Windows, Mac или Linux.

Также в package.json есть "main": "src/index.js" , который указывает, что src/index.js является входной точкой приложения.

src/index.js

Согласно package.json , index.js является основным скриптом. Процесс, который запускает основной скрипт, называется главным процессом. Таким образом, основной процесс запускает скрипт index.js .

Основной процесс нужен для отображения элементов интерфейса. Это делается путем создания страниц. Каждая созданная страница выполняется в процессе, называемом процессом отрисовки.

Главный процесс и процесс отрисовки

Основное предназначение главного процесса — создание страниц с помощью экземпляра BrowserWindow . Экземпляр BrowserWindow использует процесс отрисовки для запуска каждой страницы.

Любое приложение может иметь только один главный процесс, но много процессов визуализации.

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


Архитектура Electron, показывающая главный процесс и процессы отрисовки. Названия файлов могут быть другими.

abcd.html показан в качестве второй веб-страницы в приведенной выше архитектуре. Но в нашем коде у нас не будет второй веб-страницы.

src/index.html

index.js загружает файл index.html в новый экземпляр BrowserWindow .

Код в index.js с пояснениями

Большая часть кода, созданного в index.js , содержит хорошие комментарии, объясняющие, что происходит. Здесь я упомяну несколько ключевых моментов, которые следует отметить в index.js :

Приведенный выше фрагмент кода просто создает экземпляр BrowserWindow и загружает index.html в BrowserWindow . Вы увидите, что app часто используется в коде. Например, возьмите приведенный ниже фрагмент:

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

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

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

Сначала давайте установим Bootstrap с помощью следующей команды:

Скопируйте следующий код в src/index.html:

Приведенный выше код выполняет следующие действия:

2 функции, которые выполняют преобразование температуры, будут храниться в renderer.js .

Создайте файл с именем renderer.js внутри src . Скопируйте в него следующий код:

Функция fahrenheitToCelcius() делает ровно наоборот.

Запустите приложение, используя следующую команду:

Должно открыться следующее окно. Попробуйте ввести разные значения в инпуты.


Команда для упаковки приложения:

Выполнение этой команды потребует некоторого времени. Как только выполнение закончится, проверьте папку out в папке проекта.

Я проверил это на машине c Windows. Была создана папка с именем simple-desktop-app-Electronjs-win32-x64 внутри папки out .

Таким образом, в папке out/simple-desktop-app-Electronjs-win32-x64 команда создала файл .exe для этого приложения. Нажатие на исполняемый файл автоматически запускает десктопное приложение.

При создании приложения на macOS, папка внутри out называется simple-desktop-app-Electronjs-darwin-x64 и создаётся файл .app , который работает точно так же, прим. переводчика.

Имя папки simple-desktop-app-electronicjs-win32-x64 может быть разделено на имя-платформа-архетиктура , где

  • имя — simple-desktop-app-electronjs
  • платформа — win32 (darwinна macOS)
  • архетиктура — x64

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

Допустим, мы хотим пакет для другой платформы и архитектуры. Тогда вы можете использовать следующий синтаксис:

Например, чтобы упаковать приложение для Linux, вы можете использовать следующую команду:

Это создаст папку с именем simple-desktop-app-electronicjs-linux-x64 внутри папки out .

Чтобы создать файл make или установщик для приложения, используйте следующую команду:

Потребуется некоторое время на выполнение этой команды. Как только процесс закончится, проверьте папку out в папке проекта.

В папке out/make будет создан установщик Windows для десктопного приложения (или ZIP-архив на macOS).

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

Как написать свою собственную операционную систему (1)

32-битный компьютер Intel может использовать операционную систему Windows. Затем скачайте установку программного обеспечения:

VFD - Virtual Floppy Drive

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

Хорошо, мы идем прямо к пускому запуску. Вся программа выглядит следующим образом:

После компиляций NASM эта программа сформирует файл, который находится всего 512b, и мы используем следующую команду для компиляции этого файла, называемого boot4.asm (boot4, boot4.asm? Потому что это просто это число при тестировании этой программы :)

Запустите VFD, создайте виртуальный дискету, назовите диск. Затем используйте PartCopy для скопирования файла boot4.bin на первый сектор дискеты:

Первый сектор в дискете в настоящее время является нашим пуском. Когда компьютер запускается, все загрузочные устройства установлены в BIOS (например, в порядке привода диска, оптического привода и диска) обнаружены в нем, и устройство, которое может быть активировано. Здесь мы пишем boot4.bin к первому сектору диска (каждый сектор диска - 512b), а конец этого файла составляет 0xa55, эта специальная последовательность байты указывает, что это начинающийся файл. BIOS Поместите этот файл в память 0x7C00: 0, выполните этот файл. Круговой процесс можно найтиЗдесь (что случилось после нажатия компьютера。

Подробное объяснение этого ассемблера Boot4.asm Мы сделаем это позже. Ниже мы пишем супер простую операционную систему Stage2.asm

Причина, по которой этот файл называется этапом 2. Сейчас, потому что это вторая фаза запуска системы. Эта операционная система прочитана из Boot4.bin с диска и загружена в память. Этот файл будет загружен в 0x7c00: 0x0200 Этот адрес памяти включен. Теперь мы используем NASM для компиляции этого файла в двоичный файл:

Причина, по которой он компилирует его в krnldr.sys, потому что в boot4.asm мы устанавливаем утверждение imageName db "Krnldr sys". Теперь вы можете знать, если у вас есть такая вещь. Это имя файла не может быть изменено случайно.

Давайте скопим Krnldr.sys на диск A:

В это время проверьте диск, вы найдете больше файлов krnldr.sys внутри.

Ниже мы используем эмулятор BOCHS для имитации запуска системы. Сначала установите этот симулятор. Затем создайте файл, названный BOCHSRC.BXRC, содержимое внутри:

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

image

Хорошо, до сих пор наша операционная система была завершена, печатая строка. Если вы забыли скопировать файл KRNLDR.SYS на диск, он предложит вам пойти не так.

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

wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 90 человек(а).

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

Изображение с названием Make a Computer Operating System Step 1

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

Изображение с названием Make a Computer Operating System Step 2

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

Изображение с названием Make a Computer Operating System Step 3

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

Изображение с названием Make a Computer Operating System Step 4

Уточните, какую платформу процессора будет поддерживать ваша операционная система. AI-32 и x86_64 являются двумя наиболее распространенными версиями для персональных компьютеров, так что их можно считать наилучшим выбором.

Изображение с названием Make a Computer Operating System Step 5

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

Изображение с названием Make a Computer Operating System Step 6

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

Изображение с названием Make a Computer Operating System Step 7

  • Чтобы собрать ОС с помощью кодов C или C++, вы, конечно, будете использовать то один компилятор, то другой. Это означает, что вы должны прочесть руководство/инструкции/документацию для выбранного компилятора C/C++, что поставляется в комплекте с программным обеспечением или доступно на веб-сайте дистрибьютора. Вам придется узнать множество сложных вещей о компиляторе, кроме того, для совершенствования C++ предстоит изучить его схему и ABI. Вы, как ожидается, поймете различные форматы исполнительных задач (ELF, PE, COFF, обычные бинарные и т.д.) и заметите, что собственный формат Windows, PE (.exe) защищен авторским правом.

Изображение с названием Make a Computer Operating System Step 8

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

Изображение с названием Make a Computer Operating System Step 9

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

Изображение с названием Make a Computer Operating System Step 10

Рассмотрите вопрос о разработке и работе в команде. Таким образом, вам потребуется меньше времени на разрешение больших проблем, что позволит создать операционную систему лучшего качества за более короткие сроки.

Изображение с названием Make a Computer Operating System Step 11

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

Изображение с названием Make a Computer Operating System Step 12

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

Изображение с названием Make a Computer Operating System Step 13

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

Изображение с названием Make a Computer Operating System Step 14

Протестируйте вашу новую операционную систему на виртуальной машине. Вместо перезагрузки компьютера каждый раз после внесения изменений или передачи файлов с рабочего компьютера тестовой машине вы можете использовать приложение для запуска ОС на виртуальной машине, в то время как ваша текущая ОС продолжает работать. Приложения VM включают в себя VMWare (которая также имеет сервер в свободном доступе), альтернативный открытый исходный код, Bochs, Microsoft Virtual PC (не совместим с Linux), а также XVM VirtualBox.

Изображение с названием Make a Computer Operating System Step 15

Выпустите релиз-версию. Это позволит пользователям рассказать вам о возможных недостатках в вашей операционной системе.

Изображение с названием Make a Computer Operating System Step 16

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

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

Можно ли скачать документ с работой

Да, скачать документ можно бесплатно, без регистрации перейдя по ссылке:

Не давно мне стало интересно на сколько тяжело написать операционную систему, как она вообще устроенна внутри, что должна делать, ну или хотя бы какой минимальный набор функциональности иметь. Так же было интересно низкоуровневое программирование, там где нет помощников и готовых функций, только ты, железо и BIOS, без него было бы совсем туго : ). И я решил написать простенькую ОС а попутно подучить уже совсем забытый мной ассемблер, и архитектуру x86.

Загрузка ОС с дискеты

Немного об устройстве привода. Привод состоит из электронной части и механической, в механической части присутствуют два двигателя, один из них шаговый, шаговым его называют по тому что он вращается не непрерывно, как обычные двигатели, а маленькими точными шагами, шаг двигателя 3.5 дюймового дисковода равен 1,8 °, что позволяет с его помощью довольно точно позиционировать головку записи-чтения над определённой областью магнитного диска дискеты. Также к механической части относятся головки чтения-записи они то и считывают-записывают данные на магнитный диск. Их в дисководе две, одна над магнитным диском другая под ним. Ниже показано размещение головок над диском.



Д
иск имеет магнитное покрытие и разбит на дорожки и сектора, на одной стороне диска содержится 80 дорожек, всего сторон две, нумерация дорожек начинается с 0 по 79, в одной дорожке содержится 18 секторов, емкость одного сектора составляет 512байт. Нумерация секторов начинается с первого. Первый сектор является загрузочным

После определения всех устройств BIOS начинает загрузку с накопителя который выбран как загрузочный. На этом накопителе должен присутствовать загрузочный сектор в котором находится программа загрузки ядра ОС. После чего BIOS прочтёт первый сектор диска, который как правило является загрузочным и если найдёт на нём сигнатуру загрузочного сектора, это два последних байта сектора, имеющие вид в шестнадцатеричной системе AA h, 55 h, то загрузит этот сектор в оперативную память по адресу 07C00h, и передаст управление загруженному коду. Далее этот код должен загрузить ядро ОС в память и передать ему управление.

Пишем Hello World

И так первое что нам необходимо сделать это узнать где мы будем находится в ОЗУ. Ниже представлена модель адресного пространства ОЗУ, как я её понял.

Читайте также: