31
IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Embed Size (px)

Citation preview

Page 1: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

IMPLEMENTACION DE ADVANCED POWER

MANAGEMENT EN SODIUM

Page 2: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

ADVANCED POWER MANAGEMENT(APM)

EL ORIGEN

Page 3: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

APM surgió a partir de la creación de las primeras notebooks en la década del 80'. El gasto de

energía de estas maquinas era comparable al gasto de energía de una PC de escritorio, y estas

computadoras portátiles no podían ser usadas con baterías. Por lo tanto se busco una forma de

administrar la energía para reducir el consumo de las Notebooks.

EL ORIGEN

Page 4: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Intel, Microsoft e IBM, comienzan una investigación cuyo resultado fue la versión 1.0 de APM la cual tenía inconvenientes relativos a la

comunicación con el APM BIOS.

El objetivo de APM 1.2 era coordinar el BIOS y el SO para evitar comportamientos impredecibles causados por la operación de ambos de forma

independiente.

EL ORIGEN

Page 5: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

APM esta formado por 3 módulos que se comunican entre si para llevar a cabo la gestión de energía, estos son:

• Aplicaciones APM-aware• APM Driver• APM BIOS

ESTRUCTURA DE APM

Page 6: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

ESTRUCTURA DE APM

APM-AwareApplication

APM-AwareApplication

APM-AwareDevice Driver

APM-AwareDevice Driver

APM Driver

APM BIOS

Add-In Device

Add-In Device

APM Interface

OS dependent

OS independent

Applications

BIOS

Operating System

APM BIOSControlled Hardware

Page 7: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Aplicaciones APM-aware

Una aplicación que participa en la gestión de energía del sistema a través de una interfaz con el APM Driver que es dependiente del

sistema operativo.

ESTRUCTURA DE APM

Page 8: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

APM Driver

El módulo de software que se conecta a la interfaz del APM BIOS. El APM Driver y

el APM BIOS coordinan la gestión de energía del sistema APM a través de la

conexión de software.

ESTRUCTURA DE APM

Page 9: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

APM BIOS

El módulo APM BIOS del sistema es el que proporciona funcionalidad de manejo de

energía para el hardware del motherboard que se apegue a la especificación de la

interfaz APM.

ESTRUCTURA DE APM

Page 10: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

INTERFAZ DE APM

APM requiere de soporte para las interfaces de modo real y protegido.

La interfaz de modo real es una extensión de la existente Int 15h.

La interfaz de modo protegido se accede mediante una call gate.

Page 11: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

La interfaz comunica en ambos sentidos al APM Driver y el APM BIOS.

–El APM BIOS informa al APM Driver los eventos APM que ocurren.–El APM Driver realiza llamadas a funciones del APM BIOS y también le proporciona información relacionada con la administración de energía.

INTERFAZ DE APM

Page 12: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Conexión APM

El primer paso es llamar a la función APM Installation Check.

Esta función permite averiguar:–Si existe un módulo BIOS APM en el sistema–La versión de APM que soporta el BIOS APM–Los atributos de la implementación del BIOS APM.

mov ax, 0x5300mov bx, 0x00int 15h

Page 13: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Conexión APM

Luego se realiza una llamada a la función APM Protected Mode32-bit Interface Connect para establecer la conexión con el BIOS APM.

–Esta función devuelve punteros a los segmentos de código y datos del BIOS APM.

–Se crea una Call Gate usando estos punteros.

–El APM Driver realiza llamadas a funciones del BIOS APM usando esta Call Gate.

mov ax, 0x5303mov bx, 0x00int 15h

Page 14: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

ESTADOS DE ENERGIA DE APM

APM define los estados de energía en que puede entrar el sistema de la siguiente manera :

» Full on.» APM enabled.» APM standby.» APM suspend.» Off.

Page 15: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

ESTADOS DE ENERGIA DE APM

Full on

El sistema está funcionando.No hay administración de la energía.Todos los dispositivos están activos.

Page 16: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

ESTADOS DE ENERGIA DE APM

APM Enabled

El sistema está funcionando.Hay administración de la energía.El clock del CPU se detiene o se pone a menor frecuencia según sea necesario.La energía de los dispositivos se administra según sea necesario.

Page 17: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

APM standbyEl sistema puede no estar funcionando, se lo pone en un estado de bajo poder con algo de ahorro de energía.El clock del CPU se baja de frecuencia o se detiene.El sistema vuelve rápidamente al estado APM enabled.Puede requerirse la actividad del usuario para volver el sistema a APM enabled.Se notifica al sistema operativo luego de la transición a APM enabled.

ESTADOS DE ENERGIA DE APM

Page 18: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

APM suspendEl sistema no está funcionando, sino que está en un estado de bajo poder con el máximo ahorro de energía.La mayoría de los dispositivos que tienen administración de energía, no están activos.El clock del CPU está detenido y el núcleo (core) del CPU está en su estado de mínimo poder.Tarda un tiempo relativamente largo para volver a APM enabled en comparación con Standby.Los eventos de wakeup que son definidos por el OEM devuelven al sistema al estado APM enabled.Se notifica al SO luego de la transición a APM enabled.

ESTADOS DE ENERGIA DE APM

Page 19: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

OffEl sistema no está funcionando.La fuente de alimentación está apagada.El sistema se reestablece e inicializa cuando se realiza la transición al estado Full on.

ESTADOS DE ENERGIA DE APM

Page 20: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

EVENTOS APM

Los eventos APM se comunican del APM BIOS al APM Driver a través de un mecanismo de polling.

La función APM que se utiliza para esto es GET PM EVENT.

El APM BIOS notifica los eventos APM sólo una vez.

Los eventos se borran después de la notificación y ninguna notificación adicional se publica hasta que ocurra otro evento.

Page 21: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

EVENTOS APM

Esta es una lista definida de eventos de APM que el APM BIOS puede reportar.

0001H System Standby Request Notification0002H System Suspend Request Notification0003H Normal Resume System Notification0004H Critical Resume System Notification0005H Battery Low Notification0006H Power Status Change Notification0007H Update Time Notification0008H Critical System Suspend Notification0009H User System Standby Request Notification000AH User System Suspend Request Notification000BH System Standby Resume Notification000CH Capabilities Change Notification000DH - 00FFH Reserved System Events0100H - 01FFH Reserved Device Events0200H - 02FFH OEM-Defined APM Events0300H - FFFFH Reserved

Page 22: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Implementación en SODIUM

Abarca prácticamente todas las funcionalidades definidas en la especificación APM 1.2

Principales funcionalidades APM implementadas:•Standby.•Suspend.•Mejoras al Shutdown.•Manejo de eventos APM.

Limitaciones:•Hibernación: no se pudo implementar debido a que es necesario tener la administración del disco (file system) por parte del SODIUM para poder realizarlo.

Page 23: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Implementación en SODIUM

Comandos creados:

apmstate apmrestore apmstatusapmenable apmversion apmengageapmcapa apmbusy apmidleapmring apmresume apmtimersapminfo standby suspend

Page 24: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Implementación en SODIUM

Funcionalidades APM mas relevantes implementadas en SODIUM:

void vFnAPM_info() :Nos permite saber las capacidades de APM soportadas por el equipo, además de el código de segmento y el punto de entrada al código de BIOS APM luego utilizado para realizar el call a las funciones APM.

void vFnAPM_shutdown(int):Función para apagar el equipo indicándole la unidad de tiempo, posteriormente transformada en segundos.

void vFnAPM_getEvent():Esta función es la encargada de estar realizando el polling constantemente para saber si el APM BIOS ha posteado un evento.

void vFnAPM_suspend(int):Función para poner en modo Suspend el equipo

void vFnAPM_standby(int):Función para poner en modo Standby el equipo

int iFnAPMGetCapabilities(): Se usa para determinar las capacidades APM que soporta la implementación particular del APM BIOS del equipo.

Page 25: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Implementación en SODIUMAlgunos ejemplos del código desarrollado:

vFnAPM_info(){ int r_ecx; int carry;

vFnImprimir("\nAPM Installation Check:"); vFnImprimir("\n AX: 0x%x", uiAPM_check_ax); vFnImprimir(" BX: 0x%x", uiAPM_check_bx); vFnImprimir(" CX: 0x%x", uiAPM_check_cx);

vFnImprimir("\nAPM Protected Mode 32-bit Interface:"); vFnImprimir("\n 32-bit Code Segment: 0x%x", uiAPM_32_cs); vFnImprimir("\n 16-bit Code Segment: 0x%x", uiAPM_16_cs); vFnImprimir("\n Offset Entry Point: 0x%x", uiAPM_offset_entry_point); vFnImprimir("\n Data Segment: 0x%x", uiAPM_ds);

if ( 0x7000 == uiAPM_ds ) //ds fue remapeado vFnImprimir("\nRemapeo de memoria: si\n"); else vFnImprimir("\nRemapeo de memoria: no\n");}

Page 26: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Implementación en SODIUMvoidvFnAPM_shutdown(int segundos){ int iOk; int r_ecx; int carry;

if ( uiAPM_ok == 1 ) { vFnImprimir("\nShutdown w/ APM 1.2 ...");

iFnAPMTimerBasedRequests(1); iOk = vFnCuentaRegresiva(segundos);

asm ( "pushl %%ebp \n\t" "movl %%esp, %%ebp \n\t" "pushl %%eax \n\t" "pushl %%ebx \n\t" "pushl %%ecx \n\t"

"movl $0x5307, %%eax \n\t" //SHUTDOWN "movl $0x0001, %%ebx \n\t" "movl $0x0003, %%ecx \n\t" "lcall $0x30,$0x0 \n\t" "jnc sincarry7\n\t"

"movl $0x0001, %1 \n\t" "mov %%eax, %0\n\t" "jmp final7\n\t"

"final7: \n\t" "popl %%ecx \n\t" "popl %%ebx \n\t" "popl %%eax \n\t" "popl %%ebp \n\t" :"=r" (r_ecx), "=r"(carry) : :"eax", "ecx", "ebx" );

vFnImprimir("\nAPM Set Power State SHUTDOWN: "); if(carry) { vFnImprimir("ERROR eax = 0x%xh ",r_ecx);

if((r_ecx & 0xff00) == 0x0100) vFnImprimir("(Power management functionality disabled)\n"); if((r_ecx & 0xff00) == 0x0300) vFnImprimir("(Interfacce not connected)\n"); if((r_ecx & 0xff00) == 0x0900) vFnImprimir("(Unrecognized device ID)\n"); if((r_ecx & 0xff00) == 0x0a00) vFnImprimir("(Parameter value out of range)\n"); if((r_ecx & 0xff00) == 0x0b00) vFnImprimir("(Interface not engaged)\n"); if((r_ecx & 0xff00) == 0x6000) vFnImprimir("(Unable to enter requested state)\n");

return -1; } else}

{ vFnImprimir("OK\n");

return 1; } } else { //Tuvimos algun error al establecer la conexion en modo real vFnImprimir("\nError en conexion APM PM 32-bit ..."); vFnImprimir("\nPara informacion detallada consulte comando \"apminfo\""); }

Page 27: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Implementación en SODIUMvoidvFnAPM_getEvent(){ int b=-1, carry= -1;

asm ( "pushl %%ebp \n\t" "pushl %%eax \n\t" "pushl %%ebx \n\t" "pushl %%ecx \n\t"

"movl $0x530b, %%eax \n\t" //GET PM EVENT "lcall $0x30,$0x0 \n\t"

"jnc sincarry \n\t" "movl $0x0001, %1 \n\t" "jmp final \n\t"

"sincarry: \n\t" "movl $0x0000, %1 \n\t"

"final: \n\t" "movl %%ebx, %0 \n\t" "popl %%ecx \n\t" "popl %%ebx \n\t" "popl %%eax \n\t" "popl %%ebp \n\t"

:"=r" (b), "=g" (carry) : :"eax", "ebx" );

if(carry == 0) { vFnImprimeEventoAPM(b); vFnCompruebaEjecutaEventoAPM(b); }}

Page 28: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Implementación en SODIUMvoidvFnImprimeEventoAPM(int ebx){ vFnImprimir("\nEvento APM (0x%xh): ", ebx); switch(ebx) { case APM_SYS_STANDBY: vFnImprimir("System Standby Request Notification.\n"); break; case APM_SYS_SUSPEND: vFnImprimir("System Suspend Request Notification.\n"); break; case APM_NORMAL_RESUME: vFnImprimir("Normal Resume System Notification.\n"); break; case APM_CRITICAL_RESUME: vFnImprimir("Critical Resume System Notification.\n"); break; case APM_LOW_BATTERY: vFnImprimir("Battery Low Notification.\n"); break; case APM_POWER_STATUS_CHANGE : vFnImprimir("Power Status Change Notification.\n"); break; case APM_UPDATE_TIME: vFnImprimir("Update Time Notification.\n"); break; case APM_CRITICAL_SUSPEND: vFnImprimir("Crytical System Suspend Notification.\n"); break; case APM_USER_STANDBY: vFnImprimir("User System Standby Request Notification.\n"); break;

case APM_USER_SUSPEND: vFnImprimir("User System Suspend Request Notification.\n"); break;case APM_STANDBY_RESUME: vFnImprimir("System Standby Resume Notification.\n"); break;case APM_CAPABILITY_CHANGE: vFnImprimir("Capabilities Chage Notification.\n"); break; }}

Page 29: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

La evolución de APM: ACPI

ACPI (Advanced Configuration and Power Interface) se publicó por primera vez en 1999.Es una especificación desarrollada en conjunto por Intel, Compaq, Microsoft, Toshiba y Phoenix.

Permite la gestión de todos los recursos hardware directamente por el sistema operativo.Mejora muchos de los defectos de APM al ofrecer una interfaz comprensiva de gestión para todos los dispositivos del sistema.

La especificación puede ser dividida en dos partes principales : la implementación ACPI a nivel de BIOS y hardware, y la funcionalidad ACPI incorporada en el sistema operativo (OSPM).

Page 30: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Diferencias entre ACPI y APM ACPI es la tecnología de sustitución al APM.

ACPI es más compatible con un hardware más nuevo, mientras que APM es más compatible con los dispositivos de legado.

ACPI es más completo en comparación con APM.

ACPI es mas complejo y robusto que APM.

ACPI se centra en el SO, mientras que APM se centra en el BIOS. El SO tiene un mayor conocimiento que el BIOS, acerca del estado del sistema.

Page 31: IMPLEMENTACION DE ADVANCED POWER MANAGEMENT EN SODIUM

Fin

Sistema Operativos 2010.

Grupo APM

Fernando J. Lo TartaroCarlos A. Gergela