Pregunta

Crear un sistema operativo parece un proyecto masivo . ¿Cómo podría alguien comenzar?

Por ejemplo, cuando meto Ubuntu en mi disco, ¿cómo puede mi computadora simplemente ejecutar ? (Esto, supongo, es lo que realmente me gustaría saber).

O, mirándolo desde otro ángulo, ¿cuál es la cantidad mínima de bytes que podría haber en un disco y que aún se ejecuta " " como un sistema operativo?

(Lo siento si esto es vago. Simplemente no tengo ninguna idea sobre este tema, así que no puedo ser muy específico. Pretendo saber bastante sobre cómo funcionan las computadoras, pero no tengo ni idea sobre este tema.)

¿Fue útil?

Solución

Bueno, la respuesta está en los libros: Sistemas operativos modernos - Andrew S. Tanenbaum es muy bueno. La ilustración de la portada a continuación.

El kernel de sistema operativo más simple y completo, adecuado para aprender o simplemente por curiosidad, es Minix .
Aquí puede navegar por código fuente .

 Sistemas operativos modernos
(fuente: cs.vu.nl )

Otros consejos

Los sistemas operativos son un tema enorme, lo mejor que puedo recomendarte si quieres profundizar en cómo se diseñan y construyen los sistemas operativos es un buen libro:

Conceptos del sistema operativo ??

Conceptos del sistema operativo

Si tiene verdadera curiosidad, lo dirigiría a Linux from Scratch como un buen lugar para aprender el completo Los entresijos de un sistema operativo y cómo encajan todas las piezas. Si esa es más información de la que está buscando, este artículo de Wikipedia sobre sistemas operativos podría ser una buena opción. lugar para comenzar.

Una PC sabe mirar un sector específico del disco para las instrucciones de inicio. Estas instrucciones le indicarán al procesador que, en determinadas interrupciones del procesador, se debe llamar a un código específico. Por ejemplo, en una marca periódica, llame al código del programador. Cuando reciba algo de un dispositivo, llame al código del controlador del dispositivo.

Ahora, ¿cómo un sistema operativo configura todo con el sistema? Bueno, el hardware tiene API también. Se escriben con el programador de sistemas en mente.

He visto muchos sistemas operativos básicos y este es realmente el núcleo absoluto. Hay muchos sistemas operativos integrados integrados que son todo lo que hacen y nada más.

Las funciones adicionales, como requerir que las aplicaciones soliciten memoria al sistema operativo, o que requieren privilegios especiales para ciertas acciones, o incluso los procesos y subprocesos en sí mismos son realmente opcionales, aunque se implementan en la mayoría de las arquitecturas de PC.

El sistema operativo es, simplemente, lo que le permite a su software administrar el hardware. Claramente, algunos sistemas operativos son más sofisticados que otros.

En su núcleo, una computadora comienza a ejecutarse en una dirección fija, lo que significa que cuando la computadora se inicia, establece el contador del programa en una dirección predefinida, y simplemente comienza a ejecutar el código de la máquina.

En la mayoría de las computadoras, este " bootstrapping " el proceso inicializa inmediatamente los periféricos conocidos (como, por ejemplo, una unidad de disco). Una vez inicializado, el proceso de arranque utilizará una secuencia predefinida para aprovechar esos periféricos. Usando nuevamente el controlador del disco, el proceso puede leer el código del primer sector del disco duro, colocarlo en un espacio conocido dentro de la RAM y luego saltar a esa dirección.

Esta secuencia predefinida (el inicio de la CPU, la carga del disco) permite a los programadores comenzar a agregar más y más código en las primeras partes del inicio de la CPU, lo que con el tiempo puede, eventualmente, iniciar programas muy sofisticados. .

En el mundo moderno, con periféricos sofisticados, arquitecturas de CPU avanzadas y recursos vastos e inmensos (GB o RAM, TB de disco y CPU muy rápidas), el sistema operativo puede admitir abstracciones bastante poderosas para el desarrollador (procesos múltiples , memoria virtual, controladores cargables, etc.).

Pero para un sistema simple, con recursos limitados, realmente no necesitas mucho para un " SO " ;.

Como ejemplo simple, muchas computadoras controladoras pequeñas tienen sistemas operativos muy pequeños, y algunas pueden considerarse simplemente un monitor, ofreciendo poco más que un fácil acceso a un puerto serie (o un terminal o LCD). monitor). Ciertamente, no hay muchas necesidades para un sistema operativo grande en estas condiciones.

Pero también considera algo como un sistema clásico de Forth. Aquí, tiene un sistema con un "sistema operativo", que le brinda E / S de disco, E / S de consola, administración de memoria, además del lenguaje de programación real así como un ensamblador, y esto se ajusta a menos de 8K de memoria en una máquina de 8 bits.

