Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso:
Juan José Arévalo Plá
Cátedra:
Víctor Veriansky
Página 1 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Índice
Página 2 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
1. Tipos de lenguajes.
Durante los últimos años los avances experimentados en materia de Hardware han sido enormes,
por ejemplo hace más de una década contábamos con las 386 DX con una velocidad de
procesador de 60MHZ y actualmente, ya hay disponibles procesadores de 4 núcleos a un precio
accesible (alrededor de 300 €). Estos procesadores son los Intel Core 2 Quad y sus velocidades
de proceso oscilan entre 2.400 y 2.666Mhz, aunque su principal ventaja es la elevada cantidad de
memoria caché de segundo nivel: 8 Mb. La memoria caché de un ordenador es la que almacena
las operaciones que más se repiten, por lo que se almacenan en esa memoria en concreto para
acelerar el proceso.
Ahora, bien para poder aprovechar las capacidades del hardware debemos contar con el software
adecuado. Con este objetivo se diseñaron los lenguajes de programación, algunos de propósito
general (ejemplo: Basic); y otros con un ámbito especifico de aplicación por ejemplo Fox Pro fue
diseñado para el trabajo con grandes bases de datos.
Lenguajes de alto nivel: Son similares al lenguaje humano ya que utilizan palabras en inglés
como instrucciones; y por lo tanto son más sencillo de aprender respecto de los anteriores. Ej.:
Basic, Pascal, FORTRAN.
Surgieron con posterioridad a los anteriores con los objetivos que se mencionan a continuación.
Usar el mismo programa en distintos equipos teniendo un traductor o compilador, provisto por el
fabricante, para obtener el programa ejecutable en lenguaje binario del equipo en cuestión; en
consecuencia no se necesita conocer el hardware de dicho equipo.
Acercarse al lenguaje natural, logrando de esta manera que el programa sea fácil de escribir y
leer; y en consecuencia reduciendo la posibilidad de errores que se producían con el lenguaje
Página 3 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
máquina porque utilizamos palabras en inglés en vez de cadenas de ceros y unos sin un
significado aparente.
Proveer las rutinas más usadas como entrada / salida, funciones matemáticas, funciones de
manejo de bases de datos, de esta manera se fomenta la reutilización.
Hay que aclarar que las categorías anteriores pueden variar según el autor, ya que por ejemplo el
lenguaje C, se clasifica como de nivel intermedio por poseer características de las dos categorías;
pero otros autores lo clasifican como de bajo nivel.
El único problema que tienen los lenguajes de alto nivel es la gran cantidad que hay actualmente
en uso, y las versiones que se han desarrollado ya que suelen cambiar algunas instrucciones.
2da clasificación: según la forma en que trabajar de los programas a la filosofía con que fueron
concebidos:
Lenguajes orientados a objetos: El diseño de los programas se basa más en los datos y
su estructura. Se utilizan objetos para trabajar, y en este se incluyen los datos (variables)
y las operaciones que actúan sobres estos. Es importante remarcar que se deben tener
sólidos conocimientos de programación estructurada, para poder comprender
correctamente como trabajan los lenguajes orientados a objetos. (C++, Java, Smalltalk).
Página 4 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Lenguaje máquina
El lenguaje que entienden las computadoras directamente es el lenguaje binario (ceros y unos),
denominados bits. Este fue el primer lenguaje que se usó. Su principal desventaja fue era muy
difícil su programación; y esto hizo que se dejara de usar. En la mayoría de los casos se usaba el
sistema hexadecimal para facilitar la escritura.
Lenguaje ensamblador
Constituyo el primer intento de reemplazar al lenguaje máquina por uno más similar al de las
personas. En este cada instrucción es equivalente a una instrucción del lenguaje máquina, y para
su escritura se usan palabras nemotécnicas que reemplazan a las cadenas de bits.
Desventajas:
FORTRAN
El nombre es la abreviatura de FORmula TRANslator (traductor de formulas. Fue creado en
1954 en los Estados Unidos por IBM. Fue el primer lenguaje de alto nivel. Antes se escribían
todos los programas en lenguaje máquina o en ensamblador. Es un lenguaje ideal para
aplicaciones técnicas y científicas por su gran potencia para realizar cálculos matemáticos. Su
principal desventaja es su limitación para aplicaciones de gestión, manejo de archivos,
tratamiento de cadenas de caracteres, e informes.
COBOL
Su nombre es la abreviatura de COmmon Business Oriented Language. Fue creado en 1960 por
un comité denominado CODASYL (COnference on DAta SYstems, Languages), patrocinado
por el departamento de defensa de los Estados Unidos con el objetivo de crear un lenguaje
universal para aplicaciones comerciales.
Entre sus características más importantes se pueden mencionar: es autodocumentado, su
facilidad para el manejo de archivos y edición de informes. Sus desventajas son: la rigidez de su
sintaxis, la extensión de sus sentencias, tener que escribir todos los elementos al máximo detalle,
y la ausencia de funciones matemáticas.
PL/1
Sus siglas son la abreviatura de Programming Language/1.Creado a comienzos de los setenta por
IBM para usarse en los equipo del sistema 360. Para su diseño se tomo como base los lenguajes
Página 5 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Algol, Cobol y Fortran con el objetivo de obtener un lenguaje para uso general. (Aplicaciones
Técnicas, Gestión, desarrollo de sistemas, etc).
Como ventajas se pueden mencionar la sintaxis flexible que posee el lenguaje, es decir su
libertad de escritura; y que soporta la programación estructurada y el diseño modular. La única
desventaja es que al ser un lenguaje de propósito general, no supero a sus predecesores en
aplicaciones específicas.
BASIC
Fue diseñado por los profesores John. Kemeny y Thomas E. Kurst del Dartmouth College
(Estados Unidos) en 1965, con el fin de poseer un lenguaje fácil de aprender, como se indica en
su nombre Beginners All purpose Symbolic Instruction Code (Código de instrucción simbólico
de propósito general para principiantes.
Cabe destacar que su facilidad de aprendizaje hizo que se convirtiera en uno de los lenguajes
más populares de la actualidad, utilizándose para diversas aplicaciones. Hoy en día el Visual
Basic de Microsoft es uno de los lenguajes más utilizados en las PC´s.
PASCAL
Fue creado en 1970 por el matemático suizo Nicklaus Wirth, inspirándose en el lenguaje Algol.
Su nombre proviene del filósofo y matemático francés Blasise Pascal, que inventó la primera
máquina de tipo mecánico para sumar. Se creó con el fin de poder enseñar los conceptos y
técnicos de programación, sin embargo se popularizó utilizándose para desarrollar todo tipo de
aplicaciones.
Aportó los conceptos de tipo de datos, programación estructurada y diseño descendente, y
además fue predecesor del lenguaje ADA. La ventaja que posee que los programas desarrollados
en este se ejecutan con un mínimo de memoria, y sus desventajas son sus limitaciones en la
manejo de archivos, en la entrada y salida y por último que no es fácil de aprender. Actualmente
el Borland Delphi es el descendiente del Pascal.
Hace algunos años este lenguaje se enseñaba en la materia.
C/C++
Creado en 1972 por Dennis Ritchie en los laboratorios de AT&T Bell, con la intención de
conseguir un lenguaje que fuese independiente de la máquina con cual escribir su sistema Unix.
Inicialmente fue diseñado para la programación de sistemas, pero se ha utilizado para escribir
desde juegos hasta sistemas operativos como el Unix, DOS, y Windows.
Sus características son: programación estructurada para resolver tareas de bajo nivel, y las
diversas librerías de rutinas que posee.
El C++ fue una ampliación del lenguaje C incorporándole la programación orientada a objetos.
ADA
Fue el último gran intento de obtener un lenguaje de propósito general. El Departamento de
Defensa de los Estados Unidos encargó el diseño a la empresa Honeywell Bull; tomándose para
su desarrollo las mejoras características del Pascal, Algol, y PL/1. El nombre Ada es honor a
Augusta Ada Byron, condesa de Lovelace, la primera programadora de la historia.
Sus principales características son: tipos de datos abstractos, programación estructurada. El
principal inconveniente es su gran extensión.
LISP Y PROLOG
Lisp es la abreviatura de (LISt Procesor) y el Prolog son usados en la inteligencia artificial. El
Lisp fue creado a finales de los 50 por el matemático del M.I.T John McCarthy,
Página 6 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
El Prolog fue creado en los setenta, proveniene del francés PROgrammation en LOGique, es un
lenguaje para programar artefactos electrónicos mediante el paradigma lógico con técnicas de
producción final interpretada. Es bastante conocido en el área de la Ingeniería informática para
investigación en Inteligencia Artificial.
JAVA
Fue diseñado por la compañía Sun Microsystems Inc, con el propósito de crear un lenguaje que
pudiera funcionar en redes computacionales heterogéneas (redes de computadoras formadas por
más de un tipo de computadora, ya sean PC, MAC's, estaciones de trabajo, etc.), y que fuera
independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de
Java puede ejecutarse en cualquier máquina o plataforma. El lenguaje fue diseñado con las
siguientes características en mente:
Simple. Elimina la complejidad de los lenguajes como "C" y da paso al contexto de los
lenguajes modernos orientados a objetos.
Orientado a Objetos. La filosofía de programación orientada a objetos es diferente a la
programación convencional.
Familiar. Como la mayoría de los programadores están acostumbrados a programar en C
o en C++, el sintaxis de Java es muy similar al de estos.
Robusto. El sistema de Java maneja la memoria de la computadora por ti. No te tienes
que preocupar por apuntadores, memoria que no se esté utilizando, etc. Java realiza todo
esto sin necesidad de que uno se lo indique.
Seguro. El sistema de Java tiene ciertas políticas que evitan se puedan codificar virus con
este lenguaje. Existen muchas restricciones, especialmente para los applets, que limitan
lo que se puede y no puede hacer con los recursos críticos de una computadora.
Portable. Como el código compilado de Java (conocido como byte code) es interpretado,
un programa compilado de Java puede ser utilizado por cualquier computadora que tenga
implementado el interprete de Java.
Independiente a la arquitectura. Al compilar un programa en Java, el código resultante
un tipo de código binario conocido como byte code. Este código es interpretado por
diferentes computadoras de igual manera, solamente hay que implementar un intérprete
para cada plataforma. De esa manera Java logra ser un lenguaje que no depende de una
arquitectura computacional definida. Puede ejecutar diferentes líneas de código al mismo
tiempo.
Interpretado. Java corre en máquina virtual, por lo tanto es interpretado.
Dinámico. Java no requiere que compiles todas las clases de un programa para que este
funcione. Si realizas una modificación a una clase Java se encarga de realizar un
Dynamic Bynding o un Dynamic Loading para encontrar las clases.
Java puede funcionar como una aplicación sola o como un "applet", que es un pequeño programa
hecho en Java. Los applets de Java se pueden "pegar" a una página de Web (HTML), y con esto
puedes tener un programa que cualquier persona que tenga un browser compatible podrá usar.
Página 7 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Estr
ucturas.
Ámbito de aplicación.
PROGRAMA
PROCESO DE PROGRAMACION:
Página 8 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
PROGRAMA
ENTRADA ALGORITMO DE RESOLUCIÓN SALIDA
(Caja negra)
DATOS DATOS
Provisión de dispositivos de entrada: Pantalla, impresora,
Teclado, disco, scaners… discos, etc.
Acción leer Acción escribir
3.- INSTRUCCIONES
Son las acciones que resolverán el problema, se escriben y almacenan en memoria en el mismo
orden que se van a ejecutar (en secuencia)
inst 1
inst 2
inst 3
-
-
-
Inst N
acción 1
acción 2
-
-
Acción H
-
-
Acción N
TIPOS DE INSTRUCCIONES
De INICIO/FIN COMIENZO/FIN
De ASIGNACION
De LECTURA LEER
De ESCRITURA MOSTRAR
De BIFURACION CONDICIONALES E INCONDICIONALES
Palabras reservadas
Identificadores
Caracteres especiales
Constantes
Variables
Página 9 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Expresiones
Instrucciones
Bucles
Contadores
Acumuladores
Interruptores
Estructuras
Secuenciales
Selectivas
Repetitivas
NOCION DE ALGORITMO
Resolución de problemas:
ETAPAS:
Página 10 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Una “condición” es una afirmación lógica sobre el estado del problema que puede ser cierta o
falsa, en el momento de la observación.
Definición de algoritmo
"Un algoritmo es una secuencia finita y ordenada de acciones primitivas que pueden ser
ejecutadas por un procesador y que lleve a la solución de un problema dado".
Algoritmos Cotidianos
Se refiere a todos aquellos algoritmos que nos ayudan a resolver problemas diarios, y que los
hacemos casi sin darnos cuenta de que estamos siguiendo una metodología para resolverlos.
1. Inicio.
2. Traer gato.
3. Levantar el coche con el gato.
4. Aflojar tornillos de las llantas.
5. Sacar los tornillos de las llantas.
6. Quitar la llanta.
7. Poner la llanta de repuesto.
8. Poner los tornillos.
9. Apretar los tornillos.
10. Bajar el gato.
11. Fin
Un cliente ejecuta un pedido a una fábrica. La fábrica examina en su banco de datos la ficha
del cliente, si el cliente es solvente entonces la empresa acepta el pedido, en caso contrario
rechazar el pedido.
Página 11 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Fin
Los pasos anteriores se pueden descomponer en otros pasos más simples en los que se denomina
refinamiento del algoritmo.
Lenguaje Natural
Es aquél que describe en español, para nuestro caso, los pasos a seguir utilizando un vocabulario
cotidiano. Se le conoce como lenguaje jerga cuando se utilizan términos especializados de una
determinada ciencia, profesión o grupo.
Página 12 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Lenguaje de Programación:
Es un conjunto de palabras, símbolos y reglas sintácticas mediante los cuales puede indicarse a la
computadora los pasos a seguir para resolver un problema.
Los lenguajes de programación pueden clasificarse por diversos criterios, siendo el más común
su nivel de semejanza con el lenguaje natural, y su capacidad de manejo de niveles internos de la
máquina.
Página 13 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
2. Traductores de lenguaje.
INTRODUCCIÓN
En la última clase vimos un sencillo algoritmo que lo único que hacia era mostrar un mensaje por
pantalla.
PSEUDOCODIGO
BASIC
Ahora bien, este conjunto de instrucciones o sentencias de basic tenemos que guardarlas en un
archivo de texto con la extensión bas, ya que esta es la que se utiliza generalmente para los
programas de basic, caso contrario cuando apaguemos el equipo perdemos el programa. Este
conjunto de instrucciones basic se denominan código fuente o programa fuente; por si solo el
código fuente no hace nada porque como dijimos anteriormente es solo un archivo de texto; por
este motivo para poder ejecutar el programa que hicimos nos falta un traductor.
Es importante destacar que los traductores son solo necesarios para los lenguajes de alto nivel; en
consecuencia no haría falta un traductor para un programa escrito en lenguaje máquina.
TRADUCTORES DE LENGUAJES
Los traductores de lenguajes son programas que convierten o traducen los programas fuente que
codificamos en lenguajes de alto nivel a lenguaje máquina.
INTÉRPRETES
Página 14 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Figura 1 Intérprete
COMPILADORES
Un compilador es un programa que traduce los programas fuente escritos en lenguajes de alto
nivel a lenguaje maquina. El programa traducido a lenguaje máquina se llama programa objeto o
código objeto. Ejemplos de compiladores son: Visual C++, en su momento lo fue el Clipper y el
Turbo Pascal.
Figura 2 – Compilación
COMPILADORES – interpretes
Como su nombre lo indica es una combinación de los dos, permitiendo realizar ambos procesos.
Generalmente lo que se hace es usar el interprete y cuando se probó varias veces el programa y
se esta seguro que no tiene errores se realiza la compilación. Ejemplos: Visual Basic, Visual Fox
Pro.
Página 15 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Características.
Vinculación.
El proceso de compilación
La compilación es el proceso mediante el cual se traducen los programas fuente a programas
objeto.
El programa objeto que se obtiene al final de la compilación no es código máquina ejecutable
sino ensamblador.
Para obtener el código máquina ejecutable, tenemos que usar un programa llamado enlazador o
linker. El proceso de link edición traduce un programa objeto a lenguaje máquina ejecutable.
Las etapas del proceso de compilación son las siguientes:
Antes de seguir con la explicación vamos a ver un pantallazo de la evolución de las técnicas de
programación.
En sus comienzos la programación se reducía a escribir el programa en un único archivo; en
consecuencia luego del proceso de compilación y link edición se obtenía un único archivo
ejecutable. Estos programas tenían como principal característica que a cada una de sus líneas de
código fuente se las numeraba por ejemplo 10, 20, 30, 40, etc.; un programa extenso podía llegar
a tener por ejemplo 4000 líneas de código; por lo tanto, la principal desventaja que se desprende
de lo mencionado anteriormente es la dificultad de encontrar un error entre tantas líneas de
código. Esta técnica de programación se denominó programación lineal. Gráficamente el
proceso de escritura con esta técnica de programación sería de la siguiente manera.
Fuente Objeto Ejecutable
Página 16 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
pocas líneas de código, por ejemplo de 40 líneas cada uno; obteniéndose como principal ventaja
la facilidad de búsqueda de errores. Gráficamente el proceso será como se muestra a
continuación:
Fuente Objeto
Ejecutable
Compilador
Programa1.bas Programa1.obj
Programa3.bas Programa3.obj
ProgramaN.bas ProgramaN.obj
Lo que muestra la figura anterior es que lo que hace el compilador es convertir o traducir cada
programa a código objeto, y posteriormente el editor de enlace o linker me genera un único
archivo ejecutable a partir de uno o más programas objeto.
El enlazador o editor de enlace también me permite juntar otros programas objeto para obtener
un único archivo ejecutable. Un ejemplo de esto sería el siguiente suponiendo que tenemos dos
programas fuente escritos en basic, principal.bas e imprimir.bas compilamos ambos obteniendo
dos programas objeto principal. obj e imprimir.obj; finalmente a través del uso del editor de
enlace obtendremos un único archivo ejecutable por ejemplo programa.exe.
Página 17 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
3. Programas.
Constantes, variables y expresiones.
Tipos de instrucciones.
Bucles, contadores, acumuladores y selección.
Tipos de Datos
Un dato se define como la expresión general que describe los objetos con los cuales opera una
computadora. Los datos de entrada se transforman por el programa, después de las etapas
intermedias, en datos de salida.
Los datos se clasifican en diversas categorías, según el tipo de máquina o del lenguaje en uso.
Generalmente podemos encontrar las siguientes categorías:
Numéricos
Lógicos
Cadenas
Datos Numéricos
Son aquellos que representan una cantidad o valor determinado. Su representación se lleva a
cabo en los formatos ya conocidos (enteros, punto y fracciones decimales si estas existen).
Estos pueden representarse en dos formas distintas:
Página 18 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Enteros
Es un conjunto finito de los números enteros. Los enteros son números completos, no tienen
componentes fraccionarios o decimales y pueden ser negativos y positivos.
Algunos ejemplos son:
3 7 -10 15.25 50
Reales
Consiste en un subconjunto de los números reales. Estos números siempre tienen un punto
decimal y pueden ser positivos o negativos. Un número real consiste de un número entero y una
parte decimal. Algunos ejemplos son :
0.52 664.32 -47.23
Datos Cadenas
Son los datos que representan información textual (palabras, frases, símbolos, etc). No
representan valor alguno para efectos numéricos. Pueden distinguirse porque son delimitados por
apóstrofes o comillas.
Se clasifica en dos categorías:
Datos tipo carácter (char)
Datos tipo Cadena (string)
Es un sucesión de caracteres que se encuentran delimitados por una comilla (apóstrofe) o dobles
comillas, según el tipo de lenguaje de programación. La longitud de una cadena de caracteres es
el número de ellos comprendidos entre los separadores o delimitadores.
Ejemplos:
“Hola a todos’
’12 de octubre de 1496’
“Enunciado cualquiera’
Nota: Los símbolos disponibles para la formulación de caracteres y de cadenas son aquellos
que se encuentran en el código ASCII.
ASCII (American Standard Code for Information Interchange).
Datos Lógicos
Página 19 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
También se le denomina Booleano, es aquél dato que solo puede tomar uno de dos valores: Falso
y verdadero.
Se utiliza para representar las alternativas (si/no) a determinadas condiciones. Por ejemplo,
cuando se pide si un valor entero sea primo, la respuesta será verdadera o falsa, según sea.
Las categorías y tipos que se mencionaron anteriormente se conocen como Tipos Simples, puesto
que no poseen una estructura compleja.
Constantes y variables
Operadores y Operandos
Operador Operación
+ Suma
- Resta
* Multiplicación
/ División real
Mod Residuo
^ Exponenciación
Ejemplos:
Página 20 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
7+3 = 10 10 Div 4 = 2
7-3 = 4 20 Mod 3 = 2
7*3 = 21 5 Mod 7 = 5
10/4= 2.5 4 ^ 2 = 16
El símbolo / se utiliza para la división real, y el operador Div representa la división entera.
¼ 0.25 18 Div 2 9
Operador Significado
= Igual que
<> Diferente de
El resultado de la operación será Verdadero o Falso. Así por ejemplo, si A=4 y B=3, entonces:
A>B Es Verdadero
(A-2) < (B-4) Es Falso
Los operadores de relación se pueden aplicar a cualquiera de los cuatro tipos de datos estándar:
enteros, real, lógico y carácter.
‘A’ < ‘K’ = Verdadero
‘A’ > ‘a’ = Falso
‘MARIA’ < ‘JUAN’ = Falso (se considera la primera letra)
‘JAIME’ > ‘JORGE’ = Falso
Página 21 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Las operaciones que están encerradas entre paréntesis se evalúan primero. Si existen
diferentes paréntesis anidados (interiores unos a otros), las expresiones más internas se
evalúan primero.
Las operaciones aritméticas dentro de una expresión suelen seguir el siguiente orden de
prioridad.
Operador Prioridad
^ Alta
*, /, Div
+, -, Mod
Relacionales Baja
Cuando se desea realizar una operación con baja prioridad por adelantado, debe agruparse a los
operandos involucrados.
4 + 12 /2 = 10 (sin agrupar)
(4 + 12) /2 = 8 (con agrupador)
Los paréntesis tienen prioridad sobre el resto de las operaciones.
A * (B+3) La constante 3 se suma primero al valor de B, después este resultado se
multiplica por el valor de A.
(A*B) +3 A y B Se multiplican primero y a continuación se suma 3.
A + (B/C) + D Esta expresión equivale a A+ B/C + D
Operador Relación
not Negación (No)
and Conjunción (Y)
or Disyunción (O)
xor Disyunción Exclusiva (O/SOLO)
Página 22 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
F F V V F F F
V F F V F V V
F V V F F V V
V V F F V V F
ASCII Símbolo ASCII Símbolo ASCII Símbolo ASCII Símbolo ASCII Símbolo ASCII Símbolo
32 (espacio) 48 0 64 @ 80 P 96 ` 112 p
33 ! 49 1 65 A 81 Q 97 a 113 q
34 " 50 2 66 B 82 R 98 b 114 r
35 # 51 3 67 C 83 S 99 c 115 s
36 $ 52 4 68 D 84 T 100 d 116 t
37 % 53 5 69 E 85 U 101 e 117 u
38 & 54 6 70 F 86 V 102 f 118 v
39 ' 55 7 71 G 87 W 103 g 119 w
40 ( 56 8 72 H 88 X 104 h 120 x
41 ) 57 9 73 I 89 Y 105 i 121 y
42 * 58 : 74 J 90 Z 106 j 122 z
43 + 59 ; 75 K 91 [ 107 k 123 {
44 , 60 < 76 L 92 \ 108 l 124 |
45 - 61 = 77 M 93 ] 109 m 125 }
46 . 62 > 78 N 94 ^ 110 n 126 ~
47 / 63 ? 79 O 95 _ 111 o 127
Asignación
Lenguaje:
Página 23 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Programa:
Variable:
Una posición con nombre en memoria donde se almacena un valor que puede modificarse
durante la ejecución del programa.
Tiene un nombre, un contenido, un tipo y una posición de memoria.
Constante:
Un elemento con nombre que, a diferencia de las variables, mantiene un valor constante a través
de la ejecución de un programa. Recibe un valor en el momento de la compilación y este
permanece inalterado durante todo el programa.
Instrucciones:
Estructuras:
Página 24 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
- Estructuras de decisión
- Estructuras de repetición
Estructuras de decisión:
Son estructuras de control condicional que permiten llevar a cabo una acción, si una condición
(expresión lógica) dada tiene un valor específico (verdadero o falso).
Estructura Si:
Si <Condición> Condici
<Sentencia 1> ón
<Sentencia 2> V F
... Sentencia
<Sentencia n> s1an
Fin Si
Condición
SI NO
Sentencia/s
Ejemplo:
Si total > 100
total : = total - descuentos
Mostrar total
Fin si
ESTRUCTURA DE DECISIÓN DOBLE
Estructura Si – Si no:
Si <Condición>
Condici
ón
Página 25 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
<Sentencia 1>
<Sentencia 2> V F
...
Sentencia Sentencia
<Sentencia n> s1an sAaN
Si No
<Sentencia A>
<Sentencia B>
...
<Sentencia N>
Fin Si
Condición
SI NO
Sentencia 1 Sentencia A
Ejemplo:
Si salario > 400
Salario _ neto: = salario – impuestos
Si no
Salario _ neto: = salario
Fin si
La estructura En caso de permite incluir múltiples condiciones, ejecutándose solo las sentencias
asociadas a condiciones verdaderas. De no ser verdadera ninguna condición, se ejecutarán las
sentencias que se encuentran entre Si no hacer y el fin de la estructura.
Página 26 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
<Condición> hacer
<Sentencia A>
<Sentencia B>
...
<Sentencia N>
Si no hacer
<Sentencia a>
<Sentencia b>
...
<Sentencia n>
Fin En caso de
La estructura En caso de permite incluir múltiples condiciones, ejecutandose solo las sentencias
asociadas a condiciones verdaderas. De no ser verdadera ninguna condición, se ejecutarán las
sentencias que se encuentran entre Si no hacer y el fin de la estructura.
Ejemplo:
En caso de (opción)
opcion = 1 hacer
Mostrar “Usted seleccionó la opción Proveedores.”
opcion = 2 hacer
Mostrar “Usted seleccionó la opción Clientes.”
Si no
Mostrar “Usted seleccionó una opción no válida.”
Fin en caso de
Ejercicio:
• Se debe obtener la nomina semanal (salario neto) de los empleados de una empresa. La
misma liquida los sueldos de la siguiente manera:
– Se paga por hora trabajada
– Si la cantidad de horas es menor igual a 35 horas, la tarifa de las mismas es la
básica
– Si la cantidad de horas trabajadas es mayor a 40, las horas extras se pagan el 50%
mas de la tarifa de la hora básica (es decir 1,5)
• Se debe ingresar por teclado:
– Nombre
– Horas
– Tarifa básica de la hora
• Los impuestos varían en función del total de salario.
– Menor e igual a $20.000: sin impuesto
– De $20.000 a $35000: 20% del monto que supera al mínimo.
– Mas de $35000: 30% del monto que supera al punto anterior.
• Se debe mostrar el nombre, sueldo bruto, impuestos y sueldo neto
Página 27 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Página 28 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Estructuras de Repetición
Estructura Repetir:
Repetir Sentencia
<Sentencia 1> s1an
<Sentencia 2>
...
<Sentencia n> Condición F
Hasta que <Condición>
V
La sentencia repetir se utiliza para especificar un bucle condicional que se ejecuta al menos una
vez. Las sentencias que se encuentran dentro de la estructura se ejecutarán hasta que la condición
tome un valor verdadero.
Ejemplo:
Repetir
Mostrar “Ingrese un número del 0 al 9”
Pedir número
Hasta que número >= 0 y número <= 9
Estructura Mientras:
Mientras <Condición> F
Condición
<Sentencia 1>
<Sentencia 2> V
...
<Sentencia n> Sentencia
s1an
Fin mientras
Ejemplo:
Página 29 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
PRUEBA DE ESCRITORIO
Cuando tenemos un algoritmo y queremos saber si lo codificado cumple con lo solicitado para su
correcta resolucion, precisamos hacer lo que se llama una prueba de escritorio.
La misma consiste en enumerar todas las variables utilizadas en el algoritmos ya sean de entrada,
de salida o de entrada/salida e ir colocando valores para poder realizar la prueba, funciona como
un interprete que se ejecuta paso a paso.
Ejemplos de Ejercicios:
Comienzo
c ß 0;
MIENTRAS (c < 101) HACER
c ß c + 1;
ESCRIBIR c;
FINMIENTRAS
FIN
c ESCRIBIR c
0
1 1
2 2
3 3
… …
99 99
100 100
101
Página 30 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Hacer un pseudocódigo que imprima los números del 100 al 0, en orden decreciente.
Hacer un pseudocódigo que imprima los números del 100 al 0, en orden decreciente.
ALGORITMO: suma
Comienzo
c ß 1;
suma ß 0;
MIENTRAS (c <= 100) HACER
suma ß suma + c;
c ß c + 1;
FINMIENTRAS
ESCRIBIR "La suma de los 100 primeros números es: “;
ESCRIBIR suma;
FIN
Hacer un pseudocódigo que imprima los números impares hasta el 100 y que imprima cuantos
impares hay.
ALGORITMO
Comienzo
c ß 1;
son ß 0;
MIENTRAS (c < 100) Hacer
ESCRIBIR c;
c ß c + 2;
son ß son + 1;
FINMIENTRAS
ESCRIBIR "El número de impares: “;
Página 31 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
ESCRIBIR son;
FIN
Hacer un seudocódigo que imprima todos los números naturales que hay desde la unidad
hasta un número que introducimos por teclado.
ALGORITMO natural
Comienzo
iß0
nß0
ESCRIBIR "Introduce un número: "
LEER n;
MIENTRAS (i < n) HACER
i ß i + 1;
ESCRIBIR i:
FINMIENTRAS
FIN
Página 32 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
4. Estructuras de datos.
Ya vimos el concepto de datos con sus distintos tipos, ahora extenderemos este concepto a un
conjunto o grupo de datos.
Definicion: “Es un conjunto de datos reunidos bajo un único nombre colectivo”
Es una colección de datos que pueden ser caracterizados por su organización y las operaciones
que se definen en ella.
Existen dos clases de Estructuras de datos:
Estas son:
Arreglos (Vector/Matriz)
Registro
Archivo (Fichero)
Conjunto (específicos del lenguaje Pascal)
Cadena (string)
Arreglos.
ARREGLO LINEAL
Una variable con estructura de arreglo es un conjunto de variables de un mismo tipo:
Ej: VENTAS (n)
Donde VENTAS es el nombre de la variable y n es el índice.
La dimensión del arreglo es igual a la cantidad de componentes y es invariable una vez que se
define.
Página 33 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
EJERCICIO: Una empresa recibe mensualmente información sobre las ventas de cada una de sus
tres sucursales y desea obtener un listado de aquellas cuyas ventas superan el promedio de las
mismas.
Variables: ventas(I), promedio, I “nro de sucursal”
Algoritmo:
Calcular el promedio de ventas
Comprobar cual sucursal tiene ventas superiores al promedio
Informar
Refinaminetos sucesivos:
Inicializar variables
Para cada sucursal hacer
Ingresar ventas y acumular valores
Fin Para
Calcular promedio
Para cada sucursal hacer
Ingresar ventas comprobar si es mayor o igual al promedio
Fin Para
Mostrar resultados
ALGORITMO “ventas”
COMENZAR
Var tipo entero: I;
tipo real: ventas, Promedio ;
Promedio0;
Para I desde 1 hasta 3 hacer
leer ventas;
promedio promedio + ventas;
Fin para
Promedio Promedio / 3;
Para I desde 1 hasta 3 hacer
Leer ventas;
Si (ventas > Promedio) entonces
Escribir “ Sucursal : “ I, “ Venta : “ ventas;
FinSi;
FinPara;
Fin
Página 34 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
En venta(I) en donde I es una variable numerica cuyo valor es un número entero tal que I =
{1,2,....,100}
OPERACIONES DE ARREGLOS:
ASIGNACION
Ventas(8) 30 a la posición 8 del arreglo ventas le asigno el valor 30.
ESCRIBIR
LEER
ARREGLOS BIDIMENSIONALES
Tiene un único nombre y dos índices (fila, columna)
El elemento del arreglo se indica Peso (5,2) = 68 kg.
El total de elementos del arreglo es la dimensión y se calcula como el producto del total de filas
por el total de columnas.
Ej.: Peso (10,4) entonces la dimensión es 10x4 = 40
Ejercicio: “Obesos Anónimos” tiene un programa de reducción de peso. Toma 10 miembros al
azar para verificar la efectividad del programa.
Éstos tendrán un control semanal de peso durante un mes.
Se desea determinar la siguiente información:
La variación promedio de peso de los 10 miembros para ese mes.
el número de individuos que han excedido esta variación
La variación promedio semanal, por individuo.
El informe de los datos recibidos semanalmente tiene la forma de una tabal de doble entrada,
donde:
Las FILAS (renglones) indican los pesos correspondientes a cada individuo
Las COLUMNAS indican los pesos semanales
Miembros
1 2 3 4
1
2
3
4
5 68 kg
6
7
8
9
10
Semanas
El participante 5 en la semana numero 2 pesó 68 kg.
METODO DE RESOLUCIÓN:
Para cada miembro se leen los pesos de las últimas 4 semanas.
Página 35 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Se calcula la variación total del peso, por cada miembro acumulándose éstas variaciones en una
variable.
Luego se calcula la variación promedio mensual
ADEMÁS:
Para cada miembro se debe comprobar, si su variación de peso excede el promedio
recientemente calculado y en caso afirmativo, se debe incrementar el contador. Simultáneamente
se calcula la variación promedio semanal de cada individuo. (Este promedio se calcula
acumulando las diferencias entre los pesos de dos semanas sucesivas y dividiendo el promedio
por 3)
VARIABLES
PESO Arreglo bidimensional, de tipo real de 10 filas y 4 columnas
PART Variable de tipo entero que representa el primer índice del arreglo, (participantes)
SEMANA Variable de tipo entero que representa el segundo índice del arreglo, (semanas)
VPM Variable de tipo real que indica la variación promedio mensual del peso
VPS Variable de tipo real que indica la variación promedio semanal del peso
CI Variable de tipo entero que cuenta los individuos que han excedido la variación
promedio mensual
RESOLUCIÓN EN PSEUDOCODIGO:
ALGORITMO “OBESOS ANÓNIMOS”
COMENZAR
// DECLARACIÓN DE VARIABLES//
TIPO ENTERO: PART, SEMANA, CI;
TIPO REAL: VPM, VPS, PESO (10,4)
// INICIALIZACION DE VARIABLES: CONTADOR Y ACUMULADORES//
CI 0;
VPM 0;
VPS 0 ;
// ENTRADA DE PESO Y CALCULO DE LA VARIACION MENSUAL //
PARA PART desde 1 hasta 10 hacer
PARA SEMANA desde 1 hasta 4 hacer
LEER PESO (PART, SEMANA);
FIN PARA
VPM VPM + PESO (PART,1) – PESO(PART,4);
FIN PARA
VPM VPM / 10;
ESCRIBIR “ LA VARIACION PROMEDIO MENSUAL ES: “, VPM;
// CONTAR LOS INDIVIDUOS CUYA VARIACIÓN DE PESO EXCEDE AL PROMEDIO
MENSUAL //
PARA PART desde 1 hasta 10 hacer
SI ( [PESO (PART, 1) – PESO (PART, 4)] > VPM ) ENTONCES
CI CI + 1;
FIN SI
// VARIACIÓN PROMEDIO SEMANAL POR INDIVIDUO //
PARA SEMANA desde 2 hasta 4 hacer
VPS VPS + PESO (PART, SEMANA) – PESO (PART, SEMANA-1);
FIN PARA
VPS VPS / 3;
Página 36 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Página 37 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
ORDENACION:
En forma ascendente o descendente de los elementos o ítems de un conjunto.
Ej: { 7, 15, 23, 26, 78}
{a, arevalo, asturias, bilbao, de, dedo, zorro}
ALGORITMO “SELECCIÓN”
COMENZAR
LEER A, TOPE;
Para J desde 1 hasta N hacer
MINIMO 1;
Para I desde 1 hasta N hacer
Si A(I) < A (MINIMO) entonces
MINIMO I;
FinSi
Fin Para
B(J) A (MINIMO);
A(MINIMO) TOPE;
Fin Para
Escribir B;
FIN.
Página 38 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Ejemplo:
INICIAR 21 35 17 8 14 2
PASADA 1 2 35 17 8 14 21
PASADA 2 2 8 17 35 14 21
PASADA 3 2 8 14 35 17 21
PASADA 4 2 8 14 17 35 21
PASADA 5 2 8 14 17 21 35
Variables:
A Arreglo
N entera
AUX mismo tipo que cada elemento de A
i,j tipo entero usadas como índice de A
MINIMO entero que representa el valor índice donde se encuentra el elemento mínimo
de A en cada pasada
Para i desde 1 hasta N-1 hacer
Asignar a mínimo el valor del índice correspondiente al menor elemento entre a(i),….,a(n).
Intercambiar a(i) con a(mínimo)
Fin Para
Página 39 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Cantidad de comparaciones:
(n-1)+(n-2)+……+(n-(n-1) = ½ n (n-1)
si n es grande entonces: ½ n2
(Mitad que el anterior)
Cantidad de comparaciones:
2/2 + 3/2 + 4/2 + …… + n/2 = ¼ (n2 + n-2)
Si n es grande, este valor es aproximadamente: ¼ n2
Variables:
A Arreglo
N entera, cantidad de elementos del arreglo
AUX mismo tipo que cada elemento de A
i, k tipo entero usadas como índice de A
SW tipo booleano, toma solo los valores verdadero o falso.
Página 40 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Fin Si
Fin mientras
A(k+1) AUX
Fin Para
Fin.
Variables:
A Arreglo
N entera, cantidad de elementos del arreglo
AUX mismo tipo que cada elemento de A
i, j tipo entero usadas como índice de A
Cantidad de comparaciones:
Si n es grande, este valor es aproximadamente: (n-1)2
Página 41 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
BUSQUEDA
Localizar un dato dentro de un conjunto (el dato puede estar o no)
BUSQUEDA SECUENCIAL
Consiste en encontrar un elemento k dentro de un conjunto de n elementos.
Variables
A Arreglo de tipo numérico o carácter
K variable de igual tipo que el arreglo
N dimensión del arreglo de tipo entera
I índice del arreglo de tipo entera
BUSQUEDA BINARIA:
Para un arreglo previamente ordenado, voy analizando por mitades
Ej. 2 8 14 17 21 26 35 42
Página 42 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
A ( 7 ) = 35 , finalizó la búsqueda.
Variables
A Arreglo de tipo numérico o carácter
k variable de igual tipo que el arreglo, valor a buscar.
n dimensión del arreglo de tipo entera
bajo, alto, central variables enteras
INTERCALACION:
Es el proceso de ordenar dos arreglos en uno único
Ej.
A1 9 35 41
A2 7 20 25 43
9 35 41
7
20 25 43
35 41
7 9
20 25 43
Página 43 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
35 41
7 9 20
25 43
35 41
7 9 20 25
43
41
7 9 20 25 35
43
7 9 20 25 35 41
43
7 9 20 25 35 41 43.
Variables
A, B, C Arreglo de tipo numérico o carácter
n, m dimensión del arreglo de tipo entera
i, j, k variables enteras. Indices de los vectores
ALGORITMO “INTERCALACION”
Comenzar
Leer A, B
i 1;
j 1;
k 0;
Mientras i <= m y j <= n
Kk+1
Si A(i) < B(j) entonces
C(k) A(i);
ii+1
Sino
C(k) B(j)
j j + 1;
Fin Si
Fin Mientras
Si i <= m entonces
Para r desde i hasta m hacer
k k + 1;
C(k) A(r)
Fin para
Sino
Para r desde i hasta m hacer
k k + 1;
C(k) B(r)
Fin para
Fin si
Página 44 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Fin
LISTAS
LISTA LINEAL
Una lista lineal es un conjunto de elementos de un tipo dado que se encuentran ordenados y
pueden variar en número.
Los elementos de una lista lineal se almacenan normalmente en forma contigua, en posiciones
consecutivas de memoria.
Las líneas así definidas se denominan contiguas. Las operaciones que se pueden realizar con
listas lineales contiguas son:
Para permitir operaciones con listas se deben dimensionar éstos con tamaño suficiente para que
contengan todos los posibles elementos de la lista.
Ejemplo:
Página 45 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
- fin
LISTA ENLAZADA
Es un conjunto de elementos en los que cada elemento contiene la posición –o dirección – del
siguiente elemento de la lista.
Cada elemento (NODO)de la lista debe tener al menos dos campos:
Uno llamado info guarda el valor del elemento
Otro llamado enlace guarda la posición del siguiente elemento.
NODO
INFO ENLACE
Ejemplo: El gerente de un hotel quiere ingresar a medida de su ingreso los nombres de los
arqueros que asisten al congreso mundial y su habitación. Por otro lado desea disponer de una
lista de los mismos en forma alfabética.
Página 46 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Las listas doblemente enlazadas se pueden recorrer en ambas direcciones, ya que cada nodo
consta de un campo INFO y dos campos enlace o punteros (anterior y siguiente), que apuntan
hacia delante y hacia atrás.
NODO
PILA
Una pila (stack) es un tipo especial de lista lineal en la que la inserción y borrado de nuevos
elementos se realiza sólo por un extremo que se denomina cima o tope (top)
La pila es una estructura con numerosas analogías en la vida real: una pila de platos, una pila de
monedas, una pila de camisas, etc.
Dado que las operaciones de insertar o eliminar se realizan por un solo extremo (el superior), los
elementos sólo pueden eliminarse en orden inverso al que se insertan en la pila. El último
elemento que se pone en la pila es el primero que se puede sacar; por ello, a estas estructuras se
les conoce por el nombre de LIFO (last-in, first-out), último en entrar, primero en salir)
Las operaciones más usuales son:
Push meter o poner, operación de insertar un elemento en la pila
Pop sacar o quitar, operación de eliminar un elemento en la pila
COLA
Las colas (queues) son otro tipo de estructura lineal de datos, en las que las eliminaciones se
realizan al principio de la lista, frente (front) y las inserciones se realizan en el otro extremo final
(rear).
Se las conoce como FIFO first in first out, primero en entrar , primero en salir.
Son utilizadas para almacenar datos que necesitan ser procesadas según el orden de llegada.
Ejemplos de la vida real, cola de un cine, caravana de autos, cola de un cajero.
Existe una variante llamada la doble cola, que es una cola bidimensional en las que las
inserciones y eleminaciones se pueden realizar en cualquiera de los dos extremos de la lista.
Funciones y Procedimientos
El diseño descendente permite obtener un programa que resuelva un problema dividiendo este en
subproblemas cada vez más sencillos.
Cada subproblema tiene asociado un pseudocódigo de alto nivel compuesto por acciones no
primitivas.
Cuando una de estas acciones no primitivas se repite en varios puntos del algoritmo es
interesante darle un nombre y reutilizarla.
Estas acciones con nombre se denominan subprogramas, pudiendo ser, a su vez, funciones y
Subrutinas o procedimientos
Página 47 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Invocación de la función:
Página 48 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Variables
Entero: base, altura, perímetro, área;
Mostrar “Ingrese base del rectángulo: “, base;
Mostrar “Ingrese altura del rectángulo: “, altura;
Perím perimetro(base, altura);
area base * altura;
Mostrar “Los elementos del rectángulo son”;
Mostrar “base: “, base, “ altura: “, altura, “ area: “, area, “ perímetro: “,perím;
Fin
Página 49 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Página 50 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Esta característica hace posible dividir grandes proyectos en piezas más pequeñas
independientes. Cuando diferentes programadores están implicados, ellos pueden trabajar
independientemente.
A pesar del hecho importante de los subprogramas independientes y las variables locales, la
mayoría de los lenguajes proporcionan algún método para tratar ambos tipos de variables.
Una variable local a un subprograma no tiene ningún significado en otros subprogramas. Si un
subprograma asigna un valor a sus variables locales, este valor no es accesible a otros programas
es decir, no puede utilizar esta valor. A veces, también es necesario que una variable tenga el
mismo nombre en diferentes subprogramas.
Por el contrario las variables globales tienen la ventaja de compartir información de diferentes
subprogramas sin una correspondiente entrada en la lista de parámetros.
En un programa sencillo con un subprograma, cada variable u otro identificador es o bien local al
procedimiento o global al programa completo. Sin embargo, si el programa incluye
procedimientos que engloban a otros procedimientos –procedimientos anidados -, entonces la
noción de global/local es algo más complicada de entender.
Página 51 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
procedimiento, tendrá significado solo dentro del ámbito de ese procedimiento. A las variables
les sucede lo mismo; si están definidas local mente dentro de un procedimiento, su significa o
uso se confina a cualquier función o procedimiento que pertenezca a esa definición.
La siguiente figura muestra un esquema de un programa con diferentes procedimientos, algunas
variables son locales y otras globales. En esta citada figura se muestra el ámbito de cada
definición.
Los lenguajes que admiten variables locales y globales suelen tener la posibilidad explícita de
definir dichas variables como tales en el cuerpo del programa o, lo que es lo mismo, definir su
ámbito de actuación, para ello se utilizan las cabeceras de programas y subprogramas, con lo que
se definen los ámbitos.
Las variables definidas en un ámbito son accesibles en el mismo, es decir, en todos los
procedimientos interiores.
PASO DE PARÁMETROS
Cuando un programa llama a un subprograma, la información se comunica a través de la lista de
Parámetros y se establece una correspondencia automática entre los parámetros formales y
actuales. Los parámetros actuales son sustituidos o utilizados en lugar de los parámetros
formales.
Página 52 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
semántica del lenguaje. Dicho de otro modo, un mismo programa puede producir diferentes
resultados bajo diferentes sistemas de paso de parámetros.
En numerosas ocasiones se requieren que ciertos parámetros sirvan como parámetros de salida,
es decir, se devuelvan los resultados a la mitad o programas que llama. Este método se denomina
paso por referencia o también de llamada por dirección o variable. La unidad que llama pasa a
la unidad llamada la dirección del parámetro actual (que está en el ambiente de la unidad
llamante).
Una referencia al correspondiente parámetro formal se trata como una referencia a la posición de
memoria, cuya dirección se ha pasado. Entonces una variable pasada como parámetro real es
compartida, es decir, se puede modificar directamente por el subprograma.
Página 53 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Este método existe en FORTRAN, COBOL, Modulo-2, Pascal, PL/1 y Algol 68. La
característica de este método se debe a la simplicidad y su analogía directa con la idea de que las
variables tienen una posición de memoria asignada desde la cual se pueden obtener o actualizar
sus valores.
El área de almacenamiento (direcciones de memoria) se utiliza para pasar información de entrada
y/o salida: en ambas direcciones.
En este método los parámetros son de entrada/salida y los parámetros se denominan parámetros
variables.
La llamada por referencia es muy útil para programas donde se necesita la comunicación del
valor en ambas direcciones.
Tradicionalmente, la programación fue hecha en una manera secuencial o lineal, es decir una
serie de pasos consecutivos con estructuras consecutivas y bifurcaciones.
Los lenguajes basados en esta forma de programación ofrecían ventajas al principio, pero el
problema ocurre cuando los sistemas se vuelven complejos. Estos programas escritos al estilo
“espagueti” no ofrecen flexibilidad y el mantener una gran cantidad de líneas de código en sólo
bloque se vuelve una tarea complicada.
Página 54 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Pues la creciente tendencia de crear programas cada vez más grandes y complejos llevó a los
desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles
empresariales y con reglas de negocios muy complejas. Para estas necesidades ya no bastaba la
programación estructurada ni mucho menos la programación lineal. Es así como aparece la
programación orientada a objetos (POO). La POO viene de la evolución de la programación
estructurada; básicamente la POO simplifica la programación con la nueva filosofía y nuevos
conceptos que tiene. La POO se basa en la dividir el programa en pequeñas unidades lógicas de
código. A estas pequeñas unidades lógicas de código se les llama objetos. Los objetos son
unidades independientes que se comunican entre ellos mediante mensajes. Veamos con mayor
detenimiento este tema.
Página 55 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos.
Existen muchas definiciones que se le ha dado al Objeto. Primero empecemos entendiendo que
es un objeto del mundo real. Un objeto del mundo real es cualquier cosa que vemos a nuestro
alrededor. Digamos que para leer este artículo lo hacemos a través del monitor y una
computadora, ambos son objetos, al igual que nuestro teléfono celular, un árbol o un automóvil.
Analicemos un poco más a un objeto del mundo real, como la computadora. No necesitamos ser
expertos en hardware para saber que una computadora está compuesta internamente por varios
componentes: la tarjeta madre, el chip del procesador, un disco duro, una tarjeta de video, y otras
partes más. El trabajo en conjunto de todos estos componentes hace operar a una computadora.
Internamente, cada uno de estos componentes puede ser sumamente complicado y puede ser
fabricado por diversas compañías con diversos métodos de diseño. Pero nosotros no necesitamos
saber cómo trabajan cada uno de estos componentes, como saber que hace cada uno de los chips
de la tarjeta madre, o cómo funciona internamente el procesador. Cada componente es una
unidad autónoma, y todo lo que necesitamos saber de adentro es cómo interactúan entre sí los
componentes, saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta
madre, o conocer donde se coloca la tarjeta de video. Cuando conocemos como interaccionan los
componentes entre sí, podremos armar fácilmente una computadora.
¿Qué tiene que ver esto con la programación? La programación orientada a objetos trabaja de
esta manera. Todo el programa está construido en base a diferentes componentes (Objetos), cada
uno tiene un rol específico en el programa y todos los componentes pueden comunicarse entre
ellos de formas predefinidas.
Todo objeto del mundo real tiene 2 componentes: características y comportamiento.
Por ejemplo, los automóviles tienen características (marca, modelo, color, velocidad máxima,
etc.) y comportamiento (frenar, acelerar, retroceder, llenar combustible, cambiar llantas, etc.).
Los Objetos de Software, al igual que los objetos del mundo real, también tienen características y
comportamientos. Un objeto de software mantiene sus características en una o más "variables", e
implementa su comportamiento con "métodos". Un método es una función o subrutina asociada a
un objeto.
Página 56 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Página 57 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Para redondear estas ideas, imaginemos que tenemos estacionado en nuestra cochera un Ford
Focus color azul que corre hasta 260 km/h. Si pasamos ese objeto del mundo real al mundo del
software, tendremos un objeto Automóvil con sus características predeterminadas:
Marca = Ford
Modelo = Focus
Color = Azul
Velocidad Máxima = 260 km/h
Cuando a las características del objeto le ponemos valores decimos que el objeto tiene estados.
Las variables almacenan los estados de un objeto en un determinado momento.
Definición teórica: Un objeto es una unidad de código compuesto de variables y métodos
relacionados.
Las Clases
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro
teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la
programación orientada a objetos, podemos decir que nuestro objeto celular es una instancia de
una clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema
operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes
multimedia, transmisión de datos, etc.).
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares
comparten esas características comunes y construyen modelos o plantillas comunes, para que a
partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o
plantilla le llamamos CLASE, y a los equipos que sacamos a partir de ella la llamamos
OBJETOS.
Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del mismo tipo y
mismas características.
Página 58 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Definición teórica: La clase es un modelo o prototipo que define las variables y métodos
comunes a todos los objetos de cierta clase. También se puede decir que una clase es una
plantilla genérica para un conjunto de objetos de similares características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no
existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general,
pero los objetos y las instancias son ambas representación de una clase.
Definición Teórica: Una instancia es un objeto de una clase en particular.
Herencia
La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste
en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda
es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y
métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta
manera se crea una jerarquía de herencia.
Por ejemplo, imaginemos que estamos haciendo el análisis de un Sistema para una tienda que
vende y repara equipos celulares.
Página 59 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
En el gráfico vemos 2 Clases más que posiblemente necesitemos para crear nuestro Sistema.
Esas 2 Clases nuevas se construirán a partir de la Clase Celular existente. De esa forma
utilizamos el comportamiento de la SuperClase.
En general, podemos tener una gran jerarquía de Clases tal y como vemos en el siguiente gráfico:
Envío de Mensajes
• Un objeto es inútil si está aislado. El medio empleado para que un objeto interactúe con
otro son los mensajes. Hablando en términos técnicos, los mensajes son invocaciones a
los métodos de los objetos.
Abstracción
La abstracción consiste en captar las características esenciales de un objeto, así como su
comportamiento. Por ejemplo, volvamos al ejemplo de los automóviles, ¿Qué características
podemos abstraer de los automóviles? O lo que es lo mismo ¿Qué características semejantes
tienen todos los automóviles? Todos tendrán una marca, un modelo, número de chasis, peso,
llantas, puertas, ventanas, etc. Y en cuanto a su comportamiento todos los automóviles podrán
acelerar, frenar, retroceder, etc.
En los lenguajes de programación orientada a objetos, el concepto de Clase es la representación
y el mecanismo por el cual se gestionan las abstracciones.
Por ejemplo, en Java tenemos:
Encapsulamiento
El encapsulamiento consiste en unir en la Clase las características y comportamientos, esto es,
las variables y métodos. Es tener todo esto es una sola entidad. En los lenguajes estructurados
Página 60 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Ocultamiento
Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer sólo
los detalles que sean necesarios para el resto del sistema.
El ocultamiento permite 2 cosas: restringir y controlar el uso de la Clase. Restringir porque habrá
cierto comportamiento privado de la Clase que no podrá ser accedido por otras Clases. Y
controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en
estos mecanismos dónde se validarán que algunas condiciones se cumplan. En Java el
ocultamiento se logra usando las palabras reservadas: public, private y protected delante de las
variables y métodos.
Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos.
También se necesitará realizar un análisis y diseño orientado a objetos.
El modelamiento visual es la clave para realizar el análisis OO. Desde los inicios del desarrollo
de software OO han existido diferentes metodologías para hacer esto del modelamiento, pero sin
lugar a duda, el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de
metodologías.
Según los mismos diseñadores del lenguaje UML, éste tiene como fin modelar cualquier tipo de
sistemas (no solamente de software) usando los conceptos de la orientación a objetos. Y además,
este lenguaje debe ser entendible para los humanos y máquinas.
Actualmente en la industria del desarrollo de software tenemos al UML como un estándar para el
modelamiento de sistemas OO. Fue la empresa Racional que creó estas definiciones y
especificaciones del estándar UML, y lo abrió al mercado. La misma empresa creó uno de los
programas más conocidos hoy en día para este fin; el Racional Rose, pero también existen otros
programas como el Poseidon que trae licencias del tipo community edition que permiten su uso
libremente.
Página 61 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al
paradigma orientado a objetos. Los modelos orientados a objetos cuando se construyen en forma
correcta, son fáciles de comunicar, cambiar, expandir, validar y verificar. Este modelamiento en
UML es flexible al cambio y permite crear componentes plenamente reutilizables.
Resumen
Página 62 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Ventajas Principales
Lenguajes de Consulta:
Son lenguajes de alto nivel para recuperar datos almacenados en bases de datos o archivos.
Pueden ser interactivos, en línea y entienden solicitudes de información que no están
predefinidas.
Definen, insertan, actualizan y obtienen datos de la base de datos.
Es común que estos que estos lenguajes estén vinculados a sistemas de administración de bases
de datos ( SQL)o a algunas herramientas de software para PC. (Microsoft Access)
Generadores de informes
Son recursos para crear informes personalizados.
Extraen datos de archivos y bases de datos y crean informes en muchos formatos.
Confieren un mayor control sobre la forma en que los datos se formatean, organizan y exhiben,
que los lenguajes de consulta.
Página 63 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Los más potentes pueden manipular datos con cálculos y lógica complejos antes de enviarlos a la
salida.
Algunos generadores de informes son extensiones de los lenguajes de base de datos o consulta.
Se parece a un lenguaje de consultas en que permite al usuario hacer preguntas sobre la base de
datos y obtener información de ella para un informe. Sin embargo, en el generador de informes
se tiene un mayor control sobre el aspecto de la salida. Se puede dejar que el generador
determine automáticamente el aspecto de la salida o se puede diseñar ésta para que tenga el
aspecto que desee el usuario final.
Lenguajes de Gráficos
Recuperan datos de archivos o bases de datos y los exhiben en un formato gráfico mostrando
tendencias y relaciones entre datos.
Los usuarios pueden pedir datos y especificar cómo se deben graficar.
Algunos programas de gráficos también efectúan operaciones aritméticas o lógicas sobre los
datos.
Normalmente se pueden diseñar distintos tipos de gráficos: barras, líneas, etc.
SAS y Systat son ejemplo de software con manejo de gráficos analítico y potente.
Generadores de aplicaciones
es una herramienta para crear programas que hagan de interfase entre el usuario y la base de
datos. El uso de un generador de aplicaciones puede reducir el tiempo que se necesita para
diseñar un programa de aplicación.
Contienen módulos preprogramados que pueden generar aplicaciones enteras, acelerando
considerablemente el desarrollo.
Constan de procedimientos que realizan las funciones fundamentales que se utilizan en la
mayoría de los programas. Estos procedimientos están escritos en un lenguaje de programación
de alto nivel y forman una librería de funciones entre las que escoger. El usuario especifica qué
debe hacer el programa y el generador de aplicaciones es quien determina cómo realizar la tarea.
Un usuario puede especificar lo que se necesita hacer y el generador de aplicaciones creará el
código apropiado para entrada, validación, actualización, procesamiento e informes,
Casi todos los generadores de aplicaciones con plena funcionalidad consisten en un conjunto
completo e integrado de herramientas de desarrollo:
Un sistema de administración de base de datos
Diccionario de datos
Lenguaje de consulta
Marcador
Generador de gráficos
Herramientas de apoyo a decisiones
Recursos de seguridad
Lenguaje de programación de alto nivel
Herramientas para crear sitios WEB, plenamente funcionales.
Página 64 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Los usuarios finales pueden usar las funciones más sencillas de estos lenguajes, sin embargo
fueron diseñados primordialmente como herramientas de productividad para programadores
profesionales. Como ejemplo de estos lenguajes tenemos APL ( A Programing Language) APL
se implementó por primera vez en sistemas IBM/360 y fue ampliamente utilizado en todas y
cada una de las versiones de máquinas que IBM lanzó posteriormente. En 1999, la empresa
COGNOS adquirió la última versión de APL (APL2000) y distribuye actualmente una versión
totalmente visual, llamada APL+Win. Otras versiones actualizadas para Windows, Linux y Mac
son distribuidas por Dyalog APL. Otros son Focus, easytrieve, datatrieve, nomad2, ramis II.
Como lenguaje de programación, es muy versátil y provee medios directos para la solución de
problemas planteados por estudiantes, ingenieros, científicos, educadores, hombres de negocios
y muchos otros que tengan que ver con la computación y la utilicen a nivel de desarrollo de
aplicaciones.
Herramientas para PC
Software para procesamiento de textos
Maneja almacenamiento, edición, formateo e impresión electrónica de documentos
Hojas de cálculo
Software que exhibe datos en una matriz con la capacidad de recalcular fácilmente datos
numéricos
Software para administración de datos
Página 65 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Creado para crear y manipular listas, crear archivos y bases de datos y combinar
información para producir informes.
Gráficos de Presentación
Para crear presentaciones gráficas de calidad profesional que pueden incluir, diagramas,
sonido, animación fotografías y cortos de video
Software de correo electrónico
Utilizado para el intercambio de mensajes entre computadores, herramienta muy útil para
la comunicación y el trabajo en colaboración. (eudora, aol, etc)
Navegadores de web
Herramienta de software de fácil uso para acceder a la World Wide web y a Internet.
(Internet Explorer, Netscape, Mozilla Firefox.
Paquetes de software integrados
Son paquetes de software que están compuestos por 2 o más de las herramientas
anteriores.
Groupware
Software que ofrece funciones y servicios que apoyan las actividades de colaboración de
grupos de trabajo.
Tipos de 4GL
Los 4GL, en función de su relación con un determinado gestor de base de datos, se pueden
agrupar de la forma siguiente:
Lenguajes que están ligados a una base de datos. La mayoría de los gestores de bases de datos
cuentan con un lenguaje de cuarta generación. Son lenguajes propietarios, lo que quiere decir
que sirven únicamente para acceder a esa base de datos en particular. El aprovechamiento de los
recursos del gestor es muy alto.
Lenguajes que son independientes del gestor de base de datos. Tienen la capacidad de
acceder a diferentes bases de datos, generalmente aquéllas que soportan un estándar común. No
son lenguajes propietarios y por tanto no ligan al comprador a ninguna base de datos en
particular. La necesidad de utilizar el 4GL siguiendo estrictamente el estándar para asegurar la
accesibilidad a diferentes bases de datos impide sacar el máximo provecho de cada una de ellas.
Los lenguajes de cuarta generación o bien 4GL son herramientas encargadas de optimizar el
desarrollo de software automatizando la creación de este. Se han utilizado principalmente en la
generación de código para GUI y además en la implementación de programas que facilitan las
tareas de los desarrolladores y clientes.
La base de los 4GL es que el usuario no dice como se harán las cosas, solo brinda parámetros y
el programa se encargara de generar lo solicitado por el usuario, sea esto desde generación de
reportes de bases de datos a solucionar un problema matemático.
Página 66 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Uno de los cambios sustanciales que han tenido los lenguajes de cuarta generación ha sido su
relación con las base de datos cambiando el uso de técnicas y recursos en comparación con los
4GL más viejos. Además del mayor manejo de interfaces par el usuario.
También los lenguajes de cuarta generación se han visto influenciados por las tendencias de
cambio que ha sufrido la computación con el pasar de los años, como la tendencia a programar
con orientación a objetos, la incorporación de la arquitectura cliente /servidor, la naciente
ingeniería de software y la tendencia a trabajar en equipo.
SQL posee muchos servicios, entre ellos: servicio de duplicación, servicio de notificación,
servicio de integración, entre otros.
El servicio de duplicación es para mantener varias copias de la base de datos o de alguno de sus
objetos. EL servicio de notificación es para enviar distintas notificaciones a uno o más
dispositivos. El servicio de integración sirve para la creación de paquetes con diferentes tipos de
datos.
Funciones de manipulación de datos (data manipulation language (DML). Sirve para recuperar
datos, insertarlos, suprimirlos o modificarlos.
Conjunto de instrucciones que operan de acuerdo a una sintaxis y que permiten a los usuarios la
posibilidad de referirse a determinados conjuntos de datos que cumplan ciertas condiciones
(criterio de selección), como que un atributo tenga un determinado valor, o que un conjunto de
atributos y valores satisfagan cierta expresión lógica. Además del criterio de selección, es preciso
indicar la estructura externa que se desea actualizar o recuperar.
Incluye las sentencias SELECT de consultas y Update, Delete e Insert que modifican, borran o
agregan datos.
Página 67 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Lenguaje de definición de la estructura lógica: permite asignar nombre a los campos, a los
registros, estableciendo sus longitudes y características, así como sus relaciones, restricciones,
etc.
Lenguaje para la definición de la estructura interna.
Lenguaje de definición de estructuras externas: El SGBD debe poner a disposición de los
usuarios medios que les permitan recuperar o actualizar los datos contenidos en la base, de
acuerdo con la visión lógica o estructura externa (vista) que precise cada aplicación.
Incluye las sentencias Create, Drop y Alter, que crean, borran y mdifican tablas, vistas e índices
respectivamente.
Funciones de Control de datos (Data Control Lenguaje – DCL), que incluye las sentencias Grant
con la que se pueden otorgar permisos y Revoke, con la que se revocan.
Asimismo, el SQL puede ser utilizado como lenguaje de consulta cuando se realizan pruebas
sustantivas, es decir cuando se quiere analizar el contenido de los archivos. Por ejemplo, si el
auditor quiere saber si existen duplicados en un determinado campo de una tabla, puede utilizar
la siguiente sentencia:
Lista aquellos valores del Campo uno de los que contó mas de uno.
Conclusiones:
La evolución de los lenguajes tiende cada vez más a alejarnos de la máquina o hardware, creando
una mayor abstracción de los problemas a resolver, esto es beneficioso pues genera un ahorro
significativo de recursos como el tiempo que es tan valioso actualmente.
Los Lenguajes de Cuarta Generación tienden a ser muy compatibles entre sus mismas
evoluciones lo que nos permite crear aplicaciones con la confianza de que el trabajo realizado no
será desechado más adelante.
Paquetes tan poderosos como Mathematica hacen posible que las técnicas de computación
mejoren constantemente pues brindan una mayor facilidad para el análisis y diseño de nuevas
herramientas, mientas también ayudan a áreas tan importantes como la educación, todo esto
empleando la misma herramienta.
Es importante resaltar que para utilizar un 4GL se debe tener claro que si se desea manipular
para sacarle un mayor rendimiento, se debe de hacer cambiando la forma normal de hacer
software. Para esto, los programadores deben de volverse analistas, deben dominar técnicas
estructuradas , conceptos de diseño de interfaz grafica, conceptos de arquitectura, conceptos de
orientación a objetos y de principios de diseño. Y todo esto para poder obtener una mayor
productividad, una mayor facilidad al dar mantenimiento y además una mejor apariencia de la
aplicación.
Página 68 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
La idea de dar en la materia el pseudo-código es aprender las estructuras generales que están en
todos los lenguajes de programación; y no estudiar de memoria determinado lenguaje de
programación, de esta manera una vez aprendidas las estructuras lógicas debería resultarles fácil
aprender un lenguaje de programación como C o Pascal.
Una vez que estemos en un nivel intermedio se puede pasar a un lenguaje más sofisticado como
C++ o Java.
Página 69 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
1. Concepto y evolución.
1.2 CONCEPTO:
En sus principios el sistema operativo fue definido como “el soporte lógico que controla el
funcionamiento del equipo físico”
En realidad tiene diferentes definiciones dependiendo del punto de vista desde donde se lo mire:
Desde la óptica del usuario:
“Es un conjunto de programas y funciones que ocultan los detalles del hardware, ofreciendo al
usuario una vía sencilla y flexible de acceso al mismo”
Página 70 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
No todo el software que se ejecuta sobre el hardware se considera como sistema operativo,
existen dos tipos de programas:
Programas del sistema, que son los que manejan el hardware, controlan los procesos, hacen más
cómodo el entorno de trabajo, etc.
Programas de aplicación, que son los que resuelven un problema concreto de los usuarios y que
no son suministrados con el sistema operativo. Son programas diseñados y codificados por
analistas y programadores de aplicaciones conjuntamente con los usuarios.
Página 71 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
1.3 EVOLUCION:
Con el correr de los años fueron evolucionando desde la gestión eficiente hacia la facilidad del
uso.
Eran gestionadas por el usuario desde un tablero enchufable, donde apenas existía sistema
operativo, se programaba en lenguaje de máquina, eran operables a través de una consola que
donde se introducía un monoprograma a través de un lectora de tarjetas.
En 1955 se empezó a manejar a través de un operador, cuya misión era controlar el sistema,
cargar los programas, obtener resultados, etc.
El programador deja de tener acceso directo a la computadora.
El operador en principio recibía de los programadores los trabajos a realizar y los ejecutaba en
forma secuencial, obtenía los resultados y luego los entregaba a los programadores.
Luego se hizo más eficiente y reunía los trabajos con una necesidad de recursos físicos y lógicos
similares y los ejecutaba como si fuesen un bloque. (los agrupaba por un mismo lenguaje, por
ejemplo todos los Cobol, Fortran, etc. y así ahorraba un considerable tiempo de utilización.
Página 72 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Como el trabajo del operador era bastante mecánico, se automatizó en gran parte.
Se diseño un pequeño programa llamado Motor Residente, que transfería automáticamente el
control de un trabajo a otro. Este programa puede ser considerado como el primer sistema
operativo y residía en memoria.
Para que el monitor supiese qué debía ejecutar se le agregó al conjunto de tarjetas que contenían
el programa y los datos, un conjunto de tarjetas de control con las indicaciones necesarias para
que controlase la situación en cada momento. Estas tarjetas contenían un lenguaje estricto de
comandos llamado Lenguaje de Control de Trabajos (JCL: Job Control Lenguaje).
Página 73 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
A pesar de la automatización existía mucho tiempo ocioso del procesador, dada por la diferencia
de velocidad del procesador con los dispositivos de entrada/salida que eran mecánicos.
OFF-LINE
Aparecieron dispositivos de entrada salida más veloces. Las cintas magnéticas reemplazaron a
las tarjetas perforadas, pero su grabación era complicada.
Se utilizó una técnica que consistía en:
Perforar los programas en tarjetas
Leídos por una lectora de tarjetas
Grabación en cinta magnética
Se ejecutaba en bloque en el procesador
Grabación de resultados en una nueva cinta
Volcado de los resultados en una impresora
Página 74 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Ventaja: se podían tener varias lectoras de tarjetas produciendo cintas de entrada (procesador
ocupado la mayor parte del tiempo.
Desventaja: el usuario debía esperar que se llenara una cinta para que su trabajo fuese transferido
a la computadora.
BUFFERING
Para mejorar esto se utilizó una memoria intermedia llamada Buffer donde la cinta va
grabándose hasta que se llena, volcándose esto a la memoria de una vez y permitiéndole al
procesador realizar operaciones con los datos recibidos, y en paralelo se vuelve a cargar el
buffer, a este proceso de trabajo se lo denomina BUFFERING.
Al ser esta técnica difícil de aplicar ya que necesita de un control exhaustivo de cuando está lleno
el buffer, aparecieron las técnicas de Acceso Directo a Memoria (DMA), para evitar la
intervención del procesador en este tipo de operaciones de carga.
El buffering suele estar soportado por el programa monitor con funciones especiales o dentro de
los controladores de dispositivos de entrada/salida (drivers)
SPOOLING
Con la aparición del disco magnético que pueden ser leídos y escritos simultáneamente y en
cualquier punto de su superficie.
Página 75 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Las técnicas de SPOOL (Simultaneous Peripheral Operation On-Line), permiten que la salida de
un programa se escriba en un buffer y posteriormente se sea llevada a un disco magnético en
espera de poder ser enviada a una impresora o cualquier otro periférico de salida que en ese
momento pueda estar ocupado.
Al igual que en los sistemas de Buffering, el sistema de spooling trata de mantener ocupados al
procesador y a los dispositivos de entrada y salida el mayor tiempo posible, pero con la
diferencia de que ahora se solapan operaciones de entrada/salida de unos trabajos con el proceso
de otros.
136. Multiprogramación
Es un modo de trabajo en el que se pueden ejecutar varios programas simultáneamente con el fin
de aprovechar al máximo los recursos de la computadora.
Un trabajo realizado en una computadora, desde el punto de vista de ocupación en tiempo del
procesador y los dispositivos periféricos, puede ser de dos tipos:
Trabajos limitados por proceso: son aquellos que consumen la mayor parte de su tiempo en el
tratamiento de la información y muy poco en operaciones de entrada/salida
Trabajos limitados por operaciones de entrada/salida: son los que dedican la mayor parte de su
tiempo en operaciones de entrada/salida, haciendo poco uso del procesador, que se mantiene
inactivo durante grandes períodos de tiempo.
Página 76 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
El segundo tipo de procesos dio lugar a una nueva técnica denominada multiprogramación, que
consiste en aprovechar la inactividad del procesador durante la ejecución de una operación de
entrada/salida de un proceso, en atender a otro proceso.
El acceso al procesador debe seguir algún tipo de reglas o políticas que permitan la ejecución de
todos los trabajos.
Se hace necesario algún tipo de administración de la memoria, ya que ésta tiene que ser
compartida por todos los trabajos.
Varios trabajos pueden necesitar la utilización de un recurso al mismo tiempo, dando lugar a
problemas de concurrencia.
Página 77 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Se denomina proceso por lotes en sistemas multiprogramados al que no precisa intervención del
usuario durante la ejecución de los trabajos, tratándose en general de trabajos largos que van
solicitándose y entrando en una cola de espera de tipo FIFO, y que el procesador va tomando en
un grupo determinado, realizándolos en paralelo.
Página 78 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Se suelen usar en aplicaciones dedicadas a sistemas de control con sensores como elementos de
entrada, donde es necesaria una respuesta rápida sobre el sistema a controlar.
Las características principales del tiempo real son:
Como ejemplo tenemos aquellos que controlan procesos industriales, reserva de tickets, etc.
Página 79 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
137. Multiproceso
Aparecen aplicaciones que manejan gran cantidad de información, que un solo procesador no es
capaz de procesarla en el tiempo requerido, como por ejemplo el caso de los sistemas expertos,
donde el volumen de datos es extremadamente grande y se necesitan unos tiempos de respuesta
extremadamente pequeños, y además los algoritmos que manejan dichos datos son complicados
y necesitan de muchas operaciones para la obtención de resultados.
Se generó la necesidad de subdividir algoritmos en subalgoritmos más sencillos, de manera que
uno pueda tratar un subconjunto de datos con cierta independencia de los otros. Estos
subalgoritmos pueden trabajar en paralelo, tratando cada uno su parte de información al mismo
tiempo y obteniendo en forma conjunta el resultado final.
Existen computadoras con varios procesadores que trabajan en forma conjunta, el sistema
operativo es complejo debido a que tiene que administrar varios procesadores de tal manera que
la carga y el reparto de los trabajos debe equilibrar y optimizar al máximo el proceso global.
Página 80 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Página 81 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Componentes y funciones.
Al diseñar un sistema operativo, primero hay que decidir su finalidad y el tipo de proceso que se
quiere realizar a través de él (proceso por lotes, tiempo compartido, multiproceso, etc.).
Página 82 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Un solo programa, compuesto de un conjunto de rutinas entrelazadas de tal forma que cada una
puede llamar a cualquier otra.
Características
Programa final construido a base de módulos compilados en forma separada y unidos a través del
editor de enlace.
Buena definición de parámetros de enlace entre las distintas rutinas existentes.
Carecen de protecciones y privilegios
Hechos a medida, por lo tanto son rápidos en su ejecución y gestión.
Página 83 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Gestión de Información
Gestión de Memoria
Intérprete de comandos
Gestión de E/S
Spool
En el sistema de rings, cada anillo tiene una apertura, conocida como puerta o trampa (trap), por
donde pueden entrar las llamadas de las capas inferiores. Las zonas más internas del sistema
operativo o núcleo del sistema estarán más protegidas de accesos indeseados desde las capas más
externas. (las capas internas serán más privilegiadas que las externas)
Estos sistemas operativos separan dos conceptos que suelen estar unidos en el resto de los
sistemas:
La multiprogramación
Página 84 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
La máquina extendida
El núcleo se denomina monitor virtual y tiene como misión llevar a cabo la multiprogramación,
presentando a los niveles superiores tantas máquinas virtuales como se soliciten. En cada una de
ellas se pueden ejecutar un sistema operativo diferente, que será el que ofrezca la máquina
extendida al usuario
Figura 3.4
Este tipo de sistema operativo puede ser ejecutado en la mayoría de las computadoras, ya sean
grandes o pequeñas.
Este sistema sirve para todo, es de propósito general y se basa en lo mismo que el resto de los
sistemas operativos convencionales, el núcleo y los procesos, presentando grandes diferencias en
cuanto a la forma de distribuir los trabajos entre sus distintas partes.
Suele suministrar mecanismos adecuados para la gestión de:
Procesos
Memoria
Comunicación entre procesos
El núcleo tiene como misión establecer la comunicación entre los clientes y los servidores.
Los procesos pueden ser tantos servidores como clientes.
Ejemplo: un programa de aplicación normal es un cliente que llama al servidor correspondiente
para acceder a un archivo o realizar una operación entrada/salida sobre un dispositivo concreto.
A su vez , un proceso cliente puede actuar como servidor para otro.
Fig 3.5
Página 85 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
En general, las llamadas al sistema operativo necesitan pasar algún tipo de información para la
correcta ejecución del proceso a través de algún registro o bloque de parámetros.
En la siguiente figura se ve el esquema de ejecución de una llamada al sistema operativo.
Las llamadas al sistema operativo son como las llamadas a un subprograma desde el punto de
vista del programa que se llama. Tras la llamada, se ejecuta la rutina del sistema operativo que ha
sido invocada, tomando los datos de los parámetros correspondientes, luego se devuelve el
control al proceso que efectuó la llamada, ejecutándose la siguiente instrucción y en su caso
tomando los datos de vuelta a los parámetros correspondientes.
Página 86 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Son aquellos cuya misión es resolver problemas comunes y frecuentes de los usuarios. Se
agrupan en:
Tratamiento de archivos
Información
Editores
Ejecución
Programas de utilidad
Intérprete de comandos
Terminación normal: se realiza la devolución del control de comandos al usuario cuyo proceso
ha terminado, a través del intérprete de comandos.
Página 87 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Gestión de excepciones
Cuando un programa en ejecución comete un error, se producirá una interrupción; por ejemplo
una división por 0, intento de violación de un archivo protegido, intento de ejecución de una
instrucción no permitida o privilegiada, etc. El tratamiento de estos errores se conoce como
manejo de excepciones.
Los sistemas operativos suelen asociar alguna función para el tratamiento de estos errores. El
núcleo da control a esta función en el momento de aparición de un error de este tipo.
323. Protecciones
Los programas de aplicación de los usuarios no están exentos de errores, así como los sistemas
tampoco están libres de usuarios con malas intenciones. Por ello, el SO debe incluir ciertas
funciones de protección con le objeto de evitar problemas entre procesos y entre éstos y el propio
sistema operativo.
Protección de la E/S
Todos los dispositivos externos cuentan, por parte del SO, con rutinas para el control de las
operaciones de entrada/salida. Estas rutinas se denominan controladores o drivers de dispositivos
y entre otras funciones protegen los accesos incorrectos devolviendo el control al núcleo del SO,
indicándole la situación errónea que se ha producido.
Protección de la memoria
En general, cada proceso tiene una zona de memoria asignada para el tratamiento de sus datos
denominada espacio de direccionamiento y no puede acceder a zonas asignadas al SO o a otros
procesos. Para evitarlo existen unos registros frontera que indican el límite de memoria asignado
a cada proceso.
Página 88 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Página 89 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Página 90 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Cambio de proceso:
Página 91 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Los bloques de control de los procesos se almacenan en colas, cada una de las cuales representan
un estado particular de los procesos, existiendo en cada bloque, entre otras informaciones, tantos
campos como colas en las que el proceso se pueda situar, para que a partir de ellos se indieque la
cola en la que se encuentra.
Página 92 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Transiciones de estado: se denominan a los cambios que todo proceso puede tener cambiar de
estado varias veces a lo largo de su existencia.
Página 93 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Prioridades
Según la asignación
Asignadas por el sistema operativo
Asignadas por el propietario.
Según la variación
Estáticas
Dinámicas
Tipos de procesos:
Según el uso que vaya a tener y la forma como se haya construido el código ejecutable de
su programa
Reutilizables
Reentrantes
Según la capacidad que tienen de acceso al procesador y al resto de los recursos.
Apropiativos
No apropiativos
Según su forma de ejecución.
Residentes
Intercambiables
Excepciones
Son irregularidades o fallas que el sistema operativo debe tratar controlar y en su caso corregir.
Fallos de hardware, de software, entrada de datos incorrectos, eventos anómalos, etc.
Según la gravedad de los eventos se establecen tres categorías de errores:
Página 94 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
No recuperables: son los que sin afectar al sistema, hacen que el proceso no pueda
continuar en su ejecución, por ejemplo una división por 0
Recuperables: son los que con ciertos ajustes permiten que el proceso continúe su
ejecución normal, por ejemplo datos con formato indebido.
Página 95 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Planificación a largo plazo (planificador de trabajos), sólo existe en los sistemas de proceso por
lotes.
Planificación a medio plazo (planificador de swapping) este nivel gestiona los procesos
suspendidos en espera de algún recurso no disponible en el momento de la suspensión.
Planificación a corto plazo (planificador del procesador) es donde se debe dar un buen servicio a
los procesos interactivos para que el usuario no perciba, o lo haga en pequeño grado, que está
compitiendo por el procesador junto con otros usuarios.
52. Objetivos:
Las políticas de planificación intentan cubrir los siguientes objetivos:
Justicia, máxima capacidad de ejecución, máximo número de usuarios interactivos,
predecibilidad, minimización de la sobrecarga, equilibrio en el uso de recursos y seguridad de las
prioridades.
Página 96 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
551 Primero en llegar, primero en ser servido (FCFS) First Come, First Served)
El procesador ejecuta cada proceso hasta que termina, por tanto los procesos que entren en cola
de procesos preparados permanecerán encolados en el orden en que lleguen hasta que les toque
su ejecución.
Características:
No es apropiativa
Es justa, aunque los procesos largos hacen esperar mucho a los cortos
Es una política predecible
El tiempo medio de servicio es muy variable en función del número de procesos y su
duración
Página 97 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
554Próximo proceso, el de tiempo restante más corto (SRT SHORTEST REMAINING TIME)
Es una mezcla de los dos anteriores, tratando de obtener las ventajas de ambos.
Cambia el proceso que está en ejecución cuando se ejecuta un proceso (paso del planificador de
largo plazo al de corto plazo), con una exigencia de tiempo de ejecución total menor que el que
está ejecutando el procesador. El valor del tiempo de respuesta medio de los procesos largos
mejora con respecto a SJN
Características:
Es una variante de SJN, para hacerla apropiativa
Puede ser injusta, ya que un proceso corto puede echar a uno largo que está haciendo uso
del procesador y que además este terminando
Presenta una mayor sobrecarga
Excelente tiempo medio de servicio
Es muy eficiente
555 Prioridad
En esta política se asocia a cada proceso una prioridad, de manera que el procesador se asigna al
proceso de mayor prioridad.
Las prioridades pueden ser definidas interna o externamente.
En el primer caso el sistema operativo se basa en una serie de informaciones medibles para el
cálculo y asignación de dichas prioridades (tiempo necesitado de procesador, necesidad de
memoria, etc.
El principal problema de esta política es el bloqueo o postergación indefinida, ya que un proceso
de baja prioridad puede estar esperando su turno indefinidamente, para evitarlo se suele emplear
lo que se denomina envejecimiento de prioridades, que aumenta gradualmente las prioridades de
los procesos que están en la espera de utilizar el procesador.
556 Próximo el de más alto índice de respuesta (HRN HIGH RESPONSE NEXT)
Trata de corregir las posibles injusticias de SJN con los procesos largos y las de FCFS con los
procesos cortos.
Se basa en hacer variable la prioridad de un proceso, calculándola constantemente por medio de
la expresión
w+t
P = ---------
T
Inconvenientes:
Si un usuario ejecuta un proceso corto inmediatamente después de que un proceso largo haya
comenzado a utilizar el procesador, deberá sufrir una larga espera
Es muy costosa llevar a la práctica,
Sobrecarga mucho el sistema
Características
Página 98 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
No es apropiativa
Es justa
Es costosa de poner en práctica ya que la prioridad debe calcularse para todos los procesos en
espera, cada vez que termine el proceso que está haciendo uso del procesador
Produce una gran sobrecarga en el sistema (debido a los cálculos que debe realizar)
Administración de la memoria.
Para que un programa pueda ser ejecutado en una computadora, tanto él como los datos que vaya
a manejar deben estar almacenados en la memoria principal o física.
Para mejorar el rendimiento de un procesador y su capacidad de proceso, se pueden repartir los
servicios del mismo entre varios programas que necesitan estar simultáneamente cargados en la
memoria., por lo tanto se hace necesario “compartir” la misma.
En el funcionamiento de una computadora podemos considerar la memoria principal como el
recurso central, ya que tanto el procesador como los dispositivos de entrada/salida acceden a ella
para leer y/o grabar la información que manejan.
El procesador leerá de la memoria una instrucción para ejecutarla, y a su vez tomará de la misma
los datos que necesite para al final depositar el posible resultado también en la memoria. Esta
operación se estará repitiendo constantemente, y por ello la velocidad a la que se realicen estos
accesos, tanto de lectura como de escritura, condicionarían la rapidez y eficacia de la
computadora.
Se denomina tiempo de acceso a la memoria al tiempo que transcurre entre el inicio y el fin de
una operación de lectura o escritura sobre la misma. El segundo parámetro caracterizado en el
tiempo de ciclo de memoria que marca el retraso que impone el hardware entre el fin de una
operación y el principio de la siguiente.
7.2 DIRECCIONAMIENTO
La memoria principal se puede ver como una sucesión de bytes o palabras.
Página 99 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos
Por ejemplo si para direccional un byt de la memoria se utilizan 16 bits, sólo podremos
direccionar 2 a la 16 bytes de la misma, que será el espacio máximo direccionable de la
computadora.
Si la computadora es direccionable por palabra, serán éstas las que ocuparán las sucesivas
posiciones a las que podremos acceder (en general el tamaño de una palabra dependerá de la
computadora y estará compuesto por varios bytes)
Según el tamaño de la memoria a la que se accede en cada operación, existen dos tipos de
computadoras
Direccionables por byte
Direccionables por palabra.
73 Jerarquía de almacenamiento.
Las primeras computadoras, mantenían en todo momento los programas y datos que ejecutaban.
Poco tiempo después, parecía ilógico mantener cargados en memoria principal aquellos
programas y datos que o fueran a ejecutarse. Es por ello que se desarrollaron dispositivos rápidos
de almacenamiento. En la década de los sesenta, se desarrollo la memoria cache (rápidas) para
almacenar los programas y datos más utilizados.
74 GESTION DE LA MEMORIA
Al ser la memoria un recurso tan caro y tan influyente en el rendimiento general de una
computadora, debe ser manejado de la forma más eficiente posible. Por este motivo, el sistema
operativo dedica gran parte de su software a su gestión (gestor de memoria), buscando la
utilización más adecuada al servicio de quede dar.
741 Monoprogramación
La memoria dedicada
Las primeras computadoras utilizaban lo que se denomina régimen dedicado, consiste en que el
programador accedía directamente al hardware y gestionaba la memoria en sus programas. En
estos primeros equipos se programaba en lenguaje de máquina, sin existir sistema operativo y
consiguientemente tampoco gestor de memoria.
Como asegurar que los programas de usuario no se vean afectados por esta división de la
memoria.
Protección de la memoria
Se establece una dirección frontera que limita la zona del sistema operativo. Este control provoca
un cierto aumento de tiempo en el acceso a la memoria, pero éste queda compensado con la
mejora en rendimiento que permite el sistema operativo.
La dirección frontera, en general, suele ser variable para permitir que un sistema pueda ir
evolucionando en prestaciones y versiones de su propio sistema operativo, en definitiva que
pueda variar su tamaño, obligando por tanto a variar la dirección frontera.
Reasignación de direcciones
Una vez inicializado el sistema operativo, el contenido del registro frontera indicará el punto a
partir del cual puede cargarse el programa de usuario. Para ello, es necesario reasignar las
direcciones del programa en función de la frontera. Existen dos formas de realizar la
reasignación, una estática y otra dinámica.
La reasignación estática se realiza durante la compilación, o bien durante la carga del programa
en memoria.
La reasignación dinámica, se realiza durante la ejecución del programa. Un dispositivo especial
del hardware interceptará cada dirección lógica generada por el programa y le sumará el
contenido del registro frontera para obtener la dirección real correspondiente.
Cualquiera que sea la técnica utilizada, el usuario no manejará direcciones reales en su
programa. Utilizará direcciones relativas que podrán variar entre 0 y el máximo permitido por el
sistema operativo. Este es el denominado espacio lógico de direcciones.
Posteriormente, el sistema operativo, con la ayuda del hardware, establecerá la correspondencia
adecuada entre las direcciones relativas y las direcciones reales que configuran lo que se
denomina espacio físico de direcciones (memoria real)
Intercambio de almacenamiento
La necesidad de atender a varios usuarios en los sistemas de tiempo compartido, impulsó el
desarrollo de técnicas de intercambio de almacenamiento o swapping.
La eficacia de esta técnica dependerá principalmente de la velocidad con que se realicen la carga
y descarga de los programas y la velocidad de acceso a los dispositivos de almacenamiento
secundario.
Se puede reducir la influencia del cambio de programa si se solapa con la ejecución. Para ello, el
sistema divide la zona de usuario en dos partes. Mientras en una está procesándose un programa,
en la otra se está cargando otro.
En este caso el sistema debe encargarse de las interrupciones y situaciones de los procesos
extraídos de la memoria (operaciones de entrada/salida, etc.). Por ejemplo si un programa se
queda a medias en una operación de entrada de datos y el sistema lo extrae de la memoria, se
encargará de almacenar dichos datos de entrada en lo que se denomina buffer hasta que el
programa vuelva de nuevo a la memoria y empiece a ejecutarse otra vez.
Hasta aquí se consideraron sistemas en los que en un momento dado, sólo existe un programa de
usuario en la memoria principal, es decir, sistemas que trabajan en monoprogramación.
742 Multiprogramación
Para poder repartir el procesador entre varios procesos, necesitamos tenerlos en memoria
principal, por ello se divide ésta en trozos denominados particiones o regiones. Donde se
cargarán los diferentes procesos. El número de particiones indicará el grado de
multiprogramación del sistema.
Protección de la memoria
El mecanismo de protección deberá, por tanto, actuar sobre cada referencia de memoria
generada, siendo rápido en su gestión. Pues de lo contrario, producirá una pérdida de tiempo
importante. La rapidez justifica que se utilicen, para esta función, determinados registros
hardware. Para cada partición se utilizan dos registros límites (superior e inferior)
Esta técnica exige que las direcciones generadas por los procesos sean absolutas, asignadas bien
durante la compilación o durante la carga del programa. En ambos casos la asignación será
estática.
Otra solución más flexible, carga un registro con la dirección de comienzo de la partición y el
otro con el tamaño de la misma, denominándose registro base y registro limite. En este caso es
posible la asignación dinámica de direcciones ya que bastará actualizar el contenido del registro
base para apuntar a otra zona de memoria. Cada dirección generada por el proceso deberá ser
menor que el registro límite y se sumará el contenido del registro base para obtener así la
dirección absoluta correspondiente.
743 Paginación
La necesidad de asignar memoria en cantidades contiguas para cada programa es el mayor
inconveniente para un buen aprovechamiento de la misma. La paginación es una técnica de
gestión que permite asignar la memoria de forma discontinua. Con este fin, se divide la memoria
en trozos de tamaño fijo. Llamados armazones o frames y la lógica en bloques de igual tamaño
denominados páginas. El sistema operativo mantiene internamente una tabla de páginas donde
relaciona cada página cargada en memoria con el frame que contenga.
Cada dirección que genere el procesador será interceptada y dividida en dos componentes, un
número de página (p) y un desplazamiento de página (d).
El tratamiento anterior exige que se realice por hardware, pues de no ser así, se introduciría un
retraso excesivo.
Cada programa se divide en páginas, y éstas se cargan en frames libres que no tienen por que ser
contiguos.
Gestión de memoria.
La paginación es una forma de reasignar direcciones dinámicamente. El sistema analizará cada
nuevo trabajo que se disponga a entrar para conocer el número de páginas que ocupa y buscará
en su lista de frames libres un número igual de ellos. Si éstos existen, cargará en ellos las páginas
de un programa y construirá la correspondiente tabla de páginas apuntada por el bloque de
control del proceso.
De esta manera, se logra evitar la fragmentación externa ya que cualquier frame libre es
asignable a un trabajo que lo necesite.
Seguirá existiendo fragmentación interna. Esta fragmentación se reduce si la página tiene un
tamaño pequeño, pero se necesitaría una tabla de páginas mayor.
accesos a memoria y se duplican los tiempos de ejecución. Con ello, hemos logrado mejorar la
utilización de memoria, sin embargo, la duración en los procesos es mayor.
Para resolver este problema, se recurren a memorias pequeñas de muy alta velocidad (son caras),
donde se pueden mantener las entradas a las tabas de páginas más utilizadas (esta es la memoria
cache) al tener mayor velocidad de acceso que la memoria principal, logra reducir notablemente
el retraso producido por la paginación.
En el caso de sistemas pequeños, con tablas de páginas de pocas entradas, se puede utilizar un
conjunto de registros hardware para contener dicha tabla. Estos registros son los llamados
registros asociativos.
El tiempo efectivo de acceso a memoria es el tiempo medio de acceso a todas las direcciones esté
o no su entrada de página en la memoria cache.
Páginas compartidas.
La técnica de la paginación permite que varios procesos o usuarios compartan páginas cargadas
en memoria.
Cada usuario contendrá en su tabla de páginas las entradas correspondientes al editor, apuntando
todas ellas a los mismos frames y a distintos para los datos.
Las páginas que se deseen compartir deben tener código reentrante.
Necesitamos un sistema de protección de las páginas en memoria que no sólo controle las
direcciones a las que se puede acceder, sino también el modo en que se realiza dicho accesos.
Para ello, se añaden a las entradas de la tabla de páginas una serie de bits de validez.
Con la paginación se produce una quiebra importante entre la visión que tiene el usuario de la
memoria y la forma en que la utiliza. El usuario desarrolla su programa considerando la memoria
como algo contiguo.
El encargado de hacer corresponder el espacio lógico de direcciones (continuo) y el espacio
físico de direcciones (discontinuo) es el hardware de traslación dinámica de direcciones.
744 Segmentación
La segmentación es una técnica distinta de la gestión de la memoria que pretende acercarse más
al punto de vista del usuario.
Desde este punto de vista un programa es un conjunto de componentes lógicos de tamaño
variable o un conjunto de segmentos, es decir el espacio lógico de direcciones se considera como
un conjunto de segmentos, cada uno definido por su tamaño y un número.
La segmentación de un programa la realiza un compilador y en ella cada dirección lógica se
expresará mediante dos valores: número de segmento (s) y desplazamiento dentro del segmento
(d).
Hardware de segmentación
Transforma cada dirección lógica (s,d) en una dirección real (r), este dispositivo consulta la tabla
de segmentos correspondiente.
Rendimiento
La eficacia de la segmentación requiere, de igual forma que la paginación, el uso de memorias
cache para lograr unos tiempos adecuados. De igual forma que en la paginación se pueden
compartir segmentos entre varios procesos.
Sistemas combinados
Algunos sistemas utilizan la técnica de paginación segmentada (serie 370 de IBM) y otros la
segmentación paginada (el Multics y el GE 645)
De esta forma se evita la fragmentación externa propia de la segmentación, pues cualquier hueco
será de una página como mínimo, y por tanto utilizable para cualquier segmento que lo necesite.
La memoria virtual es una técnica de gestión que, combinando hardware y software, permite la
ejecución de programas parcialmente cargados en memoria real.
Esta forma de trabajar aporta ventajas importantes:
Si los programas se pueden ejecutar por partes, la memoria lógica puede ser mayor que la
real disponible
Puesto que cada programa ocupa menos memoria real, se puede elevar el índice de
multiprogramación, y por lo tanto, la eficiencia del sistema.
Al cargar menos cantidad de cada programa, se necesitan menos operaciones de
entrada/salida para las operaciones de carga e intercambio de los mismos.
Las diferentes partes de un programa se van cargando en memoria a medida que se necesitan, y
por ello, esta técnica debe considerar tres aspectos importantes:
Carga: las porciones del programa se cargan cuando se necesitan (petición de página) o
bien se pueden cargar por adelantado (anticipación o prepaginación)
Colocación: los sistemas de memoria virtual que utilicen segmentación deben decidir al
cargar un nuevo segmento, si lo hacen en el hueco más adecuado o bien en el primero
posible.
Sustitución: lo normal será que toda la memoria real esté ocupada, y cuando se necesite
cargar una nueva parte del programa habrá que reemplazar alguna de las existentes. Es
importante definir la selección de la parte a reemplazar
Algoritmos de reemplazamiento
El algoritmo óptimo será aquel que seleccione para su sustitución la página que vaya a tardar
más en ser utilizada.
La dificultad de esta solución radica en la imposibilidad de prever el comportamiento futuro de
los procesos, se puede prever en cierta medida dicho comportamiento, partiendo de la
experiencia del pasado, de las referencias a memoria que hasta el momento han realizado los
procesos.
Su idoneidad quedará definida por dos factores; número de faltas de página que provoca y el
costo de su utilización (la sobrecarga que produce en el sistema).
Cuando se necesite sustituir una página, se elegirá aquella que lleve más tiempo en memoria
(primera en llegar, primera en salir).
No es improbable que la razón por la que una página lleve más tiempo en memoria sea su mayor
utilización, y en ese caso, este algoritmo sustituirá la página menos adecuada.
Algoritmo LRU
Este algoritmo es una buena aproximación a la solución óptima, considerando que aquellas
páginas muy usadas en el pasado reciente lo serán también en el futuro. En el mismo sentido, las
páginas poco utilizadas en el pasado seguirán siéndolo en el futuro, y se deberá sustituir aquella
que haya sido menos usada recientemente (LEAST RECENTLY USED)
Ponerlo en práctica es realmente difícil, ya que el sistema debe contabilizar, de alguna forma, el
tiempo en el que se produce cada referencia a memoria para poder clasificar las páginas según su
uso. Este control se puede realizar de varias maneras:
Contadores de hardware
Matrices de hardware
Pilas
En todas estas opciones de algoritmo LRU se exige disponer de un hardware especial y por ello,
su aplicación se limita a aquellas computadoras que dispongan de los elementos necesarios
Otros algoritmos
Una práctica bien extendida es la utilización de bit de referencia asociado a cada entrada de la
tabla de páginas. Cada vez que se utiliza una página, el hardware activa el bit correspondiente.
Conforme se van utilizando las distintas páginas cargadas en memoria se activan sus bits de
referencia y, en un instante dado, aquellas cuyos bits estén en cero, serán candidatas a ser
reemplazadas. En general, los bits de referencia se restauran cada cierto tiempo (puesta a cero)
Otro algoritmo es el denominado menos frecuentemente usado ( LFU LEAST FREQUENTLY USED),
consiste en asociar un contador a cada página, de tal forma que, a intervalos regulares, se
produce una interrupción que pasa control al sistema y éste añade al contador de cada página el
valor del bit de referencia, poniendo después a 0 todos los mencionados bits de referencia.
En ocasiones, algunos algoritmos se complementan utilizando un bit de modificación por cada
página, indicando si el contenido de la misma ha variado o no desde que se cargó en memoria.
¿Entre que páginas elegimos? ¿Las del propio proceso o entre todas las existentes? En el primer
caso hacemos una selección local o por proceso, y en el segundo, ¿lo haremos global o general?
El control de las operaciones de entrada/salida es otra de las misiones que debe realizar un
sistema operativo. Los procesos no necesitan conocer las peculiaridades ni características de
dichos dispositivos.
En general el software de gestión de operaciones E/S que posee un sistema operativo representa,
aproximadamente, el 50 por ciento del total, por lo que esta parte es de suma importancia, mas
para el diseñador y el programador del sistema que para los programadores de aplicaciones y
usuarios.
La gestión se hace a través de software de control, comúnmente denominado driver del
dispositivo.
Los dispositivos se pueden clasificar según el tipo de operación que manejan y cómo lo hacen
en:
Dirigidos a bloques: tratan la información de tamaños fijo (256 o 1024 bytes) Su característica
principal es que se puede leer cada bloque como una unidad independiente de las demás (por
ejemplo los discos)
Dirigidos al carácter: entregan o aceptan cadenas de caracteres sin tener en cuenta ninguna
estructura prefijada. No son direccionables ni pueden realizar operaciones de búsqueda (por
ejemplo una Terminal)
Dispositivos de almacenamiento
Discos: cada sistema operativo necesitará conocer cómo es el formato que tiene el disco, es
decir, cuántos sectores tiene cada pista y cuántos sectores tiene cada pista y cuantos bytes pueden
ser almacenados en un sector. Si un sector es detectado como incorrecto, se marca como tal, y el
sistema operativo no vuelve a acceder al mismo.
Cintas magnéticas: se usan para realizar copias de seguridad periódicas de grandes volúmenes
de datos. La trama (frame) es un conjunto de nueve bits, de los cuales 8 son de datos y el noveno
es de paridad. Las tramas se agrupan en registros separados por huecos (GAPS) y los registros se
agrupan en archivos (files). La transferencia se hace a través de los buffers. Muchos sistemas
operativos graban un registro inicial en la cinta incluyendo un registro etiqueta (label) que consta
del número de serie, el propietario y otras informaciones necesarias para el sistema operativo.
Terminales
Líneas de Comunicación:
Son dispositivos cuya misión es la de conectar entre sí computadoras y éstas con sus terminales
cuando la distancia es grande. Suelen llevar consigo elementos físicos y lógicos.
Las líneas de comunicaciones pueden ser de varios tipos: síncronas y asíncronas, simplex, half-
duplex y full-duplex
Registros: los dispositivos pueden conectar al procesador por los registros de los dispositivos
que pueden ser accedidos directamente en una zona determinada de la memoria o,
indirectamente, por medio de instrucciones hardware que devuelven el estado del mismo.
Estos registros tienen cuatro misiones:
Transferir el estado del dispositivo (Status)
Transferir instrucciones al dispositivo
Transferir datos desde el dispositivo
Transferir datos al dispositivo
Para ver cuando se ha completado una operación se pueden emplear dos métodos: polling e
interrupciones.
Funciones de un driver: definir las características del periférico, inicializar los registros, habilitar
y deshabilitar los dispositivos, procesar o cancelar todas las operaciones de E/S, procesar todas
las interrupciones, tratamiento de errores.
Rutinas de un driver: son los puntos de entrada al driver y pueden ser llamadas directamente por
el núcleo del sistema operativo o por una interrupción hardware del dispositivo periférico. En
general, en un driver podemos encontrar las siguientes rutinas: inicialización, atención de
peticiones de E/S, gestión de interrupciones, cancelación de operaciones de E/S, time-out,
power-fail.
Interrupciones sectorizadas
Destina parte de su memoria (la más baja) de vector de interrupción. Un sistema operativo
admite un máximo de vectores de interrupciones que es fijado en el momento de la generación
del mismo.
Directorio de dispositivo: el sistema mantiene cada disco en un espacio reservado donde guarda
información relativa a los archivos existentes en el mismo y al espacio libre, este espacio recibe
el nombre de directorio que creará el sistema en cada disco al formatearlo o inicializarlo.
Generalmente consta de una entrada pro cada archivo existente en el disco y otra para la
información sobre el espacio disponible.
Para agilizar la búsqueda del archivo, algunos sistemas exigen que el directorio esté siempre en
la misma dirección del disco. Otros permiten definir su situación mediante programas de utilidad
especiales, quedando su dirección reflejada en un bloque prefijado, para evitar los continuos
accesos al directorio del disco como paso previo a cualquier operación, algunos sistemas
mantienen en memoria una lista de archivos abiertos.
Existen distintos tipos de directorios; de un nivel, de dos niveles, multinivel (son los árboles de
directorios y otras (por ejemplo el gráfico acíclico).
INTRODUCCION
HISTORIA
CONTEXTO
MERCADO
DISTRIBUCION
ASPECTOS GENERALES
INTERFACE
SEGURIDAD
CONECTIVIDAD
ESCALABILIDAD
ASPECTOS TECNICOS
RAZONES PARA UTILIZAR
CONCLUSION
Tendencia.