Sistema d'execució
En programació d'ordinadors, un sistema d'execució o entorn d'execució és un subsistema que existeix a l'ordinador on es crea un programa, així com als ordinadors on es pretén executar el programa. El nom prové de la divisió de temps de compilació i temps d'execució dels llenguatges compilats, que distingeix de manera similar els processos informàtics implicats en la creació d'un programa (compilació) i la seva execució a la màquina de destinació (el temps d'execució).[1]
La majoria dels llenguatges de programació tenen algun tipus de sistema d'execució que proporciona un entorn on s'executen els programes. Aquest entorn pot abordar una sèrie de qüestions, com ara la gestió de la memòria de l'aplicació, com accedeix el programa a les variables, mecanismes per passar paràmetres entre procediments, interfície amb el sistema operatiu (SO), entre d'altres. El compilador fa suposicions depenent del sistema d'execució específic per generar el codi correcte. Normalment, el sistema d'execució tindrà certa responsabilitat per configurar i gestionar la pila i l'emmagatzematge dinàmic, i pot incloure funcions com ara la recollida d'escombraries, fils o altres funcions dinàmiques integrades a l'idioma.[2]
Visió general
[modifica]Cada llenguatge de programació especifica un model d'execució, i molts implementen almenys part d'aquest model en un sistema d'execució. Una possible definició del comportament del sistema en temps d'execució, entre d'altres, és "qualsevol comportament que no sigui directament atribuïble al propi programa". Aquesta definició inclou posar paràmetres a la pila abans de les trucades de funcions, l'execució paral·lela de comportaments relacionats i l'E/S del disc.[3]
Segons aquesta definició, essencialment cada llenguatge té un sistema d'execució, inclosos els llenguatges compilats, els llenguatges interpretats i els llenguatges incrustats específics del domini. Fins i tot els models d'execució autònoms invocats per API, com ara Pthreads (fils POSIX), tenen un sistema d'execució que implementa el comportament del model d'execució.
La majoria dels articles acadèmics sobre sistemes d'execució se centren en els detalls d'implementació dels sistemes d'execució paral·lels. Un exemple notable d'un sistema d'execució paral·lel és Cilk, un model de programació paral·lel popular. El conjunt d'eines proto-runtime es va crear per simplificar la creació de sistemes d'execució paral·lels.
A més del comportament del model d'execució, un sistema d'execució també pot realitzar serveis de suport com ara la comprovació de tipus, la depuració o la generació i optimització de codi.[4]
Comparació entre conceptes similars al sistema d'execució:
Tipus | Descripció | Exemples |
---|---|---|
Entorn d'execució | Plataforma de programari que proporciona un entorn per executar codi | Node.js ,. NET Framework |
Motor | Component d'un entorn d'execució que executa codi compilant-lo o interpretant-lo | Motor JavaScript en navegadors web, màquina virtual Java |
Intèrpret | Tipus de motor que llegeix i executa codi línia per línia, sense compilar prèviament tot el programa | Intèrpret CPython, Ruby MRI, JavaScript (en alguns casos) |
Intèrpret JIT | Tipus d'intèrpret que compila dinàmicament codi en instruccions de màquina en temps d'execució, optimitzant el codi per a una execució més ràpida | V8, intèrpret PyPy |
Relació amb entorns d'execució
[modifica]El sistema d'execució també és la porta d'entrada a través de la qual un programa en execució interactua amb l' entorn d'execució. L'entorn d'execució inclou no només valors d'estat accessibles, sinó també entitats actives amb les quals el programa pot interactuar durant l'execució. Per exemple, les variables d'entorn són característiques de molts sistemes operatius i formen part de l'entorn d'execució; un programa en execució pot accedir-hi mitjançant el sistema d'execució. De la mateixa manera, els dispositius de maquinari com ara discs o unitats de DVD són entitats actives amb les quals un programa pot interactuar mitjançant un sistema d'execució.
Una aplicació única d'un entorn d'execució és el seu ús dins d'un sistema operatiu que només permet que s'executi. En altres paraules, des de l'arrencada fins a l'apagada, tot el sistema operatiu es dedica només a les aplicacions que s'executen dins d'aquest entorn d'execució. Qualsevol altre codi que intenti executar-se, o qualsevol fallada a les aplicacions, trencarà l'entorn d'execució. Al seu torn, trencar l'entorn d'execució trenca el sistema operatiu, aturant tot el processament i requerint un reinici. Si l'arrencada és de memòria de només lectura, es crea un sistema extremadament segur, senzill i d'una sola missió.
Alguns exemples d'aquests sistemes d'execució agrupats directament inclouen:
- Entre 1983 i 1984, Digital Research va oferir diverses de les seves aplicacions empresarials i educatives per al PC IBM en disquets d'arrencada amb SpeedStart CP/M-86, una versió reduïda de CP/M-86 com a entorn d'execució.
- Algunes versions autònomes de Ventura Publisher (1986–1993), Artline (1988–1991), Timeworks Publisher (1988–1991) i ViewMAX (1990–1992) contenien les seves versions d'execució especials GEM de Digital Research.
- A finals de la dècada de 1990, el processador de línia d'ordres de JP Software 4DOS estava disponible opcionalment en una versió d'execució especial per enllaçar-se amb treballs per lots precompilats i xifrats de BATCOMP per tal de crear executables no modificables a partir de scripts per lots i executar-los en sistemes sense 4DOS instal·lat.[5]
Exemples
[modifica]El sistema d'execució del llenguatge C és un conjunt particular d'instruccions inserides pel compilador a la imatge executable. Entre altres coses, aquestes instruccions gestionen la pila de processos, creen espai per a variables locals i copien els paràmetres de trucada de funció a la part superior de la pila.
Sovint no hi ha criteris clars per determinar quins comportaments de llenguatge formen part del propi sistema d'execució i quins poden ser determinats per qualsevol programa font en particular. Per exemple, a C, la configuració de la pila forma part del sistema d'execució. No està determinat per la semàntica d'un programa individual perquè el comportament és globalment invariant: s'aplica a totes les execucions. Aquest comportament sistemàtic implementa el model d'execució del llenguatge, en oposició a la implementació de la semàntica del programa en particular (en el qual el text es tradueix directament en codi que calcula els resultats).
Funcions avançades
[modifica]Alguns llenguatges compilats o interpretats proporcionen una interfície que permet que el codi de l'aplicació interactuï directament amb el sistema d'execució. Un exemple és la classe Thread
en llenguatge Java. La classe permet que el codi (que està animat per un fil) faci coses com ara iniciar i aturar altres fils. Normalment, els aspectes bàsics del comportament d'un llenguatge, com ara la programació de tasques i la gestió de recursos, no són accessibles d'aquesta manera.
Els comportaments de nivell superior implementats per un sistema d'execució poden incloure tasques com dibuixar text a la pantalla o establir una connexió a Internet. Sovint és el cas que els sistemes operatius també proporcionen aquest tipus de comportaments i, quan està disponible, el sistema d'execució s'implementa com una capa d'abstracció que tradueix la invocació del sistema d'execució en una invocació del sistema operatiu. Això amaga la complexitat o les variacions en els serveis que ofereixen els diferents sistemes operatius. Això també implica que el nucli del sistema operatiu es pot veure com un sistema en temps d'execució i que el conjunt de trucades del sistema operatiu que invoquen comportaments del sistema operatiu es pot veure com a interaccions amb un sistema d'execució.
Història
[modifica]Els primers exemples notables de sistemes d'execució són els intèrprets de BASIC i Lisp. Aquests entorns també incloïen un col·lector d'escombraries. Forth és un primer exemple d'un llenguatge dissenyat per ser compilat en codi de representació intermedi; el seu sistema d'execució era una màquina virtual que interpretava aquest codi. Un altre exemple popular, encara que teòric, és l'ordinador MIX de Donald Knuth.
En llenguatges C i posteriors que admetien l'assignació de memòria dinàmica, el sistema d'execució també incloïa una biblioteca que gestionava l'agrupació de memòria del programa.
En els llenguatges de programació orientat a objectes, el sistema d'execució sovint també era responsable de la verificació de tipus dinàmic i la resolució de referències de mètodes.
Referències
[modifica]- ↑ «runtime system - an overview | ScienceDirect Topics» (en anglès). [Consulta: 30 març 2025].
- ↑ «Runtime Systems | Edge Computing Lab» (en anglès). [Consulta: 30 març 2025].
- ↑ «Runtime System: Definition & Components | StudySmarter» (en anglès britànic). [Consulta: 30 març 2025].
- ↑ «Runtime environments: explanation and examples» (en anglès), 12-10-2020. [Consulta: 30 març 2025].
- ↑ Emmz. «What is a Runtime?» (en anglès), 18-01-2024. [Consulta: 30 març 2025].