Je trošku rozdíl mezi popisem vnějšího chování systému, porovnání barevnosti tlačítek příp. rychlosti překreslování grafiky jako na Živě a datailním srovnáním funkcí jader různých systémů. Tedy já se rozhodně přikláním k tomu, aby do článků podobného druhu byly zařazeny i Windows, pokud o nich autor chce psát. Rozhodně mne to zajímá. Krom toho bych si přál větší důraz na připravované jádro 2.6, zvláště pokud v něm budou výrazné změny oproti 2.4 v příslušné oblasti, alespoň v rozsahu jako je věnován FreeBSD 5.x
Článek se mi velmi líbil.
to je naprosto nepodlozene tvrzeni (kterych je od open source radikalu dosti a dosti :-)). proc autor v clanku zminuje NT+ verzi maskovani preruseni? hmm zrejme autor nemel dostatek informaci :-P
informace je jednoduche ziskat (ovsem pokud je ziskat chcete) - existuje literatura a _hlavne_ existuje IDA a ntoskrnl.exe. aplikujte prvni na druhe a mate zdrojaky! kdyz tomu pridate symboly, je v podstate hotovo. ted uz se jenom naucit cist.
priste misto - o windows se nic moc napsat neda, protoze k nim nejsou zdrojaky - piste - o windows toho moc napsat nemuzu, protoze o nich nic nevim. (krome toho ze porad padaji a jsou o toolik horsi nez linux/freebsd/<dosadte si cokoliv open source>).
jinak clanek nic moc. pro normalni lidi nepouzitelne a pro ty, co se operacnimy systemy zabyvaji, zbytecne ...
O windows toho skutečně moc nevím --- ani je na počítači nemám instalované. Četl jsem Windows NT inside, ale moc se z toho poznat nedalo --- v podstě tam byly obdélníčky s názvy jednotlivých subsystémů a šipečky mezi nimi.
V diskuzi u článku "Gentoo Linux FAQ" jste napsala, že píšete drivery do kernelu windows, tak na to můžete taky napsat článek --- mohlo by to být zajímavé a snad by Vás ani ti linuxoví fanatici neukamenovali :)
myslim, ze psani clanku prenecham zdatnejsim pisatelum, nez jsem ja. mam projekty, ktere jsou pro mne prioritnejsi, nez psat clanky a pak procitat a opdovidat na nenavistne prispevky ve forech. vlastne Vas obdivuji :-)
ostatne, root.cz je preci server o open source technologiich, na windows nt zde neni misto, tak se jen snazim poopravovat urcite FUDy, ktere se zde (vesmes pouze v prispevcich!) objevuji. mozna, ze _to_ by casem mohlo vydat na clanek. uvidime ...
"mam projekty, ktere jsou pro mne prioritnejsi, nez psat clanky a pak procitat a opdovidat na nenavistne prispevky ve forech. vlastne Vas obdivuji :-)"
slecno/pani ivono, v podstate vas tez obdivuji, ale kapku si s tim, na co mate/nemate cas a co pro vas je/neni prioritou protirecite. procitate a (nenavistne) odpovidate zda se nejenom na root.cz ...
nechcete se radeji skutecne venovat svym "prioritnejsim projektum"?
Ja vam neberu, ze o windows zrejme neco vite, ale root.cz je server o Open-Source technologiich.
Takze si laskave bezte psat sve hlody o nich kam patri tedy na zive.cz
...ja pamatuju doby kdy na root.cz chodili veci znali a slusni lide, ale ty jsou zrejme s nastupem Internet Infa ty tam, tedy ne ze bych proti teto spolecnosti neco mel ale bohuzel to neni spolecnost, ktera by se vyvojem zabyvala a tak chce vydelavat na reklame ;)
cimz padem xce hlavne pritahnout velke mnozstvi lidi a asi ji to nemuzu mit za zle, ale mam ji za zle ze jsem pousti ruzne flames ala MDK a spol.
To jsem se ale odklonil od tematu.
Tedy zpet: Opravdu nevidim duvod proc motat dohromady systemy pouzivane v superpocitacovych strediscich, NASA a v narocnych mission-critical aplikacich (tedy UNIXy, mezi ktere patri i Linux a *BSD).
A systemy vhodne/nevhodne pro male domaci uzivatele a mensi firmy (windows).
A rozdhodne nemohu souhlasit s tim ze lidem, kteri se nejen o kernel, ale i vseobecne, systemove technologie zajimaji, ci se jich narozdil od vas tyka jejich prace.
Ideou, kterou vy diky sve zahlcenosti Windows nemuzete chapat, ktera vznikla v komunite kolem Linuxu a jeste drive kolem UNIXu na univerzitacha dokonce i v mnoha komercnich spolecnostech.je umoznit kazdemu rovne podminky pri pristupu ke vzdelani v danem oboru a take napriklad rovne podminky ve vyvoji, opet, coz vy asi stezi muzete chapat </flame>
Nechci rozpoutavat flamewar. Pouze fakta: tento prispevek JE o opensource, dokonce je doplnen o srovnani s NT kernelem, coz povazuji za "tresnicku na dorte". Nekomu se mozna nelibi, ze je zde kernel NT oznacovan za lepsi v urcitem bode nez kernel *NIXu. Ale kvuli tomu slepe kritizovat cely docela obsahly a zajimavy clanek?
Nevidim na clanku nic odsouzenihodneho. Kritizovat umi kazdy krupan, napsat clanek, o kterem se aspon bude diskutovat (i kdyby to byla jeho jedina hodnota), to je neco jineho. Az dostanu tip na clanek od nautiluZe, prectu si ho a obohati me takovym zpusobem, jako ten, o kterem zde nyni diskutejeme, prestanu Vas radit mezi tu skupinu "kritiku" (je na vas, zda si dosadite ono mnou puvodne pouzite oznaceni, neprislusi mi nekoho kritizovat nebo dokonce ponizovat).
P.S.: nenasel jsem tag <flame> ale pouze </flame>
root.cz je pro mne server o technologiich. dle meho nazoru je to nejlepsi takovy server, ktery muzete v soucasne dobre na ceske Siti najit. proc by se mel uzavirat jen open source? svet neni jen open source. svet neni jen microsoft. a tak je to preci krasne :-)
stejne jako Vy si pamatuji doby, kdy prispevky k clankum (i clanky samotne) byly prosty emocionalnich, familiernich a patetickych vylevu typu Johanka, Clock a podobne (vsem, na ktere jsem zapomnela, se omlouvam), kdy temer kazdy prispevek do fora mel urcitou uroven. ty doby jsou jiz pryc, a tak si musite, stejne jako ja, zvykat na novou skutecnost :-)
open source je krasna vec, sama kod vsech svych projektu davam volne k dispozici (i kdyz zdaleka jeste nedosahuje takove urovne, jakou si predstavuji - a to je take duvod, proc delam it - porad se clovek musi ucit a trenovat). snazim se pomahat projektum, ktere se mi libi (napriklad www.reactos.com). jedine, co nemusim, jsou radikalove. at jiz na strane os, nebo na te opacne.
a co muzu a nemuzu chapat, to laskave nechte na mem vlastnim posouzeni :-).
Skvele, doufam ze na rootu zacne vychazet vic takovych clanku a serialu.
Mam jen jednu poznamku: Je asi jasne ze jako Linux berete zrejme nepatchovane jadro z kernel.org
z cimz souhlasim, ale mozna by bylo vhodne v dalsich serialech zminit, kdyz uz jste byl u tech NT, take jina komercni, ale Linuxova jadra.
Napr. jadro do SUSE uz myslim od verze 8.1, nebo 8.2 obsahuje implementovany preemptvni multitasking a myslim ze dokonce i na root.cz se objevila tiskova zprava o vydani real-timove distribuce od SUSE.
To je vsak jen jedno dalsi jadro...
Jo, beru standartni jadra. Pokud nekdo dodava napriklad 2.4 s podporou preemptivniho kernelu, je to hazard a muze to docela slusne padat. (problemem je tzv. cpu-local area --- kazde CPU ma vyhrazenu oblast pameti pouze pro ne, na nepreemptivnim kernelu mohou ovladace s touto oblasti pracovat bez zamku, na preemptivnim kernelu je v tomto kodu race. Je potreba audit celeho kernelu, ze se to vzdy pouziva se zamky, nestaci pouze jednoduchy patch na preempci).
Co se tyce real-timovani --- existuji real-time interrupty a real-time prepinani procesu. Linux neumi ani jedno --- staci napriklad prepnout konzoli nebo poslat nejaky escape-code na scrollovani casti obrazovky a po celou dobu kresleni konzole jsou zakazana preruseni.
Kdysi existoval projekt behu linuxu nad realtimovym mikrokernelem, myslim, ze se to jmenovalo mkLinux.
No ona SUSE rekl bych je uz nejakou dobu jakymsi nastupcem UNIXu, je to "napad" Linux a "dokonalost" UNIXu.
Precetl jsem si neco co jsem o vyse zminovanych real-time patchich, ktere byly zmineny a s neprilis lichotivym nazorem na ne musim souhlasit, je to jiste dobra snaha, ale jeste v plenkach...
Abych se vratil k SUSE: implementovala preepmtivni multitasking, bez ztraty stability a bezpecnosti kernelu, z narocneho provozniho nasazeni ve kterem je pouzivame to muzu potvrdit.
Priznam se ze uplne, i kdyz je Open-Source, tyhle mechanismy v SUSE jadre neznam...
Dekuji za zajimavy clanek. Nejsem odbornikem na jadro, ale to jeste neznamena, ze se o nej nezajimam.
Ocenuji Vas vyklad, ktery je i pro laika srozumitelny, a zaroven neni psan jako dvoustrankove clanky typu "Co vsechno lze delat s pocitacovou mysi".
BTW: Mohl byste treba jen okrajove zminit vyhody/nevyhody casto diskutovaneho monolitickeho kernelu vs mikrokernelu (napr. situaci, kdy selze ovladac v jadre a slozi cely system (z vl. zkusenosti); ovladacu bude pribyvat, riziko se zvysuje).
taky se pripojim ke gratulacim za vyborny clanek.
ad Monoliticky kernel....
Obavam se, ze detaily a srovnavani Monilitickeho kernelu, mikrokernelu nebo treba i exokernelu a ja nevim co jeste ...kernelu, by vydalo na samostatny clanek ne-li serial. Ne ze by to nebylo zajimave, prave NAOPAK - kdyby se nasel nekdo kdo se v problematice orientuje a napsal o tom clanek bylo by to velmi zasluzne.
To mne pripomina, ze uzivatelsky manual k nasem projektu skutecne obsahoval navod, jak klikat mysi --- u obhajoby si na to dokonce nekdo stezoval :-)
Co se tyce diskuze monoliticky kernel vs. mikrokernel --- dnes je to uplne dead. Mikrokernely se nepouzivaji. Casto se o necem prohlasuje, ze je to mikrokernel, i kdyz neni (napr. prvni verze Windows NT, BeOS).
Mac OS X není mikrokernel. Dokonce v něm ani standartní unixový kernel "neběží" nad Machem jako proces. Mac OS X je normální BSD kernel, s kernelem obsluhujícím unixové syscally a se všemi drivery v kernelspace, který má přidané možnosti meziprocesové komunikace z Machu. Někomu nestačily pipy, unix domain sockety s sysV IPC, a tak si vymyslel, že tam chce ještě komunikační primitiva z Machu. Podle mě je to zbytečný featurismus.
Dobre, dopustil jsem se nepresnosti. Neni to nanokernel, jak tedy nekdo uvedl (BSD spusteny jako proces), neni to mikrokernel, jak jsem uvedl ja, ale taky to neni monoliticky kernel jak tvrdis ty. Je to kombinace, ktere se tusim rika hybridni kernel, ve kterem je cast sluzeb implementovana pomoci serveru (I/O, sprava prostredku) a cast je v "monoliticke" prilinkovane casti (BSD ABI). Dusledkem jsou dva jevy: jsem schopen pridavat ovladace zarizeni, fs a jine veci za behu systemu a pocitac je porad rozumne rychly. Za druhe: z toho vznikl asi ten maglajz, co si nasel ve zdrojakach darwinu ;)
vice zde:
http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgramming/Mach/chapter_6_section_1.html#//apple_ref/doc/uid/TP30000905-CH209-TPXREF101
http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgramming/Architecture/index.html
Jakou to má přesně možnost pouštět ovladače v userspace? Tu jejich IO-KIT jsem nezkoumal, moc se mi nelíbila a navíc je v C++. Běží ty ovladače IO-Kit v kernelu nebo v userspace?
Po zběžném prohlédnutí jsem získal pocit, že to běží v kernelu, nicméně přímo ten kus kódu, který by překládal BSD buffer strategy na IO-KIT volání jsem nenašel.
Filesystém mají určitě v kernelu, tam je úplně normální BSD VNODE rozhraní.
Priznavam, jsem vinen! Je to nejake divne :-) Moduly se sice daji dynamicky nahravat (prikaz kextload jako su, restart, plug and play jako user), ale cele bezi v kernel space. Do user space exportujou pouze rozhrani k danemu zarizeni. Priklad: ke SCSI karte je pripojeny scanner, kernel poskytuje pouze zakladni komunikaci mezi zarizenim a userspacem, k tomu vyuziva jine moduly v ramci IOKitu, napr. ovladac SCSI karty. Uzivatelsky software pouze vyuziva exportovaneho rozhrani k implementaci vyssich funkci nad zarizenim. Zmatlo mne asi to nahravani za behu, neni nutne prekomplivavat jadro kvuli kazde blbiny. Ne ze by to neslo, ale zmeny v jadre ma na starosti typicky Apple.
Kernel extensions se doporucuje pouzivat pouze pokud je k tomu duvod, protoze bezi prave v kernel space. Prikladem muze byt prave vzorkovaci zarizeni pro audio nebo jiny sirokopasmovy zdroj dat, jak tady nekdo poznamenal.
C++ (omezena podmnozina) je pry pouzita pro znovupouziti stavajiciho kodu. Pro vyvoj noveho ovladace staci vzit predpripraveny vzor, nebo jiny dostupny ovladac, trochu jej pozmenit a novy ovladac je na svete.
Za filesystem se omlouvam dvojnasob, je to blbost, samozrejme je v rezii BSD rozhrani, je to i na tech obrazcich.
PS: ja asi nejsem ten pravy na disputaci o kernelech, ale fakt mi prislo, ze masox nepouziva monoliticke jadro, ale nejakou kombinaci obou, kde ta mikro prevazuje. Asi ne a asi je to dobre, bohate staci, ze se porad pouziva emulace x86 ABI.
Ano, cely Mac OS X je mierne schyzofrenny system (vacsinu zdedil z NextStep a do toho sa snazili "zadrotovat" nieco zo stareho Mac OS, preto je systemova arcitektura dost zlozita), ale s podivom im to, az na male problemy, cele funguje. Predpokladam ze tie komunikacne primitiva z Machu s vyhodou vyuziju ovladace zariadeni vyzadujuce RT riadenie (napr. karty na spracovanie zvuku, ci obrazu, co je na tejto platforme bezne), takze IMHO by som tieto vlastnosti napovazoval za nepouzitelne.
QNX zije, na get.qnx.com je mozne si stahnout iso image tohohle systemu, nicmene je skoda ze jejich demodisky na diskete, ktere pripominaly z dnesni doby treba menuetOS, uz nejsou na hlavni site k dispozici, jen na par mirrorech...
Mimochodem pripojuji se k halasnemu potlesku za nesmirne podareny clanek, jen tak dal. Primluvil bych se za dalsi verze BSD, aspon trochu.
Definice: Mikrokernel je systém, ve kterém ovladače (filesystému, blokového zařízení a sítě) běží v userspace. Ve Windows NT všechny tyto ovladače běží v kernelspace, proto to mikrokernel není. Totéž platí pro MacOS X, BeOS (tam si nejsem jist, kde běží síť. Filesystém je tam určitě v kernelu), takže to též mikrokernely nejsou.
myslim, ze nejde o ovladace, ale o subsystemy. tj v true microkernel os by v kernelspace mel bezet pouze scheduler + nejaky ipc mechanismus (mozna jeste memory managment) a zbytkove subsystemy os by mely bezet v separatnich procesech.
ok s tim souhlasim, ale ja mluvila o "modified microkernel" :-) mozna pro Vas bude neprijatelne, ze tento termin (zrejme) zavedl Microsoft, ale to je mi vcelku jedno.
NT takes a unique approach, known as modified microkernel, that falls between pure microkernel and monolithic design. In NT's modified microkernel design, operating system environments execute in user mode as discrete processes, including DOS, Win16, Win32, OS/2, and POSIX (DOS and Win16 are not shown in Figure 1). The basic operating system subsystems, including the Process Manager and the Virtual Memory Manager, execute in kernel mode, and they are compiled into one file image. These kernel-mode subsystems are not separate processes, and they can communicate with one another by using function calls for maximum performance.
urcite subsystemy bezi sice v kernel modu, ale maji urcity interface - vysoka modularita _je_ tam proste videt (i v kodu). coz u true monolithic kernels rozhodne neni pravda.
nicmene nechci slovickarit, timto koncim moje prispevky do tohoto threadu. musel byste predlozit velmi padne argumenty, protoze ja svuj nazor mam pomerne dobre podlozeny :-)
A to platí i pro NT 4, 2000 a XP? Já jsem měl pocit, že takhle fungovaly Windows NT 3.5 a verze 4 má už i GUI v kernelu.
Jinak tenhle návrh považuji za nejhorší možný, jaký může existovat:
- bezpečnost nepřináší, když někdo nalezne bugu v subsystému API, ovládne všechny procesy používající tento subsystém --- t.j. celý počítač
- stabilitu také nepřináší, když nějaký subsystém spadne, spadnou všechny procesy ho používající
Na druhé straně to má nevýhody --- pomalost a komplikovanost syscallů.
Nebo to mají uděláno tak, že kopie těch subsystémů se pouští pro každého uživatele zvlášť? Pak by to dávalo smysl, ale nikdy jsem neslyšel, že to tak je.
to plati pro vsechny NT verze. GUI bylo od WinNT 4.0 dano do jadra, ale na idee subsystemu to nic nezmenilo.
bezpecnost ani stabilita neni nijak narusena v porovnani napriklad s *nixem. jsou to proste systemove procesy, takze kdyz je narusite, je jasne, ze ziskate pristup k cele masine (ci userovi - viz dale), tak jako v *nixu (kde afaik zadne systemove procesy v user modu nebezi - prosim opravte mne, pokud se mylim).
pomalost a komplikovanost syscallu? ja bych to nazvala dobry design, ktery mysli na budoucnost a extensionalitu. a ano, dobry design muze v nekterych pripadech prinaset urcite zpomaleni oproti hacknutym zalezitostem. - skoro bych si dovolila parafrazovat NetBSD slogan - we provide solutions, not hacks :-)
nicmene v tomto pripade bude overhead minimalni v porovnani s moznostmi, ktere to prinasi.
jinak samozrejme pro kazdeho uzivatele se subsystemy spousteji zvlast (krome session manageru, ktery ridi sessiony, tady by to asi nemelo smysl :-)). Toto je pravda u WinNT/2k s Terminal Services - od XP jsou TS nativne.
to znamena, ze je urcita mnozina api fci, ktere se zovou nativni, tj fce ktere v podstate (ve vetsine pripadech) pouze via sysenter (nebo drive int 2eh) prenesou vykonavani do jadra. subsystemy exportuji api, ktere v podstate volaji nativni fce s tim, ze jim pridavaji jakousi funkcionalitu navic. a tak se to na sebe krasne bali :-)
http://www.microsoft.com/windows/sfu/default.asp jest prikladem takoveho subsystemu.
Zdravmi vespolek :)
Aby autor nemel same pochvalne nazory, tak si dovolim upozornit na jednu (celkem velkou :) nepresnost:
"Kvalitnější zařízení na latenci přerušení moc závislá nejsou: kvalitní zvukové karty mají velikou vyrovnávací paměť"
To je ve spouste pripadu (notabene na zvukove karte) naprosta blbost. Pokud delam se zvukem a zvednu si zpozdeni na vice nez (radove) desitky mS, tak je to NEPOUZITELNE na nic jineho, nez na hrani her pripadne na poslouchani hudby. A pokud vezmy vystup 'obycejne' zvykove karty, 4 kanaly, 24 bitu, 50khz, tak tok odpovida radove ~pul mega za vterinu. A takova karta dneska stoji 5tikilo.... Pokud vezmu nejakou lepsi kartu - 8 sync kanalu, 96KHz, vystup digitalni - optika, jsem jeste o kousek dal se sirkou pasma. Cim MENSI buffer, tim 'kvalitnejsi' zarizeni je - ty opravdu top jsou schopny sample accuracy. Coz je schopnost (zjednodusene) reagovat na vstup/vystupy s presnosti na JEDEN samplik :) O velkem buferu zde tedy moc rec byt nemuze.
Nejedna se jen o zvukove karty, ale defato temer kazde zarizeni, majici vystup 'mimo' pocitac. Buffer je zde spise na obtiz. Proto, cim lepsi obsluha preruseni, cim lepsi 'priority', tim vice je pocutac pozuitelny na neco jineho, nez jako psaci/herni stroj. Cim vetsi moznosti jsou, tim vetsi potreba je 'realtime'. Nekdy je rozdil mezi 'lspon trochu realtime' a 'normlanim' v pouzitelnost ci nepouzitelnosti...
Nicmene, jinak pekny clanek :)
R.
Vim, nejaky jsem uz napsal.. [narp. core linux ovladace pro Alesis ADAT, ale to uz je nejaky patek zpet] A zrovna ALSA(u) bych nedaval jako priklad neceho extra dobreho :\ Kod alsy znam celkem dobre, co z nej mam vysist ?
Krom toho jsem primarne reagoval na tvrzeni, ze 'bufer' na karte vse resi. Pokud je dodavani dat postaveno na jinem principu nez preruseni, pak pro zmenu stoji zbytecny CPU cas a pokud neni dedicated CPU (nebo vice), je to i 'plytvani'. Pokud ma ale karta svoje DSP (nebo je to matice DSP procesoru/karet), pak je to o necem uplne jinem.
R.
teď už chápu o co šlo. napíšu to tedy jinak: pokud je karta tak blbá, že nedokáže držek krok s okolím (třeba lehkou změnou samplerate), nebude ani častější přerušování ideálním řešením. někdy je zkrátka výhodnější, aby přerušení chodilo třeba po každých 4k a mezi tím se podívat, kde se zrovna brouzdá DMA pointer. takže buffer někde v převodníku toho moc neřeší nebo je rovnou na obtíž, na tom se shodneme. omlouvám se za svou nechápavost :-)
oops! :)
mna napriklad velmi zaujima problematika kernelov, nejake som dokonca vyplodil sam, ale viac menej koli nejakym vyskumnym projektom ako koli podpore low- alebo high-end zvukovych kariet, cize co sa tyka tohto threadu som BFU. ale clanku tlieskam (i ked linuze mam prestudovane, bsd menej. :))
drzim palce a tesim sa na dalsie casti.
Vybral jsem FreeBSD, protoze je nejkvalitnejsi. NetBSD je dost podobne FreeBSD, ale nektere veci, jako napriklad podpora SMP nebo virtualni pamet, je tam celkem pozadu. OpenBSD je pozadu jeste vic.
Zadny jiny kvalitni OS, ke kteremu jsou zdrojaky, neznam:
AtheOS(Syllable) --- ne prilis kvalitni kernel, autor se zrejme na rychlost moc nezameroval.
Darwin --- strasna splacanina --- v jednom adresari je FreeBSD, ve druhem Mach, a splacavali to dohromady tak dlouho, az to slo zkompilovat.
Nechci rozpoutat dalsi flame ale neprijde mi, ze by NetBSD bylo tolik pozadu. Souhlasim, ze SMP ma linux asi lepe odlazene, co se tyka virtualni pameti se nechci prit ale pokud se jedna cisteho vykonu tak na tom NetBSD je velmi dobre (asi zavisi na konkretni aplikaci, mluvim o tom, co delam doma). Osobne jsem dost zvedavej na NetBSD 2.0 a obecne se od nej ceka hodne, vcetne vylepseni toho co mu vytykate. A na druhou stranu, NetBSD kernel je opravdu cistsi nez linuxový nebo FreeBSD. Linux a FreeBSD mezi sebou soutezi a proto se obcas (dle meho nazoru) do jejich jader nektere veci dostavaji moc brzy. NetBSD stoji stranou a udrzuje svuj kod relativne cisty. Jsem subscribed do NetBSD mailing listu a tam se obcas objevi nejake to flame NetBSD vs. Linux a prestoze casteji pouzivam Linux nez NetBSD (je snazsi ho sehnat, nemam moc silne pripojeni) tak docela casto musim dat zastancum NetBSD za pravdu. Napr. benchmark rychlosti disku (uz si to nepamatuji presne) dopadl na mojich trech strojich jednoznacne lepe pro NetBSD. Z lidi co znam co se toci kolem BSD hodne FreeBSD zavrhuje pro jeho relativne vetsi nenazranost nez NetBSD. OpenBSD je zase derivat NetBSD zamereny na bezpecnost, ktery ale dle meho nazoru nema velky uspech - nebo spise ostatni BSD nemaji dost bezpecnostnich problemu. Pocet exploitů je pro ruzna BSD priblizne stejny. Trochu chaoticke a offtopic, ale nemohl jsem se NetBSD nezastat. Jinak jako člověku který se o vnitřní strukturu OS vždy zajímal ale nikdy neměl možnost se s ní lépe seznámit mi článek hodně dal a doufám, že se dočkám pokračování. Díky.
Před pár lety jsem NetBSD zkusil (bylo to 1.4) a zhrozil jsem se --- systém měl předalokovanou fixní paměť na diskové buffery a ostatní paměť nemohl použít jako cache --- v praxi to fungovalo tak, že člověk měl 160M ram, z čehož 130M bylo volných a disk chroustal. Nebýt tohoto problému, možná bych dnes NetBSD používal. Jinak se mi pro svou stabilitu a čistotu líbilo.
Vím, že dnes už dynamickou cache udělali, ale přesto asi budou stále pozadu za FreeBSD.
Ctím tvoji asi o dost větší zkušenost, a věřím, že díky menší rozšířenosti může být NetBSD občas trochu pozadu. Některý tyhle problémy vyvěraj z toho, že NetBSD klade důraz na co největší portabilitu. Občas se na mailing listech objeví návrh, aby se při řešení určítého problému na toto rezignovalo (pokud si vzpomínám, tak se mluvilo hlavně o zvukových ovladačích - někdo navrhoval port ALSA), ale moc se tyto návrh neuajaly a je to dle mého názoru dobře - výsledek je třeba dosažen pomaleji, ale o to je čistší (špatný kód málokdy pracuje na více jak 40ti platformách). Doporučuji vyzkoušet NetBSD 1.6.1 či počkat na 2.0. Pro diskuzi o zákoutích kernelu by asi byl lepším partnerem Jarda Doleček, ale ten asi zdejší diskuzi nečte. Jinak ještě jednou děkuju za článek, rozhodně mi rozšířil obzory.
Ahoj,
jen bych doplnil, ze krome vlastnich semaforu s 'up' a 'down' (implementace pomoci wait_queues) existuje jeste sada funkci:
spin_lock,spin_lock_irqsave, spin_lock_irq a spin_lock_bh (+ odpovidajici unlock)
coz jsou obecne zamky a k tomu jeste read_lock a write_lock (se vsemi verzemi jako spin) coz jsou zamky pro cteni a zapis - podrobnosti viz include/linux/spinlock.h (a dale do asm/spinlock.h)
Jinak super clanek, uz se tesim na dalsi dily. Myslim, ze je vhodne pokud mozno co nejvice uvadet odkazy na dokumenty nebo primo zdrojaky pro ty, co se na to chteji podivat pozorneji a take uvadet presne verze jader na kterych je vse popisovano.
Bye
když už doplňujeme a upřesňujeme... :-)
spinlocky se typicky používají při race condition (jak se to překládá?) s přerušením a v takto chráněném bloku nelze volat funkci která může spát - tj. provést context switch. preemtivní scheduler nepřeruší kód mezi spinlock/unlock.
naproti tomu down/up lze použít i v případě, že zamknutý kód usnout může - například při volání copy_to_user.
pokial ta zaujima nieco viac o napr. o freebsd tak na tejto stranke najdes celkom slusne dokumenty http://www.freebsd.org/docs.html. ak by som mal nieco vyzdvihnut tak je to dokument http://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/index.html kde ako tak opisane aj jadro systemu.
Cetl jsem autorovu diplomku a dodnes premyslim, v jakem jazyce je vlastne psana :-). V teto souvislosti me prijemne prekvapilo, ze clanek na roota se podstatne vic blizi cestine nez ta diplomka. Teda az na "tu inodu" - proc ne ten i-node nebo ten i-uzel? Kdyz uz je pro neco cesky termin a kupodivu se i pouziva a neni to nic sroubovaneho/nezvykleho (jako treba "slozka" atp.) tak proc nepouzit cesky termin?
Jinak samozrejme OK, po dlouhe dobe clanek na rootu ktery se da cist (a ne jen proletet prvni vety odstavcu, jestli tam nahodou neni vyhled na nejakou novou informaci).
-Yenya
Chci jen zmínit dvě věci mně sympatické na *BSD: striktní oddělení základního systému (kernel, gcc, libc...) od ostatních aplikací (ports, packages) a přehlednost + jednotnost init skriptů (vše v rc.conf). V Linuxu nic takového není (Linux je jen jádro), každá distribuce to má jiné. Také s podporou IPv6 na tom bude BSD líp. Jedna věc je porovnávat kernel, jiná věc porovnávat systém jako celek. Nechci prudit, ale BSD je extraliga, zatímco Linux "jen" 1.liga.
Jako kdyby multimédia bylo to nejdůležitější na OS. V BSD je to později, zato kvalitněji (NetBSD: "We provide solutions, not hacks..."). Ad IPv6: Čím by sis nebyl tak jistý? Linux zde hodně kopíruje z BSD (projekt WIDE/KAME). A je to dobře, od toho je tu opensource, nejde o to soutěžit, ale spolupracovat (jsme snad MS či co?)
Dalsi, ktery si mysli, ze je "extraliga", protoze ma BSD :-)
To mi silne pripomina ono "porovnani" na blackhole, kde polovina argumentu byla totalni blud a druha polovina byla zalozena na tom, ze autor porovnaval hrusky s jablkama - kompletni NetBSD a jenom jadro Linuxu.
A mimochodem - treba Debianovsky system init scriptu mi prijde velmi dobry :-)
By mě zajímalo, co si představuješ pod pojmem "Kompletní NetBSD"? Mimochodem, na blackhole.sk se mluvilo o FreeBSD. Zkus si nainstalovat BSD (Free nebo Net) trošku ho potrápit a pak si můžem pokecat. Nesnažím se být fanatik, ale taky nemám rád linuxové fanatiky (kdo si to tu dovoluje házet špínu na můj posvátný linux:-) Nejdřív se snaž poznávat a pak porovnávej. Souhlasím s tím, že článek na blackhole.sk byl trošku ujetej, ale zas tak úplně z cesty nebyl.
Ad init skripty: netvrdím, že v Linuxu jsou špatný. Jen to, že tu oproti Net/FreeBSD chybí jednotnej styl.
Know your enemy...:-)
Sorry, v mem predchozim %s/NetBSD/FreeBSD ;-) A linuxovy fanatik rozhodne nejsem, viz moje nazory treba u clanku o hrach :-)
Ja jsem nepsal nic o spine, jen jsem upozornoval, ze neni mozne srovnavat jablka s hruskama. Me prijde, ze BSDckari proste nechapou, ze Linuxovy svet ma jinou strukturu. Nema smysl porovnavat FreeBSD a Linux, ma smysl porovnavat (treba) FreeBSD a Debiana. TOHLE jsou hrusky a hrusky :-) Pak odpadnou treba i nesmyslne argumenty o jednotnem stylu - v Debianu to je vsechno jednotne.
Souhlas. Nechtěl jsem vyvolat slovní přestřelku. Jen se snažím říct, že i Linuxákovi se vyplatí něco vědět o BSD ev. dalších UNIXech. Čím víc toho znám tím víc dokážu některý věci ocenit. Samozřejmě nejde o to, co je lepší, ale jak to vyhovuje potřebám toho, kdo to používá/programuje v tom. Totalita je vždycky škodlivá.
Popravde receno se chystam k tomu, ze si v ramci vzdelavani nekde FreeBSD nainstaluji, akorat jsem si na to zatim nenasel cas.
A ono bohuzel pokud clovek ten system minimalne nekolik mesicu neprovozuje v ostrem provozu, tak o nem stejne moc dobrou predstavu neziska :-/ Teprve tak se ukazou prednosti a nevyhody.
Technický dotaz - je u BSD něco jako distribuce? Nikdy jsem s tímto systémem nedělal, ale mám nejasné tušení, že ne, že je to prostě jeden "balík" jádra a programů kolem, v podstatě jako by v Linuxu byla k dispozici jen jedna distribuce. A u jedné distribuce se jednotnost dodržuje celkem snadno ;-)
Kdyžtak mě opravte, možná se mýlím.
V zásadě máš pravdu. Třeba u NetBSD 1.6.1 máš základní CDčko(cca 120MB) - vlastní OS. To obsahuje boot. kernel, base system, man, gcc, Xsy. Pak je tu (myšleno pro architekturu i386) dalších 7 CDček binárek. To už není NetBSD, ale tzv. "Packages" - aplikace(mc, perl, cdrecord, apache, gnome, kde...). Packages ale můžeš instalovat i ze zdrojáků (víc na jejich webu). Výhodou je přehlednost a snadná aktualizace.Stačí dát make a vše se stáhne a zkompiluje samo. V Linuxu si zase může člověk dle chuti vybrat mezi klikacíma (Mandrake) a syrovýma (Slackware) distribucema - prostě co mu víc vyhovuje.
Ac mam Debian jinak rad, jeho init scripty mi prijdou naprosto priserny (stejne jako v RedHatu, ba mozna jeste o neco prisernejsi). To, ze je po nainstalovani libovolneho balicku s nejakym demonem tento demon aktivovan je z bezpectnostniho hlediska zvrhlost. Podivejte se, kolik otevrenych portu je na pocitaci po instalaci Debianu. Navic tu neexistuje zadny standartni zpusob jak tyto slyzby vypnout (ja prejmenovavam symlinky S* na s*). To v RedHatu ci Irixu na to aspon existuje utilita (chkconfig tusim ci interaktivni ntsysv). A to ze mezi skripty nejsou definovane zavislosti a spravne poradi je vynuceno jejich ocislovanim je take zoufalost. Jediny rozumny system ktery jsem zatim pouzival je na NetBSD (tusim ze to ted prejali i ve FreeBSD). Jeste lepsi se mi to zdalo ve Windows NT, ale s tim nemam tak velke zkusenosti (mohl by nekdo komentovat?)
Jinak souhlasim s tim ze nema smysl porovnavat Linux s Net/FreeBSD, pouze Linux s jadrem BSD ci Debian/RedHat/... s Net/FreeBSD. Ti, kdoz tvrdi, ze Free/NetBSD je na rozdil od Linuxu konzistentni, by by se divili kdyby zkusili Debian GNU/BSD :-)
To: pc
V NetBSD běží po default instalaci akorát inetd(v inetd.conf je vše comment out). Když dáš 'netstat -vat' - ticho po pěšině.
Ad WinNT: myslíš services?
Co myslíš tím Debian GNU/BSD? Já z linux. distribucí znám blíže akorát Slackware(na tom jsem v '97 začínal) a RedHat(později ve firmě). Dál jsem zkoušel třeba Mandrake, ale ten mě zvlášť neučaroval. Co je na Debian GNU z hlediska konzistence lepší oproti BSD?
> V NetBSD běží po default instalaci akorát inetd(v
> inetd.conf je vše comment out). Když dáš
> 'netstat -vat' - ticho po pěšině.
Ja vim - to se mi prave na NetBSD libi :-)
> Ad WinNT: myslíš services?
Jo. Ty maji oproti NetBSD tu vyhodu, ze je v nich lepe dotazene automaticke reseni zavislosti. V NetBSD kdyz chci povolit nejakou sluzbu, tak se musim podivat na jakych sluzbach zavisi a povolit je taky. To se v NT resi automaticky. Rovnez kdyz je nejaka sluzba vypnuta a ja ji chci rucne spustit, protoze ji na chvili potrebuju, a dam /etc/rc.d/foo start, tak se nespusti. Musim dat forcestart, ale to dela tusim neco trochu jineho, a nespusti to sluzby na kterych ta moje zavisi.
Ad Debian GNU/BSD: to je proste Debian, ktery ma misto Linuxu kernel z NetBSD nebo FreeBSD. Stejne jako je Debian GNU/Hurd ktery ma misto Linuxu Hurd.
Viz http://www.debian.org/ports/#nonlinux .
Co je na Debianu z hlediska konzistence lepsi nez na BSD? Predevsim je cely system zalozen na baliccich. V NetBSD (pokud vim plati to stejnou merou i pro Free/Open) je rozdeleni na zakladni system a aplikacni balicky (ports ci pkgsrc). To je sice pekne, ale to, ze je system spravovan odlisne od aplikacnich balicku uz tak pekne neni. System je distribuovan v tarech a upgrade se resi proste roztarovanim novych do stareho systemu a naslednym smazanim "zastaralych" souboru, ktere jsou v nejakem seznamu. Technologie balicku mi prijde propracovanejsi a je dobre, ze linuxove distribuce ji pouzivaji na spravu uplne vseho.
Dale je v Debianu podle me lepe propracovana kompatibilita sdilenych knihoven. Knihovny jsou v baliccich ktere maji ve svem jmenu zakodovane cislo verze (soname). Takze muze byt vice verzi knihovny nainstalovano a kazdy program zavisi na te kterou potrebuje.
U NetBSD mam dojem, ze kdyz se v pkgsrc obevi nova binarne nekompatibilni verze napr. knihovny libpng, musi se vsechny balicky ji pouzivajici rekompilovat.
Pro knihovny v zakladnim systemu je to tusim tak, ze se po upgradu nechavaji zastarale knihovny, pro pripad, ze by je nahodou nekdo potreboval, tudiz se v systemu postupne hromadi bordel. Naproti tomu v Debianu neni probrem udelat balicek se zastaralou verzi knihovny, ktery se nainstaluje, jen kdyz je potreba.
mozna bysme meli tuto diskusi presunout na regional-cs :-)
Pro informaci - závislosti služeb jsou podobně jako v NT řešeny (co do výsledku) v Gentoo Linuxu. Ve startovacím skriptu služby je popsáno, na čem je závislá, příp. po které by měla být spuštěna (pokud je k dispozici). Když chci zrestartovat třeba net, shodí se mi předtím všechny služby na něm závislé (named, ssh, samba...) a potom zase automaticky nahodí ty, které byly předtím spuštěny. Docela příjemné.
Naprosto souhlasim - debian ma init scripty hrozne neprehledny, s NetBSD se to neda srovnat. Ac pracuji s linuxem od roku 1996 tak se mi nektere veci lepe nastavuji v NetBSD - proste vsechno najdu na jednom miste, mam to bohate okomentovane a nemusim hned hledat prislusny oddil manualu. Jinak Linux nijak nehanim a souhlasim ze pro urcita pouziti je lepsi nez NetBSD, ale plati to i naopak.
V techhle clancich se zameruji pouze na kernel (asi se to melo jmenovat "Porovnani jader systemu"), takze se takovymi vecmi nebudu zabyvat vubec. V linuxu (RedHat 4.2, stale ho pouzivam) jsem nahradil systemove skripty (takovy ty adresare pro kazdy runlevel) tremi skripty (rc.sysinit, rc.3, rc.6) ktere proste pusti vsecky daemony, co jsou potreba, (a rc.6 je zase killne), takze mi to bootuje rychleji. Taky se to podle meho nazoru lepe spravuje.
Co se tyce ipv6, jadra jsou na tom asi stejne, s aplikacemi nemam zkusenosti (stejne mam pocit, ze ipv6 v soucasne dobe na nic neni, nebot na nem vetsina serveru neni).
Tohle je samozrejme sqele a lze tim dosahnout superrychlych bootu. Akorat je to sqele na sve pracovni stanici, ale daleko mene pokud clovek ma
15+ serveru a 100+ pracovnich stanic s ruznymi konfiguracemi, ktere musi byt schopen spravovat kdokoli z tymu treba 5+ lidi. Pak je lepsi se snazit byt co nejbliz tomu, co nabizi distribuce (a v tomto pripade jsou SysV-style startovaci skripty IMNSHO vyrazne elegantnim resenim).
-Yenya
Srovnavas nesrovnatelne. Zadny operacni system neni dokonaly, nebo bozstvo, na ktere vzhlizis s uctou, jak je krasne pekne ciste napsany. Operacni system se predevsim pouziva, sakra. Tohle je praxe, ne teorie. To, co je tobe sympaticke, muze byt nekomu PEKELNE na obtiz. Ad ipv6: to neni tak uplne pravda. Ad prudeni: Neprud, kravina. Na cem se zaklada tve tvrzeni o ligach? Jedine mozne hodnoceni systemu je "vohovuje mi/splni co od neho cekam"/"nevyhovuje" Takze tvoje pruzeni je jen ciste subjektivni tvuj nazor. Druhy clovek by te sjel s argumentem, ze tvuj BSD nestoji za nic, v porovnani s jeho QNX. A pro jeho cinost je to treba opravdu jediny pouzitelny system. Tech prikladu je vice, takze neprud s tim, ze BSD je to nejlepsi co mame. To NENI, nebyla a nikdy nebude pravda.
-djz
Také jsem pro porovnání jiných větví (NetBSD, OpenBSD). Nedávno vyšlo na webu (URL jsem zapomněl:-) porovnání výkonu z hlediska parametrů důležitých pro http server(vítěz FreeBSD 5.x před Linuxem 2.6.0). Ani NetBSD si nevedlo špatně. Když se veme v potaz jeho "multiplatformita"... Stejně jako opensource není jen Linux, není BSD jen FreeBSD.
Nevíte někdo, jak by se dal řešit následující problém :
Mám periferii, kterou musím (pokud je aktivní) obsluhovat v pravidelných poměrně krátkých intervalech (cca jednotky ms), přitom výpadek je nežádoucí.
Kdybych (čistě teoreticky - netvrdím že bych to uměl) napsal ovladač a zahrnul ho do kernelu, jak se dá zařídit, aby se tento můj ovladač dostal "k lizu" pokaždé včas ? Dejme tomu že přípustná tolerance intervalu je řádově desítky procent, ale pokud by obsluha přišla řekněme za dvoj- nebo troj-násobek obvyklé doby, mohlo by to dělat problémy.
Šlo by toto zařídit pomocí zmíněného low-latency patche ? Nebo až nastavením pre-emptivního kernelu v 2.6 ? A dalo by se (aspoň teoreticky) nastavit, že moje obsluha má vysokou prioritu a nikdo mě nemá rušit ? Samotné obsluhování je krátké a jednoduché (prakticky jen výstup 1 byte na port), alekdyby mi někdo "sebral pod rukama" CPU, docela by to vadilo.
S RTAI (http://www.aero.polimi.it/~rtai/) se daj
zaridit i mnohem kratsi intervaly, ale je to trochu slozitejsi :-) . Ale ty jednotky ms by mel s preempt patchem (+ mozna i lowlatency patch) zvladnout i
userspace proces (asi s realtime prioritou). Nekde na webu jsem videl nejaka mereni, ale ted nevim, kde.
Pokud chcete delat ovladac v userspace (nebo v kernelu jako kernel thread), pak je low-latency patch nebo preemptivni kernel potreba. Pokud je ovladac v kernelu na interruptu, tak tyto veci nemaji vliv.
Otazka je, jestli si zarizeni samo rekne o interrupt, nebo je treba pouzivat timer. V pripade timeru je problem, ze timery jde nastavovat minimalne po 10ms. Existuji i patche, ktere meni casovani po 1ms, niz to nejde, protoze by to moc zpomalovalo. Dalsi moznosti je pouziti ovladace "real-time clock", ten by mel umet i nizsi intervaly.
>Existuji i patche, ktere meni casovani po 1ms, niz to nejde, protoze by to moc zpomalovalo.
Cas 10ms je dany historii z dob i386. Podivate-li se do zdrojaku jadra, zjistite ze jsou platformy, kde je cas kratsi. Pri dnesnich vykonech i pro platformu x86 je cas mensi nes 1ms byl pouzitelny. Ja osobne jsem si ho predelal na 1ms (na jednom PPC 50Mhz) a zpomaleni bylo neznatelne.
Na mem pocitaci (Pentium 200) trva obsluha casovaciho interruptu na Linuxu asi 2500 tiku. Z cehoz 400 tiku je ACKnuti interruptu na PICu + overhead procesoru, 600 tiku je zamaskovani a odmaskovani na PICu, zbytek je overhead se softirq, ktere se pokazde vola kvuli moznym timerum (na FreeBSD je tento overhead vyrazne nizsi, nebot to zadne softirq nevola). Kdyz to budete volat kazdou 1ms, sezere to 1% casu (a to nemluve o neprimo zmeritelnem zpomaleni programu zpusobenem vyprazdneni cachi). I 1% je moc. Niz uz to opravdu nejde.
PIC je na sbernici ISA, proto je pristup k nemu pomoci instrukci in a out hodne pomaly a rozhodne se to na lepsich pocitacich nezlepsi --- ISA je porad stejne pomala. Pri pouziti APICu jsou doby trvani vyrazne nizsi.
Jeste v dobe 486tek se pro zpozdeni cca 1 microsec pouzivalo cteni portu 0x20 (PIC), ktery BYL na sbernici ISA. Ale kratce po objeveni 586 se tento PIC prestehoval do chipsetu a tam je k nemu rychlejsi pristup. Me proto prestal fungovat jeden program, ktery generoval presne casovane prubehy - presneji receno na me 486 fungoval, na firemni 586 taky, na zakaznikove 586 ne. Opravil jsem to ctenim registru karty, ktera byla zasunuta do ISY. Ale dnes uz pocitace casto ISU nemaji vubec a pokud ji maji, tak standardni periferie na ni stejne nejsou a mala zpozdeni se delaji upne jinak.
Dakujem za vyborny clanok. Hoci nie som odbornik ani na jadra ani na programovanie, zacina mi byt po precitani clanku este viacej zrejme, ze je tazke, resp. az nemozne vytvorit univerzalny model prace jadra i systemu "najlepsi pre vsetko". Navrh architektury kernelu je a zrejme este dlho bude o tom, najst najlepsiu rovnovahu medzi vykonom, stabilitou, flexibilitou a programatorskym pohodlim. Kazdy navrh ma zrejme svoje slabe a silne stranky, to je skratka vec DIZAJNU. Tu sa koncia argumenty pre flame, skratka lopata je lepsia na prehadzovanie piesku a ryl je lepsi na rylovanie. Daju sa pouzit aj opacne, ale nie je to ono.
Zacinam tiez intuitivne tusit, ze v pripade mikrokernelu bude asi mozne lepsie prisposobovat konfiguraciu jadra konkretnym poziadavkam, ale priznam sa, ze nemam pre toto tvrdenie ziadny teoreticky zaklad. Velmi by som privital obdobny clanok na temu mikrokernel resp. HURD.
Kdyz jsme u tech prani na temata clanku, ja bych take velmi uvital nejake pojednani o mikrokernelech a pripadne srovnani MACH vs. L4 vs. jadroQNX vs. ..... :)
Nesouhlasim s tim, ze mikrokernelove systemy jsou mrtve, jak nekdo lehkomyslne prohodil vyse v tomto foru.....ba naopak mi pripada, ze tam speje i Linux a jine(byt velmi zlehka...postupna modularizace, preemptivita..)...mno, pockejme si....tak 10 let.... :(
těžko můžete očekávat článek o mikrokernelech od lidí, kteří je považují za mrtvou cestu ;-)
Linux a jiné (pokud tím bylo myšleno *BSD) k mikrokernelu rozhodně nesměřují. jádro sice je stále více modularizováno, ale zůstává _monolitické_, jinými slovy ovladač i té nejposlednější periferie si může dovolit totéž co scheduler.
Nespeje. Pockej, krome sedivych/zadnych vlasu se nedockas niceho rozumneho. Jinak, to ze v QNX to nahodou docela uzasne funguje neimplikuje, ze mikrokernel nebude pomalejsi a ze nema vsechny neduhy kterymi trpi mikrokernelove systemy. Moduly v linuxu jsou fajn vec, ale linux tezko kdy bude mikrokernel.
-djz
Mikrokernely mrtvé jsou, na běžných stanicích ani serverech se nepoužívají. Pokud se mnou nesouhlasíte, nainstalujte si Hurd, Qnx, VSTA, L4, T4 nebo jiný mikrokernel na počítač. Mikrokernely mohou být používány tam, kde jsou třeba realtimové aplikace.
Dále třeba v tomhle seriálu bude popsáno, jak se dělá DMA rovnou z page-cache do síťové karty, aby data vůbec neprocházela procesorem --- třeba tohle se v mikrokernelu implementovat nedá --- filesystém, tcp/ip stack a ovladač síťové karty jsou procesy --- zkuste se zamyslet, jaké rozhraní by to chtělo? Rozhodně na to nestačí ono jednoduché send(int id_procesu, char *zpráva, int délka_zprávy).
pokud v obslužné rutině znovu povolíte přerušení (a většina interrupt handlerů právě toto dělá), je možné ji znovu přerušit. časově kritické části kódu jsou potom mezi spinlocky. vše je v rukou programátora. navíc filosofie "buď všichni nebo nikdo" činí věci krásně jednoduchými, žádné splx braindamage ;-)
btw, jsou architektury, které mají prioritu přerušení pevně danou. a na i386 existuje utilita, která ji umožňuje měnit.
Jedno preruseni muze na Linuxu prerusit jine. Ale zamaskovat se musi vsecky nebo zadne a to je ten problem. Treba pri psani na konzoli. Nikdo neplanuje, ze by s tim neco delal.
Mozna by stalo za to udelat aspon softwarove maskovani vsech preruseni --- misto "cli" tam dat "movl $1, interrupt_mask" a misto "sti" dat "movl $0, interrupt_mask;cmpl $0, interrupt_pending;jnz process_pending_interrupts" --- cli, sti, pushf a popf jsou na procesorech totiz hodne pomale a preruseni se v jadre zakazuji casto.
Jen detail,
> Nicméně implementace těchto funkcí je velmi mizerná —
> nevytváří se žádná fronta procesů jako na Linuxu a funkce
> wakeup prochází všechny procesy v systému, aby zjistila,
> který na danou událost čeká.
Presneji (alespon na NetBSD) je to tak, ze system udrzuje
128 front, pri tsleep se cekajici proces zaradi do jedne z
nich podle identifikatoru. Takze se neprochazi vsechny
procesy v systemu, ale jen ty ktere spadly do stejne waitq
tridy. Da se to brat jako hasovaci tabulka podle identu.
> Procházení všech procesů je celkem náročná operace a v
> tomto případě je to zcela zbytečné
Zalezi na tom jak dobra je distribuce toho rozskakovaciho
makra. Nejaky seznam se bude prochazet tak jako tak, jen
tam obcas bude neco navic. Linuxova implementace (jedna
fronta na kazdy wait channel) je asi v zasade lepsi, s ltsleep/wakeup se zas dobre pracuje (staci znat identifikator) a vsechno je na jednom miste...
Nemohu si odpustit poznámku ke tvrzení
sleep_on - tyhle funkce musí umřít.
Je to nesmysl, spinlok je účinný nástroj, pokud potřebujete synchronizovat přístup k proměnným.
Přístup by neměl trvat déle než jednotky mikrosekund.
Jinak čekající procesor u SMP mrhá výkonem a v případě spinlok_irqsave ohrožujete i včasné přijetí dat.
sleep_on případně v článku nepopsané wait_event je ideální pro čekání na dostupnost dat, událost nebo na vypršení časového přerušení. Využívá čekací fronty, je v Linuxu dobře implementované. Nad ním jsou postaveny všechny vyšší IPC mechanizmy (čekání a buzení). Proto můžete používat v programech select čekat na pakety atd.
Velmi pěkný ale již poněkud starší popis činnosti a principů Linuxového jádra naleznete v knížce
The Linux Kernel by D.A.Rusling
Hyperlinkovanou PDF verzi naleznete na mé stránce
http://cmp.felk.cvut.cz/~pisa/linux/tlk-0.8-3.pdf
wait_event volá add_wait_queue, pak otestuje podmínku a případně zavolá schedule podobně, jak jsem to tam popsal (ale nenapsal jsem, že to může dělat wait_event). wait_event se v jádře ani moc nepoužívá, většinou je to tam rozepsané (nenapadá mě proč, mohlo by to být čistší než s použitím stávajícího add_wait_queue a schedule; možná proto, že o něm nikdo neví).
sleep_on jde použít pouze pod big kernel lockem, jinak ne, neboť je v něm race (podmínka nastane po otestování ale před sleep_on). Na čekání na přerušení nejde sleep_on ze stejného důvodu použít vůbec.
Duvod je samozrejme ten ze wait_event() je podstatne novejsi rozhrani nez add_wait_queue(). Odhaduji ze to je vec Linuxu 2.3 nebo 2.1 zatimco add_wait_queue je vec linuxu 1.0. Pokud dobre vidim do vyvoje veci, kde se tohle nejcasteji pouziva (= drivery) tak driver se vetsinou pise tak, ze nekdo nahodny ma kus HW ke kteremu pise (svuj prvni) driver. Cili se podiva do vedlejsich driveru (ja jsem treba zkoumal ISA DMA z aha1542.c) a zkopiruje postupy tam pouzite. Pokud nekdo chce zavest "lepsi" rozhrani, musi projit kernel a opravit vyskyty "starych" rozhrani tam kde to vsichni od sebe navzajem zkopirovali. Vetsinou se to tak deje, v tomhle pripade zrejme ne (protoze to neni jen trivialni globalni nahrada retezcu).
-Yenya
sleep_on musí umřít! pokud mě chcete přesvědčit o opaku, odstraňte všechna chybná použití z jádra. tak za měsíc se zase ukažte ;-). nebudu se opakovat a opakovat jiné. autor článku ostatně vysvětluje úskalí s jejím použitím spojená. btw, "Používání funkce sleep_on je ve většině případů nevhodné"... Proti této větě mám výhrady - _vhodné_ použití této funkce totiž neexistuje. v článku je také vysvětleno, jak to dělat správně
nejdrive nekolik citaci....
[..] Chcem citat taketo clanky kazdy den :))))
Skvele, skvele a este raz skvele!!! [..]
[..] Jinak samozrejme OK, po dlouhe dobe clanek na rootu ktery se da cist (a ne jen proletet prvni vety odstavcu, jestli tam nahodou neni vyhled na nejakou novou informaci). [..]
Maji byt skutecne vsechny prispevky takove? Netusil jsem, ze siroka verejnost zajimajici se o vypocetni techniku a zejmena unixy by se rada vyzivala v tom, jake typy preruseni v tom kterem jadre maji jake vyhody?
Vetsina tech, kteri to zde komentuji, jsou stejne jako autor studenti (aktivni nebo drivejsi) nejakeho informatk-oboru. Tento clanek zde ma samozrejme misto, ale v teoreticke sekci pratel informatiky odpovidajicich fakult uk a mu.
Pro nas obycejne smrtelniky, kteri hned nedostanou orgasmus, kdyz se vyvola scheduler, by zde mohlo stat, jakemu os dat za jakych okrajovych podminek prednost.
Eventuelne by zde mohl autor naznacit, jaky prakticky dopad jeho teoreticke vyvody maji. (0.3% , 10%, 90%)
Ano, jsem sokovan, kdyz zde mohu pozorovat budouci spicku informatiky se svou zamilovanosti k detailu bez celkoveho pohledu na vec. Ale my prosti obcane mame prece narok na prakticke vysledky vyzkumne cinnosti a ne pouze na popisne prace, jak to bylo za komunismu bezne. Nejen ze to platime na danich, zanedlouho budeme jako zeme bez zdroju na Vas zavisli - tak se proboha zammyslete.
týýý brďo, člověk přijde z dílny, koukne na net a tohle... teoritické vývody tohoto typu dopad nemají a mít nebudou. je to popis současné implementace - která již praktický dopad má. reps. ano, dopad by snad mohly mít v případě, že by nějaký programátor zabývající se jádrem linuxu shledal nějakou implementaci v bsd lepší (nebo naopak) a ten "svůj" systém poněkud vylepšil, aby, pokud možno, byla jeho implementace zase lepší. pokud zařídíte, že se část peněz, které platíte na daních přesune do mé kapsy, rád vám nějaký ten ovladač naprogramuji, případně nějakou tu existující chybičku opravím ;-). nejsem sice informatik, ale třeba vám to bude stačit. zkrátka se smiřte s tím, že tyhle systémy vznikly jako dílo pro radost a tak budou lidé dál dělat co je baví a opravovat, co je pálí.
Mam dva vsetetecne dotazy.
Mam na notebooku Linux 2.6.0 a FreeBSD 5.1 ktere skutecnce je rychlejsi a lepe reaguje na zatizeni nez Linux, coz je asi popsanym zpusobem obsluhy IRQ. Proc kdyz to tedy vsichni vi, ze se to neni idealni reseni, se nezvoli jine? Je to principielni problem to zmenit nebo se na to proste kasle?
Jak je to z IRQ obsluhou v FreeBSD 5.x?
Ta větší živost FreeBSD je asi způsobena spíš systémem virtuální paměti než zpracováváním přerušení. Kvalitnější zpracovávání přerušení by se projevilo, kdyby na tom běžel současně třeba router a ještě to bylo aplikačně vytížené.
V Linuxu se už nic moc lepšího udělat nedá --- kdyby se to začalo přepisovat, nadělá se v ovladačích spousta race-conditionů, které půjdou velmi těžko chytat.
ja mam na mysli treba pusteni prekladace pri prehravani mp3 s otevrenymi 1000x dalsimi aplikacemi typu gnome
pritom jde o to, ze pouzivam nejakych 100M ze swapu, u BSD (stejne jako treba u SUNu ktery pouzivam v praci) se v podstate nepozna kdy system swapuje a jak moc toho je na swapu, u Linuxu je to cim vic na swapu tim pomalejsi system.
Jo takze prepsat by to v principu slo, ale ve skutecnosti nejde.:)
linuch odklada az v nouzi nejvyssi.
kdezto *bsd a widle agresivneji prubezne.
vysledek?
u linuxu je to potom sok, kdyz se swapovat zacne.
to zpomaleni u linuxu nastane v momente, kdy potrebujes novou stranku na novou pamet a neni zadna volna. v tu chvili vmm zacne zbesile prochazet co muze zahodit, protoze se to od swapin nezmenilo, zkusi taky projit souborovou cache a to co neni reverzne odkazovano z nejakeho procesu, tak vycisti a pokud nic nepomohlo, tak musi vymyslet s cim provede swapout.
u bsd je to vice plizive prubezne "zpomaleni" systemu - o zpomaleni se da mluvit jen ve specifickych pripadech, kdy je potreba maximalni procesorovy i diskovy vykon po celou dobu. neda se vzit chovani linuxu a otocit a brat, ze by se system zpomalil, kdyz stranku potrebuje, protoze v pameti zustala(pokud nikdo tu cast pameti nepotreboval), ale je i na disku a ta na disku se zneplatni pri zapisu do pameti, takze je zase na case neco nasypat na disk a tak porad dokola. jenze to se deje na desktopu v dobe, kdy uzivatel neceka na to, nez mu nabehne okynko aby si mohl klikat(moment zpomaleni na linuxu), ale deje se to v dobe kdy teprve hejbe mysi a uvazuje kam klikne(moment zpomaleni na bsd) a jaky okno si otevre...
Zdrawim,
muze mi nekdo vysvetlit, proc by se recenze na MDK nemely objevovat na root.cz? Ja vim, ze MDK je system pro zacatecniky, nenarocne uzivatele a ja nevim pro jake pouziti ani pro koho. Zatim toho v linuxu moc neumim a momentalne pouzivam Slack, ale na MDK jsem zacinal(ted dekuju za skveleho Slacka).
Ale to jsem trochu odbocil. Jak jsem napsal, na MDK jsem zacinal a lidem, kteri si chteji linux "osahat" nedoporucim asi nic jineho. Navic jsem myslel, ze root.cz je o vsem open-source a vubec o UNIXu a linuxu. Clanek porovnani Linuxu a FreeBSD mi sice moc nerika, protoze se o vyvoj OS nezajimam, ale rad si ho prectu, protoze se mi rozsiri znalosti. Hadky v prvnich komentarich clanku jsou pro me opravdu nepochopitelne a tezko si dokazu predstavit, ze je napsali lide, kteri maji po skole(nekteri po VS) a pracuji v tomto oboru.
Chvalim clanek a pokud mi nekdo posle vysvetleni, dekuji predem.
lnx_bfu
a aby me tu nekdo nekamenoval, jak muzu chvalit slack, kdyz jsou urcite lespi(verim ze jsou) distri, tak bych chtel podotknout, ze jsem se zatim k nicemu jinemu nedostal. Proste Slack se mi libi vic nez MDK.
Asi jsem take v predchozim komentari zapomnel podotknout, ze i kdyz MDK uz nepouzivam(a ani se k tomu nechystam(ne v blizke dobe)), tak se rad podivam, co je jinde noveho. Proto by se tu mely takove clanky objevovat. A je to snad o tom, co autor napise. Kdyz se nekomu nelibi, ze je tu serial o MDK, tak at ho proste necte.
btw> srovnani Linux vs FreeBSD je skvele! jsem o neco chytrejsi, mene lamovatejsi a lituji, ze v nekterych pripadech nemam BSD ;oP