utilizados tipos son sistemas sistema sirve que para operativos operativo mas los las funciones cuales clasificacion caracteristicas operating-system

operating system - tipos - ¿Qué conceptos del sistema operativo debería tener en cuenta cada programador?



sistema operativo windows (8)

Estoy compilando varias listas de competencias que los programadores autodidactas deben tener.

Entre todos los temas, los Sistemas Operativos son los más complicados, porque crear incluso un sistema operativo de juguete es una tarea no trivial. Sin embargo, al mismo tiempo, un desarrollador de aplicaciones (que puede no haber aprendido formalmente CS) debe al menos conocer y, con suerte, debería haber implementado algunos conceptos clave para apreciar cómo funciona un sistema operativo y para ser un mejor desarrollador.

Tengo algunas preguntas específicas:

  • ¿Qué conceptos clave de los sistemas operativos son importantes para que un programador autodidacta lo entienda para que puedan ser mejores desarrolladores de software (aunque trabajen en el desarrollo regular de aplicaciones)?
  • ¿Es remotamente posible aprender un tema así en piezas prácticas de tamaño byte? (Incluso un tema como la construcción del compilador puede aprenderse de manera práctica, con un nivel de complejidad bastante bajo)

Bueno, eso depende de la necesidad del desarrollador como:

Punto.

Las aplicaciones como los navegadores web y las herramientas de correo electrónico desempeñan un papel cada vez más importante en los sistemas informáticos de escritorio. Para cumplir este rol, deben incorporarse como parte del sistema operativo. Al hacerlo, pueden proporcionar un mejor rendimiento y una mejor integración con el resto del sistema. Además, estas aplicaciones importantes pueden tener la misma apariencia que el software del sistema operativo.

Contrapunto.

La función fundamental del sistema operativo es gestionar los recursos del sistema, como la CPU, la memoria, los dispositivos de E / S, etc. Además, su función es ejecutar aplicaciones de software como navegadores web y aplicaciones de correo electrónico. Al incorporar tales aplicaciones en el sistema operativo, cargamos el sistema operativo con funcionalidad adicional. Tal carga puede resultar en que el sistema operativo realice un trabajo menos satisfactorio en la administración de los recursos del sistema. Además, aumentamos el tamaño del sistema operativo, lo que aumenta la probabilidad de fallas del sistema y violaciones de seguridad.

También hay muchos otros puntos importantes que uno debe entender para obtener un mejor control del Sistema Operativo como Multithreading, Multitarea, Memoria Virtual, Paginación de Demanda, Administración de Memoria, Administración de Procesadores, y más.


Cada diseñador de sistema operativo debe comprender los conceptos detrás de Multics . Una de las ideas más brillantes es la noción de una vasta memoria virtual dividida en segmentos legibles y editables con protecciones completas y soporte multiprocesador para arrancar; con punteros de 64 bits, tenemos suficientes bits para abordar todo en el planeta directamente. Estas ideas son de la década de 1960 aunque atemporal en mi humilde opinión.

La aparente pérdida de tal conocimiento nos permitió a los "Eunucos" ahora instanciados como Unix luego Linux y un diseño igualmente pobre de Microsoft, los cuales organizan el mundo como un espacio de proceso plano y archivos. Aquellos que no conocen la historia están condenados a hacer algo más tonto.

Haga todo lo posible para obtener una copia del libro de Organick sobre Multics, y léelo , de principio a fin. (Elliott I. Organick, The Multics System: Un examen de su estructura).

El sitio de wikipedia tiene buena información; Los papeles de Corbato son geniales.


Creo que depende del tipo de aplicación que esté desarrollando y de la plataforma de sistema operativo para la que esté desarrollando. Por ejemplo, si está desarrollando un sitio web, no necesita saber demasiado sobre el sistema operativo. En este ejemplo, necesita saber más acerca de su servidor web. Hay diferentes cosas que necesita saber cuando trabaja en Windows, Linux o Android o algún sistema integrado o, a veces, no necesita saber más de lo que proporciona su API. En general, siempre es bueno que un desarrollador o persona de CS sepa lo siguiente.

  1. Lo que se encuentra en la responsabilidad de la aplicación, la cadena de herramientas y luego el sistema operativo.
  2. Comunicación entre procesos y diferentes mecanismos de IPC que proporcionan las llamadas al sistema operativo.

