Un lenguaje de programación es un conjunto limitado de palabras y de símbolos que representan procedimientos, cálculos, decisiones y otras operaciones que pueden ejecutar una computadora. A pesar de que en este trabajo parte de la división de lenguajes de programación en imperativos y declarativos (los cuales a su vez se dividen en numerosos subgrupos).
TIPOS DE LENGUAJES
LENGUAJES DE MÁQUINA
En informática, cualquier lenguaje artificial que puede utilizarse para definir una secuencia de instrucciones para su procesamiento por un ordenador o computadora. Es complicado definir qué es y qué no es un lenguaje de programación. Se asume generalmente que la traducción de las instrucciones a un código que comprende la computadora debe ser completamente sistemática. Normalmente es la computadora la que realiza la traducción.
LENGUAJE DE BAJO NIVEL
Se llaman de bajo nivel porque están muy cercanos al hardware del ordenador. Es necesario conocer a fondo la arquitectura de la maquina para la que se va a programar. El primer lenguaje de este tipo que se utilizó fue el lenguaje máquina, que consiste en un conjunto de instrucciones en binario, es decir, con ceros y unos, con los cuales se indica al ordenador qué hacer. Este lenguaje es muy complicado y la posibilidad de cometer errores es muy alta, por lo que ya no se utiliza. Para solventar estas dificultades aparecio el lenguaje ensamblardor, que consiste en asignar una abreviatura a cada instrucción en binario, de forma que sea más fácil recordarla y más difícil equivocarse. Sin embargo, con este lenguaje sigue siendo necesario conocer muy bien el hardware del ordenador.
LENGUAJES DE ALTO NIVEL
Los primeros programas ensambladores producían sólo una instrucción en lenguaje de máquina por cada instrucción del programa fuente. Para agilizar la codificación, se desarrollaron programas ensambladores que podían producir una cantidad variable de instrucciones en lenguaje de máquina por cada instrucción del programa fuente.
LENGUAJES COMPILADOS
En informática, un lenguaje cuyos programas se traducen a código máquina antes de ejecutarse, a diferencia de un lenguaje interpretado, cuyos programas se traducen y ejecutan instrucción por instrucción.
LENGUAJES INTERPRETADOS
Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la corrida de compilación para utilizarlo en una corrida de producción futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar.
LENGUAJES DE PROGRAMACIÓN DECLARATIVOS
Se les conoce como lenguajes declarativos en ciencias computacionales a aquellos lenguajes de programación en los cuales se le indica a la computadora qué es lo que se desea obtener o qué es lo que se esta buscando, por ejemplo: Obtener los nombres de todos los empleados que tengan más de 32 años. Eso se puede lograr con un lenguaje declarativo como SQL.
LENGUAJE DE DESCRIPCION DE MAQUINA
lenguaje de programación, como el PostScript, que se utiliza para describir la salida a una impresora o a una pantalla, que a su vez usan las instrucciones del lenguaje de descripción de página para construir el texto y los gráficos para crear la imagen de la página. El lenguaje de descripción de página es como otros lenguajes de ordenador o computadora, con un flujo lógico de programa que permite una manipulación sofisticada de la salida.
Ligas de interes:
I. http://es.slideshare.net/pefrayo5/tipos-de-lenguaje-de-programacin
Ensamblador se refiere a un tipo de programa, informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina ejecutable directamente por la máquina para la que se ha generado, en si la funcion de un ensamblador es traducir un programa en lenguaje de ensamblador al código correspondiente en lenguaje de maquina.
Ventajas para utilizarlo:
Mayor control de la computadora.
Independencia de lenguaje.
La mayoría de las computadoras pueden ensamblar.
Los programas hechos en lenguaje ensamblador son generalmente más rápidos y consumen menos recursos del sistema.
Desventajas para no utilizarlo:
Demasiado complejo.
Comprensión más profunda de la computadora.
Errores más frecuentes en el programa.
Mayor tiempo de codificación.
Difícilmente portable, es decir, un código escrito para un microprocesador en particular necesita ser modificado muchas veces en su totalidad para poder ser usado en otro microprocesador.
Tipos de ensambladores:
Ensambladores cruzados: Se denominan así a los ensambladores que se utilizan en una computadora que posee el procesador diferente al que tendrán las computadoras donde se va a ejecutar el programa objeto producido.
Ensambladores residentes: Son aquellas que permanecen en la memoria principal de la computadora y cargar para su ejecución al programa objeto producido.
Micro ensambladores: Al programa que indica al intérprete de instrucciones de la CPU como debe actuar se le denomina microprograma. El programa que ayuda a realizar este microprograma se llama micro ensamblador.
Macro ensambladores: Son ensambladores que permiten el uso de macroinstrucciones.
Ensambladores de una fase: Leen una línea y la traducen directamente para producir una instrucción de lenguaje maquina o la ejecuta si se trata de una pseudosinstrucción. Se construye la tabla de símbolos a medida que aparecen las definiciones de variables, etiquetas, etc.
Ensambladores de dos fases: Realiza la traducción en dos etapas: 1° fase leen el programa fuente y construyen la tabla de símbolos, 2° fase vuelve a leer el programa fuente y pueden ir traduciendo totalmente pues reconocen la totalidad de los símbolos.
Un compilador es un programa informático que traduce un
programa escrito en un lenguaje de programación a otro lenguaje de
programación, generando un programa equivalente que la máquina será capaz de
interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero
también puede ser un código intermedio (bytecode), o simplemente texto. Este
proceso de traducción se conoce como compilación.
Un compilador es un programa que permite traducir el código
fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel
inferior (típicamente lenguaje de máquina). De esta manera un programador puede
diseñar un programa en un lenguaje mucho más cercano a como piensa un ser
humano, para luego compilarlo a un programa más manejable por una computadora.
Como parte importante de este proceso de traducción, el
compilador informa a su usuario de la presencia de errores en el programa
fuente.
La construcción de un compilador involucra la división del
proceso en una serie de fases que variará con su complejidad. Generalmente
estas fases se agrupan en dos tareas: el análisis del programa fuente y la
síntesis del programa objeto.
Análisis: Se trata de la comprobación de la corrección del
programa fuente, e incluye las fases correspondientes al Análisis léxico (que
consiste en la descomposición del programa fuente en componentes léxicos),
Análisis sintáctico (agrupación de los componentes léxicos en frases
gramaticales ) y Análisis semántico (comprobación de la validez semántica de
las sentencias aceptadas en la fase de Análisis Sintáctico).
Síntesis: Su objetivo es la generación de la salida
expresada en el lenguaje objeto y suele estar formado por una o varias
combinaciones de fases de Generación de Código (normalmente se trata de código
intermedio o de código objeto) y de Optimización de Código (en las que se busca
obtener un código lo más eficiente posible).Alternativamente, las fases descritas para las tareas de
análisis y síntesis se pueden agrupar en Front-end y Back-end:
Front-end: es la parte que analiza el código fuente,
comprueba su validez, genera el árbol de derivación y rellena los valores de la
tabla de símbolos. Esta parte suele ser independiente de la plataforma o
sistema para el cual se vaya a compilar, y está compuesta por las fases
comprendidas entre el Análisis Léxico y la Generación de Código Intermedio.
Back-end: es la parte que genera el código máquina,
específico de una plataforma, a partir de los resultados de la fase de
análisis, realizada por el Front End.Esta división permite que el mismo Back End se utilice para
generar el código máquina de varios lenguajes de programación distintos y que
el mismo Front End que sirve para analizar el código fuente de un lenguaje de
programación concreto sirva para generar código máquina en varias plataformas
distintas. Suele incluir la generación y optimización del código dependiente de
la máquina.
El código que genera el Back End normalmente no se puede
ejecutar directamente, sino que necesita ser enlazado por un programa enlazador
(linker).
En ciencias de la computación, intérprete o
interpretador es un programa informático capaz de analizar y ejecutar otros
programas, escritos en un lenguaje de alto nivel. Los intérpretes se
diferencian de los compiladores en que mientras estos traducen un programa
desde su descripción en un lenguaje de programación al código de máquina del
sistema, los intérpretes sólo realizan la traducción a medida que sea
necesaria, típicamente, instrucción por instrucción, y normalmente no guardan
el resultado de dicha traducción.
Usando un intérprete, un solo archivo fuente puede
producir resultados iguales incluso en sistemas sumamente diferentes (ejemplo.
una PC y un Xbox One). Usando un compilador, un solo archivo fuente puede
producir resultados iguales solo si es compilado a distintos ejecutables
específicos a cada sistema.
Los programas interpretados suelen ser más lentos
que los compilados debido a la necesidad de traducir el programa mientras se
ejecuta, pero a cambio son más flexibles como entornos de programación y
depuración (lo que se traduce, por ejemplo, en una mayor facilidad para
reemplazar partes enteras del programa o añadir módulos completamente nuevos),
y permiten ofrecer al programa interpretado un entorno no dependiente de la
máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se
conoce comúnmente como máquina virtual).
Para mejorar el desempeño, algunas implementaciones
de programación de lenguajes de programación pueden interpretar o compilar el
código fuente original en una más compacta forma intermedia y después traducir
eso al código de máquina (ej. Perl, Python, MATLAB, y Ruby). Algunos aceptan
los archivos fuente guardados en esta representación intermedia (ej. Python,
UCSD Pascal y Java).
Comparando su actuación con la de un ser humano, un
compilador equivale a un traductor profesional que, a partir de un texto, prepara
otro independiente traducido a otra lengua, mientras que un intérprete
corresponde al intérprete humano, que traduce de viva voz las palabras que oye,
sin dejar constancia por escrito.
En la actualidad, uno de los entornos más comunes
de uso de los intérpretes informáticos es Internet, debido a la posibilidad que
estos tienen de ejecutarse independientemente de la plataforma.
Intérpretes vs compiladores
Cualquier lenguaje puede ser ejecutado tanto vía intérprete o vía compilador, pero algunos lenguajes suelen asociarse más a una vía que a la otra, y por esto son llamados "lenguajes interpretados" o "lenguajes compilados" respectivamente. También puede darse que un programa contenga partes que son implementadas via intérprete y otras vía compilador. También existen intérpretes que incluyen cierta "compilación" en el medio. Son aquellos que compilan a un código intermedio llamado bytecode, que es más eficiente de ejecutar que hacerlo directamente desde el código fuente. En general, la principal desventaja de los intérpretes, es que cuando un programa es interpretado, suele ejecutarse más lento que si el mismo programa estuviese compilado. Esto se debe a que el intérprete debe analizar cada sentencia en el programa en cada ejecución (un análisis en tiempo real). También el acceso a variables es más lento en un intérprete, porque mapear los indentificadores para almacenar las localizaciones debe hacerse repetidas veces en tiempo real.
Un sistema operativo es el encargado de brindar al usuario una forma amigable y sencilla de operar, interpretar, codificar y emitir las ordenes al procesador central para que este realice las tareas necesarias y especificas para completar una orden.
El sistema operativo, es el instrumento indispensable para hacer de la computadora un objeto útil. Bajo este nombre se agrupan todos aquellos programas que permiten a los usuarios la utilización de este enredo de cables y circuitos, que de otra manera serian difíciles de controlar. Un sistema operativo se define como un conjunto de procedimientos manuales y automáticos, que permiten a un grupo de usuarios compartir una instalación de computadora eficazmente.
Para que un ordenador pueda hacer funcionar un
programa informático (a veces conocido como aplicación o software), debe contar
con la capacidad necesaria para realizar cierta cantidad de operaciones
preparatorias que puedan garantizar el intercambio entre el procesador, la
memoria y los recursos físicos (periféricos).
El sistema operativo (a veces también citado
mediante su forma abreviada OS en inglés) se encarga de crear el vínculo entre
los recursos materiales, el usuario y las aplicaciones (procesador de texto,
videojuegos, etcétera). Cuando un programa desea acceder a un recurso material,
no necesita enviar información específica a los dispositivos periféricos;
simplemente envía la información al sistema operativo, el cual la transmite a
los periféricos correspondientes a través de su driver (controlador). Si no
existe ningún driver, cada programa debe reconocer y tener presente la
comunicación con cada tipo de periférico.
De esta forma, el sistema operativo permite la
"disociación" de programas y hardware, principalmente para
simplificar la gestión de recursos y proporcionar una interfaz de usuario (MMI
por sus siglas en inglés) sencilla con el fin de reducir la complejidad del
equipo.
Desde su creación, las computadoras digitales han utilizado
un sistema de codificación de instrucciones en sistema de numeración binaria,
es decir con los 0S. Esto se debe a que los circuitos integrados funcionan con
este principio, es decir, hay corriente o no hay corriente.
En el origen de la historia de las computadoras ( hace unos
cuarenta años), los sistemas operativos no existían y la introducción de un
programa para ser ejecutado se convertía en un increíble esfuerzo que solo
podía ser llevado a cabo por muy pocos expertos. Esto hacia que las
computadoras fueran muy complicadas de usar y que se requiriera tener altos
conocimientos técnicos para operarlas. Era tan complejo su manejo, que en
algunos casos el resultado llegaba a ser desastroso.
Además, el tiempo requerido para introducir un programa en
aquellas grandes máquinas de lento proceso superaba por mucho el de ejecución y
resultaba poco provechosa la utilización de computadoras para resolución de
problemas prácticos.
Se buscaron medios más elaborados para manipular la
computadora, pero que a su vez simplificaran la labor del operador o el
usuario. Es entonces cuando surge la idea de crear un medio para que el usuario
pueda operar la computadora con un entorno, lenguaje y operación bien definido
para hacer un verdadero uso y explotación de esta. Surgen los sistemas
operativos.
PARA RESUMIR VEAMOS EL SIGUIENTE VIDEO:
1.NECESIDAD DE LOS SISTEMAS OPERATIVOS Todo sistema tiene unas necesidades mínimas en la configuración de los componentes que son indispensables para poder trabajar. Pero la verdad es que todos sabemos que con los mínimos no basta.
Por lo general los sistemas operativos ponen unos requisitos mínimos de hardware para que el sistema funcione de forma adecuada. Pero todos sabemos que además del sistema operativo el ordenador tiene que ejecutar programas con lo que elegir equipos con la configuración mínima que nos recomienda el sistema operativo es un error que hará que al cabo de un año el equipo pida a gritos una ampliación.
Claro está que no todos los sistemas operativos gestionan de igual manera los recursos*, y de esta forma no podemos comparar la gestión que hace Mac, con Linux o Windows. Cada sistema gestiona de forma distinta y lo que puede ser insuficiente para uno de ellos puede resultar adecuado para los demás. En este caso el sistema que necesita más recursos para funcionar adecuadamente son los sistemas Windows.
Y no toda la responsabilidad de esta gestión recae sobre el sistema operativo, sino que muchos de los programas que utilizamos con ellos son grandes consumidores de recursos que hacen que nuestra experiencia delante del ordenador sea de lo más improductiva. Antivirus, programas ofimáticos, correo electrónico, consumen gran parte de los recursos de los ordenadores con sistemas Windows, haciendo que todo el funcionamiento sea lento y por lo tanto, el usuario puede llega a desesperarse.
Además otra cuestión muy a tener en cuenta a la hora de realizar la compra de un equipo es el ciclo de vida del mismo con el sistema operativo que hemos elegido. Con los sistemas Windows tenemos la experiencia de ir necesitando cada vez más recursos a medida que se van instalando Service Pack. Así un equipo que funcionaba razonablemente bien con 256 MB de memoria con Windows XP, tras instalar tres Service Pack la verdad es que deja mucho que desear en su rendimiento.
Por eso es recomendable en la empresa no comprar equipos con los requisitos mínimos para su funcionamiento, sino que debemos elegir configuraciones de hardware que superen un poco estas necesidades básicas para su funcionamiento. La experiencia de los usuarios en su día a día mejorará y sobre todo se sostendrá en el tiempo con soltura durante el ciclo de vida previsto para nuestro hardware.
2.TIPOS DE SISTEMAS OPERATIVOS
Interfaz de Línea de Comandos.
La forma de interfaz entre el sistema operativo y el usuario
en la que este escribe los comandos utilizando un lenguaje de comandos
especial. Los sistemas con interfaces de líneas de comandos se consideran más
difíciles de aprender y utilizar que los de las interfaces gráficas. Sin
embargo, los sistemas basados en comandos son por lo general programables, lo
que les otorga una flexibilidad que no tienen los sistemas basados en gráficos
carentes de una interfaz de programación.
Interfaz Gráfica del Usuario.
Es el tipo de visualización que permite al usuario elegir
comandos, iniciar programas y ver listas de archivos y otras opciones
utilizando las representaciones visuales (iconos) y las listas de elementos del
menú. Las selecciones pueden activarse bien a través del teclado o con el
mouse.
Para los autores de aplicaciones, las interfaces gráficas de
usuario ofrecen un entorno que se encarga de la comunicación con el ordenador o
computadora. Esto hace que el programador pueda concentrarse en la
funcionalidad, ya que no esta sujeto a los detalles de la visualización ni a la
entrada a través del mouse o el teclado. También permite a los programadores
crear programas que realicen de la misma forma las tareas más frecuentes, como
guardar un archivo, porque la interfaz proporciona mecanismos estándar de
control como ventanas y cuadros de diálogo. Otra ventaja es que las
aplicaciones escritas para una interfaz gráfica de usuario son independientes
de los dispositivos: a medida que la interfaz cambia para permitir el uso de
nuevos dispositivos de entrada y salida, como un monitor de pantalla grande o
un dispositivo óptico de almacenamiento, las aplicaciones pueden utilizarlos
sin necesidad de cambios.
3.COMPONENTES Y SERVICIOS BASICOS DE UN SISTEMA OPERATIVO
El sistema operativo está compuesto por un conjunto de
paquetes de software que pueden utilizarse para gestionar las interacciones con
el hardware.Estos elementos se incluyen por lo general en este conjunto de
software:
• El núcleo, que representa las funciones básicas del
sistema operativo, como por ejemplo, la gestión de la memoria, de los procesos,
de los archivos, de las entradas/salidas principales y de las funciones de
comunicación.
• El intérprete de comandos, que posibilita la comunicación
con el sistema operativo a través de un lenguaje de control, permitiendo al
usuario controlar los periféricos sin conocer las características del hardware
utilizado, la gestión de las direcciones físicas, etcétera.
• El sistema de archivos, que permite que los archivos se
registren en una estructura arbórea.
El S.O. ofrece a los programas una serie de servicios para
trabajar en el computador:
• Ejecución de programas
• Operaciones de E/S
• Manipulación de archivos y directorios
• Comunicación entre procesos
• Comunicación con equipos remotos
• Administración de la protección y seguridad
• Leer el estado del sistema (hora, nº de procesos, etc.)
4.ADMINISTRACION DE PROCESOS
La implementación del modelo de procesos se logra debido a
que el sistema operativo almacena en una tabla denominada tabla de control de
procesos información relativa a cada proceso que se esta ejecutando en el
procesador. Cada línea de esta tabla representa a un proceso.
La información que se almacena es la siguiente:
• Identificación del proceso.
• Identificación del proceso padre.
• Información sobre el usuario y grupo.
• Estado del procesador.
• Información de control de procesoInformación del
planificador.
• Segmentos de memoria asignados.
• Recursos asignados.
5.ADMINISTRACION DE LA MEMORIA
La parte del sistema operativo que administra la memoria se
llama administrador de la memoria. Para ello existen diferentes esquemas de
administración de memoria desde los mas simples hasta los mas elaborados entre
los cuales se ubican:
Administración de la memoria sin intercambio o paginación.
Los sistemas de administración de memoria se pueden
clasificar en dos tipos. Los que desplazan los procesos de la memoria principal
al disco y viceversa durante la ejecución (intercambio y paginación) y aquellos
que no.
Monopogramación sin intercambio o paginación.
Es en forma secuencial pues solo se tiene un objeto en
memoria en cada instante, el usuario carga toda la memoria con un programa,
esto implica que cada proceso debe contener controladores de dispositivo para
cada uno de los dispositivos E/S que utilice.
Multiprogramación y uso de la memoria.
La multiprogramación facilita la programación de una
aplicación al dividirla en dos o mas procesos. La mayoría de los procesos tardan
cierto tiempo en la espera de datos de dispositivos E/S.
Un modelo para el uso y aprovechamiento de la CPU es el
modelo probabilístico dado por la fórmula :
Uso de la CPU = 1 - pn
Multiprogramación con particiones fijas
El objetivo en todo esto es tener mas de un proceso en
memoria a la vez, solución posible sería dividir la memoria en n partes al
inicio de una sesión de uso de la máquina, pero aún así se obtiene el
desperdicio de particiones grandes con una tarea pequeña, la respuesta puede
ser tener particiones pequeñas también.
Las tareas que van llegando se forman hasta que una
partición adecuada está disponible, en cuyo momento la tarea se carga en esa
partición y se ejecuta hasta terminar.
Intercambio
En un sistema por lotes la organización de la memoria en
particiones fijas es adecuado pero en un ambiente multiusuario la situación es
distinta con el tiempo compartido, ya que existen mas usuarios de los que puede
albergar la memoria, por lo que es conveniente albergar el exceso de los
procesos en disco., por supuesto para ser ejecutados estos procesos deben ser
trasladados a la memoria principal. Al traslado de procesos de disco a memoria
y viceversa se le llama intercambio.
Multiprogramación con particiones variables.
Mediante un algoritmo de administración de memoria las
particiones variables varían de forma dinámica durante el uso de la máquina,
evitando desperdicio de memoria
Otros métodos de administración de memoria que tenemos son:
La administración de memoria con mapa de bits
la memoria se divide en unidades de asignación, a cada
asignación le corresponden un bit en el mapa de bits, un mapa de bits es una
forma sencilla para llevar un registro de las palabras de la memoria en una
cantidad fija de memoria.
La administración de memoria con listas ligadas
Otra forma de mantener un registro en memoria es mediante
una lista ligada donde cada entrada de la lista específica un hueco o un
proceso.
La administración de memoria con el sistema de los asociados
Basado en el sistema binario o utiliza para las direcciones. EL SIGUIENTE VIDEO CONCLUYE:
6.Memoria Virtual
El método diseñado por Fotheringham en 1961 se conoce como
Memoria Virtual, la idea es que el tamaño combinado de la pila, programa y
datos puede exceder la memoria física disponible para ello. El S.O. mantiene en
memoria aquellas partes del programa que se deben permanecer en memoria y el
resto lo deja en disco, las partes entre el disco y la memoria se intercambian
de modo que se vayan necesitando.
Paginación
El espacio de direcciones de cada proceso se divide en
bloques de tamaño uniforme llamados páginas, los cuales se pueden colocar
dentro de cualquier para página marco disponible en memoria. Cuando las tablas
de páginas son muy grandes se puede utilizar un esquema de paginación de varios
niveles para que las páginas se paginen a sí mismas.
Existen distintos niveles de paginación y a su vez distintos
modelos de computadoras han trabajado con ellas.