Download Software - IUPSM

Document related concepts

Sistema operativo wikipedia , lookup

Emulador wikipedia , lookup

EXE wikipedia , lookup

Núcleo (informática) wikipedia , lookup

Anillo (seguridad informática) wikipedia , lookup

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