Cómo reparte el sistema operativo el procesador
Un sistema operativo reparte el procesador entre muchos programas. Lo hace tan deprisa que parece que todos funcionan a la vez.
Entender ese reparto te permite explicar por qué un equipo se pone lento cuando abres demasiadas cosas.
Tu portátil tiene unos pocos núcleos y puede tener cientos de procesos abiertos: el navegador, la música, el correo, las actualizaciones.
Al final de esta lección
Nota
Puedo explicar cómo el sistema operativo reparte el procesador entre varios procesos.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Proceso | un programa que se está ejecutando | |
| Estado | lo que hace un proceso en este momento | listo |
| Planificador | la parte del sistema que elige qué proceso usa el procesador | |
| Cola de listos | la fila de procesos que esperan su turno | |
| Cambio de contexto | guardar un proceso y poner otro en marcha | |
| Quantum | el tiempo máximo de un turno | 2 ms |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un proceso cambia de estado mientras vive
Un programa guardado en el disco es solo un archivo. Cuando el sistema lo pone en marcha, nace un proceso.
Un proceso está siempre en un estado. Está listo si puede trabajar y espera su turno. Está en ejecución si tiene el procesador ahora. Está bloqueado si espera algo lento, como una lectura del disco. Y acaba terminado.
El estado de un proceso real
grep -E '^(Name|State)' /proc/self/statusSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un proceso que se mira a sí mismo
El archivo /proc/self/status lo escribe el sistema, y cada proceso lee en él sus propios datos. Aquí lo lee grep.
La orden imprime dos líneas. La primera dice Name: grep. La segunda dice State: R (running): en ese instante grep tenía el procesador, así que estaba en ejecución.
El cambio de contexto guarda y carga
Con un solo núcleo, dos procesos no pueden trabajar a la vez. El sistema los alterna.
Para quitarle el procesador a uno, el sistema guarda su contexto: la instrucción por la que iba y el contenido de los registros. Después carga el contexto del siguiente. Ese trabajo es el cambio de contexto.
No es gratis: mientras el sistema guarda y carga, ningún programa avanza.
Qué se guarda en un cambio de contexto
| Dato | Para qué se guarda |
|---|---|
| Contador de programa | Saber por qué instrucción seguir |
| Registros | Recuperar los valores a medias |
| Estado del proceso | Anotar si pasa a listo o a bloqueado |
| Tabla de memoria | Que el siguiente proceso vea solo su memoria |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Los contadores de cambios de contexto
grep ctxt_switches /proc/self/status | cut -d: -f1Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Dos clases de cambio de contexto
La orden imprime dos nombres: voluntary_ctxt_switches y nonvoluntary_ctxt_switches. Cada nombre lleva en el archivo un número que crece con el tiempo y cambia en cada máquina.
Un cambio es voluntario cuando el proceso suelta el procesador porque espera algo. Es involuntario cuando se le acaba el turno y el sistema se lo quita.
Round robin da turnos iguales
Un planificador decide qué proceso de la cola de listos usa el procesador. El método más sencillo es el round robin, "por turnos".
Cada proceso trabaja como mucho un quantum. Si no termina, vuelve al final de la cola. Después le toca al siguiente.
Ejemplo: tres procesos con quantum 2
| Turno | Proceso | Le quedaba | Le queda después | Cola después |
|---|---|---|---|---|
| 1 | A | 5 | 3 | B, C, A |
| 2 | B | 3 | 1 | C, A, B |
| 3 | C | 1 | 0, termina | A, B |
| 4 | A | 3 | 1 | B, A |
| 5 | B | 1 | 0, termina | A |
| 6 | A | 1 | 0, termina | vacía |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que un proceso abierto está funcionando. Casi todos están listos o bloqueados. Con un núcleo solo uno tiene el procesador en cada instante. Los demás esperan, y por eso el reparto es tan importante.