- Introducción
- Application Programming Interface (API)
- Detalles técnicos
- API de Windows
- ¿Qué es el API Win32?
- API de Linux
- Conclusión
- Bibliografía
Introducción
En este trabajo vamos a estar presentando cierta información acerca del API (Interfaz de programación de aplicaciones) del sistema operativo Windows y el API del sistema operativo LINUX, estaremos viendo que son, como se utilizan y su funcionamiento básico en los sistemas operativos, como trabajan y cual es su utilidad.
Application Programming Interface (API)
(Interfaz de programación de aplicaciones)
¿Que son?
Interfaz de programación de aplicaciones o (API) es el conjunto de funciones y procedimientos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. Es un conjunto de funciones que facilitan el intercambio de mensajes o datos entre dos aplicaciones. Es una forma de que dos aplicaciones que trabajan al mismo tiempo –como podría ser un procesador de texto y una hoja de cálculo se comuniquen e intercambien datos. Son usadas generalmente en las "librerías".
Es una fuente de código basado en la especificación destinada a ser utilizada como una interfaz de componentes de software para comunicarse entre sí.Una API puede incluir especificaciones para las rutinas y estructuras de datos, las clases de objetos y variables.Una especificación de API puede tomar muchas formas, incluyendo una norma internacional, tales como POSIX la documentación o el vendedor como el Microsoft API de Windows, o las bibliotecas de un lenguaje de programación, por ejemplo, la Biblioteca de plantillas estándar de C + + o Java API.Una API difiere de una interfaz de aplicación binaria (ABI) en la que el primero es de código abierto basado mientras que el segundo es una interfaz binaria. Por ejemplo, es una API POSIX, mientras que la base estándar de Linux es un ABI.
Otras definiciones de API
En Internet, una API permite que un sitio Web brinde determinado servicio a otro, a través de llamadas a funciones documentadas y publicadas, facilitando de esta manera el "mash-up" o mezcla de servicios. Por ejemplo, hoy es posible que desde un blog personal se puedan publicar noticias del sitio de un famoso periódico, mezcladas con fotos que ya están alojadas en un sitio de fotografías, a través de llamadas a la API de estos dos servicios.
Una API detalla solamente la forma de llamar a cada función y la tarea que esta desempeña, sin importar cómo se lleva a cabo dicha tarea.
Detalles técnicos
Un API es un conjunto de reglas para escribir funciones o hacer llamados a subrutinas y acceder a otras funciones en una librería. Los programas que usan estas reglas o funciones en sus llamadas API pueden comunicarse con cualquiera que use dicha API.
Las API abren distintos tipos de diálogos con el proveedor para obtener o actualizar información en el mismo, entre ellos:
Acceso a bases de datos
Comunicación cliente/servidor
Comunicación peer-to-peer
Comunicación en tiempo real
Event-driven (orientada a eventos)
Store and forward
Procesamiento de transacciones
Una API puede combinar recuperación de errores, traducción de datos, seguridad, manejo de colas y nomenclatura con una interfase fácil de asimilar, que comprende acciones y comandos simples pero con muchas opciones.
Para invocar una API, el programa debe llamar a una función tipo "send", especificando parámetros para el nombre de destino, indicadores de datos y opciones de confirmación.
La API toma la información y hace que todo el trabajo específico de comunicación sea transparente para la aplicación. Hay cuatro tipos de APIs que posibilitan el intercambio de datos entre diferentes aplicaciones de software en plataformas individuales o distribuidas:
1) Remote Procedure Calls (RPCs) o Llamadas a Procedimientos Remotos: Con las RPCs, los programas pueden comunicarse a través de procedimientos (o tareas) que actúan en buffers compartidos de información.
2) Standard Query Language (SQL). Un lenguaje de acceso de datos sin procedimientos que permite el intercambio de datos entre aplicaciones, accediendo a bases de datos comunes.
3) Transferencia de archivos: Habilita el intercambio de datos enviando archivos formateados entre aplicaciones.
4) Envío de mensajes: Provee el intercambio de datos por comunicaciones de interprogramación directa, a través de pequeños mensajes formateados entre aplicaciones emparejadas.
Las APIs pueden desarrollarse para cualquier plataforma y sistema operativo o para todos estos sistemas al mismo tiempo. También desde hace unos años se vienen desarrollando como forma de acceder a servicios Web. En este sentido, las API más conocidas son las de:
Google Search
Flickr Del.icio.us
Amazon
Google Maps
API de Windows
Las API de Windows son bibliotecas de vínculos dinámicos (DLL) que forman parte del sistema operativo Windows. Se utilizan para realizar tareas cuando resulta difícil escribir procedimientos equivalentes.
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.
Las API de Windows representan una categoría especial de interoperabilidad. Las API de Windows no utilizan código administrado, no tienen bibliotecas de tipos integradas y utilizan tipos de datos que son diferentes a los que se utilizan en Visual Studio. Debido a estas diferencias y a que las API de Windows no son objetos COM, la interoperabilidad con las API de Windows y .NET Framework se lleva a cabo mediante la invocación de la plataforma o PInvoke. Invocación de la plataforma es un servicio que permite al código administrado llamar a funciones no administradas implementadas en archivos DLL. Para obtener más información, vea Consumir funciones DLL no administradas. Puede utilizar PInvoke en Visual Basic mediante la instrucción Declare o aplicando el atributo DllImport a un procedimiento vacío.
Las llamadas API de Windows constituían en el pasado una parte importante de la programación de Visual Basic, pero en Visual Basic 2005 pocas veces resultan necesarias. Siempre que sea posible, debe utilizar código administrado en .NET Framework para llevar a cabo tareas en lugar de utilizar llamadas API de Windows. Este tutorial proporciona información sobre aquellas situaciones en las que es necesario utilizar las API de Windows.
Llamadas a las Funciones del API de Windows
Un programador de aplicaciones Windows además de conocer entorno de trabajo de Windows debe conocer también su entorno de programación, conocido generalmente como interfaz de programación de aplicaciones de Windows ( Windows Application Programming Interface, abreviadamente Windows API ). La característica primaria de la API de Windows son las funciones y los mensajes internos/externos de Windows.
Las funciones Windows son el corazón de las aplicaciones Windows. Hay más de 600 funciones de Windows dispuestas para ser llamadas por cualquier lenguaje, como C o Visual Basic.
A través de estos mecanismos, podemos realizar gran cantidad de funciones que hasta el momento no teníamos ni idea que se podían realizar. La utilización de ésta serie de librerías que contienen las funciones de la API pueden solucionar gran cantidad de problemas en la programación, aunque también no debemos desestimar el gran poder destructivo de las mismas. La depuración de un programa es muy diferente si éste tiene incorporadas llamadas a APIs, ya que el resultado de las mismas en algunos casos puede llegar a ser incomprensible. Cuando se trabaja con éstas funciones siempre es recomendable tener a mano una buena guía o bien tener a mano alguien que sepa, para no encontrarnos con posibles problemas.
Las dos principales ventajas que obtenemos con la utilización de APIs es la gran funcionalidad que podemos darle a nuestra aplicación, y en segundo lugar la gran velocidad de proceso, ya que a menudo es mucho más rápido realizar una función a través de la API adecuada que por medio del lenguaje en si mismo.
Los mensajes son utilizados por Windows para permitir que dos o más aplicaciones se comuniquen entre sí y con el propio sistema Windows. Se dice que las aplicaciones Windows son conducidas por mensajes o sucesos.
Librerías Dinámicas.
Casi todas las APIs de Windows se unen formando librerías de enlace dinámico.
Una librería dinámica ( Dynamic Link Libraries, abreviadamente DLLs ) permite que las aplicaciones Windows compartan código y recursos. Una DLL es actualmente un fichero ejecutable que contiene funciones de Windows que pueden ser utilizadas por todas las aplicaciones.
Si bien en DOS estamos acostumbrados a utilizar librerías de enlace estático, es decir, a la hora de compilar incluyen junto con nuestro código, y de esta manera cuando se ejecuta nuestra aplicación, todas las librerías se cargan en memoria esperando a ser invocadas. Sin embargo, cuando trabajamos con DDLs, el enlace con la aplicación es dinámico en tiempo de ejecución.
Una DDL no se incluye dentro de nuestro código, sino que en el momento que realizamos la llamada a la función, la DLL se carga en memoria, se utiliza la API, y a continuación se descarga.
La gran ventaja que posee este método es que no es necesario tener gran cantidad de código cargado en memoria a la hora de ejecutar nuestra aplicación. En contra, es necesario que cuando llevemos nuestro ejecutable a otra instalación, tengamos que llevar las DLLs necesarias.
También tenemos que pensar que si utilizamos las DLLs que nos proporciona Windows, en cualquier máquina con este sistema operativo vamos a encontrar esas mismas DLLs, con lo cual no es necesario que nos las llevemos.
La utilización de librerías dinámicas tiene ventajas. Una ventaja es que como están separadas del programa se pueden actualizar sin tener que modificar los programas que las utilizan. Otra ventaja es el ahorro de memoria principal y de disco ya que como es Windows quien administra la utilización de las DLLs, no existe duplicidad de código cuando varias aplicaciones las utilizan.
También, como todo (jeje) tiene inconvenientes. Uno de ellos es el tiempo que Windows tiene que emplear en leer las funciones que el programa necesita utilizar de una DLL.
Otra desventaja es que cada programa ejecutable necesita que estén presentes las DLLs que utiliza. Cuando se utilizan librerías estáticas, las funciones que el programa necesita se incluyen en el mismo, por lo que ni se pierde tiempo en leerlas ni la librería tiene que estar presente.
La mayoría de estas librerías suelen estar localizadas en el directorio SYSTEM de Windows.
Dentro de Windows tenemos gran cantidad de DLLs, agrupando las APIs en funciones respecto a un mismo tema. Además en cada nueva versión de Windows, posiblemente tengamos más DLLs para utilizar.
¿Qué es el API Win32?
Win32 es un conjunto de funciones, tipos y mensajes PRE-definidos para poder programar sobre los sistemas operativos de 32 bits de Microsoft. El API Win32, surge para cubrir la necesidad de crear un sistema operativo de 32 bits como es Windows 95/98/Me, frente al API de 16 bits existente de Windows 3.1. Surge el problema de que Win32, no es compatible con el API de 16 bits, lo que implica que si queremos portar un código de Windows 3.1 a Windows 95, deberemos reescribir el código. Aunque hemos dicho que el API Win32 no es compatible con el API de 16 bits, hay una versión que es Win32s que sirve para la versión 3.1 de Windows. Algunas de las limitaciones entre ambos API son:
No soportan nombres de ficheros largos, sólo el conocido formato 8.3 de DOS.
No tiene API de comunicaciones.
No soportan las capacidades Plug & Play.
Las API de Windows generalmente se concentran en la interacción entre el sistema operativo y una aplicación. Para la comunicación de diferentes aplicaciones entre ellas, Microsoft desarrolló una serie de tecnologías. Primero DDE, luego OLE, y más tarde COM.
(Win API, Windows API). Conjunto de funciones (API) contenidas en bibliotecas que permiten que una aplicación se ejecute en el sistema operativo Microsoft Windows. Son diseñadas en C y C++.
Sus versiones son Win16, Win32, Win32s, Win64.
Microsoft desarrolló un SDK (kit de desarrollo de software), que provee la documentación y las herramientas que permite a los desarrolladores crear software usando las API de Windows y otras tecnologías asociadas a este sistema operativo.
Las funciones API se pueden categorizar en:
1- Servicios Base:
Provee acceso a los recursos fundamentales disponibles en sistemas Windows. Como son el sistema de archivos, dispositivos, procesos, acceso al registro de Windows, manejo de errores, etc. Estas funciones residen en los archivos kernel.exe, krnl286.exe o krnl386.exe en Windows 16 bits, y kernel32.DLL y advapi32.DLL en Windows 32 bits.
2- Graphics Device Interface (interfaz gráfica):
Provee la funcionalidad para mostrar contenido gráfico a los monitores, impresoras y otros dispositivos de salida. Reside en el archivo gdi.exe en Windows 16 bits, y en gdi32.DLL en Windows 32 bits.
3- Interfaz de usuario:
Provee la funcionalidad de crear y gestionar las ventanas y los controles más básicos como botones y barras de desplazamiento, entradas desde el Mouse y el teclado, y otras funcionalidades asociadas a la parte GUI de Windows. Esta unidad funcional reside en user.exe en Windows 16 bits y user32.DLL en Windows 32 bits. Desde la versión Windows XP, los controles básicos residen en comctl32.DLL, juntos con los controles comunes (Librería de Controles Comunes).
4- Librería de cajas de diálogos comunes:
Provee a las aplicaciones las cajas de diálogo estándar para abrir y guardar ficheros, elegir colores y fuentes, etc. La librería reside en el archivo commdlg.dll en Windows 16 bits, y en comdlg32.DLL en Windows 32 bits. Está agrupado junto a la categoría Interfaz de Usuario.
5- Librería de controles comunes:
Da a las aplicaciones acceso a controles avanzados que provee el sistema operativo. Esto incluye la barra de estado, la barra de progreso, barra de herramientas, solapas, etc. La librería reside en el archivo commctrl.dll en Windows de 16 bits, y en comctl32.DLL en Windows de 32 bits. Es agrupado bajo la categoría Interfaz de Usuario.
6- Shell de Windows:
Componente del API de Windows que permite a las aplicaciones acceder a la funcionalidad que provee el Shell del sistema operativo. El componente reside en shell.dll en Windows de 16 bits, y shell32.dll en Windows 95, y shlwapi.dll en Windows 32 bits.
7- Servicios de red:
Da acceso a varias capacidades de red del sistema operativo Windows. Sus subcomponentes incluyenNetBIOS, Winsock, NetDDE, RPC y muchos más.
Internet Explorer también ofrece muchos APIs que pueden ser usados por aplicaciones y pueden considerarse parte del API de Windows pues IE viene integrado con este sistema desde su versión 98. Esa integración se detuvo en Windows Vista. Ver API de Internet Explorer.
Microsoft también provee un conjunto de APIs como parte de la instalación de Windows desde Windows 95 OSR2 llamado DirectX. Provee algunos API relacionados a servicios multimedia y de juegos. Algunos son: Direct3D, DirectDraw, DirectSound, DirectInput, DirectPlay, DirectShow, DirectMusic.8- Referencia de la API de Windows para Windows Store aplicaciones Windows proporciona dos conjuntos de APIs para la construcción de ventanas de la tienda de aplicaciones: el tiempo de ejecución de Windows y la Biblioteca de Windows para Java script.
9- Windows Run time Estas API de JavaScript, C #, Visual Basic y C + + proporciona acceso a todas las características de la plataforma de núcleo.
Los espacios de nombres se exponen mediante API formato de meta datos (Windows.winmd) similar al utilizado por el marco. NET (ECMA-335).
10- WinJS Estas API de JavaScript proporcionan controles, estilos CSS, y funciones de ayuda que le ayudan a escribir código orientado a objetos. El espacio de nombres WinJS cubre la funcionalidad que es similar a los espacios de nombres Windows.UI.Xaml en el tiempo de ejecución de Windows.
Cuando hace referencia a estos archivos JavaScript en su aplicación, debe agregar base.js primero, luego ui.js.
11- Windows Store: las API de aplicaciones de Windows Store que se expresan como HTML o XAML elementos sólo se admiten en Windows para almacenar aplicaciones, y no son compatibles con las aplicaciones de escritorio o navegadores.
API de Linux
El kernel de Linux incluye una gran variedad de APIs concebidas para ayudar a los desarrolladores a construir aplicaciones del kernel y de drivers más simples y eficientes. Dos de las API más comunes usadas para la postergación de trabajos son la API de gestión de listas y la API de temporización.
El kernel de Linux ofrece varios interfaces para aplicaciones de espacio de usuario que se utilizan con fines diferentes y que tienen diferentes propiedades de diseño. Hay dos tipos de interfaz de programación de aplicaciones (API) en el kernel de Linux que no hay que confundir: el "espacio de kernel-usuario" de la API y el "núcleo interno" de la API.
Temporizadores del kernel Existen diferentes esquemas de temporizadores en los recientes kernels 2.6. El temporizador más sencillo y menos preciso (pero adecuado para casi todos los casos) es la API de temporización. Esta API permite la construcción de temporizadores que operen en el dominio jiffies. Otra alternativa es la API de temporización de alta resolución, la cual permite construcciones de temporizadores cuyo tiempo se define en nanosegundos. Aunque la distancia recorrida variará en base al procesador y la velocidad de operación, la API ofrece una forma de programar los tiempos de espera por debajo del intervalo de tics de jiffies.
Temporizadores estándar La API de temporización estándar forma parte del kernel Linux desde hace tiempo (ya se encontraba incluida en las versiones iniciales del kernel Linux). Si bien ésta ofrece menos precisión que los temporizadores de alta resolución, resulta ideal para los tiempos de espera de drivers tradicionales que cubren casos de errores en la manipulación de dispositivos físicos.
API que proporciona Linux para temporización Linux proporciona una API simple para la construcción y gestión de temporizadores. Esta API está compuesta por funciones (y funciones auxiliares) para la creación, cancelación y gestión de temporizadores.
Los temporizadores tradicionales proveen un mecanismo eficiente para los tiempos de espera de drivers más comunes y los hrtimers proporcionan un nivel superior de calidad de servicio para obtener capacidades de temporizadores más precisas. La API de listas proporciona una interfaz que, a pesar de ser muy genérica, resulta eficaz y altamente funcional. Si usted escribe código para el kernel, seguramente se encontrará con una de estas API o con las tres, por lo cual vale la pena explorarlas.
Veamos algunas de estas funciones de la API en la práctica. El Listado 1 proporciona un módulo kernel simple que muestra los aspectos centrales de la API de temporización simple. Dentro de init_module se inicializa el temporizador con setup_timer y luego se arranca llamando a mod_timer. Cuando el temporizador finaliza, se invoca a la función de devolución de llamada (my_timer_callback). Finalmente, el temporizador se elimina (a través de del_timer) al eliminar el módulo. (Ver la verificación de devolución de del_timer; ésta indica si el temporizador continúa en uso).
Exploración de la API de temporización simple
API de temporización de alta resolución
La API de hrtimer se asemeja en algunos aspectos a la API tradicional, pero presenta una serie de diferencias fundamentales en función del control de tiempos adicional. Lo primero que llamará su atención es que el tiempo no se encuentra representado en jiffies, sino en un tipo de datos especial llamado ktime. Esta representación oculta algunos de los detalles de la gestión del tiempo eficiente dentro de esta granularidad. La API formaliza la diferenciación entre tiempos absolutos y relativos y requiere que el llamante especifique el tipo de tiempo.
La API de ktime
Este artículo no aborda la API de ktime, la cual proporciona un completo conjunto de funciones para la gestión del tiempo en alta resolución. La API de ktime se encuentra desarrollada en ./linux/include/ktime.h.
hrtimer
La API de hrtimer es fácil de usar, como muestra el Listado 2. Dentro de init_module, lo primero es definir el tiempo relativo hasta el tiempo de espera (en este caso, 200ms). Para inicializar hrtimer, se debe llamar a hrtimer_init(con reloj monotónico) y luego establecer la función de devolución de llamada. Luego, se inicia el temporizador usando el valor ktimeantes creado. Cuando el temporizador se haya activado, se llamará a la funciónmy_hrtimer_callback, la cual devolverá HRTIMER_NORESTART para evitar que el temporizador se reinicie automáticamente. La función cleanup_module permite limpiar cancelando el temporizador con hrtimer_cancel.
Listas del kernel
Esta API proporciona una estructura list_head para representar tanto el encabezado de la lista (delimitador) como los indicadores de lista internos de la estructura. Veamos una estructura de muestra que incluye capacidades de listas. Observe que se agregó la estructura list_head para la vinculación de objetos. También es posible agregar la estructura list_head en cualquier parte de la estructura y — a través de GCC (list_entry y container_of, definidos en ./include/kernel/kernel.h)— desreferenciar desde el indicador de lista al superobjeto.
Estructura con referencias de listas de muestras truct my_data_structure { intvalue; struct list_head list; };
Como en cualquier implementación en lista, se requiere de un encabezado de lista que actúe como delimitador de la lista. Esto suele llevarse a cabo con la macro LIST_HEAD, que proporciona la declaración e inicialización de la lista. Esta macro crea un objeto list_head de estructura dentro del cual se pueden agregar objetos.
LIST_HEAD( new_list )
También es posible agregar una encabezado de lista manualmente (por ejemplo, si el encabezado de lista se encuentra en otra estructura diferente) usando la macro LIST_HEAD_INIT.
Una vez finalizada la inicialización principal, la lista puede manipularse usando funciones como list_add ylist_del(y muchas otras más). Ahora, pasemos al código de ejemplo que ilustrará más claramente el uso de la API.
Trabajo cola API
La API de cola de trabajo es un poco más complicado que tasklets, principalmente debido a una serie de opciones son compatibles. Primero vamos a explorar las colas de trabajo, y luego vamos a ver en el trabajo y las variantes.
Recordemos de la Figura 3 que la estructura de la base de la cola de trabajo es la cola en sí. Esta estructura se utiliza para poner en cola el trabajo de la mitad superior que aplazarse para la ejecución posterior de la mitad inferior. Colas de trabajo se crean a través de una llamada macro create_workqueue , que devuelve un workqueue_struct referencia. Puede remoto esta cola obra posterior (si es necesario) a través de una llamada al destroy_workqueue función:
struct workqueue_struct * create_workqueue (nombre);
void destroy_workqueue (struct workqueue_struct *);
El trabajo que se comunica a través de la cola de trabajo se define por la work_struct estructura. Por lo general, esta estructura es el primer elemento de la estructura de un usuario de la definición de trabajo (verá un ejemplo de esto más adelante). La API de cola de trabajo proporciona tres funciones para inicializar el trabajo (de un búfer asignado); ver Listado 6 . El INIT_WORK macro prevé la inicialización y configuración de la función de controlador (se transmite por el usuario) es necesario. En los casos en que el desarrollador necesita un retraso antes de que el trabajo se pone en cola en la cola de trabajo, puede utilizar el INIT_DELAYED_WORK y INIT_DELAYED_WORK_DEFERRABLE macros.
Conclusión
Este trabajo presentó algunas APIs de Linux que tienen la capacidad de separar funcionalidades de acuerdo con las necesidades (APIs de temporizador y APIs de hrtimer de alta precisión) y de uniformar código para su reutilización (API de listas) etc.. y otras Apis de Windows y sus funcionalidades.En fin existen una amplia variedad de APIs y aplicaciones de Windows y LINUX (principal mente de Linux) pero no están exactamente especificadas asi que las Apis de estos sistemas operativos vienen siendo un tipo de códigos o una fuente de código basado en la especificación destinada a ser utilizada como una interfaz de componentes de software para comunicarse entre sí (para permitir que varias aplicaciones se conecten entre si transparentemente.
Bibliografía
http://msdn.microsoft.com/es-es/library/172wfck9.aspx
http://masalladevisualbasic.galeon.com/lasapiwin.html
http://www.alegsa.com.ar/Dic/api%20de%20windows.php
http://msdn.microsoft.com/en-us/library/windows/apps/br211377.aspx
http://www.elwebmaster.com/referencia/api-interface-de-programacion-de-aplicaciones
http://rcmdispmoviles.blogspot.com/2012/04/interfaz-de-programacion-de.html
https://www.ibm.com/developerworks/linux/library/l-tasklets/
file:///C:/Users/User/Desktop/APIs%20del%20kernel,%20Parte%203%20%20Temporizadores%20y%20listas%20en%20el%20kernel%202.6.htm
http://www.elwebmaster.com/referencia/api-interface-de-programacion-de-aplicaciones
API de WindowsAPI de Linux.
Autor:
Ezequiel William
Profesor: José Polanco
Universidad Dominicana O&M . Facultad de Ingeniería y Tecnología
Martes 15 Abril 2014