operating-system low-level osdev

operating system - ¿Cómo son "hechos" los sistemas operativos?



operating-system low-level (25)

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

Por ejemplo, cuando introduzco Ubuntu en mi disco, ¿cómo puede mi computadora ejecutarlo ? (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 aún así "ejecutarse" como un sistema operativo?

(Lo siento si esto es vago. Simplemente no tengo 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 de este tema. )


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

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

En el arranque, el BIOS escanea todos los dispositivos de arranque 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 (generalmente un sector, en un disco o dispositivo de CD) para una huella digital que identifica los medios, y enumera la ubicación a la que saltar en el disco (o medio) 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 lee una gran cantidad de instrucciones. El 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 detenerse, o para agregar 10 + 20, etc.

Normalmente, un sistema operativo comenzará tomando una gran cantidad de memoria (nuevamente, directamente desde la CPU, ya que los comandos de biblioteca como ''GlobalAlloc'', etc. no están disponibles, ya que son proporcionados por el sistema operativo aún por cargar) ) y comienza a crear estructuras para el sistema operativo en sí.

Un sistema operativo proporciona un conjunto 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, y más. Eso es lo que hace antes de ''obtener el control'': crear / iniciar todos los servicios para que las aplicaciones posteriores puedan ejecutarse juntas, no pisar la memoria de los demás, y tener una buena API para los servicios proporcionados por el sistema operativo.

Cada ''característica'' proporcionada por el sistema operativo es un tema importante. Un SO los proporciona a todos para que las aplicaciones solo tengan que preocuparse por llamar a la biblioteca de SO correcta, y el SO gestiona 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 intenta imprimir, y ''hacer algo'' como imprimir de todos modos, o cancelar el otro trabajo, etc. En cambio, solo el sistema operativo debe lidiar con esto, las aplicaciones solo le dicen al sistema operativo que ''imprima esto'' y el sistema operativo garantiza que una aplicación imprima, y ​​todas las otras aplicaciones solo tienen que esperar hasta que la primera finalice o el usuario la cancele.

La menor cantidad de bytes para ser un sistema operativo realmente no tiene sentido, ya que un "sistema operativo" podría implicar muchas, o muy pocas, características. Si todo lo que quería es 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 funciones) para permitir que se ejecuten muchos otros programas y para administrar el acceso a esos servicios para los programas. Eso es difícil, y cuantos más recursos compartidos agregue (redes y wifi, grabadoras de CD y joysticks, y video iSight, y monitores duales, etc.), más difícil será.


Básicamente, hay muchos argumentos sobre lo que es realmente un sistema operativo. Si consiguieron que todos estuvieran de acuerdo en qué es específicamente un sistema operativo (¿es solo el kernel? ¿Todo lo que se ejecuta en modo kernel? ¿Es el shell parte del sistema operativo? ¿X parte del sistema operativo? ¿El navegador web es parte del sistema operativo?), Su pregunta es respondido! De lo contrario, no hay una respuesta específica para su pregunta.


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

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


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

En esencia, 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 comienza a ejecutar el código de la máquina.

En la mayoría de las computadoras, este proceso de "inicialización" inicializa inmediatamente 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. Utilizando nuevamente el controlador de disco, el proceso podría leer el código del primer sector del disco duro, colocarlo en un espacio conocido en la memoria RAM y luego saltar a esa dirección.

