2012-10-10 32 views
20

Cuando se compila un programa, se convierte en código de máquina que puede ser "entendido" por la máquina. ¿Cómo interactúa este código de máquina con el sistema operativo para hacer cosas como obtener información del teclado? Para mí, parece que el código de la máquina debe ejecutarse a un nivel inferior al del sistema operativo y, por lo tanto, no puedo entender cómo el SO puede actuar como intermediario entre la aplicación compilada y el hardware.¿Cómo interactúa un programa compilado con el sistema operativo?

PD: Me acaba de comenzar la programación C++ y estoy tratando de entender cómo cin y cout trabajo

+1

La aplicación compilada simplemente hace llamadas de función a archivos DLL (el sistema operativo, como kernel32.dll en Windows) que contienen funciones de otro código de máquina. Ese otro código máquina está escrito específicamente para trabajar con el hardware, por lo que no es necesario. –

+1

Ligeramente tangencial y no es realmente una respuesta a su pregunta, pero tal vez si está interesado en los límites entre el lenguaje y el sistema operativo, esto le dará un poco de temor/miedo/disgusto en algunos de los muchos pasos en el proceso que preguntarse acerca de ...: -/http://stackoverflow.com/a/2444508/211160 – HostileFork

Respuesta

23

Ésta es una pregunta muy buena (mejor que sabes), y no hay mucho que aprender . MUCHO.

Trataré de hacerlo corto. El sistema operativo actúa como un nivel de abstracción entre el software y el hardware:

Software 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
Operating System 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
    Hardware 

El sistema operativo se comunica con el hardware a través de programas llamados conductores (término ampliamente usado), y el sistema operativo se comunica con el software a través de procedimientos llamados sistema llama al (término no tan ampliamente utilizado).

Básicamente, cuando realiza una llamada al sistema, está saliendo de su programa e ingresando el código del sistema operativo. Las llamadas al sistema son la única forma en que los programadores pueden comunicarse con los recursos.


Ahora me detiene allí, sino que también dijo:

Para mí, parece que el código de la máquina debe funcionar a un nivel más bajo que el sistema operativo y, por lo tanto, no puedo Entiendo cómo el OS puede actuar como intermediario entre la aplicación compilada y el hardware .

Esto es complicado, pero simple una vez que comprenda algunos conceptos básicos.

En primer lugar, todo el código es solo código de máquina que se ejecuta en la CPU. Ningún código es más alto o más bajo que otro código (con la excepción de algunos comandos que solo se pueden ejecutar en un modo de kernel privilegiado). Entonces, la pregunta es, ¿cómo puede el sistema operativo tener el control a pesar de que está renunciando al control de la CPU para el usuario?

Cuando el código se ejecuta en una CPU, existe un concepto llamado interrupción. Esta es una señal enviada a la CPU que hace que el código que se está ejecutando se detenga y se cambie con otra parte del código, llamada controlador de interrupción.

Los ejemplos de interrupciones incluyen el teclado, el mouse y, lo más importante, el reloj.

La interrupción del reloj se produce de forma periódica ocasiona que el controlador de interrupción de reloj del sistema operativo se ejecute. Dentro de este controlador de interrupción de reloj está el código del sistema operativo que examina qué código se está ejecutando actualmente determina qué código debe ejecutarse a continuación. Esto puede ser más código del sistema operativo o más código de usuario.

Debido a que el reloj es siempre de relojería, y porque el sistema operativo siempre obtiene esta oportunidad periódica para ejecutarse en la CPU, es capaz de orquestar todo dentro del equipo, a pesar de que se ejecuta utilizando el mismo conjunto de Comandos de CPU como cualquier programa normal.

+1

Excelente trabajo para explicarlo de una manera muy simple. –

+2

la CPU también puede ejecutarse en múltiples modos (kernel y usuario), con el código del sistema operativo ejecutándose en el modo kernel de mayor privilegio. – OrangeDog

+0

Gracias ... esa fue una muy buena respuesta. Para que quede claro, ¿sería correcto decir que una llamada al sistema es como una interrupción que detiene la ejecución del código de la aplicación y que los switches están fuera (es decir, inicia la ejecución de) el código del sistema operativo? – mahela007

5

El sistema operativo proporciona system calls que los programas puedan llamar para obtener acceso a los servicios de nivel inferior.

Tenga en cuenta que las llamadas al sistema son diferentes de la función system() que probablemente haya utilizado para ejecutar programas externos.

llamadas de sistema se utilizan para hacer cosas como acceder a archivos, comunicarse a través de la red, solicitar la pila de memoria, etc.

Cuestiones relacionadas