Sistema-dei

Konputazioan, sistema-dei bat programa informatiko batek uneko sistema eragilearen kernelari zerbitzu eskaera bat egiteko balio duen errutina bat da. Zerbitzu hauen artean: hardwarearekin lotutako zerbitzuak (adibidez, disko gogorraren atzipena), prozesuen exekuzioa eta sorrera edota kernelaren barneko zerbitzuen komunikazioa, esate baterako, prozesuen planifikazioa.

Sistema-deiek programen eta sistema eragileen artean nahitaezkoa den interfazea eskaintzen dute. Sistema eragile bat definitzen denean sistema-deia definitzea da zeregin nagusietako bat, eta sistema eragilea programatzean besteak beste sistema-deiak inplementatzen dira.

Funtzionamendu orokorra

Sistema deiek baimen bereziak dituzte 

Gaur egungo prozesadoreen arkitektura gehienek segurtasun neurri batzuk dituzte inplementatuak. Esaterako, programa bat, dagokion helbide espaziora egoten da mugatua, horrela, ezingo ditu atzitu exekuzioan dauden beste programak edota sistema eragilea. Horretaz gain, ezingo luke hardwareko gailurik zuzenean erabili.

Nolanahi ere, aplikazio arrunt askok zerbitzu mota horiek behar dituzte. Horretarako, sistema eragileak ondo definitutako inplementazio fidagarriez osatutako sistema-deiak eskaintzen ditu behar diren eragiketak betetzeko. Bide batez programen edo liburutegiko errutinak trinkotzea, memoria gutxiago hartzea, lortzen da.

Sistema eragilea baimen guztiekin exekutatzen da eta aplikazioei zerbitzu eskaerak egiteko baimena ematen die sistema-deien bidez, normalean eten bereziak erabiliz.

Etenek PUZa (CPU) baimen maila altuago batean jartzen dute modu automatikoan, ondoren kernelari exekuzioaren kontrola (ardura) emateko. Honek, eskaera egin duen programari eskatutako zerbitzua eman beharko litzaiokeen erabakitzen du. Zerbitzua onartzen bada, kernelak eskaera egin duen programak kontrolpean izan ezin dituen eragiketa zehatz batzuk exekutatuko ditu, jatorrizko programari dagozkion baimenak eta kontrola itzuliz.

Liburutegiak bitartekari moduan 

Orokorrean, sistemek programa arrunten eta sistema eragilearen artean egoten diren liburutegiak edo APIak eskaintzen dituzte. UNIX-moduko sistemetan, API horiek
C liburutegietan (libc) daude inplementatuta.

Liburutegira egindako deiak soilik ez du eragiten kernel modura igarotzea (kernel moduan ez dagoen bitartean), azpi-errutina dei arrunt gisa hartu ohi da. Sistema-dei batek kernelera pasako lioke kontrola (eta deitu dion liburutegi-deiak baino inplementazio eta plataforma menpekotasun handiagoa du). Adibidez, Unix-moduko sistemetan, fork eta execve C liburutegiko funtzioek, hurrenez hurren, fork eta execve sistema-deiak erabiltzen dituzte. Sistema-deiak zuzenean aplikazioko kodean erabiltzeak konplexutasuna handiagotzen du eta gainera sistema-deiek erabiltzen duten behe-mailako interfazearen ezagutza eskatzen du. Arrazoi horrengatik erabiltzen da liburutegi-deien abstrakzioa.

Exokernel-ean oinarritutako sistemetan, liburutegiaren bitartekari funtzioa oso garrantzitsua da. Exokerneletan, liburutegiek erabiltzaileen aplikazioak behe-mailako kernel API-etaz babesten dituzte eta abstrakzioak nahiz baliabide kudeaketa eskaintzen dute.

Mekanismoa: sistema-deien funtzionamendua 

Sistema-deiek, normalean, zera egiten duen CPUko agindu berezi bat erabiltzen dute: prozesadoreak kontrola aurretik zehaztutako kode pribilegiodun bati (ohikoena kernela izatea da) transferitzea. Honek kode pribilegiatuari prozesadorearen egoera eta non izango den konektatua zehaztea baimentzen dio.

Sistema-dei bat erreferentziatzen denean, deia egin duen programaren exekuzioa gelditu egiten da eta haren testuingurua (hardware-ko erregistroak esaterako) gorde egiten da sistema eragileak memorian dituen egituretan (prozesuen kontrol-blokeak), geroago programa horren testuingurua berreskuratu ahal izateko. Ondoren, prozesadoreak behe mailako kode pribilegioduna exekutatuko du, behar den zeregina betetzeko. Azkenik, programaren (deia egin duena) arabera, jarraitu egingo du edo ez.

Sistema-dei motak 

Unix eta antzeko sistema eragiletan sistema-dei nagusiak bost multzotan banatzen dira:

Prozesuen kudeaketarako deia 

 Prozesuak sortzea eta programa kargatzea: fork eta exec multzoa (exec, execv, execl...)
 Prozesuak amaitzea: exit, kill
 Seinaleak eta barne sinkronizazioa: signal, wait, sleep
 Memoria dinamikoa eskuratzea: mmap, brk, sbrk

Fitxategien kudeaketarako deiak 
 fitxategiak irekitzeko, ixteko, sortzeko: open, close, creat
 irakurketa eta idazketarako: read, write
 zuzeneko atzipena: lseek
 estekak sortu eta kentzeko (eta fitxategiak ezabatzeko): link, unlink
 katalogoak (direktorioak) sortzeko eta ezabatzeko: mkdir, rmdir

Gailuen kudeaketarako deiak 
 fitxategietako gehienak: open, close, read, write
 barne kontrolerako deia: ioctl
 gailuen zenbaki logikoak kudeatzeko: mknod

Komunikaziorako deiak: pipeak, buzoiak, sareko socket-ak 
 sortzeko: mknod
 bidali eta jasotzeko: write, read

Sistemaren informazioaren mantenimendurako deiak 
 baliabideen informazioa lortzea/ezartzea: get, set

Bibliografia 
 Sistema eragileen deskribapen funtzionala. Julio Abascal Gonzalez, Iñaki Alegria Loinaz, Alberto Lafuente Rojo, Elena Lazkano Ortega, Clemente Rodriguez Lafuente. UPV/EHU. 1995
 Sistema eragileak. Barnekoak eta diseinuko printzipioak. William Stallings. UPV/EHU. 2008. ISBN: 978-84-9860-167-1
 EHU-ko informazioa
 die.net
 man7.org
 codewiki.wikidot.com
 www.geeksforgeeks.org

Sistema eragileak
Konputagailuaren arkitektura