viernes, 16 de abril de 2010

Tipos de Lenguaje

Los tipos de Lenguaje de programacion los podemos clasificar en dos grandes grupos.

Los lenguajes de programacion de bajo nivel y los de alto nivel. El tipo de lenguaje de programación bajo nivel depende totalmente de la máquina, en este caso de la maquina u ordenador, estos solo entienden el lenguaje binario o el código máquina que consiste en ceros y unos. Es decir que para realizar, cualquier acción, solo utilizan este tipo de lenguaje de programación.

Los lenguajes de programación mas cercanos a la arquitectura del hadware pertenecen al tipo de lenguaje de programación de bajo nivel. Mientras que los lenguajes de programación que se encuentran más próximos a los usuarios y programadores pertenecen al tipo de programación de alto nivel.

El tipo de lenguaje de programación de bajo nivel es totalmente dependiente de la computadora u ordenador, es decir que no podemos utilizarlo en cualquier otra. Este tipo de lenguaje de programación está prácticamente diseñado a la medida del hardware y aprovecha las características de este. Dentro de este tipo de lenguajes de programación podemos citar al lenguaje máquina y al lenguaje ensamblador.

Dentro del tipo de lenguajes de programación de alto nivel tenemos a todos aquellos lenguajes de programación que son más afines al lenguaje natural que al lenguaje máquina. Estos lenguajes de programación son completamente independientes de la arquitectura del hardware de la computadora u ordenador. Por lo que en general, un programa escrito con un lenguaje de programación de alto nivel lo podemos utilizar en cualquier otra computadora.

Estos lenguajes de programación de alto nivel solo necesitan un traductor que entienda el código fuente y las caracteristicas de la máquina para poder funcionar correctamente.

Tambien es conocido el lenguaje de programación de medio nivel, que es una mezcla de los dos anteriores. A este tipo de lenguaje de programación pertenecen todos aquellos lenguajes que llevan a cabo acciones como: acceder a registros del sistema, usar direcciones de memoria(caracteristicas de los lenguajes de programación de bajo nivel) pero a la vez efectúan operaciones de los lenguajes de alto nivel. Dentro de este tipo de lenguajes de programación de nivel medio tenemos al lenguaje de programación C.

Ensambladores

Son lenguajes de programación.

La importancia del lenguaje ensamblador radica principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de k en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto seria que los programas en ensamblador ocupan menos espacio en memoria


Ventajas y Desventajas del lenguaje Ensamblador....

Ventajas:

1. Velocidad.- Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el mas cercano a la máquina la computadora lo procesa mas rápido.

2. Eficiencia de tamaño.- Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan librerías y demás como son los lenguajes de alto nivel.

3. Flexibilidad.- Es flexible por que todo lo que puede hacerse con una máquina puede hacerse con el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel tienen en una u otra forma limitante para explotar al maximo los recursos de la máquina. O sea que en el lenguaje ensamblador se pueden hacer tareas especificas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permiten.

Desventajas:

1.Tiempo de Programación. Como es un lenguaje de bajo nivel requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Por otro lado requiere más cuidado por parte del programador, pues es propenso a que los errores de lógica se reflejen mas fuertemente en la ejecución.
2.Programas fuente grandes.- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos mas instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores.

3. Peligro de afectar recursos inesperadamente.- Que todo error que podamos comenter, todo riesgo que podamos tener, podemos afectar los recursos de la máquina, programar en este lenguaje lo más común que pueda pasar es que la máquina se bloquee o se reinicialize. Por que con este lenguaje es perfectamente posible ( y sencillo) realizar recuencias de instrucciones inválidas que normalmente no aparecen al usar un lenguaje de alto nivel.


4. Falta de portabilidad.- Porque para cada maquina existe un lenguaje ensamblador; por ello evidentemente no es una seleccion apropiada de lenguaje cuando deseamos codificar en una máquina y luego llevar los programas a otros sistemas operativos o modelos e computadoras.

Compiladores

Un compilador es un programa Informático que traduce un progrma 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 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 diseñador 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.

Interpretes

Programa Informático que analiza el programa fuente y lo ejecuta directamente, sin generar ningun código equivalente. Su acción equivale a la de un intérprete humano, que traduce las frases que oye sobre la marcha, sin producir ningun escrito permanente. Interpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios:

  • Un interprete facilita la búsqueda de errores, pues la ejecución de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables etc..). Ademas, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecución.

  • Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En cambio un interprete se ve obligado generalmente analizar cada instrucción tantas veces como se ejecute (incluso miles o millones de veces).
  • Un interprete permite utilizar funciones y operadores más potentes como por ejemplo ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto exigen un interprete, se llaman un interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescienden de este tipo de operadores.



Sistemas Operativos

