# Gestió de processos

La gestió de processos és una part molt important dels sistemes operatius moderns. El sistema operatiu és l'encarregat de gestionar els recursos necessaris per a poder executar els processos del sistema. Entre altres gestions, el sistema operatiu s'encarrega de gestionar la comunicació i l'intercanvi de dades entre processos, la protecció i el control d'accés als recursos del sistema, i la planificació i sincronització de la seva execució.
Per tal d'assolir aquest objectius, el sistema operatiu ha de mantenir una estructura de dades per a cada procés que descrigui l'estat del procés i els recursos que utilitza. Aquesta estructura, s'anomena bloc de control de procés.

## El planificador del sistema operatiu

El Planificador és el component del sistema operatiu que decideix quin serà l'ordre d'execució dels processos.
Els primers sistemes operatius no tenien planificació exclusiva o arrabassadora de la CPU (ang.: preemptive del verb preempt: "prebuidar un camp per conrear-lo i prendre'n possessió" o sigui arrabassar) i no podien desallotjar un procés de la CPU per tal que un altre procés amb major prioritat pogués executar-se.

## Planificadors i Sistemes operatius

Les propietats i característiques principals del planificador varien segons el sistema operatiu:
* Linux: el kernel de Linux té actualment un planificador O(1) (des de la versió 2.6.23) Completely Fair Scheduler.
* Unix: Les primeres implementacions estan basades en nivells de prioritat (40 de -19 a 19) i cues multilevel feedback queue on cada cua és una cua Round Robin on es prioritza els processos curts i els processos d'E/S.
* Sistemes operatius basats en Windows NT: Utilitza un sistema basat en prioritats (32 nivells) i cues multilevel feedback queue. Les primeres versions de Windows i DOS no eren multitasca i les versions Windows 9x no tenien planificació exclusiva.

## Estats d'un procés. Model d'estats

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.

### Model de dos estats

És el model més simple i només diferència entre processos en execució i processos que no s'estan executant. Aquest model funciona bé quan es treballa amb una cua FIFO i una planificació Round Robin o per torn rotatori. Cada cop que un procés canvia d'un estat d'execució (ús de CPU) a un estat de no execució (anomenats en anglès: wait o ready) es produeix una operació que s'anomena canvi de context. Aquest procés commuta un procés en espera per un procés en execució.

### Model de cinc estats

És el sistema més utilitzat i té en compte que realment els processos no sempre estan preparats per a ser executats. Els processos necessiten dades per funcionar i sovint aquestes dades s'han d'obtenir de "l'exterior" a través d'operacions d'E/S. Aquestes operacions normalment són d'ordres de magnitud més lentes que la velocitat de la CPU. Els sistemes que disposen de planificació expulsiva permeten que la CPU "expulsi" un procés en execució que està a l'espera d'una operació d'E/S i permetrà això un ús més eficient de la CPU. Aquest processos passen a una estat normalment anomenat d'espera (wait). Per tant, els processos que no s'estan executant poden estar en espera (wait) o llestos (ready). A més s'afegeixen dos estats: Nou i Terminat.
Els estats Nou i Terminat són útils per a la gestió de processos.
Pel que fa a les cues d'espera i han diferents implementacions:
* Cues FIFO (First In First Out): sistemes on no hi ha prioritats
* Diferents cues una per cada nivell de prioritat: O una sola cua on s'ordenin els elements per la seva prioritat i en cas d'empat per FIFO.
* Una cua d'espera per cada dispositiu E/S: Aquí s'emmagatzemen els processos en espera d'operacions d'E/S.

### Model de 7 estats

El fet d'utilitzar un estat en espera pot arribar a augmentar tant l'exigència d'espai de memòria (múltiples processos a l'espera) fins al punt d'esgotar la memòria principal. La solució és utilitzar el procés d'intercanvi (de l'anglès swapping). Aquest procés correspon a moure un procés de la memòria principal a la memòria secundària (normalment disc). En aquests casos s'utilitza un nou estat anomenat Suspès
Els estats són per tant:
* Nou (created)
* Llest (ready) o en Espera (waiting): Pot estar en memòria principal o memòria secundària (swapping)
* Executant-se (running):
* Dormint (sleeping) o bloquejat (blocked): : Pot estar en memòria principal o memòria secundària (swapping)
* Terminat (terminated)

## Algoritmes de planificació
### Cues FIFO (First In First Out)

Aquest tipus de sistema equivalen a un sistema sense planificació on els processos s'executen per estricte ordre seqüencial d'execució. Un nom equivalent és First Come First Served (FCFS)

### Algoritme Round Robin. Planificació per torns

La planificació Round Robin és una de les més senzilles i utilitzades. Consisteix en una cua FIFO però on cada procés no s'executa durant més d'un període prefixat anomenat quantum. D'aquesta manera els processos llargs no poden saturar la cua.
El paràmetre important per dissenyar sistemes RC és la mida del quantum:
* Quantum gran: Si el quantum és massa gran pot acabar esdevenint un esquema FIFO (i els processos llargs poden bloquejar al curts)
* Quantum petit: Cal tenir en compte el cost del canvi de context. Aquest cos és anomenat sobrecàrrega (de l'anglès overhead).
Si el quantum és massa curs, pot empitjorar molt el rendiment del sistema.
Els sistemes operatius moderns utilitzen sistemes complexos que poden modificar el valor del quantum de forma dinàmica.

### Algoritmes de planificació amb prioritat per nivells

Aquest tipus de sistemes assignen una prioritat a cada procés. Les prioritat es divideixen en nivell de prioritat. Cada nivell sol tenir la seva pròpia cua FIFO i també s'aplica el processament per torns (Round Robin) en cada cua
Amb Unix/Linux tenim la comanda nice per tal de canviar la prioritat d'un procés. La majoria de processos tenen la prioritat 0. Augmentar injustificadament la prioritat d'un procés pot causar que la resta de processos (inclosos processo crítics del sistema) no funcionin correctament.

### Multilevel feedback queue

És un dels sistemes més utilitzats. Es caracteritza per prioritzar els processos segons la següent llista de prioritats:
* Donar preferència als processos curts.
* Donar preferència als processos lligats a operacions d'E/S.
* Establir ràpidament de quin tipus és un procés i planificar-lo amb coherència al seu tipus.
Normalment s'implementa donant la possibilitat a un nou procés d'executar-se en un sol quantum. Això es fa situant inicialment un procés en un nivell alt de prioritat durant un quantum i si el procés és curt s'executarà aviat i si és llarg s'enviarà a una cua de prioritat inferior i s'executara segons una cua FIFO amb Round Robin.
L'ordre nice permet modificar la prioritat amb la que s'executa un recurs.

## Fonts

* Operating System incorporating Windows and UNIX, Colin Ritchie. ISBN 0826464165
* Operating Systems, William Stallings, Prentice Hall, (4th Edition, 2000)
* Multiprogramming, Process Description and Control
* Operating Systems – A Modern Perspective, Gary Nutt, Addison Wesley, (2nd Edition, 2001).
* Process Management Models, Scheduling, UNIX System V Release 4:
* Modern Operating Systems, Andrew Tannenbaum, Prentice Hall, (2nd Edition, 2001).
* Operating System Concepts, Silberschatz, Galvin & Gagne, John Wiley & Sons, (6th Edition, 2003).

## Vegeu també

* Fils d'execució
* Bloc de control de procés
* Comanda ps
* Identificador de procés