Opět dle tradice výpis základního adresáře /proc. Tečka před názvem znamená, že jsme daný soubor/adresář již probrali:
.840 .devices kcore modules stat ide/ .842 .dma kmsg mounts swaps irq/ .847 .execdomains ksyms mtrr uptime net/ .848 .filesystems loadavg partitions version nv/ .apm .interrupts locks pci bus/ sys/ .cmdline iomem meminfo self@ driver/ sysvipc/ .cpuinfo ioports misc slabinfo fs/ tty/
- iomem
-
Nejprve nebytný výpis pro ukázku:
00000000-0009fbff : System RAM 0009fc00-0009ffff : reserved 000a0000-000bffff : Video RAM area 000c0000-000c7fff : Video ROM 000f0000-000fffff : System ROM 00100000-0ffeffff : System RAM 00100000-001c646f : Kernel code 001c6470-0020953f : Kernel data 0fff0000-0fff2fff : ACPI Non-volatile Storage 0fff3000-0fffffff : ACPI Tables d0000000-d7ffffff : PCI Bus #01 d0000000-d7ffffff : nVidia Corporation NV11 d8000000-dbffffff : VIA Tech., Inc. VT82C693A/694x [Apollo PRO133x] dc000000-ddffffff : PCI Bus #01 dc000000-dcffffff : nVidia Corporation NV11 de000000-de0000ff : Realtek Semiconductor Co., Ltd. RTL-8139 de000000-de0000ff : 8139too fec00000-fec00fff : reserved fee00000-fee00fff : reserved ffff0000-ffffffff : reserved
V prvním sloupci je příslušná oblast paměti (adresového prostoru) a v druhém je řečeno, kdo oblast využívá.
V/V paměť je první ze dvou možných způsobů ovládání periferií. Představte si adresový prostor (v našem případě – architektura Intel x86 – jde o 32 bitů), do kterého jsou mapovány paměťové prvky periferních zařízení. Může jít jednak o stavové a příznakové registry a nebo třeba o vyrovnávací paměti. Důležité je, že ačkoliv vše vypadá jako přístupy do fyzické paměti RAM, ve skutečnosti se jedná o sběrnicovou komunikaci s daným periferním zařízením. S (operační) pamětí RAM to nemá nic společného. Před použitím této paměti je třeba ji ovšem namapovat do LAP. To znamená provést nastavení transformace mezi logickým (virtuálním) adresovým prostorem aplikace/jádra a sběrnicovými adresami pro dané periferní zařízení. Potom je možno (na architektuře Intel x86) použít k přístupu obyčejné ukazatele. Pro čtení a zápis do takových oblastí je ovšem stále vhodné použít speciální funkce a ne běžné dereferencování. To zaručí vyšší přenositelnost mezi jednotlivými architekturami procesorů a sběrnic. Na Intelu jsou odpovídající funkce pro čtení a zápis (read[b|w|l] a write[b|w|l]) pouze „prázdnými“ makry. Detaily viz soubor …/include/arch-i386/io.h.
Následující tabulka ukazuje rozdělení adresového prostoru s velikostmi a hranicemi jednotlivých úseků:
Tabulka č. 156 název horní hranice velikost System RAM 639 KB 639 KB reserverd 640 KB 1 KB Video RAM area 768 KB 128 KB Video ROM 800 KB 32 KB System ROM 1024 KB 64 KB System RAM 256 MB 255 MB Kernel code – 1817 KB Kernel data – 268 KB ACPI storage 256 MB 12 KB ACPI tables 256 MB 52 KB PCI Bus #1 (NV) 3.25 GB 128 MB VIA Tech. 3.44 GB 64 MB PCI Bus #1 (NV) 3.44 GB 32 MB Realtek 8139 3.47 GB 256 B … reserved 4 GB V tabulce je vidět nejprve pozůstalost z dob DOSu – rozdělení začátku paměťového prostoru (640 KB). Dále je vidět vyhrazená paměť pro video adaptér – dnes opět historie. Po doplnění na 1 MB je vidět vlastní kód jádra spolu s jeho datovými strukturami. Oblast system RAM je vlastně dostupná (fyzická) operační paměť RAM bez prvního megabajtu (historie). Následuje několik kilo informací pro ACPI (Advanced Configuration and Power Interface) a pak přijde to hlavní. Dvě z instalovaných PCI/AGP zařízení (síťovka a grafika) jsou vidět ve výpise spolu s oblastmi paměti, které využívají. Také prostředky základní desky (VIA chipset) mají vyčleněny své části paměťového prostoru. Celý rozsah paměťového prostoru je potom 4 GB (232).
- ioports
-
0000-001f : dma1 0020-003f : pic1 0040-005f : timer 0060-006f : keyboard 0080-008f : dma page reg 00a0-00bf : pic2 00c0-00df : dma2 00f0-00ff : fpu 0170-0177 : ide1 01f0-01f7 : ide0 0376-0376 : ide1 03c0-03df : vga+ 03f6-03f6 : ide0 0cf8-0cff : PCI conf1 5000-500f : VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] 6000-607f : VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] c000-c00f : VIA Technologies, Inc. Bus Master IDE c000-c007 : ide0 c008-c00f : ide1 c400-c41f : VIA Technologies, Inc. UHCI USB c800-c81f : VIA Technologies, Inc. UHCI USB (#2) cc00-ccff : Realtek Semiconductor Co., Ltd. RTL-8139 cc00-ccff : 8139too d000-d03f : ESS Technology ES1969 Solo-1 Audiodrive d000-d00f : ESS Solo1 d400-d40f : ESS Technology ES1969 Solo-1 Audiodrive d404-d40f : ESS Solo1 d800-d80f : ESS Technology ES1969 Solo-1 Audiodrive d800-d80f : ESS Solo1 dc00-dc03 : ESS Technology ES1969 Solo-1 Audiodrive dc00-dc03 : ESS Solo1 e000-e003 : ESS Technology ES1969 Solo-1 Audiodrive e000-e003 : ESS Solo1
Zde opět první sloupec udává použitý rozsah adres portů a druhý název zařízení, které tento rozsah používá.
V/V (Vstupně/Výstupní) Porty jsou druhý způsob jak ovládat periferie. Z historického hlediska je starší a vznikl na počítačích s malým adresovým prostorem – tedy s úzkou adresovou sběrnicí. Příkladem budiž archeologické vykopávky Intel 8086 a podobné (nejlépe ještě omezené operačními systémy jako MS DOS). Tam byl 16ti bitový adresový prostor zatraceně malý na to aby se jím plýtvalo a tak byla snaha řešit komunikace s periferiemi jinou cestou. Výsledkem byly porty. Jedná se opět o další (tentokrát zcela samostatný) adresový prostor, který se ovládá speciálními instrukcemi procesoru. Těmi jsou instrukce typu inb, outb a podobné včetně jejich řetězcových verzí. Hlavní nevýhodou (kromě zbytečné složitosti při dvou oddělených přístupech) bylo omezení této množiny instrukcí. Proto pozdější architektury navržené rovnou pro 32 a více bitů (procesory Alpha od Digitalu) tento způsob vůbec nepodporovaly a v případě Linuxu je nabízen pouze jako mezivrstva emulující chování přes V/V paměť.
Při programování není třeba provádět mapování paměti – jedná se o oddělený adresový prostor a opět existují funkce pro přenos dat z a do adaptéru. Porty jsou rozděleny podle velikosti přenášené jednotky a proto existují modifikace základní funkce in[b|w|l] a stejně tak i out[b|w|l]. Linux poskytuje i rozhraní na řetězcové (a rychlejší) formy pomocí funkcí insb a outsb.
Na architekturách, které porty nabízejí, se využívají, i když spíše ze setrvačnosti a pro prostředky s jednoduchým nebo omezeným přenosem dat. Můžeme je tak najít ve spojitosti s ovládáním DMA kanálů, ACPI, USB sběrnic a případně zvukové karty. Některé periferie kombinují použití obou metod jak je vidět třeba na síťové kartě Realtek RTL-8139.
Vzhledem k tomu, že se ukazuje, že mám skutečně o něco více volného času, tak po domluvě s redakcí zvyšujeme tempo (alespoň dočasně) na (zhruba) dva články za týden. To by mohlo znamenat, že se dostaneme do půlky výpisu ještě před Vánocemi :).