# Procés informàtic

Un procés informàtic és una instància d'una aplicació que està essent executada per una computadora. Cal tenir en compte, que una aplicació o programa és solament una col·lecció passiva d'instruccions que no esdevenen un procés fins que el programa és executat. Un mateix programa pot executar múltiples processos: per exemple, una aplicació que utilitza múltiples finestres segurament utilitza més d'un procés. Aquest procés consisteix d'un o més fils, i s'executa de forma seqüencial per un sistema informàtic que té la capacitat d'executar diversos programes d'ordinadors al mateix temps.
Un programa d'ordinador en si és només una col·lecció passiva d'instruccions, mentre que un procés és l'execució real d'aquestes instruccions. Diversos processos poden estar associats amb el mateix programa, per exemple, l'obertura de diverses instàncies del mateix programa sovint significa més que un procés estigui essent executat. En el món de la informàtica, els processos són formalment definits pel sistema operatiu (SO) per al seu funcionament i poden diferir en alguns detalls d'un sistema operatiu a un altre.
Un procés és el conjunt de recursos necessari per executar un programa. Per tant, des del punt de vista del sistema operatiu és un recurs més que ha gestionar. El concepte de procés és compartit entre tots els sistemes operatius moderns, però els detalls de la seva definició varien entre diferents sistemes operatius.
Els processos són creats i destruïts pel sistema operatiu, i també aquest s'ha de fer càrrec de la comunicació entre processos, però ho fa a petició d'altres processos. El mecanisme pel qual un procés crea un altre procés es denomina, bifurcació (fork). Els nous processos poden ser independents i no compartir l'espai de memòria amb el procés que l'ha creat.
Els primers sistemes informàtics eren monoprocés, és a dir, només es podia executar un procés alhora, i fins que aquest procés no acabava no es podia atendre a cap altre procés. En aquest tipus de sistemes, la planificació es duia a terme utilitzant cues d'execució. Actualment, la majoria de sistemes operatius moderns són multiprocés, és a dir, permetent executar múltiples aplicacions al mateix temps. Aquesta característica també és coneguda com a concurrència de processos o multiprogramació.
La concurrència real de processos pot esdevenir de dues formes diferents:
* Sistemes operatius multitasca: Els processos aparentment s'executen al mateix temps tot i que realment, en un instant concret de temps, només hi ha un procés que estigui utilitzant la CPU. Un ordinador amb un sol processador executa les instruccions una a una, però pot intercalar diferents processos utilitzant una multiplexació en temps (Time-sharing), procés que a certes velocitats produeix la "il·lusió" que el sistema treballa amb diferents processos al mateix temps.
* Sistemes operatius multiprocés': l'única forma de tenir un sistema multiprocés real és tenir més d'una CPU. Els sistemes operatius que suporten treballar amb més d'una CPU alhora s'anomenen multiprocés. Aquests sistemes també permeten al mateix temps la concurrència de processos en un mateix processador.

## Components d'un procés

L'encarregat de gestionar els processos és el sistema operatiu. Tot i que hi ha diferències entre diferents sistemes operatius, en general, un procés és el conjunt format per:
* Les instruccions d'un programa que han de ser executades per un microprocessador
* L'estat d'execució del procés en un moment donat (valors del registres de la CPU relacionats amb el programa)
* Espai de memòria del procés on s'emmagatzemen les dades amb les que treballa el procés.
* Informació extra que permet al sistema operatiu gestionar el procés. Aquesta informació és coneguda com la metainformació del procés.
El sistema operatiu s'encarrega de la creació, execució i eliminació dels processos.

## Mètode de procés

Dos o més processos poden cooperar mitjançant senyals de manera que un obliga a aturar els altres fins que rebin un senyal per continuar.
* Utilitza una variable de tipus Semàfor per sincronitzar els processos.
* Si un procés està esperant un senyal, se suspèn (Hold) fins que el senyal es vulgui incloure (SIGNAL).
* Es manté una cua de processos en espera al semàfor.
* La forma de triar els processos de la cua en ESPERA és mitjançant una política FIFO (First In First Out) també anomenada FCFS (First Come First Served), Round Robin, etc.
La sincronització explícita entre processos és un cas particular l'estat "bloquejat". En aquest cas, el succés que permet desbloquejar un procés no és una operació d'entrada / sortida, sinó un senyal generat a propòsit pel programador des d'un altre procés.

### Bloc de control de processos

El BCP és l'estructura de dades on el sistema operatiu emmagatzema tota la informació que necessita conèixer sobre un procés.

## Estats d'un procés

Per representar el cicle de vida d'un procés s'acostuma a utilitzar un diagrama d'estats. L'estat en què està un procés en un instant de temps es guarda com una dada més al BCP del procés.
L'estat del procés depèn en gran part de la seva relació amb el microprocessador. Tots els sistemes operatius tenen un component anomenat Planificador (de l'anglès scheduler) que és l'encarregat de decidir quin procés s'executa en cada moment. També és clar que s'haurà d'implementar una cua on emmagatzemar temporalment els processos que està a l'espera de ser executats.
Existeixen diferents models d'estats que representen diferents formes d'interpretar el cicle de vida d'un procés i el seu diagrama d'estats.

## Diagrama de formació d'un procés

Es tracta de la utilització de dos arxius, un objecte executable i una biblioteca del sistema, que després es col·loquen en la imatge del procés dins de la memòria RAM i posteriorment també es donen d'alta dins de la taula de processos, Bloc de control del procés.

## Fils d'execució

Un fil d'execució és una característica dels sistemes operatius moderns que permet que una aplicació realitzi diverses tasques de forma concurrent utilitzant fils d'execució.

## Història

A principis dels anys 60 els programes informàtics de control havien evolucionat a partir de programari de control del monitor, per exemple, IBSYS, per al programari de control executiu. Els ordinadors són més ràpids, però molt cars, i no s'utilitzen plenament. Es va fer multiprogramació possible i necessària.
Multiprogramació vol dir que diversos programes d'execució, “al mateix temps”. Al principi es va córrer en un únic processador i els escassos recursos compartits. Multiprogramació, és també bàsic per la forma de multiprocessadors, un terme molt més ampli.
Els programes consisteixen en la seqüència d'instruccions per al processador. Un sol processador pot executar una sola instrucció a la vegada. Per tant, és impossible executar més programes al mateix temps. El programa podria necessitar algun recurs (entrada ...) que té "gran" retard. El programa podria començar una operació lenta (sortida a la impressora ...). Tot això fa que el processador quedi inactiu. Per a utilitzar el processador en tot moment l'execució d'aquest programa es va aturar. En aquest moment, una segona part del programa va ser iniciat o reiniciat. L'usuari percep els programes d'execució, al mateix temps (d'aquí el terme, concurrent).
Poc després, la noció d'un programa es va ampliar a la noció d'un "programa d'execució i el seu context". El concepte d'un procés va néixer.
Això es va fer necessari amb la invenció del nou codi de participant.
No obstant això, amb el procés de temps compartit, les xarxes d'ordinadors; múltiples CPU, ordinadors compartits de memòria, etc., l'antiga "multiprogramació" va donar el pas a la veritable multitasca, multiprocés i, més tard, multifil.