Crida de sistema

De Viquipèdia
Dreceres ràpides: navegació, cerca

En informàtica, crida de sistema (en anglès system call o syscall) és el mecanisme utilitzat per una aplicació per sol·licitar un servei al sistema operatiu.[1][2]

Fonaments[modifica | modifica el codi]

Els programes són un conjunt d'instruccions organitzades amb un objectiu. Un procés és conceptualment un programa en execució. En els sistemes operatius multitasca, hi pot haver diversos processos executant concurrentment. Cada procés pot requerir l'ús de recursos de maquinari, com perifèrics, o espai de memòria principal, o altres recursos.[3]

Ja que el maquinari és compartit per múltiples processos, l'accés als recursos ha de ser administrat per garantir el seu correcte ús i evitar problemes de seguretat (si processos malintencionats desitgen accedir a recursos assignats a altres processos). Per aquestes raons, en els sistemes duals, l'accés a l'ambient físic és manejat exclusivament pel sistema operatiu. L'única forma d'accedir al maquinari és a través de les crides al sistema, que estan perfectament definides. Això no passa en els sistemes operatius no duals, com el MS-DOS, on qualsevol procés podia accedir a tots els nivells del maquinari.[4]

Els processadors actuals poden executar les instruccions en diferents estats. En els sistemes duals, normalment són anomenats mode supervisor i mode usuari. Els processadors proveeixen diferents nivells de privilegi de manera que els sistemes operatius poden restringir les operacions que executen els programes tant per raons de seguretat com d'estabilitat. Aquestes operacions inclouen l'accés a perifèrics, activar o desactivar interrupcions, canviar l'estat del processador, i accedir a la memòria, entre altres.[5]

Mecanisme[modifica | modifica el codi]

Les crides de sistema comunament fan servir una instrucció especial de la UCP que causa que el processador transfereixi el control a un codi privilegiat, prèviament especificat pel mateix codi. Això permet al codi privilegiat especificar on serà connectat així com l'estat del processador.

Quan una crida al sistema és invocada, l'execució del programa que invoca és interrompuda i les seves dades són guardades, normalment en el seu BCP, per poder continuar executant després. El processador llavors comença a executar les instruccions de codi d'alt nivell de privilegi, per realitzar la tasca requerida. Quan aquesta finalitza, es retorna al procés original, i continua la seva execució. El retorn al procés demandant no obligatòriament és immediat, depèn del temps d'execució de la crida al sistema i de l'algorisme de planificació de CPU.[3]

Les biblioteques com a intermediàries[modifica | modifica el codi]

Generalment, els sistemes operatius proveeixen biblioteques que relacionen els programes d'usuari i la resta del sistema operatiu, usualment una biblioteca C com glibc o la versió d'execució de Microsoft C. Aquesta biblioteca maneja els detalls de baix nivell per a transferir informació al nucli i commutar a mode supervisor, així com qualsevol processament de dades o tasques que hagi de ser realitzada en mode supervisor. Idealment, això redueix la dependència entre el sistema operatiu i l'aplicació, i incrementa la seva portabilitat.[6]

Exemples i eines[modifica | modifica el codi]

En els sistemes operatius sota la norma POSIX o similars, algunes crides de sistema molt usades són open, read, write, close, wait, exec, fork, exit i kill.[7] Els sistemes operatius actuals tenen centenars de crides; per exemple Linux 2.x i FreeBSD tenen més de 300.

Implementacions típiques[modifica | modifica el codi]

La implementació de les crides de sistema requereix un control de transferència que involucra característiques específiques de l'arquitectura del processador. Una forma típica d'implementar és utilitzar una interrupció per programari.[8] Linux utilitza aquesta implementació en l'arquitectura x86.

Per als processadors amb arquitectura RISC, aquesta és l'única forma, però arquitectures CISC com x86 suporten altres tècniques addicionals. Un exemple és SYSCALL/SYSRET.[9]

Referències[modifica | modifica el codi]

  1. «Definició de sistema operatiu». [Consulta: 23-01-2011].
  2. «Sistemes operatius». SOEM. [Consulta: 23-01-2011].
  3. 3,0 3,1 «Gestió CPU / processos». SOEM. [Consulta: 23-01-2011].
  4. Sibsankar Haldar; Alex A. Aravind. «Operating Systems» (en anglès) p. 23. Pearson Education, 2009. [Consulta: 23-01-2011].
  5. «Programación de un microprocesador de 16 bits» (PDF) (en castellà). [Consulta: 23-01-2011].
  6. Tony Zhang; Sergio Kourchenko Barrena i Maricela Quintana López. «Aprendiendo C en 24 horas» (en castellà) p. 36. Mèxic: Pearson Educación, 2001. [Consulta: 23-01-2011].
  7. Yolanda Becerra; Julita Corbalán, Juan José Costa, Marisa Gil, Jordi Guitart, Amador Millan, Gemma Reig. «Com pot accedir l’usuari al dispositiu?» (PDF). Universitat Politècnica de Catalunya, Setembre de 2010. [Consulta: 23-01-2011].
  8. Marcelo E. Romeo; Eduardo A. Martínez. «Microcontroladores de 32 bits ARM» (PDF) (en castellà). [Consulta: 23-01-2011].
  9. Kevin McGrath. «x86-64 Spec change: SYSCALL/SYSRET» (en anglès), 26-10-2000. [Consulta: 23-01-2011].

Vegeu també[modifica | modifica el codi]

Enllaços externs[modifica | modifica el codi]