Bevezetés az alapvető működési elvek a kernel, a kernel fejlesztői közösség linux

Bevezetés a fő elvek a mag munka

Saját Oxford szótár szerint a kernel, mint „enyhe, általában ehető része a nut”, de van még egy második jelentését: „A legfontosabb és központi része valami”. Ha homályosan képzelni, hogy a valóságban predstvlyayu egy magot, azt fogja mondani, részletesen.

A mag tartalmaz egy része (réteg) szoftver, amely biztosítja a kommunikációt a hardver és az alkalmazások a számítógépen futó. Tulajdonképpen szigorúan véve, a Linux kifejezés csak a kernel, azaz az a része, amit írt Linus Torvalds a korai '90 -es években.

Az összes többi alkatrész, hogy megtaláljuk a GNU / Linux disztribúció - Bash shell, grafikus környezet KDE, böngészők, az X-kiszolgáló és az összes többi ... csak egyéni futó alkalmazások tetején yadra.Chtoby el lehet képzelni azt, én példaként - SLE11SP1 kb 2.5 GB szabad hely a merevlemezen (attól persze, hogy mit dönt, hogy telepíti). Mindebből a kernel maga, beleértve az összes modul foglal 47 MB. Ez körülbelül 2%.

A rendszer hívás interfész ()

A kernel egy linket hardver ... cool. Tehát pontosan mit csinál? Dosup kernel alkalmazói programok a hardver egy nagy gyűjtemény a belépési pontot, az úgynevezett rendszer hívás (system call).

Az egyik ilyen absztrakciók, hogy a kernelben, a fájlrendszer. Például, a rövid program (C-ben írt), akkor nyissa meg a fájlt, és másolja a tartalmát a standard kimenetre:

Itt van néhány példa 4 rendszer kéri - open (), read (), write () és close (). Ne aggódj szintaktikai részleteit; ez most nem fontos. A lényeg ez: a segítségével ezeket a rendszer hívásokat (és mások), a Linux kernel a rendelkezésünkre bocsátott egy illúzió „Fájl” - adatsorozatot (byte-ban), a neve - és megvéd bennünket a problémákat svyazynnyh adatokat a lemezre. Milyen probléma? Az a tény, hogy a lemez egy komplex rendszer a hengerek, a sávokat és szektorokat. Amikor írunk adatokat a lemezre, akkor használja ezt a rendszert, de a kernel lehetővé teszi számunkra, hogy nem kell aggódnia, ha az adatokat írni, vagyis mely ágazatokban, amelyen a pálya tiszta, azaz rögzítésre alkalmas. Mi rekord egy szál a fájl mérete, mondjuk, egy pár gigabájt merevlemez, és véleményünk szerint ez csak egy információ. Ez a fájl darabokra törjük, és a darabokat írt egy teljesen más része a merevlemez volt (igen, elvileg ez mindig előfordul), de nem érdekel, és ezeket az adatokat rejtve van előlünk.

Remélem, most már világosabb a vízkivételek, hogy a kernelben. Hasonló példákat mindenütt megtalálható a programozás, de elkalandoztam ...

Mint látható a fenti képen, a kernel végre kell hajtania a nehéz feladat, hogy támogassa ezt absztrakció. Különösen, ha ez szükséges-e fenntartani egy absztrakció különböző fájlrendszerek és fájlrendszerek, viszont meg kell dolgozni a különböző hardver - zheskie hdd meghajtók, USB flash kártya, CD / DVD meghajtó, SCSI, valamint a távoli fájlrendszerek amelyekhez hozzáférést biztosított a hálózati protokollok, mint a NFS vagy CIFS.

Csak ne felejtsd el támogatást a logikai kötetek vagy RAID. A virtuális réteg a lényege a fájl rendszer lehetővé teszi, hogy küldje el az adattároló rendszer, mint egy sor fájlokat egy file-rendszer, bár nem az, amit az egyik fájlrendszer fizikailag különböző eszközökön.

„Nincs kanál” (c) A Mátrix

Fájlrendszer - az egyik legnyilvánvalóbb absztrakciók, hogy a kernelben. Egyes funkciók nem annyira nyilvánvaló. Például a kernel felelős a tervezési folyamatban. Ha ismeri azokat az elveket, a processzor, akkor valószínűleg tudja, hogy csak egy folyamat lehet végezni egy adott időpontban. Ez azt jelenti, hogy az adott időpontban (mindig) a rendszer egy folyamat (program), kotoroye fog várni a sor.

