Singularity is a laboratory for experimentation in new design ideas, not a design solution. While we like to think our current code base represents a significant step forward from prior work, we do not see it as an "ideal" system or an end in itself.Písať tu, že Singularity je základ daľšej verzie OS od Microsoft... tak to hovorí samo za seba. Vás ale jednoznačne baví sa anonymne ventilovať na linuxových fórach.
Či je budúcnosť operačných systémov v .NET nevie ani Microsoft. Jedna vec je robiť určitý výskum a druhá niečo posunúť do reálneho života. Svojho času to tiež vyzeralo, že mikrokernel je jasná budúcnosť - avšak zostalo len pri teórií. V súčasnosťi aj operačné systémy postavené nad mikrokernelom (MacOS X, QNX, čiastočne NT) majú implementovanú absolútnu väčšinu svojho API v jednom monolite. Niektoré ovládače a obsoleted APIs sa presúvajú do samostatných mikrokernel serverov a to je asi tak všetko.
Dnešné moderné procesory už tiež vykonavajú mikrokód, ktorý si interne prekladajú do kódu nižšej úrovne - takže ten posun k určitej virtualizácíí vykonávaného programu sa už deje na úrovni hardware. Nie je dôvod sa domnievať, že to čo dokáže bytecode interpreter nedokáže CPU. V skutočnosti toho dokáže oveľa viac a rýchlejšie. Vývoj nezastane, nakoniec nové prvky na podporu virtualizácie a napr. "Execute Disable Bit" len naznačujú, že s možnostami CPU sa dá hrať donekonečna. Rovnako technológie, ktoré umožňujú rýchly prevod kódu z jedej platformy na inú (Rosetta od Apple, IBM má niečo podobné na prevod x86->POWER) ukazujú, že aj k natívnemu kódom sa dá tiež pristupovať ako k medzikódu.
Bytecode technológie však určite majú veľkú budnúcnosť v user-space aplikáciách. Ale rovnako aj dlhú cestu k vyriešeniu mnohých problmémov. Nikto napr. zatiaľ neprišiel na rýchly algoritmus thread-safe garbage collectora. Počet jadier v procesoroch stále pribúda, takže určitá automatická paralelizácia dáva stále váčší zmysel. Tiež ste už viac-krát spomínali veci typu:Psaní aplikací pouze v managed jazycích (C# apod) bude mít za následek, že bude možné dát na kód záruky typu "nemůže dojít k přetečení bufferu", "kód určitě neobsahuje deadlock" atp. To dává možnost použít SW izolaci procesů.
Môžete uviesť nejaké zdroje na dané možnosti? Osobne nemám pocit, že sa dá nad procedurálnym kódom (ktorý je vlastne stavová mašina) robiť taká statická analýza. Ak myslíte nejaký real-time check, tak ten ako som už spomínal môže robiť aj HW processor. Staticky také záruky vedia poskytnúť čisto funkcionálne jazyky, ale tam sa mainstream jednoznačne nepresúva. Napokon ani F# (MS verzia OCaml pre .NET) nie je čisto funkcionálny jazyk.
Nemyslím si, že aplikácie kde je rýchlosť klúčová budú niekedy bežať v bytecode. OS kernel, či kernel počítačovej hry bude vždy natívne - ostatné bude stále častejšie v skriptovacích/bytecode jazykoch. Či to bude PHP, Python, Java alebo Visual Basic je úplne jedno. Nemám pocit, že by bol Microsoft nejaký zaručený líder v oblasti inovácií tohto druhu.
A zkuste si obcas precist jaderne novinky na abicku, me z toho obcas vstavaji vlasy hruzou na hlave, jak se reseni nekterych problemu bastli,lepi a obchazi. Pat a Mat hadra.V takovych pripadech je obvykle lepsi precist si original na LKML nez nekolikrat prechroustany text, jehoz vyzneni je ovlivneno nazory 'chroustacu' a navic casto vytrzene z kontextu.
Co maji Windows navic v multimedich? Obecne (a to se netyka multimedii) maji velice pochopitelne a dobre navrzene API (tim myslim .NET ne Win32Api), ktery je konzistentni at se jedna o grafiku, zvuk, sit a nebo treba bluetooth. A dokumentaci na jednom miste. Linux je tzv. "kazdy pes, jina ves". Ano, je to logicke, podle toho jak vznika, ale za dusledek to ma to, ze se pro nej programuje hur. Pro kazdy subsystem se musi extra shanet dokumentace, nekdy je tech subsystemu vic a nemate zaruceny, ktery z nich u koncoveho uzivatele bude atd.Ono je otazka, ktery z techto pristupu k interfacum je lepsi. Navrh interfacu ja napul magicka cinnost, pro kterou nejsou dostatecne znama racionalni objektivni kvalitativni kriteria. Pokud mas vic soupericich pristupu k dane problematice, tezko apriori rici, ktery z nich je lepsi (a zda jsou vubec porovnatelne). Ve Windows proste MS rekl - tento interface je spravna cesta. To ale nutne neznamena, ze to je nejlepsi z moznych cest. V Linuxu je demokraticky vyvoj - kazdy programator svym rozhodnutim hlasuje pro nektera z techto API tim, ze je pouzije ve svych programech. Pokud bych mel pritomnost nejakeho API zarucenou, tak zaroven bych se (jako uzivatel) nemohl daneho subsystemu zbavit, pokud bych ho nepotreboval.
Linux nema priorizovane interupty.Predchozi clanek se ale vyjadroval k prioritizovanym I/O operacim, nikoliv k interruptum.
Ja netvrdim, ze cely Linux je bastl, v zadnem pripade, ale musite uznat, ze obcas se to lepi dost zoufale. WiFi drivery jsou podle me zarnym prikladem (ale snad to po implementaci mac80211 bude lepsi, snad se toho doziju ;-)Uznavam, ze situace v oblasti wifi driveru je dost neuspokojiva. Nenazyval bych to ale problem bastlu a lepeni (coz jsou obvykle vyrazy pro vyuzivani existujiciho kodu naprosto nevhodnym zpusobem), jako spis nedostatecne koordinace mezi vyvojari ruznych wifi driveru (a tedy spis nevyuzivani jiz existujiciho kodu a zbytecna duplikace).
A co se tyce tech I/O operaci... Mate pravdu, bylo to o operacich a ne o interuptech (a ani jedno Linux nema),Viz ionice.
ale domnivam se, ze tezko se daji udelat priorizovane I/O bez priorizace IRQ, takze bych to za tak velky omyl nepovazoval.Domnivam se, ze obsluha IRQ ma na priorizaci I/O operaci zcela marginalni vliv. Prioritizace I/O operaci je koncepcne podobne treba sitovemu shapingu - pri zapisu/cteni dat na disk (odeslani/prijeti paketu) si vybiras pozadavek k zpracovani nikoliv podle FIFO, ale podle priorit. Dulezity je tedy vyber pozadavku, ktere se predaji hardware. U pevnych disku jsou samozrejme komplikace se slozitym ovlivnovanim vyrizovani jednotlivych pozadavku.
Oddělení procesů stojí celkem dost prostředků. Takový context switch není zdaleka zdarma, a kernel mode transition je ještě dražší.Neni to naopak?
Ano, preemptivní (za běhu kódu můžeme utrhnout execution a provést context switch) a reentrantní (kód lze provádět na více místech najednou) kernel. Mluvím o přepnutí kontextu ve chvíli, kdy se thread (proces) nachází v režimu jádra. Samozřejmě pokud kernel není preemptivní, zvyšuje se lacency. Pokud není reentrantní, je to problém při SMP (scalability velmi trpí). Samozřejmě preemptivní a reentrantní kernel nesmí držet statická data, a kde je to nutné (jako že takových míst je dost), musí se použít nějaký mutex. Když se tak postupuje od návrhu, je to celkem v pohodě. Pokud se preempce kernelu implementuje dodatečně, zavání to hromadou bugů a mizerným výkonemReentrantni je jadro uz pekne dlouho - kvuli multiprocessingu. Pridat tam pak preempci uz neni zas takovy problem. Mas nejake podklady ohledne tvrzeni, ze Linux ma mizerny vykon a hromadu bugu v kombinaci s CONFIG_PREEMPT (napr. relativne k Win), nebo jen mlzis?
1) Pokud jsem si všimnul, tak C toho moc neověřuje. Pokud použiji index za hranicí pole (což není technicky přesné, ve skutečnosti jde spíše o pointerovou aritmetiku), prostě zapíšu do paměti, kam nemám. Přesně tenhle typ chyb (plus strcpy) může za velké procento problémů dnešního světa IT, a přechod na managed jazyky dost pomůže.C je jazyk - zadny jazyk samozrejme nic neoveruje. Ale konkretni kompilatory a interpreti jiz overovat mohou. Je pravda, ze pointerova aritmetika to trochu komplikuje, ale az na nejaky obskurni kod by snad nemel byt problem pridat mechanismy pro dynamicke kontroly do kompilatoru C.