2010-05-05 22 views
13

¿Qué hace exactamente un sistema operativo? Sé que los sistemas operativos se pueden programar, por ejemplo, en C++, pero anteriormente creía que los programas C++ deben ejecutarse bajo un sistema operativo. ¿Alguien puede explicar y dar enlaces? Gracias de antemano, ell¿Qué es lo que realmente hace un sistema operativo?

+1

Recomiendo este libro si desea obtener una buena visión general de las cuestiones generales de la clave http://williamstallings.com/OS/OS6e.html –

Respuesta

13

Un sistema operativo es una capa entre su código (código de usuario) y el hardware.

El sistema operativo es responsable de administrar los componentes físicos y proporcionarle una API simple (con suerte) de la cual construir. Se encarga de qué programas se ejecutan, cuándo, quién va primero, cómo se maneja la memoria, quién obtiene la memoria, el dibujo de video y todas esas cosas buenas.

Por ejemplo, al hacer una GUI, en vez de enviar cada bit al monitor, le dice al sistema operativo (o administrador de ventanas) que haga una ventana. Luego dígale que coloque un botón en su ventana. Luego, el sistema operativo maneja el dibujo de la ventana, mueve la ventana, mueve el botón (pero lo mantiene donde debería estar en la ventana).

Ahora, puede programar un sistema operativo en C++, pero no es fácil. Tienes que desarrollar tu kernel y otras cosas, encontrar una forma de interactuar con el hardware y luego exponer esa interfaz a tus usuarios y sus programas.

Por lo tanto, esencialmente, un SO maneja las interfaces de software a hardware y administra sus recursos físicos. Los programas C++ pueden ejecutarse en un sistema operativo o, con suficiente trabajo, ejecutarse solos o incluso ser un sistema operativo.

+1

Los sistemas operativos C/C++ son fáciles de configurar. Pero es necesario dejar caer para ensamblar para funciones específicas de plataformas pequeñas. Además, ¡no te olvides de enhebrar y realizar múltiples tareas! – Earlz

+8

@Earlz: Al haber escrito un programador de sistema operativo en el pasado, puedo decir con confianza que escribir un planificador para manejar el subprocesamiento y la multitarea es significativamente más fácil (¡y más divertido!) Que escribir una aplicación de subprocesos múltiples. No diría que escribir un sistema operativo en cualquier idioma es "fácil", aunque ... –

+4

@BlueRaja sí lo es. ¡El trabajo de bajo nivel es el mejor! – Earlz

3

seguro, http://en.wikipedia.org/wiki/Operating_system

Un sistema operativo es el software en un equipo que gestiona la forma en que diferentes programas utilizan su hardware, y regula las formas en que un usuario controla el ordenador. Los sistemas operativos se encuentran en casi cualquier dispositivo que contenga una computadora con múltiples programas, desde teléfonos celulares y consolas de videojuegos hasta supercomputadores y servidores web. Algunos sistemas operativos modernos populares para computadoras personales incluyen Microsoft Windows, Mac OS X y Linux (ver también: lista de sistemas operativos, comparación de sistemas operativos).

Me refiero a la descripción de un sistema operativo, lo que hace cuándo y por qué va más allá de una respuesta en este sitio imho.

4

Un sistema operativo es realmente solo un programa que ejecuta otros programas y gestiona recursos de hardware para ellos.

Si realmente quieres adentrarte en el mundo interno, te recomiendo leer el libro Understanding the Linux Kernel.

1

Un sistema operativo es simplemente un software que es una interfaz entre su hardware y su software. Hace una abstracción de este hardware para que sea más fácil de usar. Por ejemplo, no tiene que leer el estado del teclado en sus programas para verificar si el usuario pulsa una tecla. Se podría pensar que es una gran cantidad de ladrillos unidos y apilados uno encima del otro, desde una vista muy precisa del hardware hasta una vista muy abstracta (desde bits, hasta ventanas o botones ... por ejemplo)

No tiene que programar un sistema operativo en un idioma específico, pero la mayoría están escritos en C por razones de eficiencia y conveniencia. Puede programar (sus propias aplicaciones) en cualquier idioma, siempre que tenga las bibliotecas correctas instaladas en el sistema operativo.

1

No existe una definición "clara" de cuáles son las responsabilidades de un sistema operativo.Podría incluir lo siguiente:

  • gestión de memoria
  • dispositivos & conductores
  • sistema de archivo (s)
  • procesos y subprocesos
  • Las llamadas al sistema

En un sistema operativo pocas palabras es un programa que permite al usuario controlar el hardware de la computadora de una manera relativamente simple

+0

HAY una definición clara de cuáles son las responsabilidades de un sistema operativo: proporciona programas con acceso al hardware subyacente de la máquina. Sin embargo, no existe una definición clara de la cantidad de virtualización/multiplexación que debe proporcionar el sistema operativo. – berkus

1

Desde una perspectiva de programación, los sistemas operativos proporcionan principalmente abstracción. Abstracción de los detalles de la CPU y la gestión de la memoria, abstracción de los dispositivos de hardware, abstracción de los detalles de las pilas de protocolos de red.

El sistema operativo proporciona una interfaz de programación de nivel superior, a menudo estandarizada en varios sistemas operativos, como POSIX hace para todos los sabores de Unix.

1

Después de leer la pregunta, veo lo que estás tratando de preguntar. Lo que estás preguntando es si los programas C/C++ requieren un SO para ejecutarse. La respuesta es no. Un C/C++ es un compilador que traduce el lenguaje humano al lenguaje de la máquina. No requiere un sistema operativo específico. Sin embargo, si compila, por ejemplo, Visual Studio, el código de máquina ejecutable resultante no se puede ejecutar en nada que no sea Windows.

En concreto, los códigos C/C++ son usualmente portátiles ya que si tiene un compilador para un sistema operativo, puede compilarlo y se ejecutará de esta forma. Sin embargo, a veces tiene un código específico de la máquina (o código específico del sistema operativo), como una aplicación de Windows que utiliza interfaces basadas en Windows que no pueden transferirse a otro sistema operativo. Algunos ejemplos en los que puedo pensar son como que las operaciones de directorio generalmente no son portátiles y generalmente dependen del sistema operativo en el que se encuentre. Sin embargo, la mayoría de las operaciones de archivos, como fopen, son portátiles.

Un sistema operativo es un poco diferente. Requiere un tipo diferente de compilador y requiere una forma diferente de cargarlo. La mayoría de los SO están hechos en C/C++, luego es compilado por un compilador y luego distribuido. Por ejemplo, Microsoft escribió Windows 95 en C/C++, lo expuso a un compilador, luego quemó el código ejecutable resultante en un CD-ROM, luego se lo vendió, luego puso el disco y copiará el código ejecutable resultante. en su máquina y lo usa.

No te dan el código fuente, entonces tu computadora lo compila; usualmente le dan el ejecutable resultante.

+2

Escribir un sistema operativo no * requiere * un "tipo diferente de compilador". Al menos, no más allá del compilador que necesita dar salida a un formato diferente "ejecutable" (es deciruno que el gestor de arranque puede iniciar o que el hardware puede iniciar directamente si el sistema objetivo hace las cosas de esa manera). Gcc construye linux y los programas de espacio de usuario. – dmckee

+0

@dmckee: hay más, diferencias sutiles. Por ejemplo, la generación de código para las características de C++, como el manejo de excepciones, puede diferir. Y no creo que G ++ (parte de la Colección de compiladores Gnu) pueda usarse para construir Linux; necesitas su compilador de C. Eso muestra incluso dentro de GCC hay diferentes tipos de compiladores. – MSalters

+0

@MSalters: esta respuesta es engañosa si no se corrige. El compilador GNU c construye el kernel de Linux, la mayoría de los programas de espacio de usuario * y * el gestor de arranque para la mayoría de las distribuciones de Linux. El hecho de que la colección del compilador de GNU contenga más de un compilador no agrega nada a la discusión. De hecho, si se remonta a los días de gcc 1.34, solo había un compilador (para c), y gcc * still * construyó el kernel y los programas de espacio de usuario. – dmckee

2

Un sistema operativo, más específicamente su kernel, se desarrolla en un lenguaje como C. Y se compila en código máquina al igual que cualquier otro programa. La principal diferencia entre un sistema operativo convencional y algún código que escriba en C es que el código C se ejecutará en tiempo compartido a través del Programador de CPU del sistema operativo. Tenga en cuenta también que el sistema operativo ejecuta primero, y puede configurar un entorno en el que controla y restringe completamente todo lo que se inicia. También tenga en cuenta que las llamadas al sistema son la forma en que un proceso se puede comunicar con el sistema operativo, todo es simplemente instrucciones típicas de la máquina que pueden ejecutarse en cualquier otro procesador de este tipo.

Algunas características clave que cualquier sistema operativo generales ofrece:

    Programador
  • CPU - Esto cargará un proceso, permitir que se ejecute de una cantidad muy limitada de tiempo antes de patear de nuevo fuera, recuperar el control y permitiendo algo más para ejecutar (ya sea una tarea del kernel u otro proceso, generalmente las tareas del kernel tienen prioridad)
  • Administración de memoria: cualquier aplicación que ejecute no tiene direcciones de memoria exactas, ya que esto es propenso a cambios. Todos los procesos se ejecutarán en la memoria virtual, y el sistema operativo traducirá la memoria virtual (por ejemplo, 0x41000 +) en una dirección física. (de nuevo, está abstrayendo el hardware como se menciona a menudo)
  • Sistemas de archivos - various kinds
  • Recursos - cualquier tipo de dispositivo tipo ser tratado como un recurso. Un proceso puede solicitar acceso a un recurso. (Por extraño que parezca, en la actualidad ningún sistema operativo convencional tiene un mecanismo para prevenir bloqueos muertos para los recursos.)
  • Seguridad - Esto se hace mediante roles. Es muy importante que cada proceso se desarrolle dentro de estrictas restricciones. Esta es otra abstracción que proporciona el sistema operativo.
