OSDev

для всех
Текущее время: 22 сен 2018, 17:37

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 04 фев 2011, 09:56 

Зарегистрирован: 04 фев 2011, 09:31
Сообщения: 5
Всем привет, в общем проблема такая - несколько дней уже, как меня заинтересовала тема разработки ос, пока по примерам и статьям смог написать на чистом ассемблере загрузчик и консоль, переводит проц в реальный режим (надо бы в защищённый, но так ли это пока важно?), можно вводить команды (пока единственная команда help выводит список команд состоящий из одной лишь её :D), кое как влезло в 512 байт.

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

На сколько я понимаю, надо для начала подгрузить ещё несколько секторов, чтоб было, куда расширяться и как-то перейти оттуда на си, потом заняться файловой системой (пока хотя бы одноуровневый фат16), но я так и не нашёл толковых статей и уроков по этому, может подкинете каких-нибудь? :3

Надеюсь, здесь ещё кто-то есть, т.к. сайт выглядит несколько заброшенным.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 фев 2011, 12:52 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1089
Насколько видно загрузчик у вас не готов. Так как он ничего не грузит.
Да и вопросы у вас собственно по загрузчику.

Загрузчик грузить некоторый файл которому и передает управление.
Процесс загрузки обычно много ступенчатый.
MBR->boot record раздела диска-> boot.bin-> boot.exe->kernel.sys

MBR грузит boot record раздела диска.
MBR выполняет роль мультизагрузчика. Позволяя пользователю выбрать с какого раздела грузить ОС.
Иногда они такие же сложные как загрузчик ОС.

boot record раздела диска разбирает файловую систему и грузит boot.bin
В 512 байт обычно трудно запихнуть полноценный разбор ФС. Поэтому обычно грузится только 512 байт.
boot.bin уже догружает boot.exe
Иногда boot.bin это первые 512 байт файла boot.exe

boot.exe формирует среду для работы ядра. И грузить kernel.sys
Также возможно что грузится драйвер жесткого диска HDD.sys это драйвер может как входить так и не входить в ядро.


В качестве среды для работы ядра. boot.exe определяет число доступной памяти. Переводит процессор в защищенный режим. Создает каталог страниц. Также возможны и другие функции к примеру установка графического режима.

kernel.sys читает файл настроек и выполняет действия согласно этому файлу. Для примера OSRun.ini
В котором прописаны какие программы и сервисы, драйвера надо загрузить.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 фев 2011, 23:45 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1346
Откуда: Зеленоград
Впихнуть в 512 байт загрузчик целого файла из корневого каталога ФАТ12/16 (и, думаю, ФАТ32) вполне реально; в частности, это реализовано в загрузчике Алексея Фрунзе. Вот в НТФС, наверное, уже нельзя. Во всяком случае, первичный загрузчик Вислы и Семёрки (который в МБР) грузит вторичный загрузчик (первый сектор активного раздела диска), тот грузит ещё 15 (если память не изменяет) секторов, а они уже грузят программу собственно загрузчика (bootmgr), которая обеспечивает загрузку системы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 фев 2011, 02:02 
Аватара пользователя

Зарегистрирован: 16 апр 2010, 10:10
Сообщения: 319
Откуда: Псковская обл.
Сайт выглядит несколько заброшенным по одной простой причине - что бы писать ось нужно много времени и мало интернета. Разобраться с той же ФАТ с ходу не получится. И готовые решения из сети мало чем помогут, если нет очень большого желания. Лично у меня на реализацию простой оси (загрузка с дискеты, переход в PMode, консоль и работа с ФАТ12) - ушло примерно около года. А на данный момент переписываю всё с нуля третий (вроде) раз. Достаточно сказать что начал я в 2007.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 фев 2011, 04:10 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1065
Откуда: Балаково
Заморачиваться на загрузчике не обязательно, потому что есть готовые загрузчики. Здесь в кратце описано:
https://docs.google.com/leaf?id=0B2qk7V ... I1NjAwZWI1


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 фев 2011, 11:02 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1346
Откуда: Зеленоград
Himik писал(а):
Заморачиваться на загрузчике не обязательно


Но если толком не знаешь, что это такое и с чем его едят, то лучше с него как раз и начать -- для лучшего понимания процесса загрузки и прочая.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 фев 2011, 11:26 

Зарегистрирован: 04 фев 2011, 09:31
Сообщения: 5
Перевёл проц в защищенный режим, наковырял вывод на экран и ввод с клавиатуры в нём:
Код:
// вызывается в цикле ядром
void kernel_upd()
{
   char keyboard_input = KeyboardIsr();
   
   if (keyboard_input != 0)
   {
      putchar(keyboard_input);
   }
   // TODO если 8, стереть последний введённый символ
}

Код:
// code.h
char codes[] = {0, 0, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 8,'\t','q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']','\n', 0,'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`',0,'\\', 'z', 'x', 'c', 'v','b', 'n', 'm', ',', '.', '/',0,'*',0,' ',0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'-', 0, 0, 0,'+', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char codes_sh[] = {0, 0, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')','_', '+', 8, '\t', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\n', 0, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~', 0, '|', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '-', 0, 0, 0, '+', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
// 8 - backspace, на ctrl, alt и пр. стоят заглушки - 0.

Код:
// keyboard.c
#include "code.h"

unsigned shift_state = 0;
 
char KeyboardIsr()
{
    char new_scan_code = inportb(0x60);

    switch(new_scan_code) {
      case 0x2a:
         shift_state = 1;
         break;

      case 0xaa:
         shift_state = 0;
         break;
 
      default:
         if (new_scan_code & 0x80) {
      return 0;
        } else {
      return (shift_state ? codes_sh : codes)[new_scan_code];
        }
        break;
    }

    outportb(0x20,0x20);
}

И как не странно, работает. Но есть проблема - он так быстро выводит, что 1 лёгким нажатием какой-либо кнопки отбивает несколько страниц символов, как его замедлить?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 фев 2011, 16:43 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1065
Откуда: Балаково
SII писал(а):
Но если толком не знаешь, что это такое и с чем его едят, то лучше с него как раз и начать

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 05 фев 2011, 16:51 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1065
Откуда: Балаково
NElamer писал(а):
И как не странно, работает. Но есть проблема - он так быстро выводит, что 1 лёгким нажатием какой-либо кнопки отбивает несколько страниц символов, как его замедлить?

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 фев 2011, 11:34 

Зарегистрирован: 04 фев 2011, 09:31
Сообщения: 5
Реально ли создать более-менее работающую ос не используя прерывания или сведя их использование к минимуму? Я не как не могу заставить их нормально работать


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB