Tengo una duda:
Si tengo el siguiente código de ejemplo:
KERNEL:
Código:
void EjecutarProceso(int id){
...
_asm iret // interrupt return
}
void sys_TerminarProceso(){
...
}
void EjecutarPrograma(){
int id = CrearProceso("programa.exe");
EjecutarProceso(id);
continuar:
...
}
PROGRAMA:
Código:
#include "syscalls.h"
void main(){
...
sys_TerminarProceso();
}
Explico:
El código de ejemplo lo asemejo a un código para entrar al modo usuario desde el kernel, ejecutar un programa y regresar al modo kernel ( todo funciona perfectamente ). Lo que quiero hacer es que cuando termine el proceso "sys_TerminarProceso" continúe al label "continuar".
Para ello he pensado en 2 alternativas:
PRIMERA ALTERNATIVA ( probada y sí funciona ) :
a) Pasarle como parámetro a "EjecutarPrograma" la dirección de "continuar".
b) Guardar esa dirección en la memoria mediante una variable global.
c) Cuando el programa ( usuario ) ejecute sys_TerminarProceso, esta función ejecutará al final ( después de los ... ) dicha dirección del label.
d) Enjoy!
Bueno este es muy seguro y lógico a mi parecer, pero... este "EjecutarPrograma" también lo ejecutará el cliente como un "sys_EjecutarPrograma" y bueno no es muy normal que ejecute algo así: "EjecutarPrograma(etiquetaparacontinuar)".
SEGUNDA ALTERNATIVA ( dudas, problemas ) :
Obtener la dirección de una vez pasada la llamada "EjecutarProceso(id);", es decir, por donde está continuar ( sin el label claro ).
Si alguien tiene alguna idea agradecería mucho su ayuda. Gracias por la atención.