o los viejos tiempos de CP / M con su BIOS y BDOS.

CP / M es un buen ejemplo de cómo un sistema operativo simple funciona bien como capa de abstracción para permitir que los programas portátiles se ejecuten en una amplia gama de hardware, pero incluso en ese caso el sistema necesitó menos de 8K de RAM para iniciarse y ejecutarse. .

Muy lejos de los MB de memoria utilizados por los sistemas operativos modernos. Pero, para ser justos, TENEMOS MB de memoria, y nuestras vidas son MUCHO más simples (en su mayoría), y mucho más funcionales, debido a ello.

Escribir un sistema operativo es divertido porque es interesante hacer que el HARDWARE imprima " Hello World " empujando los datos de 1 byte a la vez en algún puerto de E / S oscuro, o metiéndolo en alguna dirección de memoria mágica.

Obtén un emulador x86 y ve abajo para que un sector de arranque diga tu nombre. Es un regalo risueño.

Básicamente ... su computadora solo puede ejecutar el disco porque:

El BIOS incluye ese dispositivo de disco en el orden de inicio.

En el inicio, el BIOS analiza todos los dispositivos de inicio en orden, como la unidad de disquete, el disco duro y el CD ROM. Cada dispositivo accede a sus medios y comprueba una ubicación codificada (normalmente un sector, en un disco o dispositivo de CD) para detectar una huella dactilar que identifique los medios, y enumera la ubicación a la que saltar en el disco (o medios) donde comienzan las instrucciones. El BIOS le dice al dispositivo que mueva su cabeza (o lo que sea) a la ubicación especificada en el medio, y lea una gran cantidad de instrucciones. La BIOS entrega esas instrucciones a la CPU.

La CPU ejecuta estas instrucciones. En su caso, estas instrucciones van a iniciar el sistema operativo Ubuntu. Podrían ser instrucciones para detener o agregar 10 + 20, etc.

Por lo general, un sistema operativo se iniciará tomando una gran parte de la memoria (nuevamente, directamente desde la CPU, ya que los comandos de la biblioteca como 'GlobalAlloc', etc. no están disponibles, ya que están proporcionados por cargado-OS) y comienza a crear estructuras para el propio sistema operativo.

Un sistema operativo proporciona una serie de 'características' para aplicaciones: administración de memoria, sistema de archivos, entrada / salida, programación de tareas, redes, administración de gráficos, acceso a impresoras, etc. Eso es lo que está haciendo antes de que 'controle': crear / iniciar todos los servicios para que las aplicaciones posteriores puedan ejecutarse juntas, no pisotear la memoria de la otra persona y tener una API agradable para los servicios provistos por el sistema operativo.

Cada 'característica' proporcionada por el sistema operativo es un tema amplio. Un sistema operativo los proporciona a todos, por lo que las aplicaciones solo tienen que preocuparse de llamar a la biblioteca de sistema operativo correcta, y el sistema operativo administra situaciones como si dos programas intentaran imprimir al mismo tiempo.

Por ejemplo, sin el sistema operativo, cada aplicación tendría que lidiar con una situación en la que otro programa está tratando de imprimir, y "hacer algo" como imprimir de todos modos, o cancelar el otro trabajo, etc. En cambio, solo el sistema operativo tiene para lidiar con eso, las aplicaciones solo le dicen al sistema operativo 'imprimir esto' y el sistema operativo se asegura de que se imprima una aplicación, y todas las demás aplicaciones solo tienen que esperar hasta que la primera termine o el usuario la cancele.

La menor cantidad de bytes para ser un sistema operativo realmente no tiene sentido, como un " Sistema operativo " Podría implicar muchas, o muy pocas, características. Si todo lo que querías era ejecutar un programa desde un CD, serían muy pocos bytes. Sin embargo, eso no es un sistema operativo. El trabajo de un sistema operativo es proporcionar servicios (los he llamado características) para permitir que se ejecuten muchos otros programas y administrar el acceso a esos servicios para los programas. Eso es difícil, y cuantos más recursos compartidos agregue (redes y wifi, y grabadores de CD y joysticks y video de iSight y monitores duales, etc, etc.), más difícil será.

Uno de los proyectos de sistema operativo más recientes que he visto que tiene un respaldo serio ha sido un proyecto de MS Research llamado Singularity , que está escrito completamente en C # .NET desde cero.

Para tener una idea de cuánto trabajo se necesita, hay 2 desarrolladores principales, pero tienen hasta una docena de internos en un momento dado, y aún tardaron dos años en llegar hasta el punto de partida del sistema operativo. arrancaría y mostraría imágenes BMP (así es como se usan para hacer sus presentaciones). Tomó mucho más trabajo antes de que pudieran llegar a un punto donde había una línea de comando (como unos 4 años).

