Nedá mi, abych nereagoval na tento díl seriálu :)
Těší mě, že existují lidé, kteří ještě mají tu potřebu seznamovat ostatní lidi s procesorem 8086. Nicméňe doba je trošku dál a já bych dával přednost 80386 a PM módu.... Ale jinak jsem rád, že někdo píše alespoň takové články, poněvadž je zde naděje, že nejmenovaní lidé nebudou říkat, že OS je jednoduchá záležitost i když zde jsem žádný kód, který by jen zdánlivě připomínal kód OS neviděl.
Myslim, ze bez zakladu na 8086 si nikdo s PM neporadi. Jsem rad i za takovy clanek, i kdyz bych PM uvital. Mozna casem, vzdyd jsme teprve na zacatku. Me se to nahodou velice libi, pripadam si, jako bych cetl staricky Bajt.
Take si pripadam, jakobych cetl Bajt :-) Ale myslim to jako poctu. Odkazy na procesor 8086 nejsou vubec zbytecne - tu architekturu si v sobe vlastne nesou i nejnovejsi Pentia a pro pochopeni to pomuze urcite mnoha zajemcum, kteri stoji o to, aby pronikli trochu hloubeji.
Nikoliv.
Diky tomu, ze neznaly pochopi, co to je vektor preruseni na procesoru 8086, nebude mu cinit potize to pochopit na Pentiich v protect modu - on totiz princip zustava stejny, jen detaily jsou trochu slozitejsi.
OS se ve skolach dost casto uci na nejake variante Riscu (dost casto Mips). Porovnam-li instrukcni sadu ia32 s ostatnimi, tak je mi naprosto jasne, proc to delaji. Vykladat OS na ia32 je humus.
To ne, ale schizoidni psychopatie zpusobuje, ze clovek vic
sedi u pocitace a min komunikuje s lidmi, takze pokud je
clovek psychopat, tak je zvysena pravdepodobnost, ze obsluhu
preruseni bude programovat.
To ze vsetci vidia len SW firmy ktore kodia v Jave, C# a podobnych hi-level jazykoch je pochopitelne, lebo Java aj C# je COOL! Ale preboha, uz sa preberte zo sna ze procesor vykonava priamo konstrukcie if,while,....! Nie, skutocne je tam aj vrstva napisana v assembleri.
A by ste sa ohromne cudovali, ale existuju aj tzv. priemyselne procesory, ktore sa ovladaju pomocou assembleru.
Takze taky kydy akoze kto dnes programuje prerusenia je schyzofrenny mozu vypustit len totalne neznali jedinci, ktori sa tu chcu predviest.
Nemyslim si totez, celkem zive si pamatuji, kdyz jsem psali na 386-kach vlastni obsluhi povesene na interepty jako napr. 8 a 9, ci od UARTu nebylo na tom zase nic tak zvlastniho, trochu vetsi problemek uz bylo obslouzeni 21h(sluzby DOSu), kdyz clovek chtel mi chranene nektere adresare na heslo apod., kazdy kdo nekdy psal TSR se s timto musel potykat, ovsem to byl REAL :-(.
Jeste existuje jedna instrukce, ktera pri splneni podminky generuje i realmodu preruseni. Jedna se o BOUND - kontrolu mezi jednoho integeru, tj. v podstate test:
min<value<max
Tato instrukce generuje tusim int 5, ale uz 10 let jsem ji nepouzil :-), tak se mozna v tom cisle pletu.
Vektory přerušení jsou uloženy na začátku RAMky. Ovšem měnit je _tímhle_ způsobem je s prominutím prasárna, protože zápis obou částí adresy (báze, offset) není atomická.
V tomto příkladu je to samozřejmě celkem jedno, ale stálo by aspoň za zmínku, jak se to dělá "čistě".
Pokud longem myslite plochy - flat - tak si akorat srovnejte vsechny baze a ofsety a zbytek je uplne stejny, jen nesmite zapomenout nastavit spravna pristupova prava na stranky... jinak se z tech preruseni vyvolanych porusenim ochrany pameti po...:-)
A co s Vámi dělá třeba taková „jednotka výpočtů v plovoucí řádové čárce“, „systém sdílení času“, „proces ve stavu mátoha“, „paměť RWM o velikosti 512 kiloslabik“ a „sestavovací program“? :-D
Ta dioda je u té zkratky kvůli flexi. (Aneb "tu LED, bez té LED" - jak to zní? ;-)). Mám pocit, že jsme tyhle věci kdysi dávno konzultovali s ÚJČ, abychom to měli košér.
Poněkud mi uniká smysl seriálu. Ale také některé zavádějící informace.
1) začínat seriál o programování OS zaváděcí rutinou je typickou začátečnickou chybou - na první pohled se to zdá logické, jako například zahájení autoškoly startováním. Ovšem pokud budete chtít automobil zkonstruovat, prvním problémem asi nebude startér a otázky startování.
2) text evokuje pocity, že neexistují jiné procesory než x86, že neexistují jiné počítače než PC a že na jiných platformách OS nepracují; přitom potřeba v dnešní době vyvíjet OS vlastními silami vyvstává především pro architektury non-x86 a non-PC.
3) informace o architektuře x86 jsou poněkud neúplné, až zavádějící. Například není pravda, že v reálném režimu máme k dispozici jen 16-bitové registry, není pravda, že procesor 8086 pracuje v reálném režimu (toto dělení se poprvé vyskytuje u 80286), popis přerušení je podán poněkud naivním způsobem (např. chybí jakákoli zmínka o řadiči přerušení)...
4) uniká mi smysl popisu reálného režimu x86. Kdosi tu psal, že je to nezbytné pro pochopení chráněného režimu, ale s tím nesouhlasím. Naopak to může spoustu věcí spíše zamlžit, protože 8086 byl z hlediska konstrukce procesorů naprostým krokem vedle a chráněný režim není nic jiného než pokus tento stav napravit. Segmentace je v chráněném režimu věc naprosto logická a snadno pochopitelná, ovšem ne v reálném režimu, kde se skutečnou segmentací nemá téměř nic společného - jde jen o velmi svébytný (a poměrně nevhodně navržený) způsob lineární adresace.
Samozřejmě je hezké že se někdo rozhodne napsat článek na tak zajímavé téma, je jen škoda, že k tomu došlo evidentně v zápalu začátečníckého nadšení.
Děkuji. Sice nejsem žádný spisovatel, ale o podobném seriálu jsem před pár lety také uvažoval, ovšem je otázkou, komu by vlastně měl být určen - proto jsem se ptal po smyslu tohoto článku. Laici? Softwareáři? Hardwareáři?
Pro první skupinu takových článků existuje spousta a bylo by to nošení dříví do lesa, druhá skupina obsahuje poměrně vyhraněné lidi a pro systémáře by byl přínos takového seriálu diskutabilní - je jich pár a nad takovým seriálem by jen souhlasně pokyvovali nebo naopak šťourali do detailů. Hardwaráři by zase ocenili větší nezávislost na konkrétním HW při zachování důrazu na nízkoúrovňovou vrstvu a asi by to pasovalo na jiný portál.
Nechci předem odsuzovat, třeba se to ještě nějak příjemně vyvrbí, ale první dva díly se problematikou OS nezabývají ani okrajově. Odborník se nic nového nedověděl, pamětník si zavzpomínal a ti ostatní se dozvěděli jak PC nabootuje program a jak napsat rutinu obsluhy přerušení generovaného procesorem (v konkrétním příkladu dělení nulou tedy vlastně výjimky a nikoli přerušení) - obsluha skutečného vnějšího HW přerušení je na PC poněkud složitější, než jak by se z druhého dílu mohlo zdát.
Pokud by byl zájem, tak bych se vytvoření seriálu o základech návrhu OS nebránil, i když se domnívám, že jsou tu kvalifikovanější lidé k takovému počinu. Ovšem k zdejšímu seriálu bych jako podtitul přidal "...aneb podívejte, co se mi v uplynulém měsíci podařilo naprogramovat" - nic ve zlém, ale tak to na mne opravdu působí ;-) Takže v duchu této domněnky bych autorovi seriálu popřál mnoho programátorských úspěchů.
Priznam se, ze pisu OS v ANSI C + GNU Assembler... Je to docela sranda, kdyz uz mate vsechny zakladni funkce. Tohle je teprve zacatek. Ja pouzivam jako bootloader GRUB. Pak se nacte 32-bit ELF kernel, zavedou se ovladace, pripoji se ext2fs a nabehne konzole. Mam hotovy dokonce i preemptivni multitasking, spousteni ELF programku, uzivatelske knihovny. Ale zacatek je podle me vzdy nejtezsi, protoze na nem zavisi vsechny ostatni veci. Napr. pokud udelate chybu v harddiskovem driveru, tak vam prestane fungovat dalsich x veci, ktere jsou na nem zavisle. Takze je treba hodne si pri programovani uvedomovat to, co vlastne menite a co zmena muze zpusobit. Protoze, kdyz udelate chybu, tak ji hledate treba cely tyden, je to hrozna nuda a pak zjistite, ze jde o jeden radek, ktery jste zmenili pred tydnem. Takze good luck vsem OS programatorum.
Taky si píšu vlastní OS. Sice 16bit real-mode, ale je zhruba na úrovni MS DOSu :-). Můžu poprosit o poskytnutí zdrojových kódů? :-) Celkem by mě to zajímalo. V ČR se jen tak někdo nenajde, kdo se zabývá programováním OS. Jinak souhlasím, začátek je vždy nejtěžší.