Hlavní navigace

Co před námi tají /proc (15)

Tomáš Kašpárek

Dneska zvládneme písmeno P. Probereme informace o diskových oddílech a o obsazení sběrnic PCI (respektive AGP).

Jak asi víte, mám již nějakou dobu novou mašinku. Na asi každém novém počítači je třeba vyladit řadu detailů. Dost dlouhou dobu jsem bojoval s APM biosem, abych ho přemluvil, že chci počítač po shutdownu vypnout (power off). A moc se mi to nedařilo. Proto jsem se nakonec odhodlal vyzkoušet místo APM raději novější ACPI (Advanced Configuration and Power Interface). Kupodivu to funguje, a tak se dnes výpis trochu mění. Přibyl nový adresář acpi a ubyl soubor apm.

Pokud jste někdo náhodou majitelem Abitu VP6 jako já, ozvěte se mi, rád bych si o pár věcech popovídal.

Jak velí tradice, nejprve (dnes lehce modifikovaný) výpis základního adresáře /proc. Tečka před názvem znamená, že už to máme za sebou:

  .840     .devices     .kcore   .modules     stat     ide/     acpi/
  .842     .dma         .kmsg    .mounts      swaps    irq/
  .847     .execdomains .ksyms   .mtrr        uptime   net/
  .848     .filesystems .loadavg  partitions  version  nv/
  .849     .interrupts  .locks    pci         bus/     sys/
  .cmdline .iomem       .meminfo  self@       driver/  sysvipc/
  .cpuinfo .ioports     .misc     slabinfo    fs/      tty/
partitions

Diskové oddíly se používají v DOSu, ve Windousech, v Unixech a asi i ve většině ostatních operačních systémů – nevíte někdo, jak je to u Jablek (Apple)? Jedná se o způsob, jak rozdělit jeden fyzický disk na několik menších, nazývaných logiké disky nebo též diskové oddíly. Teď zbývá otázka, jaký to má smysl.

Odpověď lze nalézt v historii osobních počítačů. Na počátku měly osobní počítače (nebo též minipočítače) místo pevných disků pouze disketové mechaniky. Často to fungovalo tak, že na jedné byl operační systém a druhá byla pro uživatelovy programy a data. Teď se musím pochlubit, sám jsem i přes svůj nevelký věk takový počítač viděl :) . No a když pak přišly první winchestery, jak se říkalo pevným diskům, uvědomily si počítačové firmy, že uživatelé by byli příliš zmateni, kdyby měli mít najednou místo diskety o kapacitě 360KB disk o velikosti třeba 10MB. Řešením bylo rozdělit těch 10MB na části o velikosti diskety a uživateli podsunout myšlenku, že se vlatně nic nezměnilo, jen má holt těch disketových mechanik o „něco“ více. Za čas si uživatelé na novou skutečnost zvykli a už je tolik nerozptylovalo mít jeden (třeba i 40MB) disk a na něm vše dohromady. No to byly časy.

Doufám, že se vám tahle pohádka líbila (měla přece šťastný konec, ne?), a teď už se vrhněme na to, co všichni čekáte:

major minor  #blocks  name
   3     0    9770544 hda
   3     1    3076416 hda1
   3     2    3478072 hda2
   3     3    3076447 hda3
   3     4     136521 hda4
  22     0    1251936 hdc
  22     1     625936 hdc1
  22     2     625968 hdc2

Tak, copak to tam máme. Začínám mít počit, že se lehce opakuji. Přiřazování hlavních (major) a vedlejších (minor) čísel, jejich význam a odpovídají názvy souborů v adresáři /dev jsme si už probrali, tak jen lehce připomenu, že se jedná o master disky na prvním a druhém kanálu IDE. Vedlejší čísla odpovídají jednotlivým diskovým oddílům. Vedlejší číslo 0 a název bez čísla je pro celý disk (fyzický). Jediný údaj, který zůstává, je velikost oddílu, a to je sloupec nadepsaný jako #blocks, tedy počet bloků. Pro zjištění velikosti oddílu už stačí jen vědět, že velikost bloku je 1024 bajtů, neboli 1KB.

Dále zkusíme porovnat získané vlastnosti s výpisem příkazu df. Ten zjišťuje informace o prostoru pro uživatelská data. Z rozdílu lze tedy vyčíst, kolik místa na disku zabere administrativa operačního systému. Tak se na to mrkneme:

Filesystem  1k-blocks  Used     Available Use% Mounted on
/dev/hda3   3028108    1051276  1915304   36% /
/dev/hda2   3362046    1691800  1496343   54% /home
/dev/hda1   3070400    2156448   913952   71% /mnt/user

Chybějící oddíl 4 je využit pro swap. Jak lze briskně spočítat, pro souborový systém je vyčleněno na zhruba 3GB oddílu kolem 53MB místa. To na první pohlednení není vůbec málo, ale jestli se někdy dostaneme k povídání o souborových systémech, uvidíte, že to na druhou stranu není zase tak moc.

Nakonec ještě něco o detailech rozdělení disku. Na začátku disku je umístěna tzv. partition table (tabulka rozdělení disku). V té je zaznamenán v každé položce typ oddílu, jeho začátek a konec v rozumné adrese, případně další příznaky a informace. Rozumná adresa je CHS (Cylindr, Hlava, Sektor), nebo jednoduše číslo sektoru pro LBA (Lineární adresování bloků). Fuj, to zní divně. Mimochodem, napište mi, jestli vám moc vadí anglické názvy, pokud ne, asi je začnu ve větší míře používat). No tak zpátky. Prozatím byly všechny informace obecné. Ale svět není jen DOS, a tak podobný systém rozdělení disků používají třeba počítače BSD/SUN nebo IRIX/SGI. Rozdíl je v počtu položek v tabulce diskových oddílů. SUN může mít až osm diskových oddílů, SGI šestnást. Starý dobrý DOS nemá počet omezen. V základní tabulce je místo pro čtyři záznamy, ale jedním z typů oddílu může být tzv. rozšířený oddíl (extended). Ten může opět obsahovat další čtyři oddíly, a tak dále. Jediná drobnost je, že z rozšířených oddílů někdy nejde startovat systém. (Alespoň jsem to slyšel říkat o Windousech.)

pci

Tohle je asi jeden z nejobsáhlejších souborů v adresáři /proc vůbec. Najdete zde spoustu informací o zařízeních připojených na sběrnici PCI respektive AGP. Jako příklad jen část souboru:

 ...
 Bus  0, device   7, function  0:
   ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 64).
  Bus  0, device   7, function  1:
   IDE interface: VIA Technologies, Inc. Bus Master IDE (rev 6).
     Master Capable.  Latency=32.
     I/O at 0xc000 [0xc00f].
  Bus  0, device   7, function  2:
   USB Controller: VIA Technologies, Inc. UHCI USB (rev 22).
     IRQ 19.
     Master Capable.  Latency=32.
     I/O at 0xc400 [0xc41f].
 ...
   Bus  0, device  10, function  0:
    Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139 (rev 16).
     IRQ 17.
     Master Capable.  Latency=32.  Min Gnt=32.Max Lat=64.
     I/O at 0xcc00 [0xccff].
     Non-prefetchable 32 bit memory at 0xdc000000 [0xdc0000ff].
 ...

Každé zařízení má v tomto výpisu vyhrazen malý odstavec. Ten začíná adresou zařízení, která se skládá z identifikace sběrnice. V běžných počítačích je jen jedna sběrnice (pozor, ne slot!) PCI, takže je zde Bus 0. Bus 1 potom odpovídá AGP sběrnici a zařízení k ní připojené (často grafická karta :). Číslem u device jsou odlišena jednotlivá zařízení. Pokud některé z nich plní více funkcí, je číslo zařízení stejné a rozlišení se provádí pomocí function. Dále jsou uvedeny třída, výrobce a název zařízení. To jsou číselné hodnoty, jejichž odpovídající textové popisky lze nalézt v drivers/pci/clas­slist.h pro třídy a drivers/pci/de­vlist.h pro výrobce a jednotlivá zařízení. Následují konfigurační údaje daného zařízení, jako adresa IO paměti, číslo IRQ, obsazení mapované paměti a další.

No a teď bych se měl rozepsat o tom, jak PCI sběrnice a její programování funguje, jak se nastavují jednotlivá zařízení a proč je pro USB přiřazeno přerušení 19. Je mi to líto, ale nerozepíšu. Zatím. Ale protože i mne to opravdu zajímá, tak o to nepřijdete a můžete se těšit, že se k tomuto problému ještě vrátím (a se mnou přijde i zákon! :)

Našli jste v článku chybu?