Esta puede ser una pregunta estúpida y extraña, pero realmente no puedo dormir hasta encontrar la respuesta. ¿Cómo sabe la computadora cómo mostrar texto y GUI en la pantalla? Si no me equivoco, el proceso de arranque de una computadora x86 es el siguiente:
- BIOS inicia la CPU y el resto del hardware y verifica si todo está funcionando
- ¿La CPU ejecuta el código del primer 512? bytes de la partición de arranque y la pantalla muestra el menú del gestor de arranque
- el kernel seleccionado se ejecuta
- etc.
Mi pregunta es: si no hay ningún sistema operativo antes de que se inicie el kernel, ¿cómo sabe la computadora cómo mostrar el texto en la pantalla? El BIOS y el gestor de arranque pueden mostrar algo de texto y una GUI básica. ¿Cómo lo hacen? ¿El BIOS/cargador de arranque le dice a la CPU (GPU?) que tiene que mostrar un píxel azul en, digamos, la posición (0,0), luego un píxel blanco en (1,0), etc.
Mi segunda teoría es que el BIOS tiene un controlador de pantalla básico que tiene algún tipo de API para imprimir en la pantalla. ¿Existe algún tipo de función print() disponible en los controladores de la pantalla?
Por lo que he visto, las funciones de ensamblaje para imprimir texto son específicas de cada sistema operativo, por lo que no puede ser algo disponible directamente a través del conjunto de instrucciones de la CPU.
La parte 2 de mi pregunta es, ¿cómo funcionan los entornos de escritorio como KDE o GNOME? Digamos que quiero crear un entorno de escritorio completamente nuevo para Linux. ¿Dónde empiezo? No hay funciones en C/C++ ni en ningún otro lenguaje de alto nivel para mostrar unn colorprixel en la posición (x,y). ¿En qué idioma está escrito el programa que muestra el escritorio? ¿Crea el escritorio píxel a píxel? ¿Cómo funcionan bibliotecas como GTK o Qt? Sé que puedo mostrar una ventana con sólo unas pocas funciones, pero ¿cómo funcionan realmente esas funciones?
Lo siento si mis preguntas no son claras. El inglés no es mi primer idioma.
Respuesta1
Básicamente, hay un chip ROM (memoria de sólo lectura) en la placa base que le indica cómo mostrar cualquier GUI que necesite. Crees que no tiene software, pero lo tiene, viene preinstalado por el fabricante. En realidad, lo más probable es que lo llames "firmware", ya que es un software que está conectado al chip.
En cuanto a los entornos de escritorio gráficos, realmente no tienen nada de especial. Aparecen en la pantalla de la misma manera que cualquier otro programa. Todo lo que realmente necesitas para dibujar en una pantalla es saber la dirección de cualquier chip que tengas a cargo de procesar gráficos (generalmente una GPU o IGPU/APU). Cuando los programas normales hacen esto, creo que solicitan esta información del sistema operativo, por lo que si tuvieras que escribir tu propio entorno de escritorio gráfico tendrías que averiguar a qué dirección enviar tus datos. La dirección que necesita la deben proporcionar los controladores de cualquier G/IG/APU que tenga.
Respuesta2
En dos partes principales:
Después de cargar MBR, su código carga una segunda etapa del código de arranque llamada Administrador de arranque de Windows o GRUB en Linux. Este administrador/cargador de arranque tiene funciones de texto y gráficos implementadas en código o utiliza acceso directo al BIOS para la salida de texto.
Después de cargar el sistema operativo (Windows, Linux, etc.) utilizando cualquier lenguaje de programación como C, C++, Java, Basic, tiene acceso a funciones implementadas en el kernel y/o bibliotecas que permiten escribir o dibujar en pantalla. Cada lenguaje de programación actual tiene algún IDE (entorno de desarrollo integrado) que simplifica enormemente la escritura del código de usuario.