Přístup k hardwaru -=-=-=-=-=-=-=-=-=-= We all know Linux is great...it does infinite loops in 5 seconds. -- Linus Torvalds Jednen z nejgeniálnějsích nápadů UNIXu byl rozhodně způsob, jakým zprostředkovával přístup k hardwaru. Všechny ovladače byly v jádře a pro programy zařízení spřístupňují pomocí speciálních souborů (devices). Proto pro program je například zahrát zvuk stejně snadné, jako jeho uložení do souboru. Prostě zvuk zapíše do souboru /dev/audio. Jsou zde soubory pro disky, paměť, zvuk prostě všechno, co potřebujete. Nejsou třeba žádná speciální volání jádra pro jednotlivá zařízení a další komplikace. Protože jsou ale funkce, které lze těžko převádět na práci se souborem (nastavení samplovaci frekvence, nebo hlasitosti apod), zavedl UNIX ještě volání ioctl (input output control list), který takové speciální funkce uožňuje. Od tohoto řešení ale některé novější systému upustily, protože je poněkud nepřehledný. Plan9 například má pro každé zařízení dvě device. Do jedné se zapisují data a do druhé textové příkazy. Systém devicí je v UNIXu řešen přes major a minor čísla. Device jsou normální soubory s nastaveným speciálním flagem a s těmito čísly. Kařdý ovladač v jádře má svoje číslo (třeba zvuk má 14). Všechny device s major číslem 14 jsou směřovány do zvukového driveru. Ten ovládá hned několik devicí (/dev/audio pro přehrávání digitalních zvuku, /dev/mixer pro nastavování hlasitosti, /dev/midi pro midi apod.) Každá tato device má jiné minor číslo. Tento systém má ale nevýhodu v tom, že samotné přidání ovladače nestačí - musíte ještě navíc někde na disku (většinou v adresáři /dev) přidat soubor. Navíc není možné aby jádro samo takové soubory vytvářelo. Proto je v UNIXu například omezený počet pseudo terminálů. První řešení obsahoval SystemV, který obsahoval tzv. proc filesystém. To je normální filesystém, který ale není nikde fyzicky na disku, ale obsahuje různé soubory vytvářené přímo jádrem. Například adresář pro každý běžící proces, který obsahuje soubory jako cmdline (obsahuje příkaz, kterým byl proces spuštěn), mem (obsahuje paměť) apod. V SystemuV (A v Linuxu) tedy existují dva mechanizmy - klasické device a proc filesystém. Některé operační systémy ale toto dotáhly dál a přidaly device do proc filesystému. Nejdéle to pravděpodobně dotáhl plan9, kde nejenom kernel ale i normální programy používají takové soubory pro komunikaci. Najdete tam například adresář /dev/window, kde jsou očíslované adresáře pro jednotlivá okna a v každém jsou soubory jako kbd (pro čtení klávesnice), mouse (pro myš), bitblt (pro kreslení na obrazovku) apod. Každý proces má svoje okno namapované přímo do /dev a tak nakreslení čáry do okna se dělá pomocí zapsání příkazu "nakresi čáru" do souboru /dev/bitblt. Textový editor zase vytváří takové soubory pro editované soubory a tak externí utilitky je mohou měnit. Celý plan9 je postaven na komunikaci pomocí souborů. Volání jádra jsou omezena na nutné minimum. Zjišťování času se provádí čtením souboru /dev/msec, otvírání síťového socketu pomocí čtení /net/socket/clone apod. To přináší velmi zajímavé důsledky. Pokud například přes síť namapujete všechny soubory jednoho počítače na druhý a tam spustíte program, program sice běží na cízím CPU ale jinak veškeré prostředí je identické z původním počítačem - ps tak vypíše procesy na vzdáleném počítači, debugger debuguje vzdálené procesy apod. To kam je který filesystém napojen není v planu9 utázkou systému, ale každý proces může mít vlastní. A tak každý proces může mít vlastní prostředí. Pokud potřebujete cosi jako telnet, namapujete pouze konzoli (/dev/con, /dev/kbd apod.), pokud potřebujete kopírovat soubory, namapujete celý filesystém do podadresáře apod. výheň