General Mi experiencia programando un Sistema Operativo

Portal web de discusión sobre Videojuegos, Anime/Manga y cultura japonesa.

#1

Hace 2 añosMensaje

Nani Kore
Avatar de Usuario

47

Mensajes: 6803
Registrado: Hace 4 años
Desconectado
19139 13 15 32
Hayasaka
Echidna
Llevo meses queriendo hacer este hilo, pero me daba mucha pereza porque quedé muy quemado del cuatrimestre, pero creo que ahora es buen momento. El pasado cuatrimestre matriculé Sistemas Operativos 2, asignatura del Grado de Ingeniería Informática de la Facultad de Informática de Barcelona, que sirve como continuación a Sistemas Operativos, donde te explican las bases que forman SO, así como diversas funcionalidades de la línea de comandos. La diferencia es que mientras que en SO todo se trata a nivel teórico, en SO2 la mayoría trata de implementar las cosas que te van explicando en un sistema operativo muy muy sencillo que te dan como base para trabajar.

El SO que nos daban como base podía: ejecutar el boot, inicializar las regiones de memoria de usuario y sistema, crear un único proceso de usuario, e imprimir unos mensajes en pantalla, antes de quedar en un bucle infinito. Hacia el final debía ser capaz de soportar multiples procesos concurrentes, interrupciones de teclado, diversas funciones típicas de librería estándar de C (que yo no teníamos ninguna), poder tratar con multiples "terminales", creación y borrado de procesos, así como scheduling y optimizaciones de memoria. Por si no se nota es mucho curro.



No voy a ir paso a paso por las cosas que teníamos que implementar porque son muchas y muy técnicas, pero voy a mostrar y comentar algunas de las más interesantes:
  • Debugar las llamadas a sistema usando la pila y registros.
No me habré pasado veces hasta las 2 de la madrugada con mi compañero apuntándonos EBPs y direcciones de memoria para ver si encontrábamos el camino que seguian las llamadas a sistema, para colmo con una interfaz digna de un Commodore 64, experiencia 100% recomendable para aquellos que quieran pegarse un tiro.

Imagen Imagen
  • fork()
Cualquiera que haya estudiado sistemas operativos debe poder hacerse una idea de la magnitud de esta función, ya que es la responsable de crear un proceso como una copia a partir de otro, incluyendo la reserva de regiones de memoria, copia de datos, etc, y finalmente el cambio de contexto al proceso hijo.
Nos quedó una función bastante grandota, a pesar e ser casi todo llamadas a otras funciones. Nos tiramos un buen rato, pero como el profesor nos ayudó con los errores lo pudimos sacar bastante rápido.

Imagen
  • Gestión de pantallas
Probablemente la cosa que más meme daba cuando fallaba, porque estábamos tocando la región de memoria reservada para que la tarjeta gráfica lea e imprima en pantalla, así que si no iba lo que tocaba quedaban cosas bastante graciosas. A estas alturas también hicimos un par de guarradas que al final terminaron no ser tan guarras.

Imagen Imagen
  • Copy on Write
El verdadero final boss que nadie esperaba. En la teoría el fork() tiene que copiar todos sus datos, código y regiones de memoria al proceso hijo, pero eso es poco eficiente si el proceso hijo no lo usa, o si muta para ejecutar otro código, por eso en sistemas operativos actuales se hace esta cosa que consiste en no copiar nada pero marcar las páginas de memoria que usen ambos procesos como no accesibles, de forma que cuando cualquiera de los dos procesos, padre o hijo, quiera usar esa región de memoria, salte un fallo de página, y la gestión del error se encargue de la copia de únicamente esa región concreta.

Imagen

Debe ser la locura más grande que he programado, y me sentí muy orgulloso al ver que funcionaba. Por cierto, no teníamos documentación al respecto, así que tuve que tirar del manual del Kernel de Linux, toda una aventura...



Y estas son las cosas que se me ocurren ahora mismo, hay otros memazos como el printf() que tuve que programar de cero porque trabajar con el write() base era un horror, peroquedarán para otra ocasión.

Tremendo 9.83 que nos quedó en el proyecto, lo que nos restó del 10 fue la parte escrita del trabajo, para variar...
Por si alguien tiene curiosidad el SO base parece ser el TFG de un alumno de hace años, que ole sus huevos, porque toda la parte del boot escrita en ensamblador es digna de un psicópata.



Conclusión final:

