Jádro linuxu

Jan Kardaš, xkardas@fi.muni.cz

Obsah


Co to je?

Úkolem jádra je zprostředkovat spojení a komunikaci mezi hardwarovým vybavením stroje.

Jedna z jeho částí je například IPC - Inter process communication. IPC zajišťuje komunikaci mezi procesy, například signály.

Autorem této významné části informačního vývoje je Linus Torvalds, následuje jeho citát.

"Pracuji na (svobodném) operačním systému (jako koníček, nebude to velké a profesionální jako gnu) pro klony 386(486) AT."

Jádro je psáno v jazyce C.


Monolithic kernel

Je více možností, jak kernel postavit na základě požadavků, existují také microkernel a hybrid kernel.

Linux je postaven právě na monolitickém kernelu, který má oproti ostatním lepší IPC.

Největší rozdíl od jiných kernelů však spočívá v integraci ovladačů přímo do jádra.


Soubory kernelu

/boot/vmlinuz-*

VM - Přidáno po integraci Virtual Memory.

LINU - Zbytek z původního názvu "Linux", který evolvoval s přítokem nových technologií.

Z - Růst jádra vyžadoval kompresi, prvotně využit software zlib.


Config soubor - Obsahuje nastavení, například které moduly spouštět.

Initrd - Soubor, který jádro rozbaluje a spouští.


Rozdělení kernelu

Process management

Tato část řídí procesy, může je ničit nebo je tvořit, také zajištujě IPC a plánovač, který říká, které procesy jsou na řadě na procesoru, nebo které odložíme na později.


Memory management

Spravuje operace s pamětí. Zajišťuje jak a kdy využívat virtuální paměť.

Také vysílá příkazy, například "malloc", s parametrem umístění v bitech odpoví souřadnice počátku určitých dat.


Filesystems

Kernel se svým VFS dokáže emulovat prostředí, kde mu díky překladu nevadí manipulovat se dvěma různými filesystémy.


Device control

Tato součást má vědět, které ovladače spustit, jak rozpoznat zařízení a ovladače k nim přiřadit.


Networking

Kernel také musí komunikovat v síťi, takže jeho úděl je posbírat packety, složit je dohromady, předat naslouchající službě.


Moduly

Moduly jsou velmi zajímavá a důležitá součást kernelu, který se vyznačuje právě svou modulovatelností.

Kernel nastavíte tak, aby spouštěl jen ty moduly, které skutečně potřebujete.

Kernel za běhu dokáže moduly připojit nebo odpojit, dokonce za běhu můžete vyměnit i celý kernel.

Moduly jsou uloženy ve složce /lib/modules/

Příkaz "insmod" vloží modul.

Příkaz "rmmod" sodpojí modul.


Jak vytvořit modul?

#include

#include

#include


static int __init hi(void)

{

printk(KERN_INFO „Mám doma tři koně a slepici.\n");

return 0;

}


static void __exit bye(void)

{

printk(KERN_INFO „Dáš si špagety s cukrem?.\n");

}


module_init(hi);

module_exit(bye);

Ovladače

Neměly by obsahovat oprávnění, jejich účel by měl oddělit oprávnění od funkčnosti, aby zjednoduššil a otevřel možnosti.

O oprávnění se stará jiná část, ovšem, nenastavíte, aby mohl někdo formátovat bez root oprávnění.


Char devices

Kterékoliv zařízení, které dokáže posílat či přijímat textové řetězce, například sériové linky (/dev/ttyS0).

Tato zařízení mají ve složce /dev/ svůj přístupový soubor, který slouží jako cesta, kterou se do zařízení dostat, což zpracovává kernel.


Block devices

Tato zařízení v sobě dokáží přechovávat data, jsou to HHD a podobně.

Kernel k nim přistupuje podobně jako k Char devices a taktéž mají svůj přístupový soubor.

Do onoho souboru jsou posílány read/write poždavaky.


Network interfaces

Od předchozích dvou se nejvíce liší, nemají soubor ve složce /dev.

Jsou to všechna zařízení, která dokáží přijímat a odesílat packety, se kterými si pak hraje kernel.

Může to být i software, například loopback.


Virtual File System

Díky této technologii dokáže linux pracovat se dvěmi blokovými zařízeními, která mají různý filesystem.

Kernel vytvoří VFS odkazy na obě skutečná zařízení a díky překladu může manipulovat s daty jedním i druhým směrem.

Je to most, mezi různými filesystemy.


Procesy

První proces, který je spouštěn, je initializační proces, všechny ostatní jsou jeho potomci.

Nové procesy pak nejsou již tvořeny ale klonovány.

Některé procesy vyžadují správcovská oprávnění (například restart služby). My jsme však v user vrstvě, která vysílá požadavek. Proto se na chvíli prostředí přepne do system módu a následně zpátky.

Procesy mají svou čekací řadu, kterou musí před spuštěním vystát. Některé však mají přednost.

Kernel dává přednost real-time procesy před ostatními, to jsou takové procesy, které mají timestamp, který se odečítá nehledě na to, jestli je proces v řadě, nebo jestli je zpracováván.

Ve chvíli, kdy vyprší čas, je procesu vyslán signál, který by na něj měl reagovat.


LKCD

Linux Kernel Crash Dump

Tato součást slouží k dumpnutí stavu kernelu při požadavku na crash.

Ukládá se image soubor paměti.

Tato technologie však neví o existenci sítě, proto je nahrazena jinou - kdump.


Instalace jádra

Každá distribuce se liší v malých věcech při instalaci nového jádra.

Najděte si v dokumentaci své distribuce jak na ni a postupujte dle kroků.


Literatura