Básicamente, hay muchos argumentos sobre lo que es realmente un sistema operativo . Si todos están de acuerdo con lo que es un sistema operativo específicamente (¿es solo el kernel? ¿Todo lo que se ejecuta en modo kernel? ¿Es la parte shell del sistema operativo? ¿X es parte del sistema operativo? se contesta De lo contrario, no hay una respuesta específica a tu pregunta.

Es posible que desee obtener el libro Diseño e implementación del sistema operativo FreeBSD para obtener una respuesta muy detallada. Puede obtenerlo en Amazon o este enlace al sitio de FreeBSD.org se parece al libro, tal como lo recuerdo: texto del enlace

No puedo creer que esto no haya sido mencionado ... pero un libro clásico para una descripción general del diseño del sistema operativo es Sistemas operativos: diseño e implementación escrito por Andrew S Tanenbaum, el creador de MINIX. Muchos de los ejemplos en el libro están orientados directamente hacia MINIX también.

Si desea aprender un poco más, Dev de SO es un excelente lugar para comenzar. Especialmente la wiki. Este sitio está lleno de información, así como de desarrolladores que escriben sistemas operativos personales para un pequeño proyecto / pasatiempo. También es un gran recurso de aprendizaje, ya que hay muchas personas en el mismo barco que tú en OSDev que quieren aprender lo que implica un sistema operativo. ¡Podrías terminar probándolo tú también eventualmente!

el sistema operativo (SO) es la capa de software que controla el hardware. Cuanto más sencillo sea el hardware, más sencillo será el sistema operativo y viceversa ;-)

si los primeros días de las microcomputadoras, podría instalar el sistema operativo en una ROM de 16K y conectar la placa base para comenzar a ejecutar las instrucciones del código de la máquina al comienzo del espacio de direcciones de la ROM. Este proceso de "arranque" cargaría el código de los controladores para los otros dispositivos como el teclado, el monitor, la unidad de disquete, etc., y en unos pocos segundos, su máquina estará iniciada y lista para su uso.

Hoy en día ... el mismo principio, pero mucho más y más complejo hardware ;-)

Esto es muy divertido. Lo he hecho todo en un momento u otro, y he estado allí durante gran parte de la evolución.

En general, empiezas a escribir un nuevo sistema operativo al comenzar con poco. Lo más simple es un cargador de arranque, que es una pequeña porción de código que arrastra una porción de código y la ejecuta. Una vez, con las computadoras Nova o PDP, podría ingresar el cargador de inicio a través del panel frontal: ingresó las instrucciones número hexadecimal por número hexadecimal. El cargador de arranque que lee algún medio en la memoria y configura el contador del programa en la dirección de inicio de ese código.

Ese fragmento de código generalmente carga algo más, pero no tiene que hacerlo: puedes escribir un programa destinado a ejecutarse desde cero. Ese tipo de programa hace algo útil por sí solo.

Un sistema operativo real es más grande y tiene más piezas. necesitas cargar programas, ponerlos en memoria y ejecutarlos; necesita proporcionar un código para ejecutar los dispositivos IO; a medida que crece, necesita administrar la memoria.

Si realmente desea aprender cómo funciona, busque los libros Xinu de Doug Comer's , y Andy el libro de sistemas operativos más nuevo de Tannenbaum en Minix .

Pruebe Cómo se inician las computadoras , El proceso de arranque del kernel y otros artículos relacionados del mismo blog para una breve descripción de lo que hace una computadora cuando arranca.

¿Qué hace una computadora cuando su inicio es muy dependiente (quizás obvio?) de el diseño de la CPU y otras "cosas de bajo nivel"; por lo tanto, es un poco difícil anticipar qué hace su computadora cuando arranca.

Bueno, tienes algo que vincula el inicio del chip con un " bios " ;, luego con un sistema operativo, que suele ser una tarea muy complicada realizada por muchos servicios de código.

Si realmente quieres saber más sobre esto, te recomendaría leer un libro ... sobre microcontroladores, especialmente uno donde crees un pequeño sistema operativo en c para un 8051 o similar ... o aprendes un poco de ensamblaje x86 y creas un muy pequeño " bootloader OS " ;.

Es posible que desee consultar esta pregunta .

Un sistema operativo es un programa, al igual que cualquier otra aplicación que escribas. El propósito principal de este programa es que te permite ejecutar otros programas. Los sistemas operativos modernos aprovechan el hardware moderno para garantizar que los programas no entren en conflicto entre sí.

