OSDev

для всех
Текущее время: 19 окт 2017, 15:31

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




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: NeOS
СообщениеДобавлено: 04 май 2007, 12:19 

Зарегистрирован: 04 май 2007, 08:32
Сообщения: 27
Ну, наверно надо и о моей ОСьке написать пару строк...
Изначально система задумывалась как учебная, т.е. для изучения асма, проца, железа(просто интересно было как это всё работает..), и написана должна была быть, естесственно, на асме... Но, по сложившимся обстоятельствам, разработчики перешли на С, и эта первая версия системы, впоследствии, стала именоваться NeOS-C.
Т.к. начата система была раньше(чем вторая версия), то и сделано в ней побольше(хотя и очень мало по сравнению с другими), а именно: поддержка клавиатуры, дисплея, и, частично, дисковода... на котором, вобщем то всё пока и остановилось, ввиду нехватки времени...
Изображение
Изображение
Изображение
Вторая версия начата недавно, представляет собой то, что впринципе задумывалось с самого начала ))) То есть основная часть ядра на асме, название, соответственно, NeOS-Asm, и, вобщем то пока ещё ничего толком и нет...

сайт: http://nextos.osdev.ru
форум: http://nextos.osdev.ru/forum/
Ну вот вроде и всё...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 04 май 2007, 13:46 

Зарегистрирован: 02 май 2007, 14:25
Сообщения: 138
Неплохо. Очень неплохо. А кодировку какую взял?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 04 май 2007, 17:11 

Зарегистрирован: 04 май 2007, 08:32
Сообщения: 27
Цитата:
Неплохо. Очень неплохо. А кодировку какую взял?

//SadKo

Пасиб. Кодировка пока 866, в дальнейшем может поменяться. если потребуется. А вообще идеальным вариантом наверное будет utf8 aka unicode, но пока не до этого...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 05 май 2007, 16:26 

Зарегистрирован: 02 май 2007, 14:25
Сообщения: 138
Ну, 866, ностальгия :). У меня в ОС она тоже заюзана :). Потом сменю на что-нибудь подобающее.
А консолек виртуальных нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 05 май 2007, 20:27 

Зарегистрирован: 04 май 2007, 08:32
Сообщения: 27
нет, виртуальных нет, тока одна реальная. (Хотя я чёто раньше не задумывался на эту тему, а надо бы сделать...) Да и вообще пока ни многозадачности, ни страничной адресации )))
То есть защищёнка, 4 гига памяти, 1 процесс )
В асм версии щас как раз копаюсь с многозадачностью (со страничной вроде проблем нету...).
Проблема в том что незнаю какими дескрипторами описывать прерывания. Ведь если прерывание произойдёт во время работы пользовательского приложения(3-е кольцо), обрабатываться то оно должно либо в отдельной задаче, либо в задаче ядра, в *нулевом* кольце... Или может я чё-то не догоняю?
Если у кого есть какие соображения на этот счёт буду очень благодарен!!!
И, я думаю если будет что сказать то лучше завести новую тему в соответствующем разделе обсуждения.
Заранее всем спасибо, NexT.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 05 май 2007, 23:55 

Зарегистрирован: 26 апр 2007, 15:35
Сообщения: 366
Откуда: Saint-Petersburg
Цитата:
Проблема в том что незнаю какими дескрипторами описывать прерывания. Ведь если прерывание произойдёт во время работы пользовательского приложения(3-е кольцо), обрабатываться то оно должно либо в отдельной задаче, либо в задаче ядра, в *нулевом* кольце...


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

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

Гораздо быстрее работает обработчик, размещенный в том же адресном пространстве, что и работающий процесс. После прерывания управление передается такому обработчику, в регистр SS устанавливается значение из поля ss0 в TSS, в ESP - cоответственно esp0 из TSS.
Если в ss0 поставить такое же значение, какое у тебя сейчас в ss при работе в режиме ядра, а в esp0 - указатель на последний байт специально выделенной странички памяти - проблем со стеком не возникнет.

Обработчик может быть примерно таким:

Код:
.text
.align 4
floppy_handler_wrapper:
    pusha
    push %ds
    push %es

    mov $0x10, %ax  /* установим сегментные регистры режима ядра */
    mov %ax,%ds
    mov %ax,%es

    call floppy_handler /* вызываем основной код обработчика */

    pop %es
    pop %ds
    popa
    iret


Завершается обработчик командой iret.


Или, как вариант, если ты программируешь на Си с использованием gcc, удобен такой обработчик:

Код:
#define IRQ_HANDLER(func) extern "C" void func (unsigned int errcode);
  asm(".globl "#func"n"     
     ?#func ": n"         
      "pusha n"       
      "push %ds n"         
      "push %es n"         
      "mov $0x10, %ax n"     /* загрузим DS ядра */       
      "mov %ax, %ds n"         
      "mov %ax, %es n"         
      "mov 48(%esp), %eax n" /* сохраним eip */       
      "push %eax n"       
      "xor %eax, %eax n"     
      "mov 48(%esp), %ax n"  /* сохраним cs */   
      "push %eax n"         
      "call _"#func " n"     
      "add $8, %esp n"             
      "pop %es n"         
      "pop %ds n"         
      "popa n"       
      "iret");       
  extern "C" void _## func(unsigned int cs, unsigned int address)



Применять его на Си-функциях можно так:

Код:
IRQ_HANDLER(my_irq_handler)
{
  /*
   здесь размещаем основной код обработчика
  */
  outportb(0x20, 0x20);
}


struct idt_entry{
  u32_t data[2];
}__attribute__ ((packed));

idt_entry * idt;

void set_intr_gate(unsigned char n, unsigned long offs)
{
  idt[n].data[0] = 0x00080000 | (offs & 0xffff);
  idt[n].data[1] = (offs & 0xffff0000) | 0x8e00;
}

void set_my_handler()
{
  idt = указатель на IDT;
  set_intr_gate(0x20, (unsigned long) &my_irq_handler);
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 06 май 2007, 00:21 

Зарегистрирован: 02 май 2007, 14:25
Сообщения: 138
Legos, ты ещё забыл, что в обработчике прерываний может быть указан не только CS с DPL=0, вполне может быть указан и CS с DPL=3. Просто в любом случае stack switch произойдёт при смене привилегий. Мало того, для обработки некоторых исключений даже сама Intel рекомендует использовать сonforming-cегменты (то есть, CPL не меняется, но можно обращаться к более привилегированным сегментам). К таким можно отнести, например, ошибку деления на ноль, которая в нормальной ситуации должна сгенерировать что-то вроде сигнала (зависит от реализации ОС) "ошибка деления", а также ошибку математического сопроцессора (а-ля not presented), позволяющий программно эмулировать действие сопроцессора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 06 май 2007, 06:40 

Зарегистрирован: 04 май 2007, 08:32
Сообщения: 27
Спасибо! Теперь вроде начинаю понимать )
Ну поковыряюсь - разберусь, вроде не сложно :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 10 авг 2007, 23:15 

Зарегистрирован: 04 май 2007, 08:32
Сообщения: 27
Прикрутил tty. вроде работает ;) Ближайший TODO: ф-ии вывода чисел; переключение между видеостраницами; русский шрифт;) Затем клавиатура и консоль.
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: NeOS
СообщениеДобавлено: 13 авг 2007, 14:30 

Зарегистрирован: 04 май 2007, 08:32
Сообщения: 27
Несколько дней назад было заявлено о начале разработки новой ос - ExeOS. На данный момент, по моим сведениям, система разрабатывается, её исходники закрыты (обещается открыть, опять же по моим, возможно неточным, сведениям, в феврале 2008г.). В связи с этим, исходники ОС NeOS объявляются ЗАКРЫТЫМИ начиная с 11 августа 2007 и до открытия исходников вышеупомянутой ос, либо ранее по моему усмотрению. Разработка ОС будет продолжаться, возможно будут появляться анонсы и скриншоты. Все предыдущие версии ОС NeOS, в том числе выложенные на официальном сайте проекта, остаются свободными для использования.

PS. Ничего личного, просто здоровая конкуренция ;)
PPS. Новому проекту - удачи, и хочется посмотреть что же всё таки получится...


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

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


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

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


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

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