Llamadas_al_sistema - Soluciones Tics

Anuncio
LLAMADAS AL SISTEMA
SISTEMAS OPERATIVOS
26/05/2013
Ing. Eduardo Cruz Romero
eduar14_cr@hotmail.com
cilred_tlapa@hotmail.com
Ing. Eduardo Cruz Romero
www.cilred.com
LLAMADAS AL SISTEMA
Las llamadas al sistema proporcionan la interfaz entre un proceso y el sistema
operativo,
estas
llamadas
están
disponibles
como
instrucciones
en
lenguaje
ensamblador, y comúnmente se incluyen en los manuales empleados por los
programadores de estos lenguajes, ciertos sistemas permiten que las llamadas al
sistema se haga directamente desde un programa en lenguaje de alto nivel, en cuyo
caso se asemejan a llamadas a subrutinas o a funciones predefinidas, pueden generar
una llamada a una rutina especial en tiempo de ejecución, la cual hace la llamada al
sistema, o este producirse directo en línea.
Las llamadas al sistema se puede agrupar de manera general en cinco categorías
principales: control de procesos, manipulación de archivos, manipulación de
dispositivos, mantenimiento información y comunicación.
Control de procesos:
Terminar, abortar
Cargar, ejecutar
Crear proceso, terminar proceso
Obtener atributos del proceso, establecer atributos del proceso
Esperar tiempo
Esperar evento, señalar evento
Asignar y liberar memoria
Administración de archivos:
Crear archivos, borrar archivo
Abrir, cerrar
Leer, escribir, reposicionar
Obtener atributos de archivo, establecer atributos de archivo
+ Documentos libres para descargar http://www.cilred.com/documentos
www.cilred.com
Ing. Eduardo Cruz Romero
Administración de dispositivos:
Solicitar dispositivos, liberar dispositivo
Leer, escribir, reposicionar
Obtener atributos de dispositivo, establecer atributos de dispositivos
Conectar o desconectar dispositivo lógicamente
Mantenimiento de información:
Obtener hora o fecha, establecer hora o fecha
Obtener datos del sistema, establecer datos del sistema
Obtener atributos de proceso, archivos o dispositivo
Establecer atributos de proceso, archivo o dispositivos
Comunicaciones:
Crear, borrar conexión de comunicación
Enviar, recibir mensajes
Transferir información de estado
Conectar o desconectar dispositivos remotos
¿Qué es una llamada al sistema?
Una llamada al sistema es cualquier método que sirva para invocar un proceso
para solicitar cierto servicio al sistema operativo.
Entre ellos tenemos los más comunes:
Time: que permite obtener la fecha y hora del sistema.
Write: que se emplea para escribir un dato en un cierto dispositivo de salida,
tales como una pantalla o un disco magnético.
Read: que es usada para leer de un dispositivo de entrada, tales como un teclado
o un disco magnético.
+ Documentos libres para descargar http://www.cilred.com/documentos
www.cilred.com
Ing. Eduardo Cruz Romero
Open: que es usada para obtener un descriptor de un fichero del sistema, ese
fichero suele pasarse a write.
¿Quiénes pueden realizar una llamada al sistema?
Todos, ya que todos los sistemas operativos proporcionan métodos o funciones
que los programas pueden emplear para acceder a dichos recursos.
Llamadas al sistema en Windows
En el mundo Windows en general, las llamadas al sistema se denominan API
(Windows application programming interface), es un conjunto de funciones residentes
en bibliotecas (generalmente dinámicas, también llamadas DLL por sus siglas en inglés,
término usado para referirse a éstas en Windows) que permiten que una aplicación
corra bajo un determinado sistema operativo. Por ejemplo, Windows proporciona una
función denominada FlashWindowEx que permite que la barra de título de una
aplicación alterne entre un sombreado claro y otro oscuro.
Las funciones API se dividen en varias categorías:
Depuración y manejo de errores
E/S de dispositivos
Varias DLL, procesos e hilos
Comunicación entre procesos
Manejo de la memoria
Monitoreo del desempeño
Manejo de energía
Almacenamiento
Información del sistema
GDI (interfaz para dispositivos gráficos) de Windows (tales como impresoras)
Interfaz de usuario de Windows
+ Documentos libres para descargar http://www.cilred.com/documentos
www.cilred.com
Ing. Eduardo Cruz Romero
La ventaja de utilizar las API de Windows en el código es que pueden ahorrar tiempo
porque contienen numerosas funciones útiles ya escritas y listas para utilizar.
La desventaja es que puede resultar difícil trabajar con las API de Windows y pueden
ser implacables cuando las cosas van mal.
Llamadas al sistema en GNU/Linux
Una llamada al sistema está implementada en el núcleo de Linux. Cuando un
programa llama a una función del sistema, los argumentos son empaquetados y
manejados por el núcleo, el cual toma el control de la ejecución hasta que la llamada se
completa. Una llamada al sistema no es una llamada a una función ordinaria, y se
requiere un procedimiento especial para transferir el control al núcleo. Sin embargo la
librería GNU C encapsula las llamadas al sistema con funciones de manera que pueden
ser llamadas de manera sencilla y se confunden con llamadas a funciones ordinarias.
Las funciones de entrada/salida como open y read son ejemplos de llamadas al sistema
en Linux. Linux tiene más de 300 diferentes llamadas al sistema. Un listado de las
llamadas al sistema de tu versión del kernel de linux se puede encontrar en
/usr/include/asm/unistd.h actualmente este fichero incluye a otros dos uno para
arquitecturas de 32 bits y otro para arquitecturas de 64 bits (unistd_32.h y unistd_64.h
respectivamente)
Tutorial: llamar a las API de Windows
http://msdn.microsoft.com/es-es/library/172wfck9(v=vs.80).aspx
Llamadas admitidas al sistema
http://technet.microsoft.com/es-es/library/cc754234.aspx
+ Documentos libres para descargar http://www.cilred.com/documentos
Ing. Eduardo Cruz Romero
www.cilred.com
El dispatcher
El dispatcher, que forma parte del SO, se ejecuta cuando se invoca una llamada al
sistema. Cuando un proceso hace una llamada al sistema, el dispatcher, se encarga de
invocar la llamada que el proceso ha solicitado. Tiene un comportamiento sincronizado,
cuando recibe una llamada y se la pasa al sistema operativo hasta que no recibe
respuesta no atiende otra llamada. En el caso de x86, el dispatcher consulta el registro
eax e invoca a la llamada al sistema identificada con dicha numeración.
Ejemplos de llamadas al sistema:
C:
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
/* Función strlen() */
/* Modos de apertura y función open()*/
/* Funciones write() y close() */
main ( int argc, char* argv[] )
{
/* Cadena que se va a escribir */
const char* cadena = "Hola, mundo";
/* Creación y apertura del fichero */
int fichero = open ("mi_fichero", O_CREAT|O_WRONLY,0644);
/* Comprobación de errores */
if (fichero==-1)
{
perror("Error al abrir fichero:");
exit(1);
}
/* Escritura de la cadena */
write(fichero, cadena, strlen(cadena));
close(fichero);
return 0;
}
Java:
/*
* PruebaRuntime.java
*
* Created on 17 de abril de 2005, 15:43
*/
package chuidiang.ejemplos.runtime;
import java.io.*;
/**
* Ejemplo simple de arranque de un programa externo desde java.
* @author Chuidiang
+ Documentos libres para descargar http://www.cilred.com/documentos
www.cilred.com
Ing. Eduardo Cruz Romero
*/
public class PruebaRuntime {
/** Creates a new instance of PruebaRuntime */
public PruebaRuntime()
{
try
{
// Se lanza el ejecutable.
Process p=Runtime.getRuntime().exec ("cmd /c dir");
// Se obtiene el stream de salida del programa
InputStream is = p.getInputStream();
/* Se prepara un bufferedReader para poder leer la salida más comodamente. */
BufferedReader br = new BufferedReader (new InputStreamReader (is));
// Se lee la primera linea
String aux = br.readLine();
// Mientras se haya leido alguna linea
while (aux!=null)
{
// Se escribe la linea en pantalla
System.out.println (aux);
// y se lee la siguiente.
aux = br.readLine();
}
}
catch (Exception e)
{
// Excepciones si hay algún problema al arrancar el ejecutable o al leer su salida.*/
e.printStackTrace();
}
}
/**
* Crea la clase principal que ejecuta el comando dir y escribe en pantalla
* lo que devuelve dicho comando.
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new PruebaRuntime();
}
}
+ Documentos libres para descargar http://www.cilred.com/documentos
www.cilred.com
Ing. Eduardo Cruz Romero
Visual Basic:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' Stores the return value.
Dim RetVal As Integer
RetVal = MBox(0, "Declare DLL Test", "Windows API MessageBox", _
MB_ICONQUESTION Or MB_YESNO)
' Check the return value.
If RetVal = IDYES Then
MsgBox("You chose Yes")
Else
MsgBox("You chose No")
End If
End Sub
Ensamblador:
cr equ 13
lf equ 10
dades SEGMENT PARA PUBLIC 'data'
msg1 DB 'Hola Mundo',cr,lf,'$'
dades ENDS
codi SEGMENT PARA PUBLIC 'code'
MAIN PROC FAR
ASSUME cs:codi,DS:dades,SS:pila,ES:dades
MOV AX,dades
MOV DS,AX
MOV ES,AX
MOV AH,09H
LEA DX,msg1
int 21H
MOV AX,4C00H
int 21h
MAIN ENDP
codi ENDS
pila SEGMENT PARA STACK 'stack'
DB 128 DUP(0)
pila ends
END MAIN
PHP:
<?php
// imprime el nombre de usuario que tiene control del proceso php/httpd activo
// (en un sistema con el ejecutable "whoami" disponible en la ruta)
echo exec('whoami');
?>
+ Documentos libres para descargar http://www.cilred.com/documentos
www.cilred.com
Ing. Eduardo Cruz Romero
Fuentes Originales:
http://1984.lsi.us.es/wiki-ssoo/index.php/Llamadas_al_sistema
http://systope.blogspot.mx/2012/06/llamadas-al-sistema-en-windows.html
http://msdn.microsoft.com/es-es/library/172wfck9(v=vs.80).aspx
http://technet.microsoft.com/es-es/library/cc754234.aspx
http://www.novanebula.net/blog/archives/117-Llamadas-al-sistema-linux-linux-system-calls.html
http://labsopa.dis.ulpgc.es/prog_c/FICHER.HTM
http://www.chuidiang.com/java/ejemplos/Runtime/runtime.php
http://wiki.inf.utfsm.cl/index.php?title=Tipos_de_llamadas_al_sistema_y_programas_de_sistema
http://php.net/manual/es/function.exec.php
Fundamentos de sistemas operativos. A. Silberschatz, P.B. Galvin, G. Gagne, McGraw-Hill, 2006.
+ Documentos libres para descargar http://www.cilred.com/documentos
Descargar