c++ - programacion - ¿Qué hace realmente un sistema operativo?
manual de programacion android pdf (11)
¿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
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. Puede llamarlo "Programa de control maestro" :)
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 alto nivel, a menudo estandarizada en varios sistemas operativos como POSIX para todos los sabores de Unix.
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. AC / 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 específico, el código C / C ++ suele ser portable, ya que si tiene un compilador para un sistema operativo, puede compilarlo y se ejecutará de esa manera. 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.
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 del sistema, sino también una interfaz de usuario completa:
la combinación de kernel, controladores de dispositivo y servicios de sistema que brindan protección de memoria, tareas que no pueden interferir con la memoria de los demás, y subprocesos que son unidades de ejecución dentro de un proceso, así como formas de conversación entre hilos y tareas otros y para acceder a 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 del 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 (¿recuerdas "C:> _"?) o tan complejo como el Windows Shell, incluyendo su panel de control, etc. .
A veces, una "distribución de Linux" contiene mucho más que un sistema operativo, pero se conoce informalmente por un solo nombre (como Ubuntu) y, por lo tanto, la línea entre el sistema operativo (el kernel de Linux y las bibliotecas estándar tal vez) y el las aplicaciones que simplemente se envían con ese sistema operativo (los entornos Gnome y KDE en Linux) son bastante grises.
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.
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 implementación independiente tiene un conjunto de encabezados definido por la implementación. Este conjunto debe incluir al menos los siguientes encabezados, 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 del encabezado suministrada declarará al menos las funciones abort (), atexit () y exit () (18.3).
Estos encabezados definen constantes o brindan 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
.
No existe una definición "clara" de cuáles son las responsabilidades de un sistema operativo. Podría incluir lo siguiente:
- Gestión de la memoria
- Dispositivos y controladores
- Sistema (s) de archivos
- Procesos e hilos
- Llamadas al sistema
En pocas palabras, OS es un programa que permite al usuario controlar el hardware de la computadora de una manera relativamente simple
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 .
Un sistema operativo es solo 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 se trata de 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 de ellos 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.
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) fuera 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 recibe la memoria, el dibujo de video y todas esas cosas buenas.
Por ejemplo, al hacer una GUI, en lugar 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 demás, encontrar una forma de interactuar con el hardware y luego exponer esa interfaz a tus usuarios y sus programas.
Entonces, esencialmente, un sistema operativo 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.
Un sistema operativo, más específicamente su kernel, se desarrolla en un lenguaje como C. Y está compilado 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 se ejecuta primero y puede configurar un entorno de este tipo en el que controle y restrinja completamente todo lo que inicie. 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 podrían ejecutarse en cualquier otro procesador de este tipo.
Algunas características clave que proporciona cualquier sistema operativo convencional:
- Programador de CPU: cargará un proceso, lo dejará funcionar durante un tiempo muy limitado antes de detenerlo, recuperará el control y permitirá que se ejecute algo más (ya sea una tarea del kernel u otro proceso, por lo general las tareas del núcleo tienen prioridad )
- Gestión de memoria: cualquier aplicación que ejecute no tiene direcciones de memoria exactas, ya que es probable que cambie. 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. (una vez más, está abstrayendo el hardware como se menciona a menudo)
- Sistemas de archivos: varios tipos
- Recursos: cualquier tipo de dispositivo se tratará 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 a través de roles. Es muy importante que cada proceso se desarrolle dentro de estrictas restricciones. Esta es otra abstracción que proporciona el sistema operativo.
seguro, http://en.wikipedia.org/wiki/Operating_system
Un sistema operativo es el software en una computadora que administra la forma en que los diferentes programas usan su hardware y regula las formas en que un usuario controla la computadora. 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.