Un sistema operativo es un programa que actúa como intermediario entre el usuario y el hardware de una computadora y su propósito es proporcionar un entorno en el cual el usuario pueda ejecutar programas. El objetivo principal de un sistema operativo es lograr que el sistema de computación se use de manera cómoda, y el objetivo secundario es que el hardware de la computadora se emplee de manera eficiente.

Un sistema operativo es en sí mismo un programa de computadora. Sin embargo, es un programa muy especial, quizá el más complejo e importante en una computadora.

El sistema operativo despierta a la computadora y hace que reconozca a la CPU, la memoria, el teclado, el sistema de video y las unidades de disco. Además proporciona la facilidad para que los usuarios se comuniquen con la computadora y sirve de plataforma apartir de la cual se corran programas de aplicación.

Cuando se enciente una computadora, lo primero que ésta hace es llevar acabo un autodiagnósitco llamado auto prueba de encendido. Durante este autodiagnósitico, la computadora identifica su memoria, sus discos, su teclado, su sistema de vídeo y cualquier otro dispositivo conectado a ella. Lo siguiente que la computadora hace es buscar un sistema operativo para arrancar (boot).
Una vez que la computadora hapuesto en marcha su sistema operativo, mantiene al menos parte de éste en su memoria en todo momento. Mientras la computadotra esté encendida, el sistema operativo tiene 4 tareas principales:
  • Proporcionar ya sea un interfaz de línea de comando o una interfaz gráfica al usuario, para que este ultimo se pueda comunicar con la computadora.

-Interfaz de línea de comando: Se introducen palabras y símbolos desde el teclado de la computadora, ejemplo, el MS-DOS.

-Interfaz gráfica del usuario (GUI): Se seleccionan las acciones mediante el uso de un mouse para pulsar sobre figuras llamadas iconos o seleccionar opciones de los menús.

  • Administrar los dispositivos de hardware en la computadora. El sistema operativo sirve de intermediario entre los programas y el hardware.
  • Administrar y mantener los sistemas de archivo de disco. Los SO agrupan la información dentro de compartimientos lógicos para almacenarlos en el disco. Estos grupos de información son llamados archivos. Los archivos pueden contener instrucciones de programas o información creada por el usuario. El SO mantiene una lista de los archivos en un disco, y nos proporciona las herramientas necesarias para organizar y manipular estos archivos.
  • Apoyar a otros programas. Por ejemplo, listar los archivos, grabarlos en el disco, eliminar archivos, revisar espacio disponible, etc.


Necesidad de los Sistemas Operativos

La necesidad actual de compartir información en empresas, instituciones y en centros educativos es cada vez mayor. Es por esta razón que es importante la implementación de este tipo de servicios, que a más de la facilidad de compartir la información nos ahorran costos.
Existen varios tipos de Sistemas de archivos distribuidos como el NFS, GústerFS, CODA cada uno tiene sus ventajas que serán aprovechadas dependiendo del ambiente en que se vaya a implementar.

EJEMPLO.


NTF-- El Network File System (Sistema de archivos de red), o NFS, es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales.

CODA-- Fue desarrollado como un sistema de ficheros distribuido almacena ficheros en uno o más ordenadores sincronizados entre sí llamados servidores, y los hace accesibles a otros ordenadores llamados clientes, para quienes el acceso a estos ficheros es transparente. La principal ventaja es la compartición de ficheros y su gestión centralizada desde los servidores (como por ejemplo el control de acceso y la gestión de copias de seguridad). Esta compartición de ficheros es especialmente útil para grupos de trabajo que comparten documentos, aunque también es posible compartir software, como por ejemplo, un procesador de textos.

Tipos de Sistemas Operativos

Sistemas operativos de multiprogramación (o Sistemas operativos de multitarea)

Soporta la ejecución de dos o más trabajos activos al mismo tiempo.
• Su objetivo es tener varias tareas en la memoria principal.

Las características de un Sistema operativo de multiprogramación son las siguientes:

• Mejora productividad del sistema y utilización de recursos
• Multiplexa recursos entre varios programas
• Soporta múltiples usuarios
• Requiere validación de usuario para seguridad y protección

Estos sistemas operativos se caracterizan por tener múltiples programas activos, compitiendo por los recursos del sistema: procesador, memoria, dispositivos periféricos.

Sistemas operativos de red

Son aquellos que mantienen a dos o más computadoras unidas a través de algún medio de comunicación, con el objetivo de poder compartir los diferentes recursos y la información del sistema.

• Por lo regular son utilizados en: Novell Netware, Personal Netware, Lan Manager, etc ..


Componentes y Servicios Basicos de un Sistema

componenentes:


_Proceso
_Memoria
_Entrada/salida
_Redes
_Protección
_Archivos
_Interpretes de ordenes




Servicios del SO
_ 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.)

Administración de Procesos

La organizació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 está ejecutando en el procesador. Cada línea de esta tabla representa a un proceso.
La información que se almacena es la siguiente:


