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ň