Sobre la programación de procesos de los sistemas operativos
Normalmente encontramos la respuesta a nivel de software. De hecho, se implementa mediante el mecanismo de procesamiento de hardware de la CPU. Después de ejecutar cada ciclo de instrucción, la CPU escanea el registro de interrupción dentro de la CPU para determinar si hay una interrupción y, si no, continúa ejecutando la instrucción. Si es así, guarde el entorno de trabajo actual de la CPU, salte a la lista de servicios de interrupción, la CPU ejecuta el programa de servicio de interrupción y salta al programador del kernel después de que se inicia la interrupción (este es un programa del kernel, pero es compartido por todos los procesos). , incluidos los procesos del usuario); en este punto, el programador del kernel ocupa la CPU y programa los procesos para determinar qué proceso ocupará la CPU a continuación.
A continuación, ¿cuándo es necesaria la programación de procesos?
Varias situaciones mencionadas en el libro de texto: 1. Cuando llega el intervalo de tiempo, es decir, después de que se agota el intervalo de tiempo asignado a cada proceso, es necesario saltar al programador 2. Cuando está actualmente; proceso en ejecución que ocupa la CPU Al proponer una operación de E/S y emitir una llamada del sistema al kernel, saltar al programador después de que finalice la llamada al sistema. Mi propia idea: el proceso actualmente en ejecución debería saltar al programador al final de todo el kernel; Las llamadas al sistema, de acuerdo con la información de programación actual, determinan el siguiente proceso que puede ocupar la CPU. Lo que quiero decir con llamadas al sistema también incluye el envío de interrupciones. Pero muchos libros no conocen el calendario de programación específico. Realmente no sé si no lo entienden. Todavía me da pereza escribirlo y contárnoslo. De hecho, además de saltar al programador después de que se activan la mayoría de las interrupciones de hardware, creo que cada vez que ocurre una interrupción del reloj, debe saltar al programador. (Al ingresar la secuencia de interrupción del reloj, es necesario actualizar la información de programación de todos los procesos en la tabla de procesos y procesar la cola de procesos), procesar la información del proceso actualizada y decidir qué proceso programar. En los libros de texto generales, el mecanismo de procesamiento físico del hardware y el mecanismo de procesamiento de programación del software están separados, lo que no favorece nuestra comprensión. Es mejor combinar los dos para comprender cómo funciona la programación de procesos. El problema actual que debe resolverse es: ¿Cuándo debe el programador del kernel ocupar la CPU para la programación? En cuanto al algoritmo de programación, es algo a considerar en un nivel lógico.
De hecho, después de leer tanto, también tengo algunas ideas para un pequeño artículo, porque la dirección de mi trabajo es el control de sistemas integrados aplicados a circuitos electrónicos de potencia. Este tipo de aplicación tiene algunos requisitos especiales para el rendimiento del sistema operativo integrado: primero, debe ser pequeño y rápido, el núcleo debe ser pequeño, la programación de procesos debe implementar la programación preventiva de tareas y el cambio de programación debe ser rápido. Su programación de procesos es diferente a la de los sistemas operativos generales porque sus necesidades son diferentes. Los sistemas integrados generalmente requieren un rendimiento en tiempo real. Estrictamente hablando, el sistema de control en el circuito debe ser en tiempo real, a diferencia de los sistemas operativos ordinarios que no son en tiempo real. O suave en tiempo real. Esto es diferente de sus requisitos en tiempo real. Entonces, tentativamente establecí un tema "Análisis comparativo de la programación de procesos entre sistemas integrados y sistemas generales, y propuse una estrategia de programación para circuitos específicos para controlar los sistemas integrados en tiempo real". Creo que prepararé estos materiales, los analizaré y compararé mañana y escribiré un pequeño artículo, de lo contrario moriré por esto.
Sistema Operativo - Programación de Procesos
[color =plata] [/color] [color =gris] [/color] [color =púrpura] [/color] [color = azul ] [/color] [color = verde claro] [/color] [color = lima] [/color] [talla = 4] [
Contenido:
1: Diseño necesario estructuras de datos como control rápido de procesos y estructura de colas de procesos (incluidas: cola lista, cola en espera, cola en ejecución).
2. Simule la función de programación de procesos del sistema operativo y escriba un programador de procesos, un programador de procesador simulado, una función de espera de procesos y una función de activación de procesos.
3. Escribir programas de usuario y crear 6 procesos de usuario.
Método de diseño de programación de procesos
1. Estructura de datos
(1) Diseño de prioridad y intervalo de tiempo
◆Cuando el proceso espera ceder la CPU, la prioridad se establece en 1 (prioridad alta).
◆Cuando un proceso cede la CPU debido a un intervalo de tiempo, la prioridad se establece en 0 (prioridad baja).
◆La prioridad 1 corresponde al intervalo de tiempo 4; la prioridad 0 corresponde al intervalo de tiempo 10.
(2) Contenido del bloque de control de proceso (PCB)
ID de proceso 3-9
Prioridad de proceso 0, 1
Proceso prioridad 0, 1
Tiempo de espera del proceso 20
Puntero de enlace
2 Algoritmo del programa
(1) Estructura de PCB, variables y programa principal
Estructura de la placa de circuito impreso
{
int pname
int pri
int tiempo de ejecución;
Esperando;
estructura PCB * siguiente
}
PCB[7];
estructura PCB * Ejecutando, listo, esperando;
int sin = 0;
main()
{Crear PCB [3]-PCB [9] e insertarlo en la cola lista; /* pname es 3-9 respectivamente,
prioridad=0, tiempo de ejecución=10, tiempo de espera=0 */
for (;;)/*Sistema programa, completa las funciones de inicialización y asignación de procesador*/
{ cast { SIG = 0:swtch;
sig=1:waiter;
SIG = 3: proc 3;
SIG = 4:proc 4;
SIG = 5:proc 5;
SIG = 6: proc 6;
SIG = 7:proc 7;
SIG = 8:proc 8;
SIG = 9:proc 9;}
}
}
(2) Programador de procesos
switch()
{
mientras (listo = = NULL) despierta ();
Saque el primer PCB en la cola listo;
Envíe el puntero de ejecución;
Si pri =1, Runtime = 4, de lo contrario Runtime = 10;
Enviar running→pname a sig.
}
(3) Función de espera del proceso
Wait()
{Inserte el proceso en ejecución en la cola de espera y coloque el el número de prioridad se establece en 1;
SIG = 0;
}
(4) Función de activación del proceso
Despertar ()
{
Reste 1 del tiempo de espera de todos los PCB en la cola de espera;
Elimine todos los PCB con tiempo de espera = 0 en la cola de espera
Insertar delante de la primera PCB con prioridad 0 en la cola lista.
}[/b][/font][/size]