Linux Análisis de apagado reinicio de procesos

  
                  

apagado y reiniciar el proceso en Linux no es importante para la aplicaciones de escritorio y servidores web en general, pero en el núcleo del sistema integrado definido por el usuario en el estudio tienen un cierto sentido, entendiendo el proceso de reinicio de cierre de Linux, podemos modificar y personalizarlo, incluso como base para el desarrollo de nuevas características a.
1. Visión general
parada y reinicio bajo Linux pueden ser causados ​​por dos actos, uno es programada por el usuario, uno es el mensaje generado por el propio sistema. Y cómo los usuarios interactúan con el sistema también tiene dos, una es la llamada al sistema: sys_reboot, el otro es el archivo ACPI o APM dispositivo, a través de su operación también puede hacer que el sistema se apague o reinicie.
2. sys_reboot llamadas a través del sistema de reinicio
Esta llamada al sistema define un conjunto de MAGIC_NUMBER, primero MAGIC_NUMBER comprobación es correcta en el comienzo de la llamada, sólo para correr por la derecha antes de continuar. Cuando la dirección rama reinicio Venta de CASE LINUX_REBOOT_CMD_RESTART:
utilizar notifier_call_chain primer mensaje enviado a las otras partes del reinicio, y luego llama a la función de reinicio machine_restart. principios de los códigos de función asociados con un poco de leche desnatada en polvo
machine_restart, múltiples CPU tras la finalización de un reinicio de la CPU principal detrás de la otra CPU se encuentra en un estado de espera. Después de que el sistema basado en el contenido de un modo de reinicio juicio reboot_thru_bios variables, mediante la lectura de reboot_setup podemos ver que el contenido de este parámetro se especifica cuando se inicia el sistema, determinar si el uso de BIOS, entrada de hecho (FFFF después de un reinicio del sistema: 0000 direcciones de programa) se reinician. Sin necesidad de reiniciar el BIOS, el sistema fija el indicador de reinicio se escribe en los números de puerto 0x64 0xfe en primer lugar, el principio específico de este reinicio todavía no muy claro, parece simular un botón de reinicio se presiona, os espero y os comentamos. En el caso de reinicio a través del BIOS, el modo de reinicio del sistema se establece en el mismo, y luego cambiar al modo real, el reinicio se completa con un LJMP $ 0xffff, $ 0x0.
3. sys_reboot llama a través del sistema para apagar
en el procesamiento de las llamadas al sistema rama, podemos ver que el mismo pasará primero MAGIC_NUMBER, a continuación, en el caso LINUX_REBOOT_CMD_POWER_OFF
:
ejecución
fluya dentro, y se utiliza para apagar el equipo notifier_call_chain mensaje enviado, las funciones machine_power_off realizadas inmediatamente. Podemos ver en la función machine_power_off, si pm_power_off este puntero de función no está vacío, entonces el sistema se cerrará por llamar a esta función. En el caso de apm ya cargado (excluyendo el SMP), de hecho, en realidad puntos de función pm_power_off apm.c en apm_power_off, en el sistema de conmutación para funcionar en la configuración de modo real apm_info fuera por el valor en uso, función o utilizar apm_bios_call_simple apm en la interfaz de modo protegido a suspender los dos métodos.
proceso de cierre en sí impulsado 4.apm
apm dispositivo registrado utilizando las operaciones de terminación apm interfaz ioctl en la función do_ioctl apm.c se puede ver en el procesamiento rama. Sólo ha de suspensión y el código de espera, por lo que no se puede utilizar este método mediante el apagado ioctl APM.
Cuando el usuario presiona un interruptor POWER, si hay apm módulo, el proceso de apagado se maneja APM. controlador APM durante la inicialización se inicia un hilo de núcleo APM: apm_mainloop, donde el sistema detecta POWEROFF mensaje clave y el nombre de APM_SYS_SUSPEND, APM_USER_SUSPEND distinguir APM ajustes del modo -s. Entonces en apm_event_handler función, en la función y de la función check_events apm_event_handler, la función de procesamiento correspondiente a la rama caso. El sistema también utiliza una función de suspender a cerrar, pero debido a otros parámetros, suspenda la llamada es finalmente proceso de apagado. Ejemplo 5. El problema
. 1)
ciertas placas investigación del accidente aparecerá este caso sólo después de cierto tiempo de carga de accionamiento tecla de encendido, y cuando se utiliza el llamado sistema de parada sys_reboot hay tal problema. El análisis de la APM flujo del proceso, se sospecha que es causada por el mensaje de apagado antes de pedir el conductor no controla correctamente APM emitida. Como parte del conductor no tiene el código fuente, decidí cortar fuera de parte apm.c, por lo que el cierre de las dos maneras de seguir el mismo proceso. Así, la función de apm.c de check_events APM_SYS_SUSPEND reescribirse como la siguiente sección de código:

ret = exec_usermodehelper (poweroff_helper_path, argv, envp);
si (RET) {
printk ( KERN_ERR
"apm.c: falló a exec% s, errno =% d \\\\ n",
poweroff_helper_path, errno);
}
romper;
para reinicio rápido apoyo
estática fast_reboot_switch unsigned char [] = {

0x66, 0x0F, 0x20, 0xC0, /* movl% cr0,% eax * /
0x66, 0x25, 0x10, 0x11, 0x11, 0x11 , /* andl $ 0x11111110,% eax * /
0x66, 0x0F, 0x22, 0xc0, /* movl% eax,% cr0 * /0xEA
, 0x00, 0x00, 0x00, 0x70 /* LJMP $ 0x7000, $ 0x0000 * /
};

sistema de
puede cambiar al modo real, y luego salta a 7000H: 0 comienzan posición.
6.ACPI
se indica en ACPI módulo del núcleo 2.4.20 y se observa como la prueba no se ha completado, puede no ser parte de las funciones realizadas. Si el APM y APCI ambos módulos compilados en el kernel, APM se carga antes de la ACPI, APM funciona la salida de ACPI. Para la alimentación del sistema, el poder para apoyar a una clase práctica (principalmente útil en un ordenador portátil), se basa en el programa demonio acpid.
no tiene una función similar a la aplicación APM estado, programa de consultas ACPI acaba de terminar en estado ACPI conmutación. Los usuarios alcanzar S0-S4 puede funcionar directamente a /proc /acpi /escritura de archivos digitales para lograr el sueño. Al leer el (cat) cuyos contenidos pueden ser apoyadas por los que conocen el sistema en el modo extremo.
código fuente del módulo ACPI para el programa principal en linux /drivers /acpi /driver.c, si se escribe algo para dormir archivo, vaya a los conductores /archivos de Linux /acpi /OSPM /sistema /sm_osl.c sm_osl_proc_write_sleep función, esta función se llama función sm_osl_suspend tarde. En esta función, el carril completó una variedad de funciones, incluyendo la protección de varios estados. El último sueño verdadero llamando para acpi_enter_sleep_state completado, esta función en el archivo linux /drivers /acpi /hardware /hwsleep.c, aquí para escribir ACPI se registra el sistema en estado de sueño. Escribir registro de instrucción en este catálogo en el siguiente hwregs.c.
7. Resumen
En este artículo se describe ACPI es muy simple, de hecho, ACPI se convertirá en la primera opción para los futuros modos de administración de energía del núcleo Linux. Debido a la versión oficial bajo el código ACPI actual, por lo que no hay discusión detallada también, espero que el núcleo se puede cambiar.

Copyright © Conocimiento de Windows All Rights Reserved