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

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 
  • Serge
    Я имел ввиду разработку при условии, что не все люди знают C. Некоторых от C, а уж тем более от AT&T синтаксиса встроенного ассемблера вообще выворачивает наизнанку. Я тоже долго не мог разобраться во встроенном ассемблере AT&T синтаксиса. После Intel синтаксиса - это кажется вообще верхом извращенства над ассемблером. Но потом привык.
    Ещё на ассемблере можно писать некоторые драйверы. Если нравиться человеку ассемблер, так пусть пишет не нём. Мне и самому ассемблер очень нравиться, только когда дело касается соотношения
    СКОРОСТЬ_РАЗРАБОТКИ=(ОБЪЁМ РАБОТЫ)/(ВРЕМЯ ВЫПОЛНЕНИЯ РАБОТЫ)
    я логику пишу на C, а скоростные участки кода на ассемблере(либо встроенный inline ассемблер, либо чисто ассемблерный код).
    Last edited by andrew_programmer on Tue Jan 26, 2010 2:12 pm, edited 1 time in total.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • И все таки закрыли глаза на главный недостаток. Я конечно понимаю что обсуждать "Как?" куда приятней чем "Зачем?". Прямо по Кэрроллу -"Надо очень быстро бежать вперед, чтобы оставаться на месте"...
    Хорошо будем ковыряться дальше в песочнице.
  • И все таки закрыли глаза на главный недостаток. Я конечно понимаю что обсуждать "Как?" куда приятней чем "Зачем?".
    Можно по подробнее. Я не совсем понял о чём конкретно речь.
    KolibriOS-перспективная ос!
    Kolibri is best operation system in the world!
  • Первый пост - никакого тайного смысла. Я все подробно писал. Если нравится смотреть через розовое стекло на жизнь, тогда пожалуйста - можно продолжать в том же русле с тем же результатом.

    З.Ы. Пока что все это сходно с игрой в линейку, где персы 80 уровня лупят персов 70 уровня реально прожигая свою жизнь, но ничего не получая взамен в реальной жизни.
  • Who is online

    Users browsing this forum: No registered users and 5 guests