Отправляет email-рассылки с помощью сервиса Sendsay

Пишем свою операционную систему. Менеджер памяти

Пришло время начать писать менеджер памяти - важнейший компонент любой операционной системы. Однако до его реализации в коде почему-то не дошла ни одна из известных мне рассылок. Напишем заголовочный файл memory_manager.h, обозначив задачи на этот выпуск: #ifndef MEMORY_MANAGER_H #define MEMORY_MANAGER_H #include "stdlib.h" #define PAGE_SIZE 0x1000 #define PAGE_OFFSET_BITS 12 #define PAGE_OFFSET_MASK 0xFFF #define PAGE_TABLE_INDEX_BITS 10 #define PAGE_TABLE_INDEX_MASK 0x3FF #define PHYADDR_BITS 3...

2012-07-25 07:06:04 + Комментировать

Пишем свою операционную систему. Работа с клавиатурой

Доброго времени суток! До предыдущего выпуска пользователь не как не мог взаимодействовать с нашей операционной системой, лишь наблюдать её работу. Теперь она уже умеет как-то реагировать на нажатия клавиш, отображая текстовые сообщения, но этого мало для нормального ввода данных. Однако сначала приведу Makefile для предыдущего выпуска: ifdef OS LDFLAGS = -mi386pe else LDFLAGS = -melf_i386 endif CFLAGS = -m32 -ffreestanding all: script.ld startup.o stdlib.o main.o interrupts.o tty.o ld (LDFLAGS) -T script....

2012-07-24 18:56:12 + Комментировать

Пишем свою операционную систему. Обработка прерываний

Доброго времени суток! В предыдущем выпуске мы реализовали более-менее полноценный вывод текстовой информации на экран с возможностью управления позицией курсора и цветом текста, однако до сих пор пользователь никак не мог взаимодействовать с нашей ОС. Сегодня мы исправим этот недостаток, написав простой драйвер клавиатуры PS/2 (USB клавиатуры эмулируют PS/2, так что и они будут поддерживаться. Прерывания Нам уже известно два механизма взаимодействия процессора с остальными устройствами - через специальные...

2012-07-23 17:28:05 + Комментировать

Пишем свою операционную систему. Bugfix и printf

Приветствую всех своих читателей! Недавно заметил ошибку в написанном нами ещё давно startup.asm: аргументы передавались не в том порядке, в котором их принимает kernel_main. Это не проявлялось бы, пока мы не начали использовать значения этих аргументов. Вот правильная версия: format ELF public _start extrn kernel_main section ".text" executable _start: movzx edx, dl push ebx push esi push edx lgdt [gdtr] call kernel_main add esp, 3 * 4 : cli hlt jmp @b section ".data" writable gdt: dq ...

2012-07-22 19:05:54 + Комментировать

Пишем свою операционную систему. Драйвер текстового экрана

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

2012-07-22 16:34:22 + Комментировать

Пишем свою операционную систему. Стандартная библиотека

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

2012-07-21 23:19:33 + Комментировать

Пишем свою операционную систему. Переходим на Си

Приветствую всех своих читателей! Предыдущие выпуски могли быть несколько запутанными. Начальная загрузка, Assembler, BIOS. Сегодня мы наконец переходим к более интересной и понятной части - мы начинаем писать ядро. И писать мы его будем на языке высокого уровня Си. В начальный загрузчик осталось внести всего пару дополнений и он будет полностью готов грузить любые 32-битные ядра. Определение объёма оперативной памяти Конечно, можно подсчитать объём памяти вручную в ядре - перебирать адреса от 0x100000 и п...

2012-07-16 19:16:15 + Комментировать

Пишем свою операционную систему. Страничная адресация

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

2012-07-15 18:55:38 + Комментировать

Пишем свою операционную систему. Переход в защищённый режим

После недельного перерыва вновь могу обрадовать вас новым выпуском своей рассылки. Итак, как вы помните, в реальном режиме работы процессора нам доступен всего лишь 1 мегабайт адресного пространства (из которых обычной памятью является всего лишь 640 килобайт. Так это и было во времена первых процессоров вроде 8086, но постепенно объёма оперативной памяти стало не хватать. В то же время требовалось сохранить полную обратную совместимость, чтобы 16-разрядные операционные системы вроде DOS смогли нормально р...

2012-07-14 18:16:00 + Комментировать

Пишем свою операционную систему. Загрузка ядра и модулей

Приветствую всех! В прошлом выпуске мы написали подпрограммы для работы с файловой системой ListFS и реализовали загрузку продолжения загрузчика из файла на диске. Теперь мы не ограничены 512 байтами и можем дописать начальный загрузчик. Я не буду его жёстко привязывать к своему ядру - загрузчик будет читать конфигурационный файл, в котором содержится информация о расположении ядра и модулей, загружать все необходимые файлы в память и передавать управление ядра, предварительно переведя процессор в нужный р...

2012-07-08 20:27:59 + Комментировать

Рекомендуем подписаться: