Новая ветка ядра

Kernel architecture questions
  • Чо за К++? Если ЯВУ, то втопку! А так, я за.
  • Ну мне если честно больше интересно мнение ядерщиков, нежели пользователей в данном вопросе)
    Посмотрели уже 50 человек.
    Идеи то такого характера высказывали и до меня, неужели именно тот факт, что именно _я_ её высказал вызывает равнодушие?
  • maximYCH

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

    Для затравки определись для чего тебе нужно ядро: десктоп, сервер, реальное время/встроенные применения ?
  • Для затравки определись для чего тебе нужно ядро: десктоп, сервер, реальное время/встроенные применения ?
    Согласен. А чтобы это действительно стало реально, операционная система должна быть как конструктор - модульной. Модульной либо статически на уровне исходников, как в Linux, либо динамически как в Qnx. Так как нет ни того, ни другого, то остаётся,
    если хочешь сдвинуть воз с мёртвой точки придётся долго и упорно тянуть его самому
    Короче, все кому не безразлична KolibriOS изучаем системное программирование. Я не исключение :) Мануалы Intel/AMD в помощь.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • А мне нужен монолит.
    Двухдюймовыми болтами прикрученный к конкретной аппаратной платформе, без браузеров, Ю-тюба и офисов.
    И то, что я нашел в сегодняшней Колибри, мне по-настоящему нравится.
    Надо просто последовательно доводить до ума то, что уже есть.
    Евангелие от Иоанна: стих 1

    Code: Select all

    ; В начале было Слово:
    B32:        mov     ax, os_stack       ; Selector for os
    [/size]
  • Как все радужно, воздушные замки в чистом небе, подсвеченном восходящим солнцем...

    Так, а теперь проза:
    На уровне хобби проекта развитие очень медленное, так как мало ресурсов. Как коммерческая система тоже не тянет - нет спроса. Можно конечно сто раз написать как все можно сделать замечательно и почему до этого это все не было сделано, но по сути ничего не меняется. Эффект Linux нам не повторить. По этой причине я лично вижу только путь коммерческого развития. Давайте честно признаемся сами себе - что выделять даже 30 минут в сутки в среднем получается пока есть энтузиазм, а он как показывает практика достаточно быстро заканчивается. Как это не прискорбно начинать надо с разработки бизнес-модели и не просто:
    Serge wrote:десктоп, сервер, реальное время/встроенные применения
    А конкретно продумывая чего можно достичь малыми силами за разумные сроки.

    Возможно стоит отказаться от упора исключительно на ассемблер (я наступаю себе на горло - но против правды далеко не попрешь), но не ломиться по пути *nix - у системы свой, пусть тернистый, путь и некоторые вещи можно реализовать лучше. POSIX не панацея. Переносимость возможно, но не обязательно. Упор имеет смысл делать в основном на x86-64. При этом не бросая текущую систему. Кому интересно могут продолжать.

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

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

    Малыми силами можно написать микроядро без "обвеса".
  • Интересная вещь. Размышляя над тем, как вообще организовать работу с графикой и окнами в текущем ядре KolibriOS, я пришёл к выводу, что его надо поделить на модули с определённым интерфейсом. Но возникли вопросы какие модули должны быть в ring 0, а какие в ring 3, и какой должен быть интерфейс, чтобы 100 раз его не переделывать . И тут напрашивались идеи гибридных систем и микроядер.....
    Малыми силами можно написать микроядро без "обвеса".
    Я тоже об этом думал. Микроядро на чистом ассемблере. А "обвес" хочешь на C, не любишь C, так ассемблер. Это единственный способ снизить зависимость от: x86-32/SMP, x86-64/SMP. А иначе возьмут Intel и AMD, и придумают какую нибудь Asymmetric Multi Processors с кучей ядер, и придётся всё заново переделывать.

    P.S.
    Нашёл в сети интересную книжку "Кёртен. Введение в QNX-Neutrino2. Руководство по программированию в QNX.Realtime." Формат djvu. Объясняются принципы устройства QNX.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • andrew_programmer

    На ассемблере выйдут те же яйца, только в профиль. Он нужен только для очень специализированных вещей - точек входа ядра и обработчиков прерывания. Всё остальное неплохо получается и на С. Например так :D

    Code: Select all

    Немного модифицированный код из L4 
        __asm__ __volatile__(
        "lgdt %0          \n\t"
        "ljmp %1,$1f      \n\t "  /* refetch code segment descr.  */
        ".align 4         \n\t"
        "1:               \n"     /* by jumping across segments */
        :: "m"(gdt_desc), "i" (sel_os_code) );
    
        /* set the segment registers from the freshly installed GDT
           and load the Task Register with the TSS via the GDT */
    
        __asm__ __volatile__(
        "mov  %0, %%ds      \n\t" /* reload data segment      */
        "mov  %0, %%es      \n\t" /* need valid %es for movs/stos */
        "mov  %1, %%ss      \n\t" /* reload stack segment     */
        "mov  %2, %%gs      \n\t" /* load TLS segment         */
        "mov  %0, %%fs      \n\t" /* default                         */
        "xor %%eax, %%eax   \n\t" /*              */
        "lldt %%ax          \n\t" /* clear LDTR           */
        :
        : "r"(sel_app_data), "r"(sel_os_stack), "r"(sel_ostls)
        : "eax" );
    
        __asm__ __volatile__(
        "ltr %%ax \n\t"
        ::"a"(sel_tss));
    
    Иногда даже очень неплохо

    Code: Select all

    static inline void outb(const uint16_t port, const uint8_t val)
    {
        __asm__ __volatile__ ("outb %0, %w1" : : "a"(val), "dN"(port));
    }
    
    void init_pic()
    {
        outb(0x20, 0x11);
        outb(0xA0, 0x11);
    
        outb(0x21, 0x20);
        outb(0xA1, 0x28);
    
        outb(0x21, 0x04);
        outb(0xA1, 0x02);
    
        outb(0x21, 0x01);
        outb(0xA1, 0x01);
    
        outb(0xA1, 0xFF);
        outb(0x21, 0xFF);
    };
    
    компилируется в 
    
                     public _init_pic
     _init_pic       proc near
                     mov     al, 11h
                     out     20h, al         ; Interrupt controller, 8259A.
                     out     0A0h, al        ; PIC 2  same as 0020 for PIC 1
                     mov     al, 20h ; ' '
                     out     21h, al         ; Interrupt controller, 8259A.
                     mov     al, 28h ; '('
                     out     0A1h, al        ; Interrupt Controller #2, 8259A
                     mov     al, 4
                     out     21h, al         ; Interrupt controller, 8259A.
                     mov     al, 2
                     out     0A1h, al        ; Interrupt Controller #2, 8259A
                     mov     al, 1
                     out     21h, al         ; Interrupt controller, 8259A.
                     out     0A1h, al        ; Interrupt Controller #2, 8259A
                     mov     al, 0FFh
                     out     0A1h, al        ; Interrupt Controller #2, 8259A
                     out     21h, al         ; Interrupt controller, 8259A.
                     retn
     _init_pic       endp