OS es un tema bastante interesante, pero en su mayoría consiste en teoría, pero esta teoría entra en acción cuando trabajas en sistemas integrados. En promedio, para las aplicaciones de escritorio, no se ve dónde encaja toda esa teoría.


Ok, conceptos del sistema operativo que un buen programador debería conocer. hablando practicamente. A menos que esté preocupado por el rendimiento. Si está escribiendo en un idioma cruzado. Ninguna.

Si te importa el rendimiento.

  1. El costo de las transiciones usuario / sistema
  2. Cómo maneja el sistema el bloqueo / hilos / interbloqueos y cómo usarlos mejor.
  3. Memoria virtual / Megafonía / paliza y el costo de la misma.
  4. Asignación de memoria, cómo lo hace el sistema operativo y cómo debe aprovechar eso para cuando A, utilice el asignador de sistema operativo (consulte 1) y cuándo asignar desde el sistema operativo y su asignación secundaria.
  5. Como se dijo anteriormente, creación del proceso / y comunicación entre procesos.
  6. Cómo el SO escribe / lee en el disco de forma predeterminada para leer / escribir de manera óptima (vea por qué las bases de datos usan B-trees)
  7. Bonificación, sub-os, qué tamaño de caché y líneas de caché pueden significar para usted en términos de rendimiento.

pero en general se reduciría a lo que el sistema operativo le proporciona que no es genérico, y qué y por qué cuesta, y qué costará demasiado (demasiada CPU, demasiado uso de disco, demasiado io, demasiada red ect).


Simplemente pon:

Hilos y procesos.

Espacio / subprocesos del kernel vs espacio de usuario / subprocesos (probablemente algunos programas de nivel kernel)

Seguido de los conceptos fundamentales de los puntos muertos del proceso.

Y a partir de entonces supervisa vs semáforos vs mutex

Cómo funciona la memoria y habla sobre procesos y dispositivos.


Sugiero leer Andrew S. Tanenbaum ( http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum ) libro sobre sistemas operativos modernos (ISBN 978-0-13-600663-3) ya que todo está allí.

Sin embargo, desde el índice del libro podemos identificar los temas clave mínimos:

  • Procesos
  • Gestión de la memoria
  • Sistemas de archivos
  • De entrada y salida

Y la forma más fácil de comenzar a jugar con este tema será descargar MINIX :

http://www.minix3.org/

y estudia el código. Las versiones anteriores de este sistema operativo pueden ser más fáciles de entender.

Otro recurso útil es Mike Saunders Cómo escribir un sistema operativo simple que le muestra cómo escribir y construir su primer sistema operativo en el lenguaje de ensamblaje x86:

http://mikeos.sourceforge.net/write-your-own-os.html


Todos los programadores y científicos informáticos autodidactas deben conocer el modelo OSI y conocerlo bien. Ayuda a identificar dónde podría estar el problema y con quién contactar si hay problemas. El alcance se define aquí y muchos problemas podrían filtrarse aquí. Esto se debe a que hay demasiado en un sistema operativo para simplemente aprenderlo todo. Como desarrollador web, generalmente trabajo en el nivel de aplicación cuando un problema sale de este ámbito, sé cuándo necesito ayuda. Además, muchas personas simplemente no se preocupan por ciertos componentes que desean crear lo más rápido posible. El modelo OSI es un lugar donde alguien puede encontrar el punto caliente de su computadora. http://en.wikipedia.org/wiki/OSI_model


Comenzaría con Lo que todo programador debería saber sobre la memoria . (No es completamente OS, pero todo es información útil. Y el capítulo 4 cubre la memoria virtual, que es lo primero que se le ocurrió al leer su pregunta).

Para aprender el resto por partes, elija cualquier llamada al sistema y aprenda exactamente lo que hace. Esto a menudo significa aprender sobre los objetos kernel que manipula.

Por supuesto, los detalles diferirán del sistema operativo al sistema operativo ... Pero también lo hace la respuesta a su pregunta.