Dizajn

Kernel - FreeBSD

Kernel je deo sistema koji se izvršava u zaštićenom (protected) modu hardvera i koji posreduje izmedju korisničkih programa i hardvera. Kernel pruža osnovne funkcije sistema; on kreira, izvršava i upravlja procesima, pruža pristup fajl sistemu i mrežnim protokolima i dr. Ove funkcije se nazivaju sistemski pozivi (system calls) i korisniku su dostupne kroz biblioteku rutina koje može pozivati iz svojih programa. Sistemski pozivi su jedini način na koji procesi mogu da pristupe ovim servisima.

Govoreći tradicionalnom terminologijom operativnih sistema, kernel je malo jezgro softvera koje pruža minimalne servise koji su neophodni za implementiranje dodatnih servisa operativnog sistema. U savremenim istraživačkim operativnim sistemima kao što su Chorus, Mach, Tunis i V Kernel, servisi kao što su fajl sistemi, mrežni protokoli i dr. potpuno su izdvojeni iz kernela. No, UNIX kernel je od samog početka bio monolitni, tj. nije bio podeljen u više procesa. Ovakva struktura kernela je odabrana zbog jednostavnosti i performansi.

Najveći deo kernela implementira sistemske servise kojima aplikacije pristupaju kroz sistemske pozive. U 4.4BSD (pa tako i u FreeBSD) on obuhvata:

osnovne servise kernela
manipulisanje tajmerom i sistemskim satovima, deskriptorima i procesima
upravljanje memorijom
straničenje (paging) i zamena stranica (swapping)
opšti sistemski interfejsi
I/O, kontrola deskriptora
fajl sistem
upravljanje fajlovima, direktorijumima, prevodjenje putanja fajlova
manipulisanje terminalima
interfejs terminala i discipline za procesovanje karaktera
medju-procesna komunikacija
pipe i socket
mrežna komunikacija
komunikacioni protokoli, routing

Većina ovih servisa su nezavisni od mašine i mogu se portovati na druge arhitekture. Delovi kernela koji su zavisni od konkretne mašine su izolovani od ovih delova. To su:

  • startovanje sistema
  • manipulisanje zamkama (trap handling) i greškama (fault handling)
  • manipulisanje radnog konteksa procesa (run-time context) procesa
  • konfigurisanje i inicijalizovanje hadrverskih uredjaja
  • radna podrška za ulazno/izlazne (I/O) uredjaje

Granica izmedju programa koji se izvršavaju u kernel-modu i korisničkom modu se ostvaruje pomoću hardverske podrške ovim servisima. Kernel se izvršava u adresnom prostoru koji je nedostupan korisničkim programima. Privilegovane operacije, kao što su pokretanje ulazno/izlazne operacije ili upravljanje procesorom (CPU) dostupne su samo kernelu. Sistemske pozive koriste korisnički programi (aplikacije) kako bi pristupili ovim operacijama. Sistemski poziv se izvršava sinhronizovano sa aplikacijom koja ga je pozvala; program se ne izvršava dok kernel izvršava akciju koju mu nalaze sistemski poziv. Ukoliko izvršavanje sistemskog pozva traje dugo (npr. upisivanje podataka na disk), izvršavanje aplikacije se može nastaviti i pre nego što se sistemski poziv završi (podaci će biti snimljeni u bafer, pa kasnije snimljeni na disk).

Postoje tri vrste ulaza u kernel: hardverski interapt, hardverska zamka (trap) i softverska zamka (softwer-initiated trap). Hardverske interapte stvaraju spoljni dogadjaji, kao što je ulazno/izlazni uredjaj ili sat koji prijavljuje prolazak vremena. Hardverski interapti se javljaju asinhronizovano i nisu vezani za proces koji se trenutno izvršava. Za manipulisanje hardverskim interaptom odgovoran je odgovarajući device-driver interupt handler u kernelu.

Hardverska zamka je vezana za proces koji se trenutno izvršava i može biti ili sinhronizovana ili asinhronizovana. Javljaju se usled neke greške kao npr. deljenje nulom. Proces sazna za grešku ili tako što primi signal, ili tako što bude ugašen.

Softverske zamke se koriste da zakažu što skorije izvršavanje nekih dogadjaja (mrežna komunikacija, vremensko planiranje izvršavanja...) i javljaju se sinhronizovano. Za softverske i hardverske zamke odgovoran je deo kernela pod imenom trap handler.

Sistemski pozivi su specijalni slučaj softverske zamke i za njih je odgovoran deo kernela pod imenom syscall handler. Nakon izvršavanja sistemskog poziva programu se šalje informacija o tome da li je sistemski poziv uspešno izvršen i identifikator greške ukoliko se javila, posle čega kernel odlučuje koji proces će nastaviti da izvršava.

Svaka aplikacija ima svoj sopstveni adresni prostor koji se razlikuje od adresnog prostora kernela. Kernel odredjuje koje će procese kada da izvršava, prekine sa izvršavanjem ili suspenduje radi izvršavanja drugog procesa.

2000 - 2018, Autor - Marko Uskoković. Izrada i web prostor - Goran Aleksić.