6

En realidad, el estándar C++ en sí tiene algo que decir sobre este tema. §1.4/7:

Se definen dos tipos de implementaciones: alojado y autónomo. Para una implementación alojada, esta Norma Internacional define el conjunto de bibliotecas disponibles. Una implementación independiente es aquella en la que la ejecución puede tener lugar sin el beneficio de un sistema operativo, y tiene un conjunto de bibliotecas definido por la implementación que incluye ciertas bibliotecas de soporte de lenguaje (17.4.1.3).

Y en 17.4.1.3,

Una aplicación independiente tiene un conjunto definido por la implementación de las cabeceras. Este conjunto incluirá al menos las siguientes cabeceras, como se muestra en la Tabla 13:

Table 13—C++ Headers for Freestanding Implementations 
_______________________________________________ 
 Subclause Header(s) 
 18.1 Types <cstddef> 
 18.2 Implementation properties <limits> 
 18.3 Start and termination <cstdlib> 
 18.4 Dynamic memory management <new> 
 18.5 Type identification <typeinfo> 
 18.6 Exception handling <exception> 
 18.7 Other runtime support <cstdarg> 

La versión suministrada de la cabecera declararán al menos las funciones abortan(), atexit() y de salida () (18.3).

Estos encabezados definen constantes o proporcionan soporte básico al compilador. En la práctica, algunas características del lenguaje faltarán hasta que el sistema operativo complete alguna inicialización, por ejemplo new y catch.

1

Básicamente, un sistema operativo es el programa en el que se ejecutan todos los demás programas. Literalmente es el primer programa que su computadora comienza a funcionar cuando se inicia. Como tal, controla todo el hardware y actúa en el controlador de acceso para que otros programas accedan a ese hardware. También controla (o debería, al menos) todos los programas que se ejecutan en él, cuando comienzan, cómo se detienen y a qué recursos tienen acceso.Podría llamarlo "The Master Control Program" :)

1

El término "sistema operativo" cuando se aplica a una PC, normalmente se refiere a un moderno sistema operativo de "memoria protegida" que proporciona no solo un conjunto básico de servicios de sistema sino también un completo de interfaz de usuario:

  • la combinación de un núcleo, controladores de dispositivos, y el sistema de servicios que proporcionan protección de memoria, tareas que no pueden interferir con la memoria de cada uno, y los hilos que son unidades de ejecución dentro de un proceso , así como las formas en que los hilos y las tareas se comunican entre sí y para acceder a los recursos compartidos, como los sistemas de archivos que contienen archivos, en dispositivos de almacenamiento como el disco duro de su PC, son de hecho, el núcleo de el sistema operativo.

  • el "shell" en la parte superior de ese sistema operativo podría ser tan simple como el símbolo del sistema "command.com" en DOS (recuerde "C:> _"?) O tan complejo como el shell de Windows, incluyendo su panel de control, etc.

veces, una "distribución de Linux" contiene mucho más que un sistema operativo, pero se conoce informalmente para por un solo nombre (como Ubuntu) y por lo que la línea entre lo que el operativo el sistema es (el kernel de Linux y las bibliotecas estándar tal vez) y las aplicaciones que simplemente se envían con ese sistema operativo (los entornos Gnome y KDE en Linux) es bastante gris.

Una excelente manera de aprender qué es realmente un sistema operativo, es leer uno de los libros de Tannenbaum sobre Sistemas Operativos. Creo que muestra la implementación en detalle de su kernel "minix". Otro libro es "Linux Kernel Internals". Si puede manejar los detalles técnicos en este tipo de libro, entonces realmente puede entender qué es un "kernel" de sistema operativo, y luego comenzar a dar sentido a las capas alrededor de ese kernel.

No conozco un sistema operativo comercial o de código abierto que esté escrito principalmente en C++. Dicha programación a nivel de sistema generalmente se lleva a cabo en una mezcla de puro ANSI C y lenguaje ensamblador/máquina. Los bits de ensamblaje de bajo nivel a menudo están involucrados en tareas como el manejo de interrupciones, la inicialización de hardware y el arranque del sistema. Antes de tener un montón, una pila y un sistema de memoria virtual que funcione, no querrá usar objetos C++, o incluso ciertas características C como malloc. Sus recursos y su diseño deben estar limitados por los criterios de rendimiento, y cualquier tipo de sobrecarga adicional, incluso una sobrecarga semántica, debe ser deplorada.

Recientemente, Linus Torvalds insultó a C++ y describió en una lista de correo por qué nunca lo usaría para un kernel de Linux. Sin embargo, creo que C++ está incursionando en áreas que típicamente han sido refugios de "C pura". El equipo Gnu GCC, por ejemplo, está dispuesto a permitir C++ en la base del código GCC ahora, por fin.

Cuestiones relacionadas