Новая модель ядра

Kernel architecture questions
  • andrew_programmer
    ATI 2D драйвер весит 2 Мб

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

    Mario79

    Там по разному доступ к данным организован. PE хранит релоки и данные можно адресовать напрямую. В ELF.so позиционно независимый код и данные адресуются более сложный образом. Вообще лучше иметь один стандартный формат.
  • >Чтобы загрузить видеодрайверы надо ещё портировать всё необходимое окружение так что в даноом случае формат драйвера не важен. Не ясно вообще насколько это реально.

    Да,да.Нужно експортировать в драйвер функции для выделения памяти, работы с PCI и много чего ещё.
    Но ведь никто не запрещает проводить эксперименты. :)
    Главное, чтобы время на это было(и возможность).
  • Наблюдение:
    в файле init.inc есть код :
    bt [cpu_caps-OS_BASE], CAPS_PSE
    jnc .no_PSE
    mov ebx, cr4
    or ebx, CR4_PSE
    mov eax, PG_LARGE+PG_SW
    bt [cpu_caps-OS_BASE], CAPS_PGE
    jnc @F
    or eax, PG_GLOBAL
    or ebx, CR4_PGE
    @@:
    mov cr4, ebx
    dec [pg_data.kernel_tables-OS_BASE]

    mov [edx], eax
    После этого в CR0 включается paging. По этому поводу в "The IA-32 Intel Architecture Developer’s Manual. Volume 3. (2003) есть вот это:
    When enabling the global page feature, paging must be enabled (by setting the PG flag
    in control register CR0) before the PGE flag is set. Reversing this sequence may affect
    program correctness, and processor performance will be impacted. See Section 3.11.,
    “Translation Lookaside Buffers (TLBs)”, for more information on the use of this bit.
    Радует что код всётки работает, или я что не так понял?

    P.S.
    кстати тут же стоит перепистаь test_cpu ибо половина кода там лишняя и сейчас не имеет смысла, (например переменная cpu_type, возвращяемое значение не анализируется).
  • Ghost

    Интересно. Я это пропустил. Возможно что ещё есть зависимость от модели процессора и изготовителя. Запись в MTRR сбрасывает все TLB так что код вероятно работает, но лучше исправить.

    P.S. Посмотри личные сообщения. Я запустил PCIBIOS.
  • Serge wrote:Хочу пояснить свою позицию по поводу загрузчика.
    Я хочу, чтобы загрузчик был достаточно универсален, чтобы его можно было использовать не только с этим ядром и не только с этой системой. Похоже, что проблема загрузки достаточно актуальна для многих осестроителей. Пусть будет загрузчик полезный не только нам но и возможно кому-то ещё. "Лишний" код можно всегда удалить, а возможность работать с файлами, определять устройства, менять настройки никому не помешает.
    Я бы воспользовался этим загрузчиком, если бы он поддерживал протокол MBI (Multi Boot Information).
  • Сделал расшареную память.

    68.22 создаёт или открывает область, 68.23 закрывает
    Подробное описание в sysfuncr.txt

    Пример.

    Code: Select all

    Процесс А создаёт общую область памяти
    
    shmem     db 'shared memory', 0
    
            mov eax, 68
            mov ebx, 22
            mov ecx, shmem
            mov edx, 0x1800
            mov esi, SHM_CREATE + SHM_READ
            int 0x40
    ; eax = начало области       
            mov [eax], 1234
    
    Процесс В создаёт общую область памяти
            mov eax, 68
            mov ebx, 22
            mov ecx, shmem
            mov edx, 0x1800
            mov esi, SHM_CREATE + SHM_READ
            int 0x40
    ; eax = 0
    ; edx = E_ACCESS - область уже существует 
    
            mov eax, 68
            mov ebx, 22
            mov ecx, shmem
            mov edx, 0x1800
            mov esi, SHM_OPEN + SHM_WRITE
            int 0x40
    ; eax = 0
    ; edx = E_ACCESS - разрешён доступ только на чтение 
           
            mov eax, 68
            mov ebx, 22
            mov ecx, shmem
            mov edx, 0x1800
            mov esi, SHM_OPEN + SHM_READ
            int 0x40
    ; eax = начало области
    ; edx = размер области = 0х2000
    
            mov ebx, [eax]
     ;ebx = 1234
            mov [eax], 5678
    ;страничная ошибка. Область защищена от записи
  • Serge
    Отличная новость. Некоторые вещи (тот же буфер обмена) можно будет реализовать проще и более очевидным образом.
    Можно подробнее о кодах ошибок?

    * E_NOTFOUND = 5
    * E_ACCESS = 10
    * E_NOMEM = 30
    * E_PARAM = 33
    E_NOTFOUND, E_NOMEM - понятно, а что значат остальные коды?
    Если завершится родительский процесс, а область памяти будет открытой другим процессом - будет она удалена/закрыта или нет?
  • Область удаляется только когда на неё нет ссылок. Процесс может открывать одну область несколько раз. Каждый раз ядро будет создавать новое отображение и увеличивать счётчик ссылок.

    Коды ошибок совпадают с кодами файловой системы кроме E_PARAM
    E_ACCESS - пытаемся создать новую область когда область с таким именем уже существует или пытаемся открыть на запись область для которой разрешено только чтение.
    таким именем.
    E_PARAM - любая ошибка в параметрах.
  • Немного безумная просьба :)
    Может ли кто-то сделать и выложить версию ядра, где содержимое окна будет отображаться при перетаскивании? Интересно посмотреть.
    Из хаоса в космос
  • Это можно сделать силами самого приложения.
    Так было в kvid. Правда там окно это одно изображение видео, но отрисовка заголовка и рамок, это дело техники.

    ..bw
  • Угу, а еще так сделано в версии перемещаемых иконок - отслеживаюся коордиднаты зажатой мыши и если они изменились - вызывается функция перемещения окна. Затратно, но объективно подгружать проц начинает только если поелозить иконкой поверх других иконок/окон. Правда там отрисовывается только картинка, а если это будет окно с десятком кнопок и линий - то будет слайдшоу. В любом случае на уровне ядра будет быстрее за счет отсутствия int-ов.
  • Чисто на уровне ядра это сделать не получится, потому что только приложение знает, что надо рисовать в его области. Так что при реализации на уровне ядра будет куча сообщений отрисовки приложению, и скорость работы будет точно такая же, потому что действия те же самые.
    Ушёл к умным, знающим и культурным людям.
  • Ядру достаточно скопировать картинку в свой буфер и делать простой блит при перемещении.
  • А если окно было перекрыто другими?
    Ушёл к умным, знающим и культурным людям.
  • Who is online

    Users browsing this forum: No registered users and 6 guests