B.4. Vissa uppgifter hanteras av kärnan
Kärnan har, i första hand, uppgiften att kontrollera hårdvarudelarna, detektera dem, slå på dem när datorn är strömsatt o.s.v. Den gör dem också tillgängliga för programvara på högre nivå med ett förenklat programmeringsgränssnitt, så att program kan dra nytta av enheter utan att behöva känna till detaljer så som vilken expansionsport expansionskortet sitter i. Programmeringsgränssnittet tillhandahåller också ett abstraktionslager; detta låter till exempel videokonferenssystem använda en webbkamera oberoende av tillverkare och modell. Programvara kan helt enkelt använda gränssnittet Video for Linux (V4L, Video för Linux), varpå kärnan översätter funktionsanropen för detta gränssnitt till de hårdvarukommandon som behövs för den specifika webbkamera som används.
The kernel exports many details about detected hardware through the /proc/
and /sys/
virtual filesystems. Several tools summarize those details. Among them, lspci
(in the pciutils package) lists PCI devices, lsusb
(in the usbutils package) lists USB devices, and lspcmcia
(in the pcmciautils package) lists PCMCIA cards. These tools are very useful for identifying the exact model of a device. This identification also allows more precise searches on the web, which in turn, lead to more relevant documents.
Exempel B.1. Exempel på information som tillhandahålls av lspci
och lsusb
$
lspci
[...]
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 05)
00:01.0 PCI bridge: Intel Corporation 6th-9th Gen Core Processor PCIe Controller (x16) (rev 05)
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
00:14.0 USB controller: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller (rev 31)
00:14.2 Signal processing controller: Intel Corporation 100 Series/C230 Series Chipset Family Thermal Subsystem (rev 31)
[...]
02:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTL8411B PCI Express Card Reader (rev 01)
03:00.1 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 12)
04:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
$
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0bda:5621 Realtek Semiconductor Corp. HD WebCam
Bus 001 Device 002: ID 04ca:3016 Lite-On Technology Corp.
Bus 001 Device 018: ID 145f:01bc Trust GXT 155 Gaming Mouse
Bus 001 Device 004: ID 04f3:0c03 Elan Microelectronics Corp. ELAN:Fingerprint
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Dessa program har en flagga -v
som listar ännu mer detaljerad information (som vanligen inte behövs). Avslutningsvis listar kommandot lsdev
(i paketet procinfo) kommunikationsresurser som används av enheter.
Program får ofta tillgång till enheter genom speciella filer som skapas i
/dev/
(se sidopanel
TILLBAKA TILL GRUNDERNA Enhetsåtkomstbehörigheter). Dessa är speciella filer som representerar diskenheter (till exempel
/dev/hda
och
/dev/sdc
), partitioner (
/dev/hda1/
eller
/dev/sdc3
), möss (
/dev/input/mouse0
), tangentbord (
/dev/input/event0
), ljudkort (
/dev/snd/*
), serieportar (
/dev/ttyS*
), o.s.v.
Filsystem är en av de väsentligaste aspekterna av kärnan. Unix-system sammanfogar alla lagrade filer i en enda hierarki, vilket låter användare (och program) komma åt data genom att endast känna till dess plats inom den hierarkin.
Startpunkten för detta hierarkiska träd kallas för roten, /
. Denna katalog kan innehålla namngivna underkataloger. Till exempel är home
en underkatalog till /
som kallas /home/
. Denna underkatalog kan i sin tur innehålla andra underkataloger, o.s.v. Varje katalog kan också innehålla filer, i vilka faktisk data kommer att lagras. Således refererar namnet /home/rmas/Skrivbord/hej.txt
till en fil med namnet hej.txt
lagrad i underkatalogen Skrivbord
i underkatalogen rmas
i katalogen home
som finns i roten. Kärnan översätter mellan detta namngivningssystem och den riktiga fysiska lagringsplatsen på disk.
Till skillnad från andra operativsystem, finns det bara en sådan hierarki, och den kan integrera data från flera diskar. En av dessa diskar används som roten och de andras ”monteras” som kataloger i hierarkin (Unix-kommandot kallas mount
(montera)); dess andra diskar är sedan tillgängliga under dessa ”monteringspunkter”. Detta tillåter lagring av användares hemkataloger (vanligtvis lagrade i /home/
) på en annan hårddisk, vilken kommer att innehålla katalogerna rhertzog
och rmas
. När disken är monterad på /home/
kommer dessa kataloger att kunna nås på deras vanliga platser, och sökvägar så som /home/rmas/Skrivbord/hej.txt
kommer att fortsätta fungera.
Det finns flera filsystemsformat, vilket motsvaras av att det finns många sätt att fysiskt lagra data på diskar. De mest kända är ext3 och ext4, men andra finns också. Till exempel så användes filsystemet vfat historiskt av operativsystemen DOS och Windows, vilket tillåter att hårddiskar kan fungera under Debian såväl som under Windows. Oavsett vilket så måste filsystem förberedas på en disk innan de kan monteras och denna operation kallas ”formatering”. Kommandon så som mkfs.ext3
(där mkfs
står för MaKe FileSystem (skapa filsystem)) hanterar formatering. Dessa kommandon kräver, som en parameter, en enhetsfil som representerar den partition som ska formateras (till exempel /dev/sda1
). Denna operation är destruktiv och bör endast köras en gång, förutom om man avsiktligen vill rensa ett filsystem och börja om från början.
Det finns också nätverksfilsystem, så som
NFS, där data inte lagras på en lokal disk. Istället skickas data över nätverket till en server som lagrar och hämtar data vid behov. Filsystemsabstraktionen skyddar användaren från att behöva bry sig: filer förblir åtkomliga på det vanliga hierarkiska sättet.
Då ett antal funktioner används av all programvara är det vettigt att centralisera dem i kärnan. Delad filsystemshantering tillåter till exempel vilket program som helst att öppna en fil med namn, utan att behöva bry sig om var filen är lagrad fysiskt. Filen kan lagras på flera olika delar på en hårddisk, eller delad över flera hårddiskar, eller till och med lagrade på en fjärrfilserver. Delade kommunikationsfunktioner används av program för att utbyta data oberoende av hur data transporteras. Till exempel kan transport ske över en kombination av lokala eller trådlösa nätverk eller över en telefonlinje.
En process är en körande instans av ett program. Detta kräver minne för att lagra både programmet självt och dess data. Kärnan är ansvarig för att skapa och spåra dem. När ett program kör tilldelar kärnan först lite minne åt programmet, och läser sedan in den körbara koden från filsystem in i detta minne, och börjar sedan köra koden. Den håller information om denna process, det mest väsentliga är ett identifikationsnummer känt som pid (processidentifierare).
Unix-liknande kärnor (inklusive Linux) kan, likt de flera moderna operativsystem, göra flera saker samtidigt. Med andra ord de tillåter att man kör flera processer ”samtidigt”. Det är faktiskt bara en process som kör åt gången, men kärnan delar in tiden i små intervall och kör varje process i turordning. Då dessa tidsintervall är väldigt korta (i storleksordningen millisekunder), ger detta illusionen av att processerna kör parallell, även om de i verkligheten endast är aktiva under vissa tidsintervall och sover resten av tiden. Kärnans jobb är att justera sina schemaläggningsalgoritmer för att behålla den illusionen, medan systemets globala prestanda maximeras. Om tidsintervallen är för långa kan ett program upplevas som att det inte är responsivt. Om intervallen är för korta förlorar systemet tid då uppgifter växlas mellan allt för fort. Dessa beslut kan justeras med processprioriteter. Högprioriterade processer kommer att köra under länge tidsintervall och oftare än lågprioriterade processer.
Kärnan tillåter förstås att flera oberoende instanser av samma program kör samtidigt. Men var och en kan endast använda sina egna tidsintervall och minne. Deras data förblir därmed oberoende.
B.4.5. Rättighetshantering
Unix-liknande system är också fleranvändarsystem. De tillhandahåller ett rättighetssystem som har stöd för separata användare och grupper; det tillåter också styrning av åtgärder baserade på rättigheter. Kärnan hanterar data för varje process, vilket låter den styra rättigheter. För det mesta identifieras en process av användaren som startade den. Den processen tillåts endast utföra de åtgärder som dess ägare kan utföra. Att försöka öppna en fil kräver till exempel att kärnan kontrollerar processidentiteten mot åtkomsträttigheter (för vidare information om detta specifika exempel se
Avsnitt 9.3, ”Hantera behörigheter”).