La funció dels ordinadors és la d'executar programes o aplicacions. Els programes es caracteritzen per ser un conjunt d'ordres. Els programes s'emmagatzemen en la memòria no volàtil: memòria RAM. Un programa en execució rep el nom de procés. Tot procés estarà associat a un determinat programa, tot i que un programa pot dividir-se en múltiples processos.
En qualsevol moment podem consultar els processos: si el sistema és Windows utilitzarem l'administrador de tasques, en el cas de Linux disposem de la comanda ps o top (Linux també disposa d'eines gràfiques que permeten la visualització dels processos).
10 primers processos en Linux
Visualització dels processos en Windows
La majoria dels processos que es visualitzen en les dues imatges són processos que s'han arrencat amb l'inici del sistema operatiu i, per tant, es tracta de processos de sistema. En el cas de Linux observem com l'usuari que està executant els processos és root (usuari administrador del sistema) mentre que en el cas de Windows l'execució està associada a diferents usuaris , excepte el procés taskmgr.exe (Windows Task Manager) que està associat a l'usuari "miquel".
Memòria processos
Per tal que un procés es pugui executar cal que aquest resideixi en la memòria (RAM) volàtil de l'ordinador. Com més memòria disposem més processos es podran executar. En la darrera imatge podem observar com els processos que s'estan executant ocupen un 42% de la memòria disponible. Si un procés finalitza, es mor, aquest procés deixarà lliure la memòria que estava ocupant.
Els processos operen sobre les dades: informació que introdueix l'usuari, dades generades per altres processos amb els quals es comunica,... Cal tenir en compte que les dades relacionades amb un procés també han d'estar emmagatzemades en la memòria RAM de l'ordinador.
Swapping
L'emmagatzematge del procés amb les seves dades en la memòria poden consumir un tamany important de memòria. Què passa si s'esgota la memòria RAM de l'ordinador?
En el cas que el nostre ordinador tingui poca memòria o s'estiguin executant molts programes (processos) amb una gran quantitat de dades, es pot donar el cas que la memòria RAM sigui insuficient. Quan es dóna aquesta circumstància el sistema operatiu s'encarrega d'utilitzar una part de l'espai físic del disc dur per a emmagatzemar la informació dels processos: al procés de còpia entre la memòria RAM i el disc dur reb el nom de "swap". D'aquesta forma s'allibera espai de memòria per a encabir-hi els nous processos que s'han d'executar.
Procés de swapping
El procés de swapping està gestionat pel sistema operatiu i consisteix en diferents fases:
- Selecció del procés a treure de la memòria.
- Còpia del procés seleccionat en el disc dur.
- Còpia del procés a executar a la memòria.
- Execució del procés.
Cal tenir en compte que el procés de swapping és un procés molt lent, ja que requereix de l'accés a disc : cal tenir en compte que l'accés a disc és molt més lent que l'accés a la memòria volàtil. A més, l'accés a disc pot ser doble, ja que el procés a executar pot estar ubicat també en el disc degut a una operació de swapping en un moment anterior.
Alliberament de memòria
De la mateixa manera que el sistema operatiu gestiona l'ubicació dels processos en la memòria volàtil (RAM), el propi sistema operatiu és l'encarregat d'alliberar (deixar disponible) la memòria ocupada per un procés quan aquest ha finalitzat la seva execució.
Una visió pràctica
A nivell pràctic, si un ordinador funciona de forma lenta, el primer que haurem de fer és veure quins processos s'estan executant i quina memòria i espai ocupen. Si hi ha processos associats a aplicacions no necessàries és millor tancar aquests processos per a deixar més recursos per a la resta de processos.
Suposem que un usuari es queixa que el seu sistema funciona molt lent. El primer que hem de fer és anar (si és possible) al seu ordinador. En cas contrari existeixen eines que ens permeten la connexió al seu equip de forma remota.
Analitzar la situació
El primer que hem de fer és determinar per a quin motius l'ordinador va de forma lenta. Donat que el problema és continu,
Per exemple, un usuari té les següents aplicacions obertes:
- Client de correu
- Editor de text
- 3 documents PDF
- Reproductor de música
- 10 pàgines diferents d'Internet
- El servei de xat
L'usuari comenta que el sistema va lent. Al comprovar l'espai de memòria veiem que el 90% de la memòria està ocupada. A més, observem que el disc dur fa "pampallugues" de forma continuada.
Proposta de solució
Amb molta probabilitat el problema resideix en la sobrecarrega de processos que hi ha en el sistema. En aquest sentit, cal demanar a l'usuari quines aplicacions no són necessàries en aquell moment. És molt important, també, explicar que el fet de tenir moltes aplicacions obertes alenteix el funcionament global del sistema.
Utilització de la CPU
Una altra de les dades que podem veure en l'administrador de tasques és l'utilització de processador (CPU). En relació al processador cal tenir en compte dos aspectes:
Un processador amb un únic core només pot executar un procés en un moment determinat. La resta de processos han d'esperar el seu torn.
El processador sempre està executant processos. En el cas que no hi hagi cap procés per a executar-se, s'executa un procés especial que no fa res.
Cas pràctic
Un altre dels problemes que podem tenir és observar que un procés està consumint de forma continuada el 100% de la CPU. En aquests casos cal comprovar si el procés és d'usuari o de sistema.
En el cas que el procés sigui d'usuari, cal comprovar si l'usuari té oberta alguna aplicació relacionada amb el procés. En cas afirmatiu, sempre és millor parar l'aplicació que el procés: el tancament de l'aplicació farà una parada controlada de tots els processos associats a la mateixa. Si el procés persisteix, podem parar el procés de forma manual a través de l'administrador de tasques.
En el cas que el procés Si es tracta d'un procés de sistema podem utilitzar un usuari amb permisos per aturar el procés.
NOTA: s'aconsella no aturar mai un procés de sistema excepte que es tingui la certesa que la finalització d'aquest procés no derivarà en un mal funcionament del sistema.
Video: https://youtu.be/kqac8IJ7IBo
Estats d'un procés
Del que es pot deduir dels punts anteriors és que un procés pot estar en 2 estats:
- En execució
- A l'espera d'execució.
Dins de l'estat en espera d'execució es poden definir múltiples estats (en aquest document es dóna una visió simplificada per a facilitar la seva comprensió.
2.1. Nou 2.2. Preparat 2.3. En espera 2.4. Finalitzat
NOTA: Cal tenir en compte que hi ha més estats associats a un procés i que no es detallen totes les característiques de cada un dels estats citats
En execució
L'estat en execució es dóna quan la CPU l'està processant. Donat que el sistema operatiu ha de garantir que s'executin tots els processos , cada procés només es podrà executar durant un temps reduït. Finalitzat aquest temps, un altre procés entra a la CPU per a la seva execució. Aquest temps és tant reduït que l'usuari té la sensació que l'ordinador està executant múltiples programes en el mateix moment.
Un altre dels motius que són motiu que un procés surti de la CPU és perquè aquest procés precisa d'alguna dada de l'usuari, de la xarxa, de disc...
Nou
L'estat NOU es dóna quan el procés acaba de crear-se a partir de l'execució d'una aplicació o a partir d'un altre procés. En aquest estat es creen totes les estructures bàsiques necessàries per a l'execució del procés. Fent un símil en la construcció d'una casa, s'han creat els fonaments. El sistema operatiu és l'encarregat de crear les estructures bàsiques.
Preparat
En aquest estat totes les estructures han estat creades, però la CPU està executant un altre procés. Cal que el procés esperi el seu torn per a entrar a la CPU. El sistema operatiu disposa de múltiples algoritmes de planificació per a ordenar l'execució dels diferents processos. En Linux podem veure els algoritmes disponibles amb la comanda chrt .
Una de les característiques que han de complir tots els algoritmes és la "no starvation": o sigui; tots els processos han de ser processats en un moment determinat.
Un dels algoritmes més coneguts i simples és el de Round Robin. Aquest algoritme assigna una quantitat de temps a cada procés de forma circular i sense tenir en compte les prioritats. Quan un procés surt de la CPU passa al final de la cua a l'espera d'un nou torn. Com que la cua és circular, tots els processos seran executats en un moment determinat.
En espera
L'estat en espera es dóna quan es produeix una operació d'entrada/sortida: el programa necessita una informació de l'usuari, del disc, d'un sensor, emmagatzematge d'informació al disc, impressió d'un document...
Donat que el temps d'accés a la informació és molt lent en relació a la velocitat de la CPU, el sistema operatiu "aprofita el temps" per a executar un altre procés. El procés queda en l'estat "en espera" de la finalització de l'operació d'entrada/sortida.
Finalitzat
La finalització d'un procés suposa l'alliberament de tots els recursos que estava utilitzant aquest procés abans de la seva finalització.
Transicions entre estats
El següent diagrama es descriu de forma simplificada els diferents estats en què pot estar un procés i les transicions entre els diferents estats.
http://www.codequiz.in/corecode/wp-content/uploads/2016/01/os_process_states.png
Tipus de processos
En informàtica es diferencien varis tipus de processos:
- Processos interactius.
- Processos en segon pla (background) o serveis.
Un procés interactiu és aquell que interactua amb l'usuari. Així, per exemple, el programa Word és un procés interactiu. El procés espera que l'usuari introdueixi dades o realitzi alguna funcionalitat associada al programa: per exemple, guardar el document. El procés associat a la calculadora és un procés interactiu: es precisa que l'usuari introdueixi números i operacions per tal que el programa funcioni.
Tot i que la majoria dels processos són interactius hi ha una sèrie de processos que no precisen interactuar amb l'usuari per tal que funcionin. Les aplicacions associades a aquests processos es caracteritzen per disposar d'una interfície gràfica reduïda o inexistent. Aquests processos reben el nom de serveis en Windows o Daemon en Linux.
Per exemple, el procés que ens permet imprimir un document és un procés de background. S'arrenca quan s'inicia l'ordinador i està a l'espera de rebre els documents a imprimir. Un altre exemple de procés que es pot executar en background és la còpia de seguretat que es pot executar de forma automàtica una determinada hora. El sistema de protecció i antivirus també són processos que s'executen en background: quan es descarrega un fitxer, quan s'executa un programa, s'obre un document ...
Processos pares i fills
Quan un procés s'executa aquest pot crear nous processos, que anomenem processos fills. Aquest concepte és important ja que permet la millora del rendiment del sistema. Una millora evident, per exemple, és que si diposem d'una CPU amb més d'un nucli o de vàries CPUs, si l'aplicació genera 2 o més processos aquests es podran executar de forma concurrent. Per exemple, en una fulla de càlcul, quan s'arrenca es genera un procés associat a l'aplicació. Aquest procés pot generar 2 processos fills més: un dels processos és el que s'encarrega d'obtenir la informació de l'usuari i mostrar-la (procés pot intensiu en l'ús de la CPU) mentre que un segon procés s'encarrega de realitzar els càlculs associats a la fulla de càlcul.
La relació entre processos pares i fills també és important alhora de matar (parar) un procés. Així, quan es mata un procés pare s'eliminen també tots els processos fills que estiguin creats. En canvi l'eliminació d'un procés fill només suposa l'eliminació d'aquest procés.
Threats (fils d'execució)
La creació d'un procés requereix la creació d'una sèrie d'estructures i inicialitzacions que fa que sigui costós a nivell d'utilització de recursos.
Per a millorar el rendiment del sistema es va definir la possibilitat de crear "mini-processos" (processos lleugers) , que reben el nom de "threats" o fils d'execució.
Una de les característiques dels threads és que comparteixen les estructures del procés a partir del qual s'han creat. Aquest fet fa que es puguin crear de forma molt eficient i permetre l'execució en paral·lel d'un mateix procés. Per exemple, si en un joc haig de calcular la posició en què s'han de visualitzar tres elements, puc utilitzar 3 threads per a calcular la posició de cada un d'ells en paral·lel i el procés general determinar si hi ha una col·lisió entre algun dels objectes.