Download Software - IUPSM
Document related concepts
Transcript
Software PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor información. PDF generated at: Tue, 20 Apr 2010 21:09:48 UTC Contenidos Artículos Programa informático 1 Sistema operativo 4 Aplicación informática 12 Lenguaje de programación 13 Referencias Fuentes y contribuyentes del artículo 18 Fuentes de imagen, Licencias y contribuyentes 19 Licencias de artículos Licencia 20 Programa informático Programa informático Un programa informático es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una computadora. Sin programas, estas máquinas no pueden funcionar correctamente.[1] [2] Al conjunto general de programas, se lo denomina software y así, se refiere al equipamiento lógico o soporte lógico de una computadora digital. En informática, se los denomina comúnmente binarios, (propio en sistemas unix, donde debido a la estructura de este último, los ficheros no necesitan hacer uso de extensiones. Posteriormente, los presentaron como ficheros ejecutables, con extensión .exe, en los sistemas operativos de la familia Windows) debido a que una vez que han pasado por el proceso de compilación y han sido creados, las instrucciones que se escribieron en un lenguaje de programación que los humanos usan para escribirlos con mayor facilidad, se han traducido al único idioma que la máquina comprende, combinaciones de ceros y unos llamada código máquina. El mismo término, puede referirse tanto a un programa ejecutable, como a su código fuente, el cual es transformado en un binario cuando es compilado. Generalmente el código fuente lo escriben profesionales conocidos como programadores. Se escribe en un lenguaje que sigue uno de los siguientes dos paradigmas: imperativo o declarativo y que posteriormente puede ser convertido en una imagen ejecutable por un compilador. Cuando se pide que el programa sea ejecutado, el procesador ejecuta instrucción por instrucción. De acuerdo a sus funciones, se clasifican en software de sistema y software de aplicación. En los computadores actuales, al hecho de ejecutar varios programas de forma simultánea y eficiente, se le conoce como multitarea. Ejecución Una vez escritos, pueden ser ejecutados de diversas formas: • Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intérpretes. Ejemplos de esto son bash, clásico en estaciones Unix y que fue escrito para el proyecto GNU o Python, cuya peculiaridad además de ser multipropósito, está en su facilidad de uso y productividad y de hecho, es usado en parte de los proyectos Google y Youtube.[3] • Traduciendo el código escrito del programa (lo que se denomina código fuente), a su equivalente en lenguaje máquina. A este proceso se le llama compilar y al programa traductor se le denomina compilador. Ejemplos de esto son: El lenguaje C, que combina en su sintaxis características de medio y bajo nivel y el compilador gcc usado en el proyecto GNU. Programas que se auto-modifican Un programa en ejecución se trata de forma diferente que los datos en los cuales opera. De cualquier forma, en algunos casos ésta distinción es ambigua, especialmente cuando un programa se modifica a sí mismo. El programa modificado es secuencialmente ejecutado como parte del mismo programa. Se pueden escribir programas auto-modificables en lenguajes como Lisp, COBOL y Prolog. Ejecución y almacenamiento de los programas Típicamente, los programas se almacenan en una memoria no volátil (por ejemplo un disco), para que luego el usuario de la computadora, directa o indirectamente, solicite su ejecución. Al momento de dicha solicitud, el programa es cargado en la memoria de acceso aleatorio o RAM del equipo, bajo el control del software llamado sistema operativo, el cual puede acceder directamente al procesador. El procesador ejecuta (corre) el programa, instrucción por instrucción hasta que termina. A un programa en ejecución se le suele llamar también proceso. Un programa puede terminar su ejecución en forma normal o por causa de un error, dicho error puede ser de software o 1 Programa informático 2 de hardware. Programas empotrados en hardware El microcontrolador a la derecha de la Memoria USB está controlada por un firmware empotrado. Algunos programas están empotrados en el hardware. Una computadora con arquitectura de programas almacenados requiere un programa inicial almacenado en su ROM para arrancar. El proceso de arranque es para identificar e inicializar todos los aspectos del sistema, desde los registros del procesador, controladores de dispositivos hasta el contenido de la memoria RAM.[4] Seguido del proceso de inicialización, este programa inicial carga al sistema operativo e inicializa al contador de programa para empezar las operaciones normales. Independiente de la computadora, un dispositivo de hardware podría tener firmware empotrado para el control de sus operaciones. El firmware se utiliza cuando se espera que el programa cambie en raras ocasiones o nunca, o cuando el programa no debe perderse cuando haya ausencia de energía.[5] Programas cargados manualmente Los programas históricamente se cargaron manualmente al procesador central mediante interruptores. Una instrucción era representada por una configuración de estado abierto o cerrado de los interruptores. Después de establecer la configuración, se ejecutaba un botón de ejecución. Este proceso era repetitivo. También, históricamente los programas se cargaban manualmente mediante una cinta de papel o tarjetas perforadas. Después de que el programa se cargaba, la dirección de inicio se establecía mediante interruptores y el botón de ejecución se presionaba.[6] Interruptores para la carga manual en una Data General Nova 3. Programas generados automáticamente La programación automática es un estilo de programación que crea código fuente mediante clases genéricas, prototipos, plantillas, aspectos, y generadores de código para aumentar la productividad del programador. El código fuente se genera con herramientas de programación tal como un procesador de plantilla o un IDE. La forma más simple de un generador de código fuente es un procesador macro, tal como el preprocesador de C, que reemplaza patrones de código fuente de acuerdo a reglas relativamente simples. Un motor de software da de salida código fuente o lenguaje de marcado que simultáneamente se vuelve la entrada de otro proceso informático. Podemos pensar como analogía un proceso manejando a otro siendo el código máquina quemado como combustible. Los servidores de aplicaciones son motores de software que entregan aplicaciones a computadoras cliente. Por ejemplo, un software para wikis es un sevidor de aplicaciones que permite a los usuarios desarrollar contenido dinámico ensamblado a partir de artículos. Las Wikis generan HTML, CSS, Java, y Javascript los cuales son interpretados por un navegador web. Programa informático Ejecución simultánea Véanse también: Proceso (informática) y Multiprocesamiento Muchos programas pueden correr simultáneamente en la misma computadora, a lo cual se le conoce como multitarea y puede lograrse a través de mecanismos de software o de hardware. Los sistemas operativos modernos pueden correr varios programas a través del planificador de procesos — un mecanismo de software para conmutar con frecuencia la cantidad de procesos del procesador de modo que los usuarios puedan interactuar con cada programa mientras estos están corriendo.[7] También se puede lograr la multitarea por medio del hardware; las computadoras modernas que usan varios procesadores o procesadores con varios núcleos pueden correr muchos programas a la vez.[8] Categorías funcionales Los programas se pueden categorizar según líneas funcionales. Estas categorías funcionales son software de sistema y software de aplicación. El software de sistema incluye al sistema operativo el cual acopla el hardware con el software de aplicación.[9] El propósito del sistema operativo es proveer un ambiente en el cual el software de aplicación se ejecuta de una manera conveniente y eficiente.[9] Además del sistema operativo, el software de sistema incluye programas utilitarios que ayudan a manejar y configurar la computadora. Si un programa no es software de sistema entonces es software de aplicación. El middleware también es un software de aplicación que acopla el software de sistema con la interfaz de usuario. También son software de aplicación los programas utilitarios que ayudan a los usuarios a resolver problemas de aplicaciones, como por ejemplo la necesidad de ordenamiento. Véase también • Software • Lenguajes de programación Bibliografía • Knuth, Donald E. (1997). The Art of Computer Programming, Volume 1, 3rd Edition. Boston: Addison-Wesley. ISBN 0-201-89683-4. (en inglés). • Knuth, Donald E. (1997). The Art of Computer Programming, Volume 2, 3rd Edition. Boston: Addison-Wesley. ISBN 0-201-89684-2. (en inglés). • Knuth, Donald E. (1997). The Art of Computer Programming, Volume 3, 3rd Edition. Boston: Addison-Wesley. ISBN 0-201-89685-0. (en inglés). Referencias [1] Stair, Ralph M., et al (2003). Principles of Information Systems, Sixth Edition. Thomson Learning, Inc., pp. 132. ISBN 0-619-06489-7. (en inglés). [2] Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley, pp. 58. ISBN 0-201-50480-4. (en inglés). [3] [ Mark (http:/ / www. oreillynet. com/ pub/ au/ 446|Lutz,)] (2010). O'Reilly Media, Inc. (ed.): « Learning Python, Fourth Edition (http:/ / oreilly. com/ catalog/ 9780596158071)» (libro). O'Reilly. Consultado el 11 de febrero de 2010. [4] Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley, pp. 30. ISBN 0-201-50480-4. (en inglés). [5] Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall, pp. 11. ISBN 0-13-854662-2. (en inglés). [6] Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley, pp. 6. ISBN 0-201-50480-4. (en inglés). [7] Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley, pp. 100. ISBN 0-201-50480-4. (en inglés). [8] Akhter, Shameem (2006). Multi-Core Programming. Richard Bowles (Intel Press), pp. 11-13. ISBN 0-9764832-4-6. (en inglés). [9] Silberschatz, Abraham (1994). Operating System Concepts, Fourth Edition. Addison-Wesley, pp. 1. ISBN 0-201-50480-4. (en inglés). 3 Sistema operativo 4 Sistema operativo Un Sistema operativo (SO) es un software que actúa de interfaz entre los dispositivos de hardware y los programas usados por el usuario para manejar un computador.[2] Es responsable de gestionar, coordinar las actividades y llevar a cabo el intercambio de los recursos y actúa como estación para las aplicaciones que se ejecutan en la máquina. Uno de los más prominentes ejemplos de sistema operativo, es el núcleo Linux,[3] el cual junto a las herramientas GNU, forman las llamadas distribuciones Linux. Nótese que es un error común muy extendido denominar al conjunto completo de herramientas sistema operativo, pues este, es sólo el núcleo y no necesita de entorno operador para estar operativo y funcional.[4] [5] Este error de precisión, se debe a la modernización de la informática llevada a cabo a finales de los 80, cuando la filosofía de estructura básica de funcionamiento de los grandes computadores [6] se rediseñó a fin de llevarla a los hogares y facilitar su uso, cambiando el concepto de computador multiusuario, (muchos usuarios al mismo tiempo) por un sistema monousuario (únicamente un usuario al mismo tiempo) más sencillo de gestionar.[7] (Véase AmigaOS, beOS o MacOS como los pioneros[8] de dicha modernización, cuando los Amiga, fueron bautizados con el sobrenombre de Video Toasters[9] por su capacidad para la Edición de vídeo en entorno multitarea round robin, con gestión de miles de colores e interfaces intuitivos para diseño en 3D con programas como Imagine[10] o Scala multimedia, entre muchos otros.)[11] Intereaccion entre el SO con el resto de las partes. Uno de los propósitos de un sistema operativo como programa estación Estimación del uso de sistemas operativos según principal, consiste en gestionar los recursos de localización y una muestra de computadoras con acceso a protección de acceso del hardware, hecho que alivia a los Internet en Noviembre de 2009 (Fuente: [1] programadores de aplicaciones de tener que tratar con estos detalles. Se W3counter ). encuentran en la mayoría de los aparatos electrónicos que utilizan microprocesadores para funcionar. (teléfonos móviles, reproductores de DVD, computadoras, radios, etc.) Parte de la infraestructura de la World Wide Web está compuesta por el Sistema Operativo de Internet, creado por Cisco Systems para gestionar equipos de interconexión como los conmutadores y los enrutadores.[12] Sistema operativo 5 Perspectiva histórica Los primeros sistemas (1945 - 1950) eran grandes máquinas operadas desde la consola maestra por los programadores. Durante la década siguiente (1950 - 1960) se llevaron a cabo avances en el hardware: lectoras de tarjetas, impresoras, cintas magnéticas, etc. Esto a su vez provocó un avance en el software: compiladores, ensambladores, cargadores, manejadores de dispositivos, etc. A finales de los años 80, un Amiga equipado con una aceleradora Video Toaster, era capaz de producir efectos comparados a sistemas dedicados que costaban el triple. Un Video Toaster junto a Lightwave ayudó a producir muchos programas de televisión y películas, entre las que se incluyen Babylon 5, Seaquest DSV y Terminator II.[13] Problemas de explotación y soluciones iniciales El problema principal de los primeros sistemas era la baja utilización de los mismos, la primera solución fue poner un operador profesional que lo manejase, con lo que se eliminaron las hojas de reserva, se ahorró tiempo y se aumentó la velocidad. Para ello, los trabajos se agrupaban de forma manual en lotes mediante lo que se conoce como procesamiento por lotes (batch) sin automatizar. Monitores residentes Según fue avanzando la complejidad de los programas, fue necesario implementar soluciones que automatizaran la organización de tareas sin necesidad de un operador. Debido a ello se crearon los monitores residentes: programas que residían en memoria y que gestionaban la ejecución de una cola de trabajos. Un monitor residente estaba compuesto por un cargador, un Intérprete de comandos y un Controlador (drivers) para el manejo de entrada/salida. Sistemas con almacenamiento temporal de E/S Fichas en lenguaje de procesamiento por lotes, con programa y datos, para ejecución secuencial. Los avances en el hardware crearon el soporte de interrupciones y posteriormente se llevó a cabo un intento de solución más avanzado: solapar la E/S de un trabajo con sus propios cálculos, por lo que se creó el sistema de buffers con el siguiente funcionamiento: • Un programa escribe su salida en un área de memoria (buffer 1). • El monitor residente inicia la salida desde el buffer y el programa de aplicación calcula depositando la salida en el buffer 2. • La salida desde el buffer 1 termina y el nuevo cálculo también. • Se inicia la salida desde el buffer 2 y otro nuevo cálculo dirige su salida al buffer 1. • El proceso se puede repetir de nuevo. Los problemas surgen si hay muchas más operaciones de cálculo que de E/S (limitado por la CPU) o si por el contrario hay muchas más operaciones de E/S que cálculo (limitado por la E/S). Sistema operativo Spoolers Hace aparición el disco magnético con lo que surgen nuevas soluciones a los problemas de rendimiento. Se eliminan las cintas magnéticas para el volcado previo de los datos de dispositivos lentos y se sustituyen por discos (un disco puede simular varias cintas). Debido al solapamiento del cálculo de un trabajo con la E/S de otro trabajo se crean tablas en el disco para diferentes tareas, lo que se conoce como Spool (Simultaneous Peripherial Operation On-Line). Sistemas operativos multiprogramados Surge un nuevo avance en el hardware: el hardware con protección de memoria. Lo que ofrece nuevas soluciones a los problemas de rendimiento: • Se solapa el cálculo de unos trabajos con la entrada/salida de otros trabajos. • Se pueden mantener en memoria varios programas. • Se asigna el uso de la CPU a los diferentes programas en memoria. Debido a los cambios anteriores, se producen cambios en el monitor residente, con lo que éste debe abordar nuevas tareas, naciendo lo que se denomina como Sistemas Operativos multiprogramados, los cuales cumplen con las siguientes funciones: • Administrar la memoria. • Gestionar el uso de la CPU (planificación). • Administrar el uso de los dispositivos de E/S. Cuando desempeña esas tareas, el monitor residente se transforma en un sistema operativo multiprogramado. Llamadas al sistema operativo Definición breve: llamadas que ejecutan los programas de aplicación para pedir algún servicio al SO. Cada SO implementa un conjunto propio de llamadas al sistema. Ese conjunto de llamadas es la interfaz del SO frente a las aplicaciones. Constituyen el lenguaje que deben usar las aplicaciones para comunicarse con el SO. Por ello si cambiamos de SO, y abrimos un programa diseñado para trabajar sobre el anterior, en general el programa no funcionará, a no ser que el nuevo SO tenga la misma interfaz. Para ello: • Las llamadas correspondientes deben tener el mismo formato. • Cada llamada al nuevo SO tiene que dar los mismos resultados que la correspondiente del anterior. Modos de ejecución en un CPU Las aplicaciones no deben poder usar todas las instrucciones de la CPU. No obstante el SO, tiene que poder utilizar todo el juego de instrucciones del CPU. Por ello, una CPU debe tener (al menos) dos modos de operación diferentes: • Modo usuario: el CPU podrá ejecutar sólo las instrucciones del juego restringido de las aplicaciones. • Modo supervisor: la CPU debe poder ejecutar el juego completo de instrucciones. Llamadas al sistema Una aplicación, normalmente no sabe dónde está situada la rutina de servicio de la llamada. Por lo que si ésta se codifica como una llamada de función, cualquier cambio en el SO haría que hubiera que reconstruir la aplicación. Pero lo más importante es que una llamada de función no cambia el modo de ejecución de la CPU. Con lo que hay que conseguir llamar a la rutina de servicio, sin tener que conocer su ubicación, y hacer que se fuerce un cambio de modo de operación de la CPU en la llamada (y la recuperación del modo anterior en el retorno). Esto se hace utilizando instrucciones máquina diseñadas específicamente para este cometido, distintas de las que se usan para las llamadas de función. 6 Sistema operativo Bibliotecas de interfaz de llamadas al sistema Las llamadas al sistema no siempre tienen una expresión sencilla en los lenguajes de alto nivel, por ello se crean las bibliotecas de interfaz, que son bibliotecas de funciones que pueden usarse para efectuar llamadas al sistema. Las hay para distintos lenguajes de programación. La aplicación llama a una función de la biblioteca de interfaz (mediante una llamada normal) y esa función es la que realmente hace la llamada al sistema. Interrupciones y excepciones El SO ocupa una posición intermedia entre los programas de aplicación y el hardware. No se limita a utilizar el hardware a petición de las aplicaciones ya que hay situaciones en las que es el hardware el que necesita que se ejecute código del SO. En tales situaciones el hardware debe poder llamar al sistema, pudiendo deberse estas llamadas a dos condiciones: • Algún dispositivo de E/S necesita atención. • Se ha producido una situación de error al intentar ejecutar una instrucción del programa (normalmente de la aplicación). En ambos casos, la acción realizada no está ordenada por el programa de aplicación, es decir, no figura en el programa. Según los dos casos anteriores tenemos las interrupciones y la excepciones: • Interrupción: señal que envía un dispositivo de E/S a la CPU para indicar que la operación de la que se estaba ocupando, ya ha terminado. • Excepción: una situación de error detectada por la CPU mientras ejecutaba una instrucción, que requiere tratamiento por parte del SO. Tratamiento de las interrupciones Una interrupción se trata en todo caso, después de terminar la ejecución de la instrucción en curso. El tratamiento depende de cuál sea el dispositivo de E/S que ha causado la interrupción, ante la cual debe poder identificar el dispositivo que la ha causado. Importancia de las interrupciones El mecanismo de tratamiento de las interrupciones permite al SO utilizar la CPU en servicio de una aplicación, mientras otra permanece a la espera de que concluya una operación en un dispositivo de E/S. El hardware se encarga de avisar al SO cuando el dispositivo de E/S ha terminado y el SO puede intervenir entonces, si es conveniente, para hacer que el programa que estaba esperando por el dispositivo, se continúe ejecutando. En ciertos intervalos de tiempo puede convenir no aceptar señales de interrupción. Por ello las interrupciones pueden inhibirse por programa (aunque esto no deben poder hacerlo las mismas). 7 Sistema operativo Excepciones Cuando la CPU intenta ejecutar una instrucción incorrectamente construida, la unidad de control lanza una excepción para permitir al SO ejecutar el tratamiento adecuado. Al contrario que en una interrupción, la instrucción en curso es abortada. Las excepciones al igual que las interrupciones deben estar identificadas. Clases de excepciones Las instrucciones de un programa pueden estar mal construidas por diversas razones: • • • • El código de operación puede ser incorrecto. Se intenta realizar alguna operación no definida, como dividir por cero. La instrucción puede no estar permitida en el modo de ejecución actual. La dirección de algún operando puede ser incorrecta o se intenta violar alguno de sus permisos de uso. Importancia de las excepciones El mecanismo de tratamiento de las excepciones es esencial para impedir, junto a los modos de ejecución de la CPU y los mecanismos de protección de la memoria, que las aplicaciones realicen operaciones que no les están permitidas. En cualquier caso, el tratamiento específico de una excepción lo realiza el SO. Como en el caso de las interrupciones, el hardware se limita a dejar el control al SO, y éste es el que trata la situación como convenga. Es bastante frecuente que el tratamiento de una excepción no retorne al programa que se estaba ejecutando cuando se produjo la excepción, sino que el SO aborte la ejecución de ese programa. Este factor depende de la pericia del programador para controlar la excepción adecuadamente. Componentes de un sistema operativo Gestión de procesos Un proceso es simplemente, un programa en ejecución que necesita recursos para realizar su tarea: tiempo de CPU, memoria, archivos y dispositivos de E/S. El SO es el responsable de: • Crear y destruir los procesos. • Parar y reanudar los procesos. • Ofrecer mecanismos para que se comuniquen y sincronicen. La gestión de procesos podría ser similar al trabajo de oficina. Se puede tener una lista de tareas a realizar y a estas fijarles prioridades alta, media, baja por ejemplo. Debemos comenzar haciendo las tareas de prioridad alta primero y cuando se terminen seguir con las de prioridad media y después las de baja. Una vez realizada la tarea se tacha. Esto puede traer un problema que las tareas de baja prioridad pueden que nunca lleguen a ejecutarse. y permanezcan en la lista para siempre. Para solucionar esto, se puede asignar alta prioridad a las tareas más antiguas. 8 Sistema operativo Gestión de la memoria principal La Memoria (informática) es una gran tabla de palabras o bytes que se referencian cada una mediante una dirección única. Este almacén de datos de rápido accesos es compartido por la CPU y los dispositivos de E/S, es volátil y pierde su contenido en los fallos del sistema. El SO es el responsable de: • Conocer qué partes de la memoria están utilizadas y por quién. • Decidir qué procesos se cargarán en memoria cuando haya espacio disponible. • Asignar y reclamar espacio de memoria cuando sea necesario. Gestión del almacenamiento secundario Un sistema de almacenamiento secundario es necesario, ya que la memoria principal (almacenamiento primario) es volátil y además muy pequeña para almacenar todos los programas y datos. También es necesario mantener los datos que no convenga mantener en la memoria principal. El SO se encarga de: • Planificar los discos. • Gestionar el espacio libre. • Asignar el almacenamiento. El sistema de E/S Consiste en un sistema de almacenamiento temporal (caché), una interfaz de manejadores de dispositivos y otra para dispositivos concretos. El sistema operativo debe gestionar el almacenamiento temporal de E/S y servir las interrupciones de los dispositivos de E/S. Sistema de archivos Los archivos son colecciones de información relacionada, definidas por sus creadores. Éstos almacenan programas (en código fuente y objeto) y datos tales como imágenes, textos, información de bases de datos, etc. El SO es responsable de: • • • • Construir y eliminar archivos y directorios. Ofrecer funciones para manipular archivos y directorios. Establecer la correspondencia entre archivos y unidades de almacenamiento. Realizar copias de seguridad de archivos. Existen diferentes Sistemas de Archivos, es decir, existen diferentes formas de organizar la información que se almacena en las memorias (normalmente discos) de los ordenadores. Por ejemplo, existen los sistemas de archivos FAT, FAT32, EXT2, NTFS, etc. Desde el punto de vista del usuario estas diferencias pueden parecer insignificantes a primera vista, sin embargo, existen diferencias muy importantes. Por ejemplo, los sistemas de ficheros FAT32 y NTFS, que se utilizan fundamentalmente en sistemas operativos de Microsoft, tienen una gran diferencia para un usuario que utilice una base de datos con bastante información ya que el tamaño máximo de un fichero con un Sistema de Archivos FAT32 está limitado a 4 gigabytes, sin embargo, en un sistema NTFS el tamaño es considerablemente mayor. 9 Sistema operativo 10 Sistemas de protección Mecanismo que controla el acceso de los programas o los usuarios a los recursos del sistema. El SO se encarga de: • Distinguir entre uso autorizado y no autorizado. • Especificar los controles de seguridad a realizar. • Forzar el uso de estos mecanismos de protección. Sistema de comunicaciones Para mantener las comunicaciones con otros sistemas es necesario poder controlar el envío y recepción de información a través de las interfaces de red. También hay que crear y mantener puntos de comunicación que sirvan a las aplicaciones para enviar y recibir información, y crear y mantener conexiones virtuales entre aplicaciones que están ejecutándose localmente y otras que lo hacen remotamente. Programas de sistema Son aplicaciones de utilidad que se suministran con el SO pero no forman parte de él. Ofrecen un entorno útil para el desarrollo y ejecución de programas, siendo algunas de las tareas que realizan: • Manipulación y modificación de archivos. • Información del estado del sistema. • Soporte a lenguajes de programación. • Comunicaciones. Gestor de recursos Como gestor de recursos, el Sistema Operativo administra: • • • • • • La CPU (Unidad Central de Proceso, donde está alojado el microprocesador). Los dispositivos de E/S (entrada y salida) La memoria principal (o de acceso directo). Los discos (o memoria secundaria). Los procesos (o programas en ejecución). y en general todos los recursos del sistema. Características Administración de tareas • Monotarea: Solamente puede ejecutar un proceso (aparte de los procesos del propio S.O.) en un momento dado. Una vez que empieza a ejecutar un proceso, continuará haciéndolo hasta su finalización y/o interrupción. Componentes del Sistema Operativo. • Multitarea: Es capaz de ejecutar varios procesos al mismo tiempo. Este tipo de S.O. normalmente asigna los recursos disponibles (CPU, memoria, periféricos) de forma alternada a los procesos que los solicitan, de manera que el usuario percibe que todos funcionan a la vez, de forma concurrente. Sistema operativo Administración de usuarios • Monousuario: Si sólo permite ejecutar los programas de un usuario al mismo tiempo. • Multiusuario: Si permite que varios usuarios ejecuten simultáneamente sus programas, accediendo a la vez a los recursos de la computadora. Normalmente estos sistemas operativos utilizan métodos de protección de datos, de manera que un programa no pueda usar o cambiar los datos de otro usuario. Manejo de recursos • Centralizado: Si permite utilizar los recursos de una sola computadora. • Distribuido: Si permite utilizar los recursos (memoria, CPU, disco, periféricos... ) de más de una computadora al mismo tiempo. Véase también • • • • Anexo:Sistemas operativos Comparación de sistemas operativos Cronología de los sistemas operativos Historia y evolución de los sistemas operativos. • Sistema operativo de red • Software de sistema Bibliografía • O´brien, James A. (2006). Sistemas de Información Gerencial. México DF. • Silberschatz, Abraham (2006). Sistemas Operativos. México. ISBN: 968-18-6168-X. Enlaces externos • Wikimedia Commons alberga contenido multimedia sobre Sistema operativo.Commons Wikcionario • • • • • • Wikcionario tiene definiciones para sistema operativo. Wikiversidad alberga proyectos de aprendizaje sobre Sistema operativo.Wikiversidad Sitio de la Cátedra Sistemas Operativos. Universidad Nacional del Nordeste, Argentina [14]. Sitio de la Cátedra Sistemas Operativos Universidad Politécnica de Madrid [15]. FreeOS.com: The Resource Center for Free Operating Systems [16], (en inglés). Sistema operativo [17] en Google Directorio Referencias [1] http:/ / www. w3counter. com/ globalstats. php [2] Pérez, Juan Carlos; Sergio Sáez (2010). futura.disca.upv.es (ed.): « Estudio de un sistema operativo (http:/ / futura. disca. upv. es/ eso/ es/ t1-introduccion/ gen-t1-introduccion. html)» (curso). Consultado el 1 de enero de 2010. [3] Torvalds, Linus (31 de julio). cs.cmu.edu (ed.): (correo). Consultado el 31 de enero de 2010. [4] The operating system interacts directly with the hardware, providing common services to programs and insulating them from hardware idiosyncrasies. Viewing the system as a set of layers, the operating system is commonly called the system kernel, or just the kernel, emphasizing its isolation from user programs.Maurice J. Bach, "The design of the unix operating system", Prentice/Hall, 1986, p. 4 [5] QNX software systems (ed.): « QNX Operating System: Project overview (http:/ / community. qnx. com/ sf/ projects/ core_os)» (en inglés) (2004). Consultado el 10 de febrero de 2010. [6] Cisco Systems (1992). cisco.com (ed.): « Fundamentos de UNIX (http:/ / www. cisco. com/ web/ LA/ netacad/ cursos/ unix. html)» (certificación). Consultado el 10 de febrero de 2010. 11 Sistema operativo [7] « Washington Post - Debut de Windows 95 (http:/ / www. washingtonpost. com/ wp-srv/ business/ longterm/ microsoft/ stories/ 1995/ debut082495. htm)» (en inglés). [8] toastytech.com (ed.): « BeOS 5.0 Personal Edition (http:/ / toastytech. com/ guis/ b5pe. html)» (en inglés) (2010). Consultado el 10 de febrero de 2010. [9] « Amiga Video Toaster (http:/ / www. newtek. com/ support/ tech/ faqs/ amiga/ index. html)» (en inglés). NewTek, Inc. (2010). Consultado el 1 de febrero de 2010. [10] CAD Technologies (ed.): « Imagine 5.0 for Amiga (http:/ / www. imaginefa. com/ )» (en inglés) (ficha técnica) (1998). Consultado el 10 de febrero de 2010. [11] Delgado, Javier (junio). amigamexico.org (ed.): « La revolucion del desktop video (http:/ / www. amigamexico. org/ index. php/ component/ content/ article/ 34-historia/ 47-el-video-toaster-y-el-flyer. html)» (html). Consultado el 8 de febrero de 2010. [12] Cisco Systems, Inc. (ed.): « Cisco IOS Software Collateral Library (http:/ / www. cisco. com/ en/ US/ products/ sw/ iosswrel/ ios_software_collateral_library_listing. html)» (en inglés) (1992). Consultado el 17 de febrero de 2010. [13] Rabay, Francisco. amiga-hardware.com (ed.): « Newtek: Video Toaster 4000 (http:/ / www. amiga-hardware. com/ showhardware. cgi?HARDID=506)» (en inglés). Consultado el 6 de febrero de 2010. [14] http:/ / exa. unne. edu. ar/ depar/ areas/ informatica/ SistemasOperativos/ SOF. htm [15] http:/ / laurel. datsi. fi. upm. es/ docencia/ asignaturas/ so [16] http:/ / www. freeos. com/ [17] http:/ / www. google. com/ Top/ World/ Espa%C3%B1ol/ Computadoras/ Software/ Sistemas_operativos/ Aplicación informática En informática, una aplicación es un tipo de programa informático diseñado como herramienta para permitir a un usuario realizar uno o diversos tipos de trabajo. Esto lo diferencia principalmente de otros tipos de programas como los sistemas operativos (que hacen funcionar al ordenador), las utilidades (que realizan tareas de mantenimiento o de uso general), y los lenguajes de programación (con el cual se crean los programas informáticos). Suele resultar una solución informática para la automatización de ciertas tareas complicadas OpenOffice.org Writer corriendo en el sistema operativo GNU/Linux. como pueden ser la contabilidad, la redacción de documentos, o la gestión de un almacén. Algunos ejemplos de programas de aplicación son los procesadores de textos, hojas de cálculo, y base de datos. Ciertas aplicaciones desarrolladas 'a medida' suelen ofrecer una gran potencia ya que están exclusivamente diseñadas para resolver un problema específico. Otros, llamados paquetes integrados de software, ofrecen menos potencia pero a cambio incluyen varias aplicaciones, como un programa procesador de textos, de hoja de cálculo y de base de datos. Este diagrama muestra la ubicación y relación que tienen estas aplicaciones para con el usuario final, y con otros programas informáticos existentes. Otros ejemplos de programas de aplicación pueden ser: programas de comunicación de datos, Multimedia, presentaciones, diseño gráfico, cálculo, finanzas, correo electrónico, compresión de archivos, presupuestos de obras, gestión de empresas, etc. Algunas compañías agrupan diversos programas de distinta naturaleza para que formen un paquete (llamados suites o suite ofimática) que sean satisfactorios para las necesidades más apremiantes del usuario. Todos y cada uno de ellos sirven para ahorrar tiempo y dinero al usuario, al permitirle hacer cosas útiles con el ordenador (o computadora); algunos con ciertas prestaciones, otros con equis diseño; unos son más amigables o fáciles de usar 12 Aplicación informática 13 que otros, pero bajo el mismo principio. Un ejemplo común de estos paquetes es Microsoft Office. Lenguaje de programación Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.[1] Está formado de un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación. También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos: Captura del microordenador Commodore PET-32 mostrando un programa en el lenguaje de programación BASIC, bajo el emulador VICE en una distribución GNU/Linux. La primera línea, titula (rem) al programa para permitir su almacenamiento, la segunda, solicita una cadena de datos (input) que una vez obtenidos, almacenará en una instrucción que el lenguaje lleva incorporada, llamada variable alfanumérica ($). La tercera línea, establece una condición, (if) determina que si la cadena de texto almacenada no es igual (<>) al valor dado, proceda (then) a ejecutar la línea anterior, volviendo así a solicitar nuevos datos, pero en caso de ser igual, (=) continúe ejecutando la siguiente línea del programa. La cuarta línea, imprime el mensaje encomillado en pantalla (print), para terminar con la quinta línea que establece su fin. (end) • El desarrollo lógico del programa para resolver un problema en particular. • Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa) • Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina. • Prueba y depuración del programa. • Desarrollo de la documentación. Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo el HTML. (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación sino un conjunto de instrucciones que permiten diseñar el contenido y el texto de los documentos) Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción del programa de forma colaborativa. Lenguaje de programación Historia Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje específico conocido como código máquina, el cual la máquina comprende fácilmente, pero que lo hace excesivamente complicado para las personas. De hecho sólo consiste en cadenas extensas de números 0 y 1. Para facilitar el trabajo, los primeros operadores de computadoras Código Fortran en una tarjeta perforada, decidieron hacer un traductor para reemplazar los 1 y 0 por palabras o mostrando el uso especializado de las columnas abstracción de palabras y letras provenientes del inglés; éste se conoce 1-5, 6 y 73-80. como lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente sigue la misma estructura del en lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que los números. La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denominó "instrucciones", y a este conjunto de instrucciones se le llamó lenguaje ensamblador. Posteriormente aparecieron diferentes lenguajes de programación, los cuales reciben su denominación porque tienen una estructura sintáctica similar a los lenguajes escritos por los humanos, denominados también lenguajes de alto nivel. La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora. A finales de 1953, John W. Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar el computador central IBM 704. El histórico equipo Fortran de Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.[2] El primer manual para el lenguaje Fortran apareció en octubre de 1956, con el primer compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado, porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador. En 1960, se creó COBOL, uno de los lenguajes usados aun en 2010 en informática de gestión. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método más eficiente para programarlas. Entonces, se crearon los lenguajes de alto nivel, como lo fue el BASIC en las versiones introducidas en los microordenadores de la década de 1980. Mientras que una tarea tan sencilla como sumar dos números puede necesitar varias instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una. 14 Lenguaje de programación Implementación La implementación de un lenguaje es la que provee una manera de que se ejecute un programa para una determinada combinación de software y hardware. Existen básicamente dos maneras de implementar un lenguaje: Compilación e interpretación. Compilación es la traducción a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se puede también utilizar una alternativa para traducir lenguajes de alto nivel. En lugar de traducir el programa fuente y grabar en forma permanente el código objeto que Código fuente de un programa escrito en el lenguaje de se produce durante la compilación para utilizarlo en una programación Java ejecución futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el procesamiento de los datos. El código objeto no se graba para utilizarlo posteriormente. La siguiente vez que se utilice una instrucción, se la deberá interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo o bucle, cada instrucción del bucle tendrá que volver a ser interpretada en cada ejecución repetida del ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una ejecución del código. La mayoría de lenguajes de altonivel, permiten la programación multipropósito, sin embargo, muchos de ellos fueron diseñados para permitir programación dedicada, como lo fue PASCAL con las matemáticas en su comienzo. También, se han implementado lenguajes educativos infantiles como LOGO que mediante una serie de simples instrucciones, permitía mover una tortuga entre otras cosas. En el ámbito de infraestructura de internet, cabe destacar a Perl con un poderoso sistema de procesamiento de texto y una enorme colección de módulos. 15 Lenguaje de programación Técnica Para escribir programas que proporcionen los mejores resultados, cabe tener en cuenta una serie de detalles. • Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace. • Claridad. Es muy importante que el programa sea lo más claro Llibros sobre diversos lenguajes de programación. y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros programadores, recurren al uso de código ofuscado. • Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que genera, etc.). • Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en la que se elaboró. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más usuarios más fácilmente. Paradigmas Los programas se pueden clasificar por el paradigma del lenguaje que se use para producirlos. Los principales paradigmas son imperativos y declarativos. Los programas que usan un lenguaje imperativo especifican un algoritmo, usan declaraciones, expresiones y sentencias.[3] Una declaración asocia un nombre de variable con un tipo de dato, por ejemplo: var x: integer; . Una expresión contiene un valor, por ejemplo: 2 + 2 contiene el valor 4. Finalmente, una sentencia debe asignar una expresión a una variable o usar el valor de una variable para alterar el flujo de un programa. Por ejemplo: x := 2 + 2; if x == 4 then haz_algo();. Una crítica común en los lenguajes imperativos es el efecto de las sentencias de asignación sobre una clase de variables llamadas "no locales".[4] Los programas que usan un lenguaje declarativo especifican las propiedades que la salida debe conocer y no especifica cualquier detalle de implementación. Dos amplias categorías de lenguajes declarativos son los lenguajes funcionales y los lenguajes lógicos. Los lenguajes funcionales (como Haskell) no permiten asignaciones de variables no locales, así, se hacen más fácil, por ejemplo, programas como funciones matemáticas.[4] El principio detrás de los lenguajes lógicos (como Prolog) es definir el problema que se quiere resolver (el objetivo) y dejar los detalles de la solución a el sistema de Prolog.[5] El objetivo es definido dando una lista de sub-objetivos. Cada 16 Lenguaje de programación sub-objetivo también se define dando una lista de sus sub-objetivos, etcétera. Si al tratar de buscar una solución, una ruta de sub-objetivos falla, entonces tal sub-objetivo se descarta y sistemáticamente se prueba otra ruta. La forma en la cual es programa se crea puede ser por medio de texto o de forma visual. En un lenguaje de programación visual, los elementos son manipulados gráficamente en vez de especificarse por medio de texto. Véase también • Lenguajes esotéricos Enlaces externos • Wikiversidad alberga proyectos de aprendizaje sobre Lenguaje de programación.Wikiversidad Wikilibros • Wikilibros alberga un libro o manual sobre Fundamentos de programación. • Programación TV [6] • Wikiquote alberga frases célebres de o sobre Lenguaje de programación. Wikiquote • Árbol genealógico de los lenguajes de programación [7] • Árbol cronológico de los lenguajes de programación [8] (en inglés) • Lista de lenguajes de programación [9] (en inglés) • Paradigmas de los lenguajes de programación [10] (clasificación) Referencias [1] [ Mark (http:/ / www. oreillynet. com/ pub/ au/ 446|Lutz,)] (2010). O'Reilly Media, Inc. (ed.): « Learning Python, Fourth Edition (http:/ / oreilly. com/ catalog/ 9780596158071)» (libro). O'Reilly. Consultado el 11 de febrero de 2010. [2] http:/ / www. softwarepreservation. org/ projects/ FORTRAN/ index. html#By_FORTRAN_project_members [3] Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley, pp. 75. ISBN 0-201-56885-3. (en inglés). [4] Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley, pp. 213. ISBN 0-201-56885-3. (en inglés). [5] Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley, pp. 244. ISBN 0-201-56885-3. (en inglés). [6] http:/ / www. 24. tv/ guia/ [7] http:/ / www. levenez. com/ lang/ history. html [8] http:/ / www. levenez. com/ lang/ [9] http:/ / people. ku. edu/ ~nkinners/ LangList/ Extras/ langlist. htm [10] http:/ / www. alegsaonline. com/ art/ 13. php 17 Fuentes y contribuyentes del artículo Fuentes y contribuyentes del artículo Programa informático Fuente: http://es.wikipedia.org/w/index.php?oldid=36178878 Contribuyentes: Amanuense, Axel.axel, Baiji, Biasoli, Cratón, David0811, Dferg, Diegusjaimes, Elabra sanchez, GermanX, Gsrdzl, HUB, Humberto, Isha, Javierito92, Jgomo3, Jugones55, Lucien leGrey, Matdrodes, Mikiguti, Nagul, Nixón, PoLuX124, Queninosta, RoyFocker, Rudol0075, SergioN, Shooke, Spirit-Black-Wikipedista, Taichi, Tirithel, Vitamine, VityUvieu, Wilfredor, 60 ediciones anónimas Sistema operativo Fuente: http://es.wikipedia.org/w/index.php?oldid=36307661 Contribuyentes: .Sergio, 3coma14, 62.42.228.xxx, A.r.K.a.N.g.e.L., Aadrover, Achata, AdeVega, Adriglezmunera, Aibdescalzo, Airunp, Alakasam, AlbertoDV, Albireo3000, Aleator, Alexan, Alexav8, Alfa989, Alfaprint, AlfonsoERomero, Alhen, Alvaro qc, Amadís, Angelsh, Angus, Antur, Antón Francho, Aparejador, Arcibel, Ascánder, AstroNomo, AtilaElHuno, Axxgreazz, BL, Baiji, Balderai, Barcex, Beto29, Biasoli, BlackBeast, Bluenote, C'est moi, Caiser, Camilo, Carlos Humberto, Carmin, Carvas, Ceixeoida, Cespinoza, Chewie, Chico512, Chuyrocha, Cinabrium, Cjervis, Cobalttempest, ColdWind, Comae, Ctrl Z, DMG, Dagilpe, Dangarcia, Dani pt, Darkpro, David0811, Denarius, Dfcuellar, Dferg, Diegusjaimes, Dodo, Dogor, Don Depresor, Dorieo, Drake 81, Dreitmen, Drever, Drini, Drini2, Edmenb, Edub, Elabra sanchez, Elproferoman, Emijrp, Enrique Suarez Infante, S J, Er Komandante, Erfil, Ezarate, Fernando Estel, Fernd, Fillbit, Fmariluis, Fobenavi, FrancoGG, Frapen, Futbolero, German raul, GermanX, Gmagno, Greek, Guille, Gurgut, Gusgus, Gustronico, Góngora, Götz, HUB, House, Huberto252, Hugo-Luis, Humbefa, Humberto, Icvav, Inexinferis, Interwiki, Isha, JEDIKNIGHT1970, JMPerez, Jacina, Jarfil, Jarke, JavierCantero, Jesuja, Jjvaca, JoRgE-1987, Joanfusan, Johns, JorgeGG, Jorgemty, Jose figueredo, Joseagrc, Joseaperez, Josemiguel93, Joserri, JoulSauron, Jperelli, Jsanchezes, Juank80, Juanmundo, Kanapejm, Katy1234, Kordas, Kved, Larocka, Lasai, Libero, Limbo@MX, Lobo de Hokkaido, Loco085, Lork, Lucien leGrey, Ludavim, LuisArmandoRasteletti, Lujomebe, LupoAlberto, LyingB, MARC912374, Mahadeva, Maldoror, Mamosi, Manuel González Olaechea y Franco, Manuel Trujillo Berges, ManuelGR, Manwë, Matdrodes, Mauricio Xavier, Mbarousse, Miguel etsit, Moriel, Muro de Aguas, Murphy era un optimista, Netito777, Nicop, Nikai, Ninovolador, Nirnaeth, Nnss, OMenda, Opinador, Oscar ., Oscar1922, PACO, Pacostein, Panchurret, Patricio.lorente, Peppepep, Phantom Stranger, Piajeno, Platonides, PoLuX124, Poco a poco, Pollo es pollo, Ppfk, Ppja, Programador, Puskas, Queninosta, R&POLL, Randyc, Renacimiento, Retama, Roberpl, Rodolfoap, RoyFocker, Rsg, RuLf, Rumpelstiltskin, Rαge, Saloca, Sam Hocevar, Sanbec, Santiperez, Sauron, Seanver, Seldaiendil, Sellkyrck, Shooke, Siabef, Since, Smensichowy, Snakeyes, Sonia Rod, Soniautn, Soporterct, Spc, Stifax, Suisui, Superzerocool, Taichi, Tano4595, The worst user, Thorongil, Thunderbird2, TiberioClaudio, Tigerfenix, Tirithel, Tomatejc, Tostadora, Triku, Tuks, Ty25, Vanbasten 23, Vedranell, Venturi, Verbatim, Vitamine, Willtron, Xavier, Xexito, Yakoo, Yeza, Yrithinnd, Zufs, Zurt, conversion script, 1337 ediciones anónimas Aplicación informática Fuente: http://es.wikipedia.org/w/index.php?oldid=35924006 Contribuyentes: Aikurn, Alex mayorga, Antipatico, Biasoli, Briancarloscondenanza, Camilo, Cinabrium, Cronos x, Diegusjaimes, Dodo, Edinjo, Eduararley, Elwikipedista, Emijrp, FedericoMP, Hack-Master, JorgeGG, Jsanchezes, Jugones55, Lampsako, Loco085, MacLahan, Makahaxi, Manuel Trujillo Berges, Matdrodes, Moriel, Mortadelo2005, Netito777, Qwertyytrewqqwerty, Rosarino, SF007, Sapientisimo, Sauron, Shooke, Sms, Soniautn, Speedplus, Superzerocool, Thief12, Un Mercenario, Vubo, Wewe, WikiDeb, Wikier, Wikixav, Wrcdriver, XalD, Zenapau, 69 ediciones anónimas Lenguaje de programación Fuente: http://es.wikipedia.org/w/index.php?oldid=36250537 Contribuyentes: Aadrover, AalvaradoH, Achury, Airunp, Akhran, Alex15090, AlfonsoERomero, Alhen, Almorca, Alvaro qc, Andreasmperu, Angus, Antur, Arcibel, Argentinoo, Arrobando, Ascánder, AstroNomo, Avm, Baiji, Balderai, Balix, Barteik, Bedwyr, BelegDraug, Bob A, Bucephala, Cam367, Camilo, Cansado, Carlita, Carlos Zeas, Carola-zzz, Cesarintel, CharlesKnight, Chfiguer, Cobalttempest, Cookie, Cratón, Danakil, Danielba894, Dat, Descansatore, Dferg, Diego.souto, Diegusjaimes, Digigalos, Diosa, Dodo, Dreitmen, Drini, Dusan, Eamezaga, Edgarchan, Edmenb, Edub, Eduiba, Elabra sanchez, Eligna, Elisardojm, Elproferoman, Elwikipedista, Esterdelakpaz, Execoot, Ezarate, Ezequiel3E, FCPB, FrancoGG, Fsd141, Gcsantiago, Genba, GermanX, Gmarinp, Greek, HHM, HUB, Hompis, Humberto, Icvav, Ignacio Icke, Ilario, Inakivk, Indu, Ingenieros instructivos, Isha, JMPerez, Jarfil, Jarisleif, Javier Carro, Javierito92, Jefrcast, Jesuja, JoRgE-1987, JorgeGG, Jose1100000, Joseaperez, Joseromerogc, Jsanchezes, Juan José Moral, Juanjo64, Juank8041, Jugones55, Julie, Julio Cardmat, JyQ, Kalcetin, Komputisto, Krli2s, Kved, LarA, LeonardoRob0t, LordT, Lucien leGrey, MADAFACK, Mahadeva, Majin boo, Mansoncc, ManuelGR, Manuelt15, Manwë, Martincarr, Matdrodes, Mel 23, Melocoton, MiguelRdz, Moriel, Murphy era un optimista, Mushii, Netito777, Niqueco, Nnss, Nowadays, Oscar ., Otermin, PabloBD, Palita1880, Pan con queso, Pejeyo, Platonides, PoLuX124, Poco a poco, Porao, Queninosta, Qwertyytrewqqwerty, Rata blanca, Rbonvall, Roberpl, RoyFocker, Rsg, Rumpelstiltskin, Rαge, Sanbec, Sappler, Sauron, Scott MacLean, Sebado, Sebasweee, Snakeyes, Spazer, Spc, Superzerocool, Suruena, Swatnio, Taichi, Thormaster, Tigerfenix, Tirithel, TitoPeru, Tomatejc, Tostadora, Triku, Trylks, Unf, Vandal Crusher, Vic Fede, Vitamine, Vubo, Will vm, Xavigivax, Xemuj, YSCO, ZackBsAs, Zeioth, 647 ediciones anónimas 18 Fuentes de imagen, Licencias y contribuyentes Fuentes de imagen, Licencias y contribuyentes Archivo:DSCN0411.JPG Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:DSCN0411.JPG Licencia: GNU Free Documentation License Contribuyentes: User:Nrbelex Archivo:Dg-nova3.jpg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Dg-nova3.jpg Licencia: desconocido Contribuyentes: User Qu1j0t3 on en.wikipedia Archivo:Operating system placement-es.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Operating_system_placement-es.svg Licencia: Creative Commons Attribution-Sharealike 3.0 Contribuyentes: User:Golftheman, User:LyingB Archivo:SOU2.PNG Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:SOU2.PNG Licencia: Public Domain Contribuyentes: User:Fobenavi Archivo:Batchjobb Norwegian.png Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Batchjobb_Norwegian.png Licencia: Public Domain Contribuyentes: User:Harald Hansen Archivo:Componentes sistemas operativos.gif Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Componentes_sistemas_operativos.gif Licencia: Creative Commons Attribution-Sharealike 2.5 Contribuyentes: Angel Chata Imagen:Commons-logo.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Commons-logo.svg Licencia: logo Contribuyentes: User:3247, User:Grunt Image:Wiktionary-logo-es.png Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wiktionary-logo-es.png Licencia: logo Contribuyentes: es:Usuario:Pybalo Imagen:Wikiversity-logo-Snorky.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikiversity-logo-Snorky.svg Licencia: logo Contribuyentes: User:Snorky Archivo:OpenOffice.org Writer.png Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:OpenOffice.org_Writer.png Licencia: GNU Lesser General Public License Contribuyentes: http://hacktolive.org/ Archivo:PET-basic.png Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:PET-basic.png Licencia: Public Domain Contribuyentes: User:Rafax Archivo:FortranCardPROJ039.agr.jpg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:FortranCardPROJ039.agr.jpg Licencia: Creative Commons Attribution-Sharealike 2.5 Contribuyentes: Arnold Reinhold Archivo:CodeCmmt002.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:CodeCmmt002.svg Licencia: Creative Commons Attribution 2.5 Contribuyentes: Original uploader was Dreftymac at en.wikipedia Archivo:Programming language textbooks.jpg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Programming_language_textbooks.jpg Licencia: Public Domain Contribuyentes: User:K.lee Image:Wikibooks-logo.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikibooks-logo.svg Licencia: logo Contribuyentes: User:Bastique, User:Ramac Archivo:Spanish Wikiquote.SVG Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Spanish_Wikiquote.SVG Licencia: desconocido Contribuyentes: User:James.mcd.nz 19 Licencia Licencia Creative Commons Attribution-Share Alike 3.0 Unported http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/ 20