Vés al contingut

Canvi de context

De la Viquipèdia, l'enciclopèdia lliure

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.[1]

Funcionament

[modifica]

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ó.[1]

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

[modifica]

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.[2] 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é

[modifica]

Referències

[modifica]
  1. 1 2 «Context Switch Definition» (en anglès). The Linux Information Project. [Consulta: 28 maig 2026].
  2. ↑ Fowler, Matthew. «1, seccions 1.3-1.4; capítol 7». A: Python Concurrency with asyncio. Manning Publications, 2022. ISBN 9781617298660.