Hace tiempo, vi el código de tu "kernel". Te comento unas cosas:
- Un kernel, tiene una GDT, IDT y LDT para tratar las interrupciones. Se empieza por aquí, no pases a otra cosa si no tienes una GDT e IDT decentes.
- Necesitas controlar los IRQ´s Interrupt Requests. Hay una IRQ específica para el teclado, de esta manera detectas cuando se pulsa una tecla.
- Paging, Heap, etc..
Y eso de que tus aplicaciones corren en modo nivel de usuario, no te lo crees ni tu xD. Para cargar un ejecutable en memoria necesitas: GDT, IDT, LDT, IRQ´s, Paging, Heap, un schedule (sistema para ejecutar threads), etc..
Aquí tienes información para dar y tomar:
http://www.jamesmolloy.co.uk/tutorial_html/1.-Environment%20setup.htmlhttp://wiki.osdev.org/Main_PageSaludos.