Si está interesado en escribir su propio sistema operativo, consulte mi propia pregunta aquí:

Cómo comenzar en el desarrollo del sistema operativo

Usted pregunta ¿cuántos bytes podría poner en el disco y aún ejecutar como un sistema operativo ? La respuesta depende de lo que espere de su sistema operativo, pero el sistema operativo útil más pequeño que conozco se ajusta a 1,7 megabytes. Es el disco Tom's Root Boot y es un muy buen sistema operativo pequeño con " rescate " aplicaciones que caben en un disquete . En los días en que cada máquina tenía una unidad de disquete y no todas las máquinas tenían una unidad de CD-ROM, solía usarla con frecuencia.

Mi opinión es que es como tu propia vida. Al principio, sabes muy poco, solo lo suficiente para llevarte bien. Esto es similar a lo que proporciona la BIOS: sabe lo suficiente como para buscar una unidad de disco y leer información de ella. Luego aprendes un poco más cuando vas a la escuela primaria. Esto es como el sector de arranque que se lee en la memoria y se le da el control. Luego vas a la escuela secundaria, que es como la carga del kernel del sistema operativo. Luego vas a la universidad (controladores y otras aplicaciones). Por supuesto, este es el punto en el que eres responsable de CRASH. HE HE.

La conclusión es que las capas de más y más capacidades se cargan lentamente. No hay nada mágico en un sistema operativo.

Leer a través de aquí te dará una idea de lo que se necesitó para crear Linux https://netfiles.uiuc.edu/rhasan/linux/

Otro sistema operativo realmente pequeño que cabe en un disco es QNX (cuando lo vi por última vez hace mucho tiempo, todo el sistema operativo, con interfaz GUI, navegador web, acceso a disco y un servidor web incorporado, se ajusta a uno unidad de disquete).

No he escuchado mucho al respecto desde entonces, pero es un sistema operativo en tiempo real, por lo que está diseñado para ser muy rápido.

En realidad, algunas personas visitan una universidad de 4 años para tener una idea aproximada de esto ...

En su núcleo, el sistema operativo es extremadamente simple. Aquí está la guía para principiantes para QUÉ se hace el sistema operativo exitoso: 1. Administre la CPU utilizando el programador, que decide qué proceso (instancia de ejecución del programa) se debe programar. 2. Administre la memoria para decidir qué procesos lo utilizan para almacenar instrucciones (código) y datos (variables). 3. Administre las interfaces de E / S tales como unidades de disco, alarmas, teclado, mouse. Ahora, los 3 requisitos anteriores dan lugar a la necesidad de que los procesos se comuniquen (¡y no luchen!), Que interactúen con el mundo exterior, ayuden a las aplicaciones a hacer lo que quieren hacer. Para profundizar en CÓMO hace eso, lee el libro de Dinosaurios :)

Por lo tanto, puede hacer que el sistema operativo sea tan pequeño como quiera, siempre y cuando pueda manejar todos los recursos de hardware. Cuando arranca, el BIOS le dice a la CPU que comience a leer el cargador de arranque (que carga la primera función del sistema operativo que reside en la dirección fija en la memoria, algo así como main () del programa C pequeño). ¡Entonces esto crea funciones, procesos y subprocesos y comienza el big bang!

En primer lugar, leer leer y leer sobre qué es el sistema operativo; entonces cuáles son los usos / Tipos / naturaleza / objetivo / necesidades / de los diferentes sistemas operativos. Algunos de los enlaces son los siguientes; El novato disfrutará de estos enlaces:

SO moderno : esto da Idea sobre el sistema operativo general.

Inicio de OS : proporciona información básica sobre lo que realmente requiere MAKE OS, cómo podemos hacerlo y cómo se puede modificar un código fuente abierto actual de OS por sí mismo.

Wiki OS : da una idea acerca de las diferentes Os que se utilizan en diferentes campos y usos (objetos / características del sistema operativo.)

Veamos en general qué sistema operativo contiene (no el sofisticado de Linux o Windows)

El sistema operativo necesita una CPU y para volcar un código necesita un bootloader . El sistema operativo debe tener los objetivos para cumplirse y esos objetivos deben definirse en un contenedor que se denomina Kernel En su interior podría tener tiempo de programación e ISR's (Depende del objetivo y sistema operativo que necesite realizar)

El desarrollo del sistema operativo es complicado. Hay algunos sitios web como osdev o lowlevel.eu (alemán) dedicados al tema. También hay algunos libros, que otros ya han mencionado.

No puedo evitar pero también hago referencia al " Escribe tu propio sistema operativo " serie de videos en youtube, ya que soy yo quien lo hizo :-)

Consulte

scroll top