1) Identificación del proceso.
2) Identificación del proceso padre.
3) Información sobre el usuario y grupo.
4) Estado del procesador.
5) Información de control de proceso
6) Información del planificador.
7) Segmentos de memoria asignados.
8) Recursos asignados.

Administración de Memoria

Durante la evolución de la arquitectura de computadoras, la cantidad de memoria principal presente en las mismas se ha incrementado. Sin embargo, el tamaño de los programas ha aumentado más rápidamente que la memoria disponible, siendo en el dominio del hard x soft, el equivalente a afirmar una delantera del software respecto al hardware.
Con el advenimiento de los lenguajes de programación orientada a objetos (OOP) se tiene un claro ejemplo de la necesidad de eficientizar el manejo de memoria por sobre las otras características de un programa, siendo en esta filosofía más importante el concepto de polimorfismo o herencia que el de velocidad de ejecución.

Se distinguen los siguientes propósitos del sistema de administración de memoria:

Protección. Si varios programas comparten la memoria principal, se debería asegurar que el programa no sea capaz de cambiar las ubicaciones no pertenecientes a él. Aunque una acción de escritura puede tener efectos más graves que una de lectura, esta última tampoco debería estar permitida, para proporcionar algo de privacidad al programa. Dado que muchos lenguajes permiten el uso de punteros dinámicos y arreglos, la verificación sólo en tiempo de compilación no es suficiente, por lo que además se debe efectuar una verificación en tiempo de ejecución.

Compartimiento. Este objetivo parece contradecir al anterior, sin embargo a veces es necesario para los usuarios poder compartir y actualizar información (por ejemplo, en una base de datos) y, si se organiza la tarea de entrada a la misma, se puede evitar el tener varias copias de la rutina. Por supuesto que debe existir una protección contra cambios de esta rutina, permitiendo así el control del acceso a una porción compartida de memoria.

Reubicación. La técnica de multiprogramación requiere que varios programas ocupen la memoria al mismo tiempo. Sin embargo no se sabe con anticipación donde será cargado cada programa por lo que no es práctico usar direccionamiento absoluto de memoria.

Organización física. Debido al costo de una memoria principal rápida, ésta se usa en conjunto con una memoria secundaria mucho más lenta (y por con siguiente, barata) a fines de extender su capacidad, por ejemplo los dispositivos de almacenamiento magnéticos tales como los discos rígidos. Esta clasificación de la memoria hace necesario el control del flujo de la información entre esas dos clases de memoria. Éste control podrían realizarlo los programadores, lo que incrementaría el tiempo de desarrollo de una aplicación y se tendrían que resolver problemas muy complejos como saber de antemano donde y con cuanta memoria se dispone, información que no siempre posee el programador dada la reubicación dinámica. Por ello es más conveniente que esta tarea la realice el sistema, de manera transparente al usuario.

Organización lógica. Aunque la mayor parte de las memorias son organizadas linealmente con un direccionamiento secuencial, esto difícilmente concuerde con el camino seguido por el programa, debido al uso de procedimientos, funciones, subrutinas, arreglos, etc. Si la administración se hace a través de varias direcciones, cada estructura lógica podría considerarse una entidad independiente (segmento). Las ventajas serían que cada uno de los segmentos podrían ser cargados y compilados independientemente y se tendría acceso directo a cada uno de ellos.

Memoria Virtual

Memoria virtual es una zona de almacenamiento temporal utilizado por un equipo para ejecutar programas que necesitan más memoria de la existente, almacenando en ella los segmentos de acceso no inmediato.

Esto, aunque pueda parecer lo mismo, no lo es. Para empezar, debemos tener en cuenta que cuando cargamos un programa pasa a la memoria para ejecutarse, pero todo el programa no se ejecuta al mismo tiempo, sino que realmente se ejecuta por segmentos, pudiéndose llegar (y de hecho se llega) al caso de haber partes del programa que ni tan siquiera se ejecutan.
Precisamente es en estos casos cuando vemos la verdadera función de la memoria virtual y como funciona.


RESUMEN DE CÓMO SERIA ESTA FUNCION:


Cuando nosotros cargamos un programa, este es leído del disco duro y pasa a la RAM, desde donde se ejecuta, empezando por el propio arranque del programa. Pero no todo el programa se ejecuta a la vez, sino que se ejecuta por segmentos, dependiendo de aquellos que se vayan a utilizar de forma inmediata, empezando por el inicio del programa, definiéndose estos mediante un sistema de paginación o también llamada “segmentación paginada”
Dado este sistema de funcionamiento, realmente no es necesario que todo el programa permanezca en la RAM, ya que tan sólo es preciso que permanezcan aquellas partes del programa que son de ejecución inmediata. El resto (que también debe permanecer en memoria) pasa a la memoria virtual, recuperándose aquellas partes (segmentos) que se van a ejecutar en el momento de hacerlo y volviendo a pasar a la RAM, desde donde se ejecutan, y volviendo a la Memoria virtual una vez ejecutadas.