# Crida de sistema

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.

## Fonaments

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.
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.
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 d'altres.

## Mecanisme

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 a acomplir 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.

## Les biblioteques com a intermediàries

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.

## Exemples i eines

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. Els sistemes operatius actuals tenen centenars de crides; per exemple Linux 2.x i FreeBSD tenen més de 300.

## Implementacions típiques

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. 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.

## Referències

* ↑ «Definició de sistema operatiu». [Consulta: 23 gener 2011].
* ↑ «Sistemes operatius». SOEM. [Consulta: 23 gener 2011].
* 1 2 «Gestió CPU / processos». SOEM. [Consulta: 23 gener 2011].
* ↑ Sibsankar Haldar; Alex A. Aravind. «Operating Systems» (en anglès) p. 23. Pearson Education, 2009. [Consulta: 23 gener 2011].
* ↑ «Programación de un microprocesador de 16 bits» (PDF) (en castellà). Arxivat de l'original el 2011-03-04. [Consulta: 23 gener 2011].
* ↑ 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 gener 2011].
* ↑ 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, 01-09-2010. Arxivat de l'original el 2011-04-01. [Consulta: 23 gener 2011].
* ↑ Marcelo E. Romeo; Eduardo A. Martínez. «Microcontroladores de 32 bits ARM» (PDF) (en castellà). Arxivat de l'original el 2022-01-21. [Consulta: 23 gener 2011].
* ↑ Kevin McGrath. «x86-64 Spec change: SYSCALL/SYSRET» (en anglès), 26-10-2000. Arxivat de l'original el 2012-08-13. [Consulta: 23 gener 2011].

## Vegeu també

* Gestió de processos Unix

## Enllaços externs

* The FreeBSD System PDF (anglès)