La asignatura me encantó, aprendí mucho y fue divertido, fuera de los ratos de sufrimiento y desesperación al ver que tras 3 horas de trabajo no consigues ningún resultado útil. Te hace ver de primera mano el nivel de complejidad que tiene un SO, y la verdad les tengo mucho respeto a los ingenieros de sistemas operativos, porque joder, hay que tener mucha cabeza para tratar con esto.
Salu2
Última edición por Nani Kore el 31 Ago 2021 03:23, editado 1 vez en total.

#2

Hace 2 añosMensaje

Rikka
Avatar de Usuario

48

Mensajes: 6604
Registrado: Hace 4 años
Desconectado
13968 19 20 37
Rikka
Hisoka
MetalOopa
TennoShiny
Gracias por la felicitación, igualmente pasa buena noche
🎵🎵Si quereis desayunar🎵🎵, pues os lo preparáis vosotros a mi que me cuentas xd

#3

Hace 2 añosMensaje

Nani Kore
Avatar de Usuario

47

Mensajes: 6803
Registrado: Hace 4 años
Desconectado
19139 13 15 32
Hayasaka
Echidna
Ahora que ya no puedo joderle la pole a nadie aprovecho para decir que si a alguien no le gusta como programo que se joda.

Casi todo lo hicimos escuchando una playlist de una hora de Aimer de puta madre, lástima que youtube la tumbó.
Salu2

#4

Hace 2 añosMensaje

Pikesito
Avatar de Usuario
Usuario de Stan

48

Mensajes: 8075
Registrado: Hace 4 años
Waifu: Haruhi
Lista de animes
Desconectado
27083 25 23 34
Haruhi
Maki
Loid Forger
No, gracias.
Return to monke

#5

Hace 2 añosMensaje

Otakulifter
Avatar de Usuario
Pelirosas power

36

Mensajes: 2684
Registrado: Hace 4 años
Waifu: ZeroTwo & Gasai Yuno
Desconectado
953 18 18 36
Menudo tochazo
Hikikomori encubierto tras los muros del quedirán

#6

Hace 2 añosMensaje

MetalOopa
Avatar de Usuario

44

Mensajes: 5607
Registrado: Hace 4 años
Waifu: Kurisutina
Husbando: No jojo
Lista de animes
Desconectado
10697 18 17 32
MetalOopa
Shinobu
Kurisutina
Nina
Nani Kore escribió:
Hace 2 años
Por si alguien tiene curiosidad el SO base parece ser el TFG de un alumno de hace años, que ole sus huevos, porque toda la parte del boot escrita en ensamblador es digna de un psicópata.
Algunos son masoquistas. :sasuke:
El Psy Kongroo
Spoiler
Mostrar Spoiler

#7

Hace 2 añosMensaje

Usuario borrado 1 (el mejor)™☑️✅

Desconectado
20 0 0 1
No había visto este hilo

Lo poco que sé de programación es por trastear y en un lenguaje hipersimplificado como es C#, pero estos rollos de código a niveles básicos me encantan

Para mí, intentar descomponer el proceso desde que mandas una instrucción simple desde cualquier software random de la PC hasta que se ejecuta, es una locura de matrioskas en distintos lenguajes similar a ponerte a reducir un elefante en elementos cada vez más pequeños hasta que llegas al quark o pierdes la cabeza por el camino.

#8

Hace 2 añosMensaje

Nani Kore
Avatar de Usuario

47

Mensajes: 6803
Registrado: Hace 4 años
Desconectado
19139 13 15 32
Hayasaka
Echidna
Gintoki escribió:
Hace 2 años
Para mí, intentar descomponer el proceso desde que mandas una instrucción simple desde cualquier software random de la PC hasta que se ejecuta, es una locura de matrioskas en distintos lenguajes similar a ponerte a reducir un elefante en elementos cada vez más pequeños hasta que llegas al quark o pierdes la cabeza por el camino.
Algo así, sí, y cuanto más profundo te metes en el mundo de la informática, más complejo te das cuenta que es.
Salu2

#9

Hace 2 añosMensaje

Patimbiki_Chan
Avatar de Usuario
No soy otaku

25

Mensajes: 958
Registrado: Hace 4 años
Waifu: Catgirl del SDM
Husbando: Phil
Lista de animes
Desconectado
1149 3 7 28
Report
Tusa
Sakuranomiya
TennoShiny
Seguramente a @Nutriauwu le mola el hilo, recuerdos de vietnam de la ingeniería
No me baneéis, soy buena gente :)
NO NEGOCIAMOS CON T E R R O R I S T A S
Última edición por Patimbiki_Chan el 02 Sep 2021 14:26, editado 1 vez en total.

Identificarse  •  Registrarse