Esta secuencia predefinida (el inicio de la CPU, la carga del disco) permite a los programadores destacarse agregando 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 vastos y amplios recursos (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 necesita mucho para un "sistema operativo".

Como ejemplo simple, muchas computadoras pequeñas con controladores tienen "SO" muy pequeños, y algunas simplemente se pueden considerar un "monitor", que ofrece poco más que un acceso fácil a un puerto en serie (o una terminal o pantalla LCD). Ciertamente, no hay muchas necesidades para un sistema operativo grande en estas condiciones.

Pero también considere algo así como un sistema Forth clásico. Aquí, tiene un sistema con un "sistema operativo", que le proporciona E / S de disco, E / S de consola, administración de memoria, más el lenguaje de programación real así como un ensamblador, y esto cabe en menos de 8K de memoria en un 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 una capa de abstracción para permitir que los programas portátiles se ejecuten en una amplia gama de hardware, pero incluso entonces el sistema tomó menos de 8K de RAM para iniciar y ejecutar.

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 eso.

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

Obtenga un emulador x86 y celebre un sector de arranque para decir su nombre. Es un regalo risueño.


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


Oh, este es divertido. Lo hice todo en un momento u otro, y estuve allí durante gran parte de la evolución.

En general, comienza a escribir un nuevo sistema operativo comenzando en pequeño. Lo más simple es un cargador bootstrap, que es una pequeña porción de código que extrae un fragmento de código y lo ejecuta. Érase una vez, con las computadoras Nova o PDP, podía ingresar el cargador de arranque a través del panel frontal: ingresaba el número hexadecimal de las instrucciones por número hexadecimal. El gestor de arranque lee un medio en la memoria y establece el contador del programa en la dirección de inicio de ese código.

Ese trozo de código normalmente carga algo más, pero no tiene por qué: puedes escribir un programa que debe ejecutarse en el metal desnudo. Ese tipo de programa hace algo útil por sí mismo.

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

Si realmente quiere aprender cómo funciona, encuentre los libros Xinu de Doug Comer y el libro de sistema operativo más reciente de Andy Tannenbaum en Minix .



Si es realmente curioso, lo dirigiría a Linux from Scratch como un buen lugar para aprender los pormenores completos de un sistema operativo y cómo encajan todas las piezas. Si esa es más información de la que está buscando, entonces este artículo de Wikipedia sobre sistemas operativos podría ser un buen 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 invocar un código específico. Por ejemplo, en una marca periódica, llame al código del planificador. Cuando obtengo algo de un dispositivo, llamo al código del controlador del dispositivo.

Ahora, ¿cómo un sistema operativo configura todo con el sistema? El hardware del pozo también tiene API. Están escritos con el programador de sistemas en mente.

He visto un montón de SO escuetos y este es realmente el núcleo absoluto. Hay muchos sistemas operativos internos integrados que eso es todo lo que hacen y nada más.

Las características adicionales, como requerir que las aplicaciones soliciten memoria al sistema operativo o que requieran privilegios especiales para ciertas acciones, o incluso procesos e hilos, son realmente opcionales, aunque se implementan en la mayoría de las arquitecturas de PC.


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 centrales pero tienen hasta una docena de pasantes en un momento dado, y aún tardaron dos años antes de que pudieran llegar al sistema operativo hasta el punto en que arrancaría y mostrar imágenes BMP (es la forma en que 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).


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

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

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



¿Pregunta cuántos bytes puede poner en el disco y aún ejecutar como un sistema operativo ? La respuesta depende de lo que esperas de tu sistema operativo, pero el SO más pequeño que conozco cabe en 1,7 megabytes. Es el disco de arranque raíz de Tom y es un sistema operativo muy bueno, aunque pequeño, con aplicaciones de "rescate" que caben en un disquete . En los días en que cada máquina tenía una disquetera 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 llevarse bien. Esto es similar a lo que proporciona el BIOS: sabe lo suficiente como para buscar una unidad de disco y leer información sobre 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 núcleo del sistema operativo. Luego vas a la universidad (conductores y otras aplicaciones). Por supuesto, este es el punto en el que puedes sufrir 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 sobre un sistema operativo.


No puedo creer que esto no se haya 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, OS Dev es un gran 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 / hobby. También es un gran recurso de aprendizaje, ya que hay muchas personas en el mismo barco que usted en OSDev que desean saber qué se incluye en un sistema operativo. ¡Es posible que también termines intentándolo tú mismo!


Otro sistema operativo realmente pequeño que cabe en un disco es QNX (cuando lo revisé por última vez, todo el sistema operativo, con interfaz GUI, navegador web, acceso a disco y un servidor web integrado, caben en una unidad de disquete) .

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


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


En esencia, el sistema operativo es extremadamente simple. Aquí está la guía para principiantes de LO QUE el sistema operativo exitoso tiene que hacer: 1. Administre la CPU usando el programador que decide qué proceso (instancia de ejecución del programa) va a programarse. 2. Administre la memoria para decidir qué procesos usar para almacenar instrucciones (código) y datos (variables). 3. Administre las interfaces de E / S, como unidades de disco, alarmas, teclado, mouse. Ahora, los tres requisitos anteriores dan lugar a la necesidad de procesos para comunicarse (¡y no luchar!), Para interactuar con el mundo exterior, ayudar a las aplicaciones a hacer lo que quieren hacer. Para profundizar en CÓMO lo hace, lee el libro Dinosaur :)

Por lo tanto, puede hacer que el sistema operativo sea tan pequeño como lo desee, siempre y cuando maneje todos los recursos de hardware. Cuando se inicia, BIOS le dice a la CPU que comience a leer el gestor de arranque (que carga la primera función del sistema operativo que reside en una dirección fija en la memoria, algo así como main () del pequeño programa C). ¡Entonces esto crea funciones y procesos e hilos y comienza el Big Bang!


En primer lugar, leer y leer sobre lo que es OS; entonces, ¿cuáles son los usos / Tipos / naturaleza / objetivo / necesidades / de los diferentes sistemas operativos? Algunos de los enlaces son los siguientes; newbie disfrutará de estos enlaces:

Sistema operativo moderno : esto le da a Idea el sistema operativo general.

Inicio del sistema operativo : brinda información básica sobre lo que realmente se necesita para HACER SO, cómo podemos hacerlo y cómo uno puede modificar un código de SO de código abierto por sí mismo.

Wiki OS : da una idea de los diferentes Os utilizados en diferentes campos y usos (objetos / características del sistema operativo).

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

OS necesita una CPU y para volcar un código necesita un bootloader . El sistema operativo debe tener los objetivos para cumplir y esos objetivos deben definirse en un contenedor que se llama Kernel En el interior puede tener el scheduling time y los ISR''s (Depende del objetivo y sistema operativo que necesite).


Los sistemas operativos son un gran tema, lo mejor que puedo recomendar si quieres profundizar en la forma en que se diseñan y construyen los sistemas operativos es un buen libro:

Conceptos del sistema operativo


El desarrollo de 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 mencionar también la serie de videos "Escribe tu propio sistema operativo" en youtube, ya que soy yo quien lo hizo :-)

Consulte https://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M.



Un sistema operativo es un programa, al igual que cualquier otra aplicación que escriba. El objetivo principal de este programa es que le permite ejecutar otros programas. Los sistemas operativos modernos aprovechan el hardware moderno para garantizar que los programas no choquen 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