En informàtica, un canvi de context és l'operació amb què un sistema operatiu guarda l'estat d'execució d'un procés o d'un fil d'execució i en restaura un altre perquè la CPU passi a executar una tasca diferent. El context inclou valors com el comptador de programa, els registres del processador, l'estat de la pila i altres dades internes que el sistema operatiu necessita per reprendre l'execució més endavant.

Funcionament Els canvis de context apareixen sobretot en sistemes de multitasca preemptiva. El planificador decideix quan una tasca ha consumit prou temps de CPU, quan queda bloquejada esperant una operació d'entrada/sortida o quan una altra tasca té més prioritat. Aleshores desa el context de la tasca actual i carrega el context de la següent. També pot produir-se un canvi de context quan la CPU rep una interrupció i ha d'executar una rutina d'atenció a la interrupció.

El cost d'un canvi de context no és zero. Durant aquest temps, el processador no executa directament el codi útil de l'aplicació, sinó que treballa en tasques de gestió del sistema. A més, el canvi pot afectar memòries cau i altres estructures internes del processador. Per això, un programa amb massa fils actius pot perdre part del rendiment en canvis freqüents entre tasques.

Processos, fils i asyncio Un canvi entre processos sol implicar més informació que un canvi entre fils del mateix procés, perquè els processos tenen espais de memòria separats. Els fils comparteixen memòria, però igualment tenen estat propi i poden provocar canvis de context gestionats pel sistema operatiu.

Aquest concepte és important per entendre la diferència entre multitasca preemptiva i multitasca cooperativa. Fowler explica que, quan el sistema operatiu canvia entre fils o processos, ha de desar i restaurar informació d'execució, i això té un cost. En canvi, en models cooperatius com Python asyncio, les corutines cedeixen el control en punts explícits, habitualment amb await, i el bucle d'esdeveniments decideix quina tasca continua. Això no elimina tots els costos de coordinació, però evita molts canvis de context de nivell sistema operatiu quan el programa està esperant operacions d'E/S.

Vegeu també Multitasca Fil d'execució Bucle d'esdeveniments Programació asíncrona

Referències

Categoria:Programació Categoria:Sistemes operatius