APIC

Internal structure and you change requests/suggestions
  • Стас wrote:АПИК можно включить, но мне кажется чтобы сделать нормальный доступ к процам нужно переписать половину оси, или начать её с нуля и перенести туда все готовые функции после отработки работы с несколькими процами, я писал название книги где то в темах в которой есть пример включения апика настройки прерываний таймера и клавы, и работы с несколькими процами. Там написано, что нужно делать семафоры для проверки того, чтобы два проца не писали в один и тот же байт, мне кажется этого делать не надо, а надо думать как чтоб такого небыло.
    SII wrote:А единственный правильный путь -- выкинуть вообще всё сделанное и разрабатывать с нуля, причём не сохранять совместимость со старым на уровне API (поскольку этот самый API, доставшийся в наследство от Менуэта -- сплошной идиотизм). Естественно, сразу сделать систему не только с поддержкой SMP, но и 64-разрядной, с виртуальной памятью, PnP, ACPI... Ну а если так хочется сохранить возможность запуска имеющихся программ, слепить прослойку, поддерживающую выполнение прикладного 32-разрядного кода со старым API на новой 64-разрядной системе.
    На сколько я понял, товарищи с оседева (Стас и SII), имеющие некоторый опыт в создании ОСей, горят желанием помочь не только морально, теоретически, но и при непосредсвенной реализации данной идеи? :)

    В противном случае это рассуждение по негласным правилам форума рискует быть перенесена в хотелки
    Last edited by some_man on Sat Mar 24, 2012 9:08 pm, edited 2 times in total.
  • Стас получает бан на день за флуд и систематическое неправильное написание названия проекта.
    Из хаоса в космос
  • SII wrote:Стас, в нынешнем виде КОС -- свалка костылей, появившися в первую очередь из-за шедеврально талантливого проекта Вилле. Чтобы внедрить что-то новое, надо либо городить очередную порцию костылей, либо переделывать всё с нуля и самым кардинальным образом. Но если уж идти вторым путём, то надо закладывать сразу всё, а не только какие-то части. Другое дело, что реализовать это "всё" сразу не удастся -- но если не предусматривать такую возможность, то в дальнейшем без костылей опять-таки не обойтись.
    И на заметку человеку, которому такие проекты как Колибри на один зуб и он их каждый день с нуля переписывает, на хабре появилась статья в тему Дорабатывать или переписывать
    Позволю себе наглость процитировать кусок текста, хотя все могут прочесть оригинальную статью без регистрации!
    Ситуэйшн №3: чужой код
    Image
    Это самый опасный путь, скользкая, мерзкая и пакостная дорожка. Итак, представьте, что свой студенческий проект вы кое как сдали, свой личный проект забросили (извините, конечно же отложили, чтобы вернуться, когда будет время!).

    И вот, к вам попадает чужой код в 10-15 тысяч строк. Говнокод. По-вашим представлениям. Внедрение обновлений равносильно выстрелу себе в ногу. Переписываем?

    Не торопитесь. Сначала оцените свои возможности. Сколько времени вам потребуется, чтобы это переписать? Как это будет оплачено? Заложено ли нужное время?

    Переписывание чужого кода чревато несколькими проблемами.
    Первая проблема: код, скорее всего, уже внедрен и работает. В этом случае, вам не только нужно будет заново разработать весь его функционал, но и учесть все костыли, на которые наткнулся бывший говнокодер.
    Вторая проблема: вы можете не потянуть проект, начать прокрастинировать, и в конечном итоге, окончательно завалите проект.
    Третья проблема: почему вы так уверены, что вы сами не напишите такой же говнокод?
    И окончание статьи меня вообще порадовало:
    И еще помните, что серьезные люди считают, что переписывание проектов с нуля – это признак непрофессионализма.
    Удачи.
    У меня лично только 2 проекта которые я написал по сути с нуля: KFM и zSea. Зато я несколько чужих программ переписал (не с нуля естественно!) и ядро так помаленьку поковырял. Почему то я не лазал на http://osdev.ru/ и не обсирал чужие проекты. Я же не лазил в их код 9 лет и не могу судить что там говнокод, а что нет. А самое забавное - идеален тот код который ты никому не показал, потому что никто не может найти там ошибок говнокодера.

    Потому я по прежнему утверждаю, что у меня есть триллион баксов и скоро я куплю Эпл.
    (Зря Кирилл похерил тот мой коммент!)
    И попробуйте, блять, это опровергнуть!
  • Марат, вот тебе надо эти батлы со школотой по поводу у кого пиписька длиннее? Мы делаем проект известный во всём мире и поэтому у него полюбому будут критики.
    Короче, не флудить. Тебя это тоже касается.
    Из хаоса в космос
  • Тащемто мистер SII давно как не школота. :mrgreen: Но тролль 99 уровня - Дмитрий Завалишин завидует. :wink: Я кстати тоже завидую - мне бы так доебываться уметь.
  • Я про Стаса. SII наш старый умный и хитрый идеологический противник.
    Из хаоса в космос
  • Дабы разбавить последние нетехнические сообщения техническим - выкладываю документ об APIC и прерываниях в процессорах SandyBridge, надеюсь будет полезным.
    Attachments
    Interrupts overview
    Downloaded 428 times
    Interrupt.ppt (1.27 MiB)
    Sandybridge interrupts
    Downloaded 429 times
  • Leency wrote:Стас получает бан на день за флуд и систематическое неправильное написание названия проекта.
    что то я флуда у него не заметил. он как и все выразил свое мнение. и я бы его поддержал.
  • abcd0081 wrote:
    Leency wrote:Стас получает бан на день за флуд и систематическое неправильное написание названия проекта.
    что то я флуда у него не заметил. он как и все выразил свое мнение. и я бы его поддержал.
    Очень круто поднимать темы которым уже полгода :) Флуд был удалён, наверно, не перечитывал.
    Из хаоса в космос
  • Necromancer 80 lvl
  • Serge wrote:Не понятно, почему завис ASRock M3A770DE. Хороший лог, правильный devices.dat.
    До r3613 обращение из APIC_init к таблице FAT рамдиска приводило к непредсказуемым последствиям, ибо таблица FAT рамдиска на тот момент ещё не была преобразована из 12-бит в 16-бит. Если devices.dat был длиннее 512 байт, то зависание неудивительно и с железом не связано.
    Я это словила по другой причине - в drivers/ появилось много всего, и при отсутствующем devices.dat в таблицу FAT лез уже код обхода папки - с теми же последствиями: на реальной машине ядро стало зависать при загрузке на стадии инициализации APIC. После чего было уже несложно выяснить, в чём дело.
    Сделаем мир лучше!
  • CleverMouse
    Спасибо, это конечно я лажанулся, вызывать load_file до calculatefatchain.
  • Скачал свой архив двухлетней давности http://kolibri-pe.googlecode.com/files/devman.zip и решил проверить.
    Внезапно всё работает !
    Spoiler:PCI_8086_101 bus:0 devfn: 8 pin 1 bios irq: 5 acpi irq: 16
    PCI_8086_102 bus:0 devfn: 10 pin 1 bios irq: 5 acpi irq: 16
    PCI_8086_1c3a bus:0 devfn: b0 pin 1 bios irq: 5 acpi irq: 16
    PCI_8086_1c2d bus:0 devfn: d0 pin 3 bios irq: 10 acpi irq: 18
    PCI_8086_1c20 bus:0 devfn: d8 pin 1 bios irq: 7 acpi irq: 22
    PCI_8086_1c10 bus:0 devfn: e0 pin 1 bios irq: 5 acpi irq: 16
    PCI_8086_1c1c bus:0 devfn: e6 pin 3 bios irq: 10 acpi irq: 18
    PCI_8086_1c1e bus:0 devfn: e7 pin 4 bios irq: 11 acpi irq: 19
    PCI_8086_1c26 bus:0 devfn: e8 pin 1 bios irq: 4 acpi irq: 23
    PCI_8086_1c02 bus:0 devfn: fa pin 2 bios irq: 11 acpi irq: 19
    PCI_8086_1c22 bus:0 devfn: fb pin 3 bios irq: 10 acpi irq: 18
    PCI_1002_683d bus:1 devfn: 0 pin 1 bios irq: 5 acpi irq: 16
    PCI_1002_aab0 bus:1 devfn: 1 pin 2 bios irq: 3 acpi irq: 17
    PCI_10ec_8168 bus:3 devfn: 0 pin 1 bios irq: 10 acpi irq: 18
    PCI_1b6f_7023 bus:4 devfn: 0 pin 1 bios irq: 11 acpi irq: 19

    Devices:

    PCI_8086_100 bus:0 devfn: 0

    PCI_8086_101 bus:0 devfn: 8
    APIC IRQ: 16

    PCI_8086_102 bus:0 devfn: 10
    MMIO range fb800000 - fbbfffff
    MMIO range d0000000 - dfffffff
    IO range ff00 - ff3f
    APIC IRQ: 16

    PCI_8086_1c3a bus:0 devfn: b0
    MMIO range fbfff000 - fbfff00f
    APIC IRQ: 16

    PCI_8086_1c2d bus:0 devfn: d0
    MMIO range fbffe000 - fbffe3ff
    APIC IRQ: 18

    PCI_8086_1c20 bus:0 devfn: d8
    MMIO range fbff4000 - fbff7fff
    APIC IRQ: 22

    PCI_8086_1c10 bus:0 devfn: e0
    APIC IRQ: 16

    PCI_8086_1c1c bus:0 devfn: e6
    APIC IRQ: 18

    PCI_8086_1c1e bus:0 devfn: e7
    APIC IRQ: 19

    PCI_8086_1c26 bus:0 devfn: e8
    MMIO range fbffd000 - fbffd3ff
    APIC IRQ: 23

    PCI_8086_244e bus:0 devfn: f0

    PCI_8086_1c4a bus:0 devfn: f8

    PCI_8086_1c02 bus:0 devfn: fa
    IO range fe00 - fe07
    IO range fd00 - fd03
    IO range fc00 - fc07
    IO range fb00 - fb03
    IO range fa00 - fa1f
    MMIO range fbffc000 - fbffc7ff
    APIC IRQ: 19

    PCI_8086_1c22 bus:0 devfn: fb
    MMIO range fbffb000 - fbffb0ff
    IO range 500 - 51f
    APIC IRQ: 18

    PCI_1002_683d bus:1 devfn: 0
    MMIO range e0000000 - efffffff
    MMIO range fbe80000 - fbebffff
    IO range ee00 - eeff
    MMIO range 0 - 1ffff
    APIC IRQ: 16

    PCI_1002_aab0 bus:1 devfn: 1
    MMIO range fbefc000 - fbefffff
    APIC IRQ: 17

    PCI_10ec_8168 bus:3 devfn: 0
    IO range de00 - deff
    MMIO range fbdff000 - fbdfffff
    MMIO range fbdf8000 - fbdfbfff
    APIC IRQ: 18

    PCI_1b6f_7023 bus:4 devfn: 0
    MMIO range fbcf8000 - fbcfffff
    APIC IRQ: 19

    PCI0
    Address range 00-03f
    IO range 0cf8-0cff
    Address range 00-0cf7
    Address range 0d00-0ffff
    Address range 0a0000-0bffff
    Address range 0c0000-0dffff
    Address range 0fed40000-0fed44fff
    Address range 0cfa00000-0febfffff

    SYSR
    IO range 010-01f
    IO range 022-03f
    IO range 044-04d
    IO range 050-05f
    IO range 062-063
    IO range 065-06f
    IO range 074-07f
    IO range 091-093
    IO range 0a2-0bf
    IO range 0e0-0ef
    IO range 04d0-04d1
    IO range 0290-029f
    IO range 0800-0805
    IO range 0290-0294
    IO range 0880-088f

    PIC
    IO range 020-021
    IO range 0a0-0a1
    IRQ 2

    DMA1
    DMA channel 4
    IO range 00-0f
    IO range 080-090
    IO range 094-09f
    IO range 0c0-0df

    TMR
    IO range 040-043

    HPET
    IRQ 0
    IRQ 8
    Memory range 0fed00000-0fed003ff

    RTC
    IO range 070-073

    SPKR
    IO range 061-061

    COPR
    IO range 0f0-0ff
    IRQ 13

    PS2M
    IO range 060-060
    IO range 064-064
    IRQ 12

    PMIO
    IO range 0400-04cf
    IO range 04d2-04ff

    PTMD
    IO range 01000-0107f
    IO range 01080-010ff
    IO range 01100-0117f
    IO range 01180-011ff

    CWDT
    IO range 0454-0457

    EXPL
    Memory range 0f4000000-0f7ffffff

    MEM
    Memory range 0d2800-0d3fff
    Memory range 0f0000-0f7fff
    Memory range 0f8000-0fbfff
    Memory range 0fc000-0fffff
    Memory range 0cafa0000-0cafdffff
    Memory range 00-09ffff
    Memory range 0100000-0caf9ffff
    Memory range 0cafe0000-0caffffff
    Memory range 0fec00000-0fec00fff
    Memory range 0fed10000-0fed1dfff
    Memory range 0fed20000-0fed8ffff
    Memory range 0fee00000-0fee00fff
    Memory range 0ffb00000-0ffb7ffff
    Memory range 0fff00000-0ffffffff
    Memory range 0e0000-0effff
    Memory range 020000000-0201fffff
    Memory range 040000000-0400fffff
    Memory range 0cb000000-0cf9fffff

    FWH
    Memory range 0ffb80000-0ffbfffff
    Пошел дальше по инструкции viewtopic.php?f=1&t=1195&start=105#p37822 и опять всё заработало. Правая колонка цифр - номера irq в hex
    Spoiler:PCI Version = 3.00; Last PCI Bus = 5
    User MMIO channel = 0F.F:F
    Number of PCI units = 12h

    VenID DevID Bus# Dev# Fnc Rev Class Subclass/ IRQ Company Description
    Interface
    ----- ----- ---- ---- --- --- ----- --------- --- ------------------------------------------ --------------------------------
    8086 0100 00 00 00 09 06 00 00 00 Intel Corp. Bridge - CPU/PCI
    8086 0101 00 01 00 09 06 04 00 10 Intel Corp. Bridge - PCI/PCI
    8086 0102 00 02 00 09 03 80 00 10 Intel Corp. Display - misc
    8086 1c3a 00 16 00 04 07 80 00 10 Intel Corp. Communication - misc
    8086 1c2d 00 1a 00 05 0c 03 20 12 Intel Corp. Serial Bus - USB2 Enhanced HC
    8086 1c20 00 1b 00 05 04 03 00 16 Intel Corp. Multimedia - High Definition Audio
    8086 1c10 00 1c 00 b5 06 04 00 10 Intel Corp. Bridge - PCI/PCI
    8086 1c1c 00 1c 06 b5 06 04 00 12 Intel Corp. Bridge - PCI/PCI
    8086 1c1e 00 1c 07 b5 06 04 00 13 Intel Corp. Bridge - PCI/PCI
    8086 1c26 00 1d 00 05 0c 03 20 17 Intel Corp. Serial Bus - USB2 Enhanced HC
    8086 244e 00 1e 00 a5 06 04 01 -- Intel Corp. Bridge - Subtract.Decode PCI/PCI
    8086 1c4a 00 1f 00 05 06 01 00 00 Intel Corp. Bridge - PCI/ISA
    8086 1c02 00 1f 02 05 01 06 01 13 Intel Corp. Storage - Serial ATA
    8086 1c22 00 1f 03 05 0c 05 00 12 Intel Corp. Serial Bus - SMBus
    1002 683d 01 00 00 00 03 00 00 10 ATI TECHNOLOGIES INC Display - VGA-compatible c.
    1002 aab0 01 00 01 00 04 03 00 11 ATI TECHNOLOGIES INC Multimedia - High Definition Audio
    10ec 8168 03 00 00 06 02 00 00 12 REALTEK SEMICONDUCTOR CORP. Network - Ethernet
    1b6f 7023 04 00 00 01 0c 03 30 13 Unknown Serial Bus - USB/USB2
    Usb работает, звук есть, ahci подключился. Значит код apic в полном порядке.

    Рекомендую тем, у кого были проблемы с прерываниями и usb.
  • Dell Vostro: "как есть" не завелось, часы тикают, система работает, но на внешние раздражители в лице PS/2 и USB не отзывается. Методом научного тыка я выяснила, что всё начинает нормально работать при применении любого из двух диффов

    Code: Select all

    Index: apic.inc
    ===================================================================
    --- apic.inc	(revision 3631)
    +++ apic.inc	(working copy)
    @@ -82,7 +82,7 @@
     @@:
             mov     ebx, eax
             call    IOAPIC_read
    -        mov     ah, 0x09; Delivery Mode: Lowest Priority, Destination Mode: Logical
    +        mov     ah, 0x08; Delivery Mode: Fixed, Destination Mode: Logical
             mov     al, cl
             add     al, 0x20; vector
             or      eax, 0x10000; Mask Interrupt
    

    Code: Select all

    Index: apic.inc
    ===================================================================
    --- apic.inc	(revision 3631)
    +++ apic.inc	(working copy)
    @@ -96,7 +96,8 @@
             inc     eax
             mov     ebx, eax
             call    IOAPIC_read
    -        or      eax, 0xff000000; Destination Field
    +        and     eax, not 0xff000000; Destination Field
    +        or      eax, 0x01000000
             xchg    eax, ebx
             call    IOAPIC_write
             inc     eax
    
    Дальше я ковыряться не стала.
    Сделаем мир лучше!
  • Who is online

    Users browsing this forum: No registered users and 2 guests