A kernel ütemező osztja CPU időt, hogy mindegyikre. Ha megnézzük a munkafolyamatok fut a rendszer, akkor lesz egy illúzió, hogy a számítógépen fut egyszerre több program is. Nem zabyvaye hogy csak illúzió;)

Itt van még egy kis program C

Linux (Unix-szerű operációs rendszer alakú) jó hírnevét a biztonság. operációs rendszer biztonság és a stabilitás - a minőség és az alapvető logika. A kernel nyilvántartja a felhasználói azonosítót és a csoport minden egyes folyamat, és használja őket, hogy a döntést a hozzáférés megadása erőforrás (például egy fájl megnyitásakor az íráshoz), ellenőrzi a jogosultságokat a fájlt. Ez a hozzáférés vezérlési modell végső soron felelős a biztonsági Linux rendszerek általában ... és realizovanna ez a sejtmagban.

A moduláris szerkezet a nucleus

Most van néhány ötlet, amit a kernel csinál, nézzük röviden megvizsgálni annak fizikai szerkezetét. A korai verziók a Linux kernel volt monolitikus, azaz ez volt minden egy meglehetősen nagy futtatható fájlt.

Soveremennyy Linux kernel moduláris: sok olyan funkciót tartalmaz modulokat betölteni a kernel dinamikusan. Ez lehetővé teszi, hogy egy kis mag mérete, és lehetővé teszi, hogy feltölt (vagy cseréljük ki) a modulokat a kernel a számítógép újraindítása nélkül.

A fő mag betöltődik a memóriába a rendszer indításakor egy fájlt diriktorii / boot, és a továbbiakban valami hasonló vmlinuz-kernelversion, ahol kernelversion - kernel verzió (hogy ellenőrizze a kernel, fuss uname -r). Kernel modulok találhatók a / lib / modules / kernelversion.

Kernel Module Management

Tény, hogy a Linux is megbirkózik töltése és cseréje szükséges modulokat, de ez nem jelenti azt, hogy nem vagyunk képesek betölteni bármilyen modult magát, ha ez szükséges lesz. Például, hogy milyen modulok jelenleg betöltött a kernel, használja a lsmod.


Következtetés lsmod megmutatja nekünk a modul neve, mérete, hányszor használják, valamint a modulok listáját, hogy ettől függ. A hányszor, hogy a kernel használja ezt a modult, ez nagyon fontos. Nem szükséges, hogy kirak a modult, ha kolichesvo nagyobb, mint 0, azaz, mag dolgozik most (pillanatnyilag) ezzel a modullal. Bár elvileg, Linux, és nem távolítja el a modult, és egy darab kódot, akivel most már működik. Ez csak akkor lehetséges, azok egységek, amelyek értéke nulla.

Manuálisan és berakodása modulokat modprobe paranccsal. (Van két alacsonyabb szintű nevű parancsot insmod és rmmod, amelyek ezt a munkát, de a modprobe könnyebb használni, mert automatikusan lehetővé teszi a modul függőségek.) Például, a kimenet a lsmod (következtetés az én például) mutat betöltött modul isofs, amely jelenleg nem használják, és akinek nincs függő modulok. Ez a modul lehet letölteni:
# Modprobe -r isofs
Ezután isofs modul nem jelenik meg a kimeneten lsmod. Ez azt jelenti, hogy a kernel használ 36284 bájt kevesebb memóriát :) Ha behelyezi a lemezt a DVD / CD-meghajtó és podmontiruete (vagy, ha a hangulat, az operációs rendszer csinálni avtomatichnski), a kernel automatikusan újratöltődik isofs modul és a „hányszor annak használata „fog emelkedni 1. Ha megpróbálja eltávolítani a modult most, a Linux nem teszi lehetővé, ez a ... és ez így van rendjén :)


Ha lsmod megmutatja egy listát a betöltött modulok modprobe -l kiírja az összes rendelkezésre álló modulok. A kimenet tartalmazza az összes modult a / lib / modules / kernelversion. Big lista!

Ha úgy dönt, hogy tölteni a modult manuálisan modprobe, akkor is át paramétereket Ezt a modult a boot:
# Modprobe usbcore Blinkenlights = 1
Nem, nem én találtam, Blinkenlights - ez egy igazi lehetőség modul usbcore.

Amint kiderült, hogy ez a modul a paraméter? Nagyon egyszerű. A leghatékonyabb módja annak, hogy információt szerezzenek a modul használható a modinfo. Itt például információt a modul snd-hda-intel:


Érdekes számunkra az információ Parm - mutatja azokat a paramétereket, akkor át a modult. Ezek a leírások nagyon rövid :( Ugyanakkor azt is ugyanaz, és a rendszermag forrását, amely segít bennünket abban, hogy megértsük. Van is egy csomó érdekes dolgot az / usr / src / kernelversion / Documentation.

Például a paraméterek leírása /usr/src/KERNELVERSION/Documentation/sound/alsa/ALSA-Configuration.txt fájl átvihető sok ALSA-modulokat. Sok érdekes dolog van itt /usr/src/KERNELVERSION/Documentation/kernel-parameters.txt fájl

Azt is érdemes megemlíteni a lehetőségét automatikus modulbetöltés meghatározott paraméterekkel. Ehhez adjuk hozzá a parancsot /etc/modprobe.conf, amely jelzi a modul nevét, és a lehetőséget, hogy a kernel betöltéséhez:
options snd - hda - Intel probe_mask = 1

kútfeje

A Linux kernel is nyújt bőséges információt az fájlrendszer / proc. Hogy van értelme a / proc, meg kell bővíteni megértésének egy fájlt.

Ahelyett, gondolom, egy fájl a tárolt adatok a merevlemezen vagy CD-re vagy flash meghajtót, meg kell gondolni rá, mint minden olyan információt, amely keresztül érhető el a rendszer kéri, mint a nyitott (), read (), write ( ) (ebből írtam fent), és amelynek segítségével érheti rendszeres programok, mint például macska vagy kevesebb.

A fájlokat a / proc - ez származik, és a lényege a képzelet, inkább elvont és illuzórikus. FS Ez azt mutatja nekünk sok a belső kernel adatszerkezetek.

Sok mechanizmus figyelmeztetés arról, hogy mi történik a kernel fut végig a FS. Például a cat / proc / modules megmutatja egy listát a modulok jelenleg betöltött kernel. Valami hasonló kimenetet lsmod.

Különösen érdekesek azok a fájlokat a / proc / sys. Például a / proc / sys / net / ipv4 / ip_forward közölje velünk, hogy az átjáró gép. Nem tudom:


Senki megtiltja nekünk, hogy írjon a következő fájlokat:
# Echo 1> / proc / sys / net / ipv4 / ip_forward
... így mi is az IP-továbbítást.

By the way, akkor a munka nem csak a macska és a visszhang, nézni valamit, vagy változtatni a beállításokat a / proc / sys, akkor is használhatjuk a sysctl:


Ie ahelyett, hogy a korábbi két csapat


Akkor egyszerűen csinálni


Vegyük észre, hogy az első helyen, ha írsz az is, hogy az általunk használt, amikor dolgozik a sysctl, használjuk a pont helyett egy perjel, másrészt ahogy írunk otnostitelno / proc / sys.

Ne felejtsük el azt is, hogy a beállítások csak az adott aktuális kernel, azaz ami most betölti. Az újraindítás után az összes módosított beállítás állítható vissza. A beállítások mentéséhez, rögzíti azokat a /etc/sysctl.conf. A rendszerindítás során sysctl automatikusan visszaállítja az összes paramétert és beállítások fogja találni ebben a fájlban. Felvételi formátum, mint amikor futtatja a legtöbb sysctl:

net. ipv4. ip_forward = 1

> Azok számára, akik nem szeretik, használhatja assembly, és beszélj a hardverhez közvetlenül;)
Nem világos, hogy hogyan lehet használni a szerelő miatt
Úgy működik, közvetlenül a hardverrel. A kernel van írva
főleg C (ez vonatkozik a vezető az első
hely), míg ugyanabban az ASM jól vagyok
Tudok egy egyéni prog, akkor ki fog
használja ugyanazt a rendszer kéri. használata
A szerelő nem segít nekem elérni
hardver, megkerülve a kernel - ez segít egészen más,
nevezetesen, ioperm () függvény.

Azt hiszem, ott kellett volna használni az utasításkészlet / építészet célplatformon.
Az a tény, hogy a berendezés nem lesz képes beszélni a dolgozó nem privilegizált mód - teljesen nyilvánvaló.