Hlavní navigace

Vlákno názorů k článku Programujeme OS: jak na GDT a IDT od I/O - Předpokládám, že si to tu schytám, protože kritika...

  • Článek je starý, nové názory již nelze přidávat.
  • 13. 8. 2009 0:30

    I/O (neregistrovaný)

    Předpokládám, že si to tu schytám, protože kritika není přípustná, ale ten článek nemá ani hlavu, ani patu. Dokonce ani některé jednotlivé věty nedávají smysl. Prostě celé je to ve stylu „GDT je když…“

  • 13. 8. 2009 1:50

    dolik.rce (neregistrovaný)

    Předpokládáš správně ;-) Mě úplně stačí že se autor vyzná v tématu, stylistickou stránku mu klidně odpustím. Jestli ti na tom tak záleží, můžeš dělat korektury – věřím že autor by to uvítal.

  • 13. 8. 2009 12:00

    I/O (neregistrovaný)

    Já teda o tom právě po přečtení tohohle dílu přesvědčen nejsem. Je to napsané stylem, jako když student mlží u zkoušky. Navíc – jak už tu poznamenali jiní – některé pasáže jsou přímo zavádějící:

    „Můžeme jim říkat popisovače tabulek“ – jakých tabulek? Snad tabulky popisovačů, ne? Vlastně celé to souvětí je jakési pomatené.

    Zmínka o stránkování a segmentaci je příliš zjednodušená i na pouhý laický popis, natož na článek údajně pojednávající o psaní OS.

    „Stránkování se také využívá pro účel virtuální paměti“ – cože? Stránkování je mechanismus, kterým se virtuální paměť realizuje! To je jako říct, že motor v autě slouží k vytápění a také se využívá pro účel pohonu vozidla.

    „Proměnná gran je velikosti 1 bajt a představuje masku k nastavení granularity. Slouží tedy k nastavení několika klíčových parametrů segmentu, podobně jako proměnná attrib“ – a které nejsou ty klíčové? Nehledě k tomu, že čtenář z článku nezjistí, co to ta granularita vlastně je.

    „Vidíme před sebou jeden záznam, který tvoří onu GDT – my jich budeme potřebovat 5“ – a proč? To by snad stálo za nějaký komentář, ne? Kromě toho, že jeden je nulový a další jsou datové a kódové pro R 0 a 3.

    „Teď nastala otázka, jak oznámit procesoru, aby naši GDT použil – naštěstí existuje instrukce lgdt“ – to ale máme štěstí! No představte si, kdybychom takové štěstí neměli a instrukce lgdt by nějakou shodou náhod neexistovala – to bychom měli po žížalkách.

    „Občas se nám může hodit tzv. přerušení, ať už vnější nebo vnitřní – to si lze představit jako nečekaný impuls procesoru, který říká, že se něco stalo. Máte např. uživatelský program, ve kterém nemůžete přistupovat na adresy jako 0×b0000, apod. ale máte za cíl vypsat text na obrazovce. Jak to tedy udělat ? Použijeme přerušení :) – jeho instrukce se jmenuje int a jako parametr se používá hodnota, která označuje jeho druh.“ – to jako autor myslí vážně? S prominutím – byl střízliv a plně při smyslech, když tuto nesmyslnost psal?

    „usmyslíme si, že přerušení s ID 0×80 bude vypisovat znak, který předáme pomocí registru, může ho náš program směle zavolat“ – autor čtenářům dokonale zamlžuje (nebo si to sám plete?) rozdíl mezi hardwarovým a softwarovým přerušením. Začne psát o hardwarové žádosti o přerušení (IRQ) a pak, bez jakéhokoliv varování, pokračuje (hodně zjednodušeným) popisem mechanismu softwarových přerušení (nebo-li programových výjimek). Přitom se jedná o dost odlišné věci – jedno je asynchronní, druhé je synchronní, na neinteláckých procesorech se to často vůbec neimplementuje (není to nezbytné), nebo se tomu (jak je vidět, tak docela prozíravě) raději říká úplně jinak – viz třeba instrukce TRAP na 68K.

    „Každý záznam v tabulce zaregistruje funkci, která se vykoná, když se zavolá konkrétní přerušení.“ – „zavolá“? To asi nebude nejvhodnější slovo. Snad „…když dojde k přerušení“, ne?

    „důležitý general protection fault (GPF), který nám říká, že došlo v paměti k chybě.“ – opravdu? Jako že třeba při čtení nesouhlasí parita dat kvůli nějakému rušení na sběrnici?

    „Dnes jsme si tedy vytvořili užitečnou ochranu našeho jádra proti poškození paměti či dalším nežádaným vlivům.“ – tak to asi ještě ne. Zatím jen víme, jak eventuálně na to. ;-)

  • 18. 8. 2009 15:10

    vtech (neregistrovaný)

    Proc ne? Urcite ne univerzalni, ale nejaky jednoucelovy/spe­cialni klidne.

  • 13. 8. 2009 14:55

    bez přezdívky

    Měl byste vzít na vědomí, že kdybych začal rozepisovat každou věc, mohl bych psát jen o zmiňované granularitě jeden celý díl – snažím se vše trochu zjednodušit, což znamená, že pro úplné pochopení budete muset nastudovat dokumentaci. Co se týče přerušení, chtěl jsem jen podotknout, že něco takového vůbec existuje. Osobně se mi zdá, že se moc vrtáte ve slovech, vím že nejsem žádný spisovatel a právě proto jsem odkázal i na tu dokumentaci – jestli si chcete napsat vlastní systém a rozumět mu, není moc jiných cest. Snažím se to psát pro normální lidi (čím více termínů, tím hůř) – mimochodem taky pracujete na operačním systému ?

  • 13. 8. 2009 21:22

    progysk (neregistrovaný)

    s kritikou uzivatela I/O absolutne suhlasim. rozhodne by zacal mat clanok aj nejaku informacnu hodnotu, ak by si sa aspon ciastocne riadil pripomienkami

  • 14. 8. 2009 7:58

    M.L.

    Měl byste vzít na vědomí, že kdybych začal rozepisovat každou věc, mohl bych psát jen o zmiňované granularitě jeden celý díl – snažím se vše trochu zjednodušit, což znamená, že pro úplné pochopení budete muset nastudovat dokumentaci.

    Právě že by to mělo být obráceně – ne sem fouknout strukturu GDT bez toho abyste čtenáři vysvětlil k čemu to vlastně je dobré, ale naopak byste měl nejdřív vysvětlit k čemu a jak procesor GDT a IDT používá a pro detailní strukturu odkázat na dokumentaci.

    Tenhle díl fakt nemá hlavu, patu a ani smysl. Kdo tyhle věci předem neznal je z článku určitě nepochopil a kdo to znal teď oprávněně prská že to místy nedává smysl. Jestli to píšete pro začátečníky tak holt musíte vysvětlit základy – stránkování a segmentování by určitě vydalo na samostatný článek ale bylo by to dobře vynaložené úsilí protože bez jejich pochopení se nedá vysvětlit třeba virtuální paměť. Odbýt stránkování a segmentování jedním odstavcem a pak se bez dalšího vysvětlování vrhnout na technické detaily nastavování GDT je fakt trochu mimo mísu.

  • 14. 8. 2009 9:51

    bez přezdívky

    „Odbýt stránkování a segmentování jedním odstavcem a pak se bez dalšího vysvětlování vrhnout na technické detaily nastavování GDT je fakt trochu mimo mísu.“ – Zde jsem je zmínil jen ukázkově kvůli rozdílům a co se týká stránkování, je naplánováno na další díly, takže si to vykládáte trochu špatně.

  • 14. 8. 2009 13:15

    Michal Ludvig (neregistrovaný)

    To je právě IMHO špatně. Bez pořádného vysvětlení jak v chráněném režimu funguje paměť a adresování nemá smysl se zabývat GDT. Je to trochu jiné než v prvním díle při ovládání VGA – každý asi tuší k čemu může být psaní na obrazovku dobré takže není potřeba moc okecávat _proč_ to děláme a je celkem ok hned ukázat kód. Jenže o GDT a IDT určitě naprostá většina čtenářů vůbec netuší k čemu by jim to mělo být dobré a z článku se do nedozví, takže ukazovat jim jak se to nastavuje je k ničemu.

    Dejme tomu že se dostanete k nějakým domorodcům v pralese kteří v životě neviděli auto. Když jim ukážete že to jezdí dopředu a dá se točit volantem tak to asi pochopí. Ale bez toho abyste jim ukázal že tam někde je schovnej motor a vysvětlil jim jak to celé funguje nemá cenu je učit jak se v něm vyměňují svíčky.

    Stejně tak tady nemá cenu mluvit o lgdt instrukci když většina čtenářů v té chvíli nemá tušení čeho vlastně mají docílit.

  • 14. 8. 2009 22:16

    povinná (neregistrovaný)

    „Jenže o GDT a IDT určitě naprostá většina čtenářů vůbec netuší k čemu by jim to mělo být dobré“

    Asi nebudou sami, celá řada návrhářů RISCových procesorů očividně netušila, k čemu by to mohlo být dobré. :)

  • 14. 8. 2009 12:58

    I/O (neregistrovaný)

    O zmíněné granularitě by stačil jeden odstavec, ale stránkování si (minimálně) jeden celý díl určitě zaslouží, stejně tak problematika přerušení. Věřím, že se k tomu určitě ještě hodláte vrátit, ale v tom případě stačilo napsat, že si nastavíme některé tabulky, nad jejichž obsahem nebudeme momentálně meditovat a rozebereme si to v budoucnu. Nežli se pokoušet to popsat takhle lajdácky. ;-) Období vrtání se ve slovech mám už za sebou, pokouším se naopak být hodně shovívavý a chápavý, ale co je moc, to je fakt moc – odstavec o přerušeních je opravdu napsán stylem, jako byste začal popisovat pilník, od půlky věty byste najednou popisoval hoblík a celý popis byste motivoval příkladem, jak se dá hoblík použít k zatlučení šroubu. V příštím díle přeji přeci jen šťastnější ruku při výběru témat a jejich zpracování. ;-)

    K poslední otázce – ano, vyvíjím; jednak je to má práce (v oblasti „embedded“), jednak je to můj koníček (ale jakožto člověk silně ovlivněný pracemi Ch. Moora, A. Kaye a N. Wirtha se zajímám hlavně o alternativní a experimentální směry).

  • 16. 8. 2009 18:51

    Czechs suck (neregistrovaný)

    The author is most likely a self-thought guy. Don't be too hard on him. – English is the language where Global Descriptor Table means Global Descriptor Table.

  • 13. 8. 2009 9:12

    matej (neregistrovaný)

    Souhlas, po stylisticke strance je clanek skutecne otresny a temer nesrozumitelny.

  • 13. 8. 2009 19:31

    BLEK. (neregistrovaný)

    No, taky mi dnešní článěk přišel jako slovní salát. Hlavně by autor měl zdůraznit, že GDT je přežitek z 286, nutná zbytečnost, kterou jednou nastavíš, pak zapomenš, že existuje a nikdy víc na ni nesaháš.

    Takové věci, jako x86 segmentace, jsou přesně důsledkem toho stylu návrhu bez programování, co dole popisuje Filo – nekdo navrhne featuru, aniž by byl programátor a zkusil ji použít, druhý ji podle návrhu implementuje, třetí zjistí, že je to pro programování nepoužitelné, ale už je příliš pozdě ji měnit.

  • 17. 8. 2009 18:27

    Sten (neregistrovaný)

    Mě se segmentace při psaní OS líbila, protože umí lépe nastavovat práva pro čtení/zápis/spuš­tění a ring určité části paměti než stránkování (kde jsou akorát NX, RW/RO bit a S/U bit), čímž může značně zvýšit ochranu mikrojaderného systému (pokud používá i ringy 1 a 2) proti chybám jako např. buffer overflow či poison null byte a mrzí mě, že v x86–64 už není.

  • 17. 8. 2009 22:12

    BLEK. (neregistrovaný)

    To není dáno kvalitou segmentace, nýbrž blbou implementací stránkování (stačilo by do tabulky stránek přidat dva bity na práva pro ringy 0/1/2/3 a bylo by to bez segmentace).

    Pokud chceš jeden kernel ring a dva userspace ringy, dá se to „bez segmentace“ udělat tak, že nastavíš userspacové segmenty pro oba ringy na bázi 0 a limit 3GB, pak si pomocí bitu U/S v tabulce stránek můžeš vybírat, ze kterého userspacového ringu je stránka přístupná (přičemž stránky v rozsahu 3–4GB budou pouze pro kernel). Jenže tím zase přijdeš o fast syscally: SYSCALL a SYSENTER. Když chceš plné 4 ringy, tak pak už s těmi segmenty manipulovat musíš.

    Na co přesně jsi ty ringy použil?

  • 18. 8. 2009 13:42

    Sten (neregistrovaný)

    Ano, s tím souhlasím, na druhou stranu ta segmentace umožnila na von Neumannově architektuře simulovat Harvardskou, které se mi tak nějak víc líbí, protože má oddělené instrukce a data. Ale jde spíš o zvyk.

    Chtěl jsem to použít pro ovladače, které potřebují přístup k I/O (ring 1) a ovladače bez přístupu k I/O (ring 2) nastavením IOPL. Nakonec jsem to ale implementoval přes I/O Permission Bit Map v ringu 3.

  • 18. 8. 2009 19:19

    BLEK. (neregistrovaný)

    Pokud ty ovladače dáme do jednoho adresního prostoru na ring 1 nebo 2, tak nám to žádnou ochranu nepřinese, sice tomu ringu 2 zabráníme sahat na I/O porty, ale jeden ovladač bude moct stejně zničit libovolný jiný ovladač běžící na témže ringu a znefunkčnit celý systém. Když ovladače dáme každý do zvláštního procesu, tak zas nepotřebujeme ringy, dá se to řešit bitmapou nebo IOPL pro jednotlivé procesy.

    Ringy používá XEN (hypervisor/ker­nel/userspace). Taky to používalo VMS na to, aby v jednom procesu mohl běžet shell i program, a aby ten program nemohl zničit shell. Ale jinak moc použití nemají…