
Estaba creando un sistema operativo Linux desde cero. me encontréesteartículo, que crea un sistema operativo Linux mínimo que simplemente imprime hola mundo una vez que se inicia el kernel de Linux.
Entonces mi pregunta es, ¿en qué espacio [kernel o espacio de usuario] se ejecuta dicho programa helloworld? Mi conciencia dice que es el espacio del kernel, entonces, ¿cómo hago para que se ejecute en el espacio del usuario?
Para las personas que no quieran leer ese artículo tan extenso, esto es lo que hace en resumen.
- Formateé mi unidad flash USB [/dev/sdb en mi sistema Linux] con formato de archivo ext4.
- Lo monté en la carpeta /mnt/mylinux.
- Carpetas creadas /boot y /bin en ellas.
- Coloqué una copia del kernel de Linux [lo compilé a partir del código fuente de github.] bzImage en la carpeta /boot
- Instalé grub2 en la carpeta /boot de /dev/sdb y creé el archivo grub.cfg para especificar mi programa de inicio.
Mi programa de inicio.
#include <stdio.h>
#include <unistd.h>
int main(void){
while(1){
printf("Hello World\n");
sleep(1);
}
}
Mi programa de inicio se compila estáticamente y se coloca en la carpeta/bin.
Entonces, cuando inicio esta unidad, comienza a imprimir: Hola mundo
Respuesta1
En su caso, es un espacio de usuario: usa bibliotecas estándar, por lo que usa la API del espacio de usuario para hacer las cosas.
Si su programa fue ejecutado por el kernel, solo tiene la API interna del kernel (es decir, kprintf) y muchas restricciones sobre lo que puede hacer. Además, debe colocarlo en el kernel o como módulo del kernel. El kernel no ejecuta código externo como espacio del kernel.
Nota: existen casos híbridos, pero siempre iniciados por el kernel, para que el proceso dure más tiempo, no para bloquear el kernel. En ese caso, el programador maneja el código y es visible en la lista de procesos (generalmente números PID bajos, pero no 1).