Está en la página 1de 114

UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas

Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Teoría de los Lenguajes y Sistemas Operativos

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

UNIDAD I: Lenguajes y estructuras de programación ¡Error! Marcador no definido.


1. Tipos de lenguajes. ¡Error! Marcador no definido.
Estructuras. ¡Error! Marcador no definido.
Ámbito de aplicación. ¡Error! Marcador no definido.
Lenguajes orientados al problema. ¡Error! Marcador no definido.
Lenguajes de control. ¡Error! Marcador no definido.
2. Traductores de lenguaje. ¡Error! Marcador no definido.
Compaginadores, compiladores e intérpretes. ¡Error! Marcador no definido.
Características. ¡Error! Marcador no definido.
Vinculación. ¡Error! Marcador no definido.
3. Programas. ¡Error! Marcador no definido.
Constantes, variables y expresiones. ¡Error! Marcador no definido.
Tipos de instrucciones. ¡Error! Marcador no definido.
Bucles, contadores, acumuladores y selección. ¡Error! Marcador no definido.
4. Estructuras de datos. ¡Error! Marcador no definido.
Arreglos. ¡Error! Marcador no definido.
Ordenación, búsqueda e intercalación. ¡Error! Marcador no definido.
Estructuras dinámicas lineales. ¡Error! Marcador no definido.

UNIDAD II: Técnicas de Programación. ¡Error! Marcador no definido.


1. Programación convencional. ¡Error! Marcador no definido.
Programación modular. ¡Error! Marcador no definido.
Programación estructurada. ¡Error! Marcador no definido.
Estructuras de control y anidamiento. ¡Error! Marcador no definido.
Métodos de programación estructurada. ¡Error! Marcador no definido.
2. Declaración e invocación de funciones. ¡Error! Marcador no definido.
Definición de subrutinas. ¡Error! Marcador no definido.
Parámetros: métodos. Recursión. ¡Error! Marcador no definido.
3. Programación orientada a Objetos. ¡Error! Marcador no definido.
4. Tablas de decisión: reglas de decisión, tipos de tablas. ¡Error! Marcador no definido.
Construcción y encadenamiento. ¡Error! Marcador no definido.
5. Documentación de programas. ¡Error! Marcador no definido.
Pseudocódigos. ¡Error! Marcador no definido.
Autodocumentación. ¡Error! Marcador no definido.
Escritura de programas: cabecera, declaración de variables y constantes, comentarios. ¡Error! Marcador no definido.
Estilo de escritura y estándares. ¡Error! Marcador no definido.

UNIDAD III: Lenguajes 4GL y generadores ¡Error! Marcador no definido.


1. Lenguajes orientados a usuarios finales. ¡Error! Marcador no definido.
Lenguajes de 4ta generación. ¡Error! Marcador no definido.
Lenguajes de cuarta generación ¡Error! Marcador no definido.
Lenguajes estructurados de recupero de información. ¡Error! Marcador no definido.
Elección del lenguaje. ¡Error! Marcador no definido.
2. Ayudas automatizadas de desarrollo y programas generadores para personal especializado. ¡Error! Marcador no definido.
Prototipos y modelización: herramientas y métodos para el desarrollo de prototipos. ¡Error! Marcador no definido.
Tendencias. ¡Error! Marcador no definido.
Estado del arte. ¡Error! Marcador no definido.

UNIDAD IV: SISTEMAS OPERATIVOS ¡Error! Marcador no definido.


1. Concepto y evolución. ¡Error! Marcador no definido.
Componentes y funciones. ¡Error! Marcador no definido.
2. Administración de los diversos componentes del sistema. ¡Error! Marcador no definido.
Administración del procesador. ¡Error! Marcador no definido.
Administración de la memoria. ¡Error! Marcador no definido.
Administración de los dispositivos ¡Error! Marcador no definido.
Administración de los archivos. ¡Error! Marcador no definido.
3. Análisis de los sistemas operativos más difundidos. ¡Error! Marcador no definido.
Tendencia. ¡Error! Marcador no definido.

Página 2 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

UNIDAD I: Lenguajes y estructuras de programación

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.

Un lenguaje de programación es una notación para escribir programas, mediante la cual


podemos comunicarnos con el hardware y dar las instrucciones adecuadas para realizar
determinado proceso. Un lenguaje esta definido por una gramática o conjunto de reglas que se
aplican a un alfabeto, constituido por el conjunto de símbolos utilizados.

Clasificaciones de los lenguajes de PROGRAMACIÓN

1ra clasificación: según se aproxime al lenguaje máquina o al lenguaje de las personas.

Lenguajes de bajo nivel: Comprende al lenguaje binario (Lenguaje máquina), y al lenguaje


Assembler o ensamblador.
Características:
Cada instrucción del lenguaje equivale a una instrucción del CPU.
Los programas solo servían para un modelo específico de procesador (Seria como decir
que en la actualidad requiero un Windows distinto para Celeron, Pentium 3, Pentium 4,
etc.).
Desventajas:
La programación era muy difícil ya que había que conocer el procesador sobre el que se
iba a programar, y además había que utilizar reglas nemotécnicas engorrosas.

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 imperativos: usan sentencias o instrucciones como unidad de trabajo de los


programas (Cobol , Pascal , C, Ada).

 Lenguajes declarativos: Los programas se codifican mediante descripciones de


funciones o expresiones lógicas (Prolog, Lisp).

 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).

 Lenguajes orientados al problema: están diseñados para solucionar problemas


específicos, en la mayoría de los casos de gestión. Estos suelen ser generadores de
aplicaciones (Ej: Clarion, Genexus, etc).

 Lenguajes naturales: el objetivo de su creación es acercar el diseño y la construcción de


programas al lenguaje de las personas.

3ra clasificación: De acuerdo al desarrollo de los lenguajes desde la aparición de las


computadores, y habiendo una cierta correspondencia con las generaciones establecidas en la
evolución de las computadoras.

 Primera generación: Lenguajes máquina y ensambladores.


 Segunda generación: Comprende los primeros lenguajes de alto nivel imperativos
(Fortran, Cobol).
 Tercera generación: Lenguajes de alto nivel imperativos. Son los más usados en la
actualidad (Basic, Pascal, C).
 Cuarta generación: Están orientados a aplicaciones de gestión y a las bases de datos
(SQL).
 Quinta generación: Orientados a la inteligencia artificial. (Prolog, Lisp).

Página 4 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Lenguajes de programación más importantes


Desde la década del 50 hasta la actualidad, se han desarrollado más de 2.000 lenguajes
diferentes; sin embargo menos de 40 cuarenta fueron importantes en la historia informática. En
el apartado siguiente se explicaran los aspectos más relevantes de los lenguajes de programación
más importantes en la historia de la informática, desarrollando un ejemplo de escritura del
mismo. Los lenguajes que se trataran son los siguientes:

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:

 Cada computadora tiene un lenguaje ensamblador propio, en consecuencia un programa


solo puede usarse solo en la máquina en la que se programó.
 El programador debe conocer el hardware del equipo, porque se programa directamente
sobre las direcciones de memoria, registros del procesador y otros elementos físicos.
 Como todas las instrucciones del lenguaje son elementales, se debe describir
detalladamente todas las operaciones que efectuará el equipo cuando se realice cualquier
proceso.

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

1.- CONCEPTO: Un programa de computadora es un conjunto de instrucciones, escritas en un


lenguaje formal siguiendo un orden lógico, que producirá la ejecución de una determinada tarea.

PROCESO DE PROGRAMACION:

DEFINICION Y ANALISIS DEL PROBLEMA D M


O A
C N
DISEÑO DEL ALGORITMO U TE
M N
E IM
CODIFICACION DEL PROGRAMA
N IE
T N
DEPURACION Y VERIFICACION A T
CI O
O
N

2.- PARTES CONSTITUTIVAS

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)

Un programa puede ser lineal o no lineal.


Es lineal si las instrucciones se ejecutan secuencialmente (sin bifurcaciones, decisiones,
comparaciones)

inst 1
inst 2
inst 3
-
-
-
Inst N

Es NO LINEAL cuando se interrumpe la secuencia mediante instrucciones de bifurcació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

ELEMENTOS BASICOS DE UN PROGRAMA O ALGORITMO

 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

OTROS COMPONENTES QUE FORMAN PARTE SON:

 Bucles
 Contadores
 Acumuladores
 Interruptores
 Estructuras
 Secuenciales
 Selectivas
 Repetitivas

Lenguajes orientados al problema.

NOCION DE ALGORITMO
Resolución de problemas:
ETAPAS:

 FORMULACION O ENUNCIACION DEL PROBLEMA. Debe ser formulado en forma


correcta, completa y sin ambigüedades
 ELECCION DE UN METODO O PROCEDIMEINTO. Para hallar la solución del
mismo
 CODIFICACION. Consiste en expresar el método o procedimiento elegido de forma tal
que pueda ser interpretado por el procesador que va a utilizarse.
 EJECUCION. Consiste en ejecutar el procedimiento elegido para obtener la solución del
problema.

PROCESADOR: llamamos procesador a toda entidad capaz de comprender un enunciado y


ejecutar el trabajo indicado en el mismo.

AMBIENTE: el conjunto de todos los recursos necesarios para la ejecución de un trabajo


constituye el ambiente de ese trabajo.

ACCION: una acción es un evento que modifica el ambiente


Tipos de Acciones: PRIMITIVAS y NO PRIMITIVAS.

Acción PRIMITIVA: para un procesador dado, una acción es primitiva si su enunciado es


suficiente para que pueda ejecutarla sin información adicional.
Acción NO PRIMITIVA: necesita ser descompuesta en acciones primitivas, para lograr
esto usamos por ejemplo la Técnica de Refinamientos Sucesivos (también llamado TOP-
DOW).

El PROCESADOR interpreta acciones y enunciados.

Un “enunciado” no es una acción que modifica el ambiente.

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".

Las características fundamentales que debe cumplir todo algoritmo son:

Debe ser preciso. E indicar el orden de realización de cada paso.


Debe ser definido. Si se sigue un algoritmo dos veces, se debe obtener el mismo resultado cada
vez.
Debe ser finito. Si se sigue un algoritmo, se debe terminar en algún momento; o sea debe tener
un número finito de pasos.

La definición de un algoritmo debe describir tres partes: Entrada, Proceso y Salida.

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.

Algunos ejemplos son:

Diseñar un algoritmo para cambiar una llanta a un coche.

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.

Pasos del algoritmo:


Inicio
Leer el pedido
Examinar ficha del cliente
Si el cliente es solvente aceptar pedido, en caso contrario rechazar 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

Determinar el mayor de tres números enteros.


Pasos del algoritmo:

1.- Comparar el primero y el segundo entero, deduciendo cuál es el mayor.


2.- Comparar el mayor anterior con el tercero y deducir cuál es el mayor. Este será el resultado.

Los pasos anteriores se pueden descomponer en otros pasos más simples en los que se denomina
refinamiento del algoritmo.

1.- Obtener el primer número (entrada), denominado NUM1


2.- Obtener el segundo número (entrada), denominado NUM2
3.- Compara NUM1 con NUM2 y seleccionar el mayor; si los dos enteros son iguales,
seleccionar NUM1. Llamar a este número MAYOR.
4.- Obtener el tercer número (entrada), y se denomina NUM3.
5.- Compara MAYOR con NUM3 y seleccionar el mayor ; si los dos enteros son iguales,
seleccionar el MAYOR. Denominar a este número MAYOR.
6.- Presentar el valor MAYOR (salida).
7.- Fin

Definición de Lenguajes Algorítmicos


Los algoritmos pueden describirse utilizando diversos lenguajes. Cada uno de estos lenguajes
permiten describir los pasos con mayor o menor detalle.
La clasificación de los lenguajes para algoritmos puede enunciarse de la siguiente manera:

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.

Lenguaje de Diagrama de Flujo


Es aquél que se vale de diversos símbolos para representar las ideas o acciones a desarrollar. Es
útil para organizar las acciones o pasos de un algoritmo pero requiere de etapas posteriores para
implementarse en un sistema de cómputo.

Lenguaje Natural de Programación


Son aquellos que están orientados a la solución de problemas que se definen de una manera
precisa. Generalmente son aplicados para la elaboración de fórmulas o métodos científicos.
Tiene las siguientes características:
Evita la ambigüedad (algo confuso que se puede interpretar de varias maneras).
Son precisos y bien definidos.
Utilizan términos familiares al sentido común.
Elimina instrucciones innecesarias.

Lenguaje de Programación de Algoritmos


Es aquél que se utiliza para introducir en la computadora un algoritmo específico. Se les conoce
también como Lenguaje de Programación.

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

mostrar “Hola a todo el mundo...”

BASIC

‘ Programa demostración versión 1.0: print “Hola a todo el mundo...”

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.

Los traductores se dividen en:


Compiladores
Interpretes
Compilador - Interprete

Compaginadores, compiladores e intérpretes.

INTÉRPRETES

Un intérprete es un traductor que toma un programa fuente, lo traduce y a continuación lo


ejecuta. (Línea a línea).

Un lenguaje de programación que utilice un intérprete se denomina lenguaje interpretado. La


versión 5.0 del sistema MS-DOS incorporó como accesorio al Quickbasic, este era un intérprete
del lenguaje Basic.; generalmente los intérpretes venían con un editor de texto que nos permitía
escribir el programa fuente. (Mostrar interprete QuickBasic y Ada). Se podría llegar a decir que
en su momento del Dbase III Plus era un intérprete.

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:

Figura 3: Fases de la compilación

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

Programa1.bas Programa1.obj Programa1.exe

A la programación lineal le siguió la programación modular que líneas generales se refiere a


dividir un problema complejo, en muchos problemas con un menor grado de complejidad
subordinados al problema principal; en otras palabras es el principio divide y vencerás. Ahora en
vez de tener un único programa de muchas líneas de código, voy a tener muchos programas de

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

Programa2.bas Programa2.obj Editor de enlace Programa.exe

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.

Figura 4 Fases de la compilación utilizando otros programas objetos

Teniendo en cuenta lo mencionado anteriormente continuación vamos a ver las fases de


ejecución de un programa Pascal son las siguientes:
En síntesis las etapas de un proceso de compilación son las siguientes:
 Escribir el programa fuente y guardarlo en un archivo.
 Compilarlo

Página 17 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

 Verificar y corregir los errores de compilación.


 Obtención del programa objeto.
 Obtención del programa ejecutable.
 Se ejecuta el programa y si no hay errores se obtiene la salida.

Figura 4 Fases de la ejecución de un programa

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:

Tipo Numérico Entero (integer).


Tipo Numérico Real (real).

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)

Datos Tipo Carácter

Es un conjunto finito y ordenado de caracteres que la computadora reconoce. Un dato de este


tipo contiene solo un carácter.
Reconoce los siguientes caracteres:
Caracteres Alfabéticos (A,B,C,…Z,a,b,c…z)
Caracteres Numéricos (0,1,2,…9)
Caracteres Especiales (+, -, *, /, ^, . , ;, <, >, $, …….)

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

Una Constante es aquélla que no cambia de valor durante la ejecución de un programa (o


comprobación de un algoritmo en este caso). Se representa en la forma descrita para cada
categoría.
Las Variables son aquéllas que pueden modificar su valor durante la ejecución de un programa
(ídem).
Contienen un nombre, una dirección de memoria, un tipo de dato y un contenido. Su
representación se da a través de letras y símbolos generalmente numéricos a los que se les asigna
un valor.
Ejemplos:
Constantes Variables
36
Numéricos 450.35 A
0.58 Nom
'A' Edad
Cadena 'Juan' Ciudad
'La Paz' Estatura
Falso
Lógicos
Verdadero

Operadores y Operandos

Un operador es el símbolo que determina el tipo de operación o relación que habrá de


establecerse entre los operandos para alcanzar un resultado.

Los operadores se clasifican en tres grupos:

1.- Operadores Aritméticos


Son aquellos que permiten la realización de cálculos aritméticos. Utilizan operandos numéricos y
proporcionan resultados numéricos.

Operador Operación

+ Suma

- Resta

* Multiplicación

/ División real

Div División entera

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

En la expresión 7+3, los valores 7 y 3 se denominan operandos. El valor de la expresión 7+3 se


conoce como resultado de la expresión.
Todos los operadores aritméticos no existen en todos los lenguajes de programación, por
ejemplo, en Fortran no existen Div y mod.

Operadores Div y Mod

El símbolo / se utiliza para la división real, y el operador Div representa la división entera.

Expresión Resultado Expresión Resultado

10.5/3.0 3.5 10 Div 3 3

¼ 0.25 18 Div 2 9

2.0/4.0 0.5 30 Div 30 1

30/30 1.0 10 Mod 3 1

6/8 0.75 10 Mod 2 0

2.- Operadores Relacionales


Permiten realizar comparaciones de valores de tipo numérico o carácter. Estos operadores sirven
para expresar las condiciones en los algoritmos. Proporcionan resultados lógicos.

Operador Significado

< Menor que

> Mayor que

= Igual que

<= Menor o igual que

>= Mayor o igual que

<> Diferente de

El formato general para las comparaciones es:


expresión1 operador de relación expresión2

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

Nota: La comparación de cadenas se rige por el código ASCII.


Prioridad De Operadores Aritméticos y Relacionales
Determina el orden en que habrán de realizarse las operaciones en una expresión determinada.

Para obtener la prioridad se deben conocer las siguientes reglas:

 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

En caso de coincidir varios operadores de igual prioridad en una expresión o subexpresión


encerrada entre paréntesis, el orden de prioridad en este caso es de izquierda a derecha.

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

3.- Operadores Lógicos


Son aquellos que permiten la combinación de condiciones para formar una sola expresión lógica.
Utilizan operandos lógicos y proporcionan resultados lógicos también.

Operador Relación
not Negación (No)
and Conjunción (Y)
or Disyunción (O)
xor Disyunción Exclusiva (O/SOLO)

Se obtiene Verdadero si:


NOT El operando es falso
AND Ambos operandos son verdaderos
OR Al menos un operando es verdadero
XOR Solo uno de los operandos son verdadero

Página 22 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

X Y NOT(X) NOT(Y) X AND Y X OR Y X XOR Y

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

Ejemplos: Not (4 > 14) Produce un valor verdadero.

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

La operación de asignación es el modo de darle valores a una variable. La operación de


asignación se representa por el símbolo u operador =. La operación de asignación se conoce
como instrucción o sentencia de asignación cuando se refiere a un lenguaje de programación.
A fin de manejar datos por medio de variables, estos pueden recibir valores determinados. El
tipo de los valores que pueden recibir dependen de la declaración previa de tales variables.
En una asignación se resuelve, primeramente la expresión (al lado derecho del símbolo de
asignación) y se asigna el resultado en la variable.
El formato general de asignación es:
Nom_variable Expresión

Donde Expresión puede ser una variable o constante, operación, función.


Ejemplo: A 9
Significa que la variable A se le ha asignado el valor 9. La acción de asignar es destructiva, ya
que el valor que tuviera la variable antes de la asignación se pierde y se reemplaza por el nuevo
valor.

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

Conjunto de reglas y palabras apoyadas en algún lenguaje natural.

Programa:

Conjunto de instrucciones escritas en un lenguaje formal de computación siguiendo un orden


lógico.
Elementos de un Programa:
Variables
Constantes
Instrucciones
Estructuras

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:

Utilizaremos las siguientes instrucciones:

Escribir: Permite presentar en pantalla texto o el contenido de una variable.


Ejemplos:
mostrar “Ingrese el número de registro del alumno”
mostrar nota
mostrar “La nota del alumno seleccionado es: ”,nota

Asignar: Permite asignar a una variable un determinado valor.


Ejemplos:
nota: = 7
nota: = promedio
contador: = contador + 1

Leer: La instrucción pedir realiza 3 operaciones:


- Muestra el valor de una variable.
- Permite el ingreso por teclado de un nuevo valor.
- Asigna el valor ingresado a dicha variable.
Ejemplo:
Pedir nota

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

Las estructuras pueden clasificarse en dos grupos:

- 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).

Son las que permiten la selección de acciones alternativas.

ESTRUCTURA DE DECISIÓN SIMPLE: se usan para representar estructuras en las que si la


evaluación de la expresión lógica resulta ser verdadera se ejecuta la sentencia o la serie de
sentencias, según sea el caso. Mientras que si el resultado de su evaluación es falso se continúa
como si la instrucción SI – ENTONCES no hubiese existido

Estructura Si:

Si <Condición> Condici
<Sentencia 1> ón
<Sentencia 2> V F
... Sentencia
<Sentencia n> s1an
Fin Si

Cuando se alcanza la sentencia Si dentro del programa, se evalúa la condición. Solo si la


condición es verdadera se ejecutan las sentencias que se encuentran entre Si y 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

Cuando se alcanza la sentencia Si dentro del programa, se evalúa la condición. Si la condición es


verdadera se ejecuta el primer conjunto de sentencias. Si es falsa se ejecuta el segundo conjunto
de sentencias.

Ejemplo:
Si salario > 400
Salario _ neto: = salario – impuestos
Si no
Salario _ neto: = salario
Fin si

ESTRUCTURAS DE DECISIÓN MÚLTIPLE:

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.

Estructura En caso de:

En caso de <Condición> hacer


<Sentencia 1>
<Sentencia 2>
...
<Sentencia n>

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

A diferencia de la estructura Repetir, en la estructura Hacer mientras la condición esta


posicionada al inicio, de modo que esta se evalúa antes de ejecutarse las sentencias que se
encuentran dentro de la estructura. Esto significa que si la condición es inicialmente falsa
ninguna de las sentencias que conforman el cuerpo de la estructura se ejecutarán.

Ejemplo:

Mientras contador <= 100


contador : = contador + 1
Mostrar contador
Fin mientras

Estructura Para (I) desde hasta hacer:

Página 29 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Para (I) desde vi hasta vf hacer


<Sentencia 1>
<Sentencia 2>
...
<Sentencia n>
Fin para

A diferencia de la estructura Repetir y Mientras , en la estructura Para…. hacer la cantidad de


veces que se va a ejecutar esta condicionada al inicio, de modo que se sabe de antemano cuantas
veces se van a ejecutar las sentencias que se encuentran dentro de la estructura. Se va a evaluar el
valor de la variable I desde el valor inicial hasta el valor final y la diferencia entre el valor final y
el valor inicial es la cantidad de veces que se van a ejecutar las sentencias que están dentro de la
estructura.

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:

Hacer un seudocódigo que imprima los números del 1 al 100.

ALGORITMO: imprimir los 100 primeros números

Comienzo
c ß 0;
MIENTRAS (c < 101) HACER
c ß c + 1;
ESCRIBIR c;
FINMIENTRAS
FIN

Ejemplo de prueba de escritorio

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.

ALGORITMO del 1 al 100 decreciente


Comienzo
c ß 100;
MIENTRAS (c <= 0) HACER
ESCRIBIR c;
c ß c – 1;
FINMIENTRAS
FIN

Hacer un pseudocódigo que imprima los números del 100 al 0, en orden decreciente.

ALGORITMO del 1 al 100 decreciente


Comienzo
c ß 100;
MIENTRAS (c <= 0) HACER
ESCRIBIR c;
c ß c – 1;
FINMIENTRAS
FIN

Hacer un programa que imprima la suma de los 100 primeros números.

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

• Realizar un programa que permita ingresar 18 números enteros y que:


– Sume los positivos
– Cuente cuántos fueron negativos
– Calcule el mayor de los impares

• Realizar un programa que admita solamente el ingreso de números impares y que calcule
el promedio de los mismos.
– El programa termina ante el ingreso de 8 números válidos o ante un valor cero.
– Si no se ingresaron valores válidos deberá informarlo.

• Realizar un programa para un negocio de venta de camperas cuyo precio unitario es de


$10 + iva (21%). Según la cantidad comprada se tiene un descuento según tabla adjunta:

Cantidad comprada Porcentaje de descuento


2a4 10
5a7 12
8 a 12 15
13 a 20 20
21 o mas 30

- El programa debe solicitar al cliente nombre y cantidad que quiere comprar.


El programa debe mostrar el total a abonar por cada cliente. El programa
termina ante el ingreso de un dato “SALIR” ingresado en la variable nombre.

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:

Estructura de Datos ESTATICA: Es en la que el tamaño ocupado en memoria se define antes


de que el programa se ejecute y no puede cambiarse dicho tamaño durante se ejecute el
programa.

Estas son:
Arreglos (Vector/Matriz)
Registro
Archivo (Fichero)
Conjunto (específicos del lenguaje Pascal)
Cadena (string)

Estructura de Datos DINAMICA: Es en la que el tamaño ocupado en memoria no tiene


limitaciones ni restricciones. Mediante el uso de un tipo de datos específico denominado
puntero, es posible construir estructuras de datos dinámicas que son soportadas por la mayoría de
los lenguajes de programación, y en aquellos que sí tienen estas características ofrecen
soluciones eficaces y efectivas en la solución de problemas complejos (Pascal ofrece la
posibilidad de estructuras de datos dinámicas).
Estas a su vez se dividen en dos:
Estructuras dinámicas lineales:
Lista (pila/cola)
Lista enlazada

Estructuras dinámicas no lineales


Árbol (binario, arbol-b, de búsqueda binaria)
Grafo

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 ;
Promedio0;
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

Esto es válido para 3 sucursales.


Si tenemos 100
1 2 3 .................. 100

120 300 280 426

Tabla ventas de 1 a 100 valores


Ventas(2) es 300

Definimos arreglo lineal, tabla o vector de nombre venta.

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}

Venta (I) designa el I-enésimo elemento del arreglo

OPERACIONES DE ARREGLOS:

ASIGNACION
Ventas(8)  30 a la posición 8 del arreglo ventas le asigno el valor 30.

Asigno 0 a todos los elementos de un arreglo ventas de 30 elementos


Para I desde 1 hasta 30 hacer
Ventas (I) 0;
Fin para

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

ESCRIBIR “ LA VARIACION PROMEDIO SEMANAL DEL MIEMBRO : “ PART, “


ES: “ VPS;
VPS  0;
FIN PARA
ESCRIBIR “EL NUMERO DE MIEMBROS EXCEDIDO DE LA VPM ES: “, CI;
FIN

Página 37 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Ordenación, búsqueda e intercalación.


(sorting) - (searching) - (merging)

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}

ORDENACION POR SELECCION:


Usamos dos arreglos. Dado un vector A, de n elementos, el método de Selección para ordenar al
mismo en forma ascendente, es el siguiente:
Encontrar el elemento más pequeño del arreglo (en una pasada: buscar por todo el arreglo y
seleccionar el elemento pequeño)
Transferirlo a la primera posición del arreglo B
Remplazar el elemento en el que vector A por un valor tope
Buscar el elemento mas pequeño en el vector A (segundo mas pequeño)
Transferirlo a la segunda posición del vector B
Remplazar el elemento en el Vector A por valor tope
Se continúa repitiendo el mismo procedimiento hasta agotar los n elementos del arreglo A

AMBIENTE DEL ALGORITMO


VARIABLE DESCRIPCION
A Arreglo lineal de tipo numérico o cadena que contiene los n elementos a ser
ordenados
B Arreglo lineal del mismo tipo que el vector A, contiene los elementos ordenados
N Variable de tipo entero que representa la dimensión de A y B
I Variable de tipo entero que se usa como índice en el arreglo A
J Variable entera que se usa como índice en el arreglo B
TOPE Variable del mismo tipo entero que cada elemento del Vector A (debe tener un
valor mayor que cualquier elemento del arreglo)
MINIMO Variable entera que representa el valor del índice donde se encuentra el elemento
mínimo de A, en cada pasada.

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

Analizamos la cantidad de comparaciones:


Para seleccionar cada elemento se efectúan N-1 comparaciones
Para seleccionar los n elementos se efectúan N (N-1) comparaciones
Si N es grande entonces la multiplicación se aproxima a N2

ORDENACION POR SELECCIÓN (IN SITU)


Ordenar un arreglo en forma no descendente.
Encontrar el menor elemento entre los N elementos del arreglo
Intercambiarlo con el primero del arreglo
A partir del segundo elemento encontrar entre los N-1 el menor e intercambiarlo con el 2do.
Repetir con los N-2, N-3 hasta que quede el mayor valor.

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

ALGORITMO “SELECCIÓN IN SITU”


Comenzar
Leer A;
Para i desde 1 hasta N-1 hacer
MINIMO  1;
Para j desde I+1 hasta N hacer
Si A(j) < A (MINIMO) entonces
MINIMO  J;
Fin Si
Fin Para
AUX  A(i);
A(i)  A (MINIMO);
A(MINIMO)  AUX;
Fin Para
Escribir A;
Fin.

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)

ORDENACION POR INSERCION:


Ordenar A(1) con A(2),
Comparar A(3) con A(2); Si A(3) es >= a(2), seguir con el próximo elemento del arreglo, Sino
comparar A(3) con A(1), si A(3) es mayor o igual que A(1) insertar A(3) entre A(1) y A(2). Si
A(3) es menor que A(1) entonces transferir A(3) a la posición A(1), A(1) a la de A(2) y A(2) a la
de A(3).

En el siguiente ejemplo mostraremos el arreglo después de cada pasada:


INICIAL 21 35 17 8 14 42 2 26
I=2 21 35 17 8 14 42 2 26
I=3 17 21 35 8 14 42 2 26
I=4 8 17 21 35 14 42 2 26
I=5 8 14 17 21 35 42 2 26
I=6 8 14 17 21 35 42 2 26
I=7 2 8 14 17 21 35 42 26
I=8 2 8 14 17 21 26 35 42

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.

ALGORITMO “POR INSERCION”


Comenzar

/* Blanquear Arreglos, contadores y acumuladores. Leer valores del Arreglo */

Para i desde 2 hasta N hacer


AUX  A(i);
k  i – 1;
sw  Falso;
Mientras NO (sw) y k >= 1 Hacer
Si AUX < A (k) entonces
A(k+1)  A(k);
k  k – 1;
si no
sw  verdadero;

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.

ORDENACION POR INTERCAMBIO: Compara pares adyacentes.

Comparo A(1) con A(2) intercambio si están desordenados


Comparo A(2) con A(3) intercambio si están desordenados
Y así sucesivamente comparo todos los elementos del arreglo.

En el siguiente ejemplo mostraremos el arreglo después de cada pasada:


INICIAL 21 35 17 8 14 42 2 26
I=2 21 17 8 14 35 2 26 42
I=3 17 8 14 21 2 26 35 42
I=4 8 14 17 2 21 26 35 42
I=5 8 14 2 17 21 26 35 42
I=6 8 2 14 17 21 26 35 42
I=7 2 8 14 17 21 35 35 42

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

ALGORITMO “POR INTERCAMBIO”


Comenzar

/* Blanquear Arreglos, contadores y acumuladores. Leer valores del Arreglo */

Para i desde 1 hasta (N-1) hacer


Para j desde 1 hasta (N-1) hacer
Si A(j) > A (j+1) entonces
AUX  A(j);
A(j)  A(j+1);
A(j+1)  AUX;
Fin Si
Fin para
Fin Para
Fin.

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

ALGORITMO “BUSQUEDA SECUENCIAL”


Comenzar
Leer A, K;
I  1;
Mientras I <= N hacer
Si K = A (I) entonces
Escribir “ en encontró en la posición : “ I;
I  N+2;
Sino
I  I + 1;
Fin Si
Fin Mientras
Si I = N+ 1 entonces
Escribir “ no se encontró el elemento”
Fin Si
Fin
Cantidad de comparaciones: (n+1)/2

BUSQUEDA BINARIA:
Para un arreglo previamente ordenado, voy analizando por mitades

Ej. 2 8 14 17 21 26 35 42

Suponemos que tenemos que buscar el número 35.


Entonces como el arreglo tiene 8 posiciones, sumo la primera y la última y la divido entre 2 y me
quedo con la parte entera.
(1+ 8) / 2 = 4
A (4) = 17, descarto los anteriores.
Busco en la segunda mitad del arreglo desde la posición 5 a la 8
(5+8)/2=6
A (6) = 26 descarto los anteriores y sigo buscando.
(7+8)/2=7

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

ALGORITMO “BUSQUEDA BINARIA”


Comenzar
Leer A, k;
bajo  1;
alto  n
central  (bajo + alto) DIV 2
Mientras bajo <= alto y A(central) <> k hacer
Si k < A (central) entonces
alto  central - 1;
Sino
bajo  central + 1;
Fin Si
central  (bajo + alto) DIV 2
Fin Mientras
Si k = A(central) entonces
Mostrar “El elemento se encuentra en la posición”, central;
Si no
Mostrar “No se encontró el elemento”;
Fin Si
Fin

Cantidad de comparaciones: Log(n+1)/2

Cantidad de comparaciones: [Log (n+1)]/2

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
Kk+1
Si A(i) < B(j) entonces
C(k)  A(i);
ii+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

Estructuras dinámicas lineales.


Una estructura dinámica de datos puede modificar su estructura mediante la ejecucción de un
programa. Puede ampliar o limitar su tamaño mientras se ejecuta el programa.

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:

1. Insertar, eliminar o localizar un elemento.


2. Denerminar el tamaño – número de elementos – de la lista.
3. Recorrer la lista para localizar un determinado elemento
4. Clasificar los elementos de la lista en orden ascendente o descendente
5. Unir dos o más listas en una sola
6. Dividir una lista en varias sublistas
7. Copiar a Lista
8. Borrar la lista

Una lista lineal se almacena en la memoria de la computadora en posiciones sucesivas o


adyacentes y se procesa como un array unidimensional. En este caso, el acceso a cualquier
elemento de la lista y la adición de nuevos elementos es fácil, sin embargo la inserción o borrado
requiere un desplazamiento de lugar de los elementos que le siguen y, en consecuencia, el diseño
de un algoritmo específico, siempre y cuando no sea en la cabecera o final de la lista.
Las operaciones directas de añadir y eleminar se efectúan únicamente en los extremos de la lista.
Esta limitación es una de las razones por las que esta estructura es poco utilizada.

Para permitir operaciones con listas se deben dimensionar éstos con tamaño suficiente para que
contengan todos los posibles elementos de la lista.
Ejemplo:

Se desea leer el elemento j-ésimo de una lista P.


El algoritmo requiere conocer el número de elementos de la lista (su longitud, L).
Los pasos a seguir para su resolución son:
- Conocer longitud de la lista L.
- si L = 0 visualizar “lista vacía”
si_no comprobar si el elemento j-ésimo está dentro del rango permitido de elementos
1<=j<=L; en este caso, asignar el valor del elemento P(j) a una variable B; si el elemento j-
ésimo no está dentro del rango visualizar un mensaje de error “elemento solicitado no existe
en la lista”

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

El último elemento de la lista tiene un enlace nulo. Puntero nil

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.

Registro Nombre Habitacion Puntero


1 Van der Sar 136 7 Arevalo
2 Carrizo 425 12 Barthez
3 Meola 201 9 Carrizo
4 Barthez 305 2 Cordoba
5 Goicochea 135 6 Dida
6 Higuita 403 3 Gatti
7 Zenga 302 0 (final) Goicochea
8 Gatti 204 5 Higuita
9 Mondragon 109 1 Meola
10 Arevalo 309 4 Mondragon
11 Dida 214 8 Van der Sar
12 Cordoba 110 11 Zenga
- - - -
- - - -

Procesamiento de Listas enlazadas


Para procesar un alista enlazada son imprescindibles las siguientes informaciones:
 Primer nodo (cabecera de la lista)
 El tipo de sus elementos

Las operaciones que normalmente se ejecutan con listas incluyen:


Recuperar información de un nodo específico (acceso a un elemento)
Encontrar el nodo que contiene una información específica (localizar la posición de un elemento
dado)
Insertar un nuevo nodo en un lugar específico de la lista
Insertar un nuevo nodo en relación a una información particular.
Borrar (eliminar) un nodo existente que contiene información específica.

LISTA DOBLEMENTE ENLAZADA


En las listas lineales el recorrido de ellas sólo se podía hacer en una única forma, en sentido de
izquierda a derecha (principio a final). En numerosas ocasiones se necesita recorre las listas en
ambas direcciones.

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.

Cada elemento (NODO)de la lista debe tener al menos tres campos:


Uno llamado info guarda el valor del elemento
Otro llamado enlace ant guarda la posición del elemento anterior
Otro llamado enlace sig guarda la posición del siguiente elemento

NODO

ENLACE ANT INFO ENLACE SIG

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

Los subprogramas facilitan la utilización de técnicas de diseño descendente para la construcción


de programas.
Los subprogramas:
· Facilitan la modularidad y estructuración de los algoritmos.
· Facilitan la lectura e inteligibilidad de los algoritmos.
· Permiten una economización del esfuerzo del programador al poder escribir código
reutilizable en muchas partes de un mismo algoritmo.
· Facilitan la depuración y mantenimiento de los programas.
Los subprogramas pueden ser funciones y subrutinas.
as funciones son subrutinas con 0 ó más argumentos y que devuelven un único valor de retorno.
Las funciones pueden formar parte de expresiones o aparecer en la parte derecha de una
sentencia de asignación pero nunca pueden constituir una sentencia aislada o aparecer en la parte
izquierda de una asignación.
Las funciones son invocadas mediante su nombre seguido de los argumentos entre paréntesis.

Declaración e invocación de funciones


Una función es una operación que toma uno o más valores llamados argumentos y produce
un valor denominado resultado (es el valor de la función para los argumentos dados)
Las funciones incorporadas al sistema se denominan funciones internas o intrínsecas y las
funciones definidas por el usuario se denominan funciones externas.
Declaración: una función consta de una cabecera que comienza con el tipo del valor devuelto
por la función, seguido de la palabra función y del nombre y argumentos de dicha función.
Luego se escribe el cuerpo de la función que consiste en una serie de acciones o
instrucciones cuya ejecución hará que se asigne un valor al nombre de la función.
El algoritmo o programa llama o invoca a la función con el nombre de esta última en una
expresión seguida de una lista de argumentos que deben coincidir en cantidad, tipo y orden
con los de la función que fue definida. La función devuelve un único valor.
En la declaración es
<tipo de resultado> función <nombre de la función> (lista de parámetros formales)
[declaraciones locales]
Comienzo
Acciones
Devolver (<expresión>)
Fin función

Invocación de la función:

X  <nombre función> ( lista de parámetros actuales)

Ejemplo: El algoritmo “Elementos de un rectángulo”, permite luego de ingresar la base y la


altura, hallar el perímetro y el área. Para el cálculo del perímetro, se invoca a una función que
lo calcule. El algoritmo muestra los datos de la base, la altura, el perímetro y el área.

ALGORITMO “Elementos de un rectángulo”


Comienzo

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

Entero función perim(entero base, entero altura)


Variables
Entero y
Comienzo
y  (base + altura) * 2;
devolver (y);
fin_funcion

función suma_enteros (x:entero, y:entero) dev z:entero


z  x + y;
devolver z
finfunción

Definición de subrutinas o Procedimientos


Un procedimiento o subrutina es un subprograma que ejecuta un proceso específico. Ningún
valor está asociado al nombre, por lo tanto no puede ocurrir en una expresión. Un procedimiento
se llama escribiendo su nombre, cuando se invoca el procedimiento, los pasos que lo definen se
ejecutan y a continuación se devuelve el control al programa que lo llamó.
La declaración de una subrutina es similar a la de las funciones.

Procedimiento nombre (lista de parámetros formales)


….
Acciones
Fin procedimiento

El procedimiento se llama mediante la instrucción

Llamar_a nombre (lista de parámetros actuales)

La palabra llamar_a (call) es opcional y depende del lenguaje de programación.

procedimiento suma_uno (x:entero)


xx+1
Finprocedimiento

Página 49 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Diferencias entre funciones y subrutinas:


• Un procedimiento es llamado desde el algoritmo o programa principal, mediante su
nombre y una lista de parámetros actuales, o bien con la instrucción llamar a (call). Al
llamar al procedimiento se detiene momentáneamente el programa que se estuviera
realizando y el control pasa la procedimiento llamado. Después de que las acciones del
procedimiento se ejecutan, se regresa a la acción inmediatamente siguiente a la que se
llamó.
• Las funciones devuelven un valor, los procedimientos pueden devolver 0,1 o n valores, y
en forma de lista de parámetros.
• El procedimiento se declara igual que la función, pero su nombre no esta asociado a
ninguno de los resultados que obtiene.

VARIABLES LOCALES Y GLOBALES

Las variables utilizadas en los principales y subprogramas se clasifican en dos tipos:


· Variables locales.
· Variables globales.
• Una variable local es aquella que está declarada y definida dentro de un subprograma, en
el sentido de que está dentro de ese subprograma y es distinta de las variables con el
mismo nombre declaradas en cualquier parte del programa principal. El significado de
una variable se confina al procedimiento en el que está declarada. Cuando otro
subprograma utiliza el mismo nombre se refiere a una posición diferente en memoria. Se
dice que tales variable son locales al subprogramaen el que están declaradas.

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.

El ámbito de un identificador (variables, constantes, procedimientos) es la parte del programa


donde se conoce el identificador. Si un procedimiento está definido localmente a otro

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.

COMUNICACIÓN CON SUBPROGRAMAS

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.

Existen diferentes métodos para la transmisión o el paso de parámetros o subprogramas. Es


preciso conocer el método adoptado por cada lenguaje , ya que la elección puede afectar a la

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.

Los parámetros pueden ser clasificados como:


entradas: (E)
las entradas proporcionan valores desde el programa que llama y que se utilizan dentro de un
procedimiento. En los programas función, las entradas son los argumentos en el sentido
tradicional:
salidas: (S)
Las salidas producen los resultados del subprograma: de nuevo si se utiliza el caso una función,
éste devuelve un valor calculado por dicha función, mientras que con procedimientos puede
calcularse cero, una o varias salidas:
entrada/salida (E/S)
Un solo parámetro se utiliza para mandar argumentos a un programa y para devolver resultados

Desgraciadamente, el conocimiento del tipo de parámetros no es suficiente para caracterizar su


funcionamiento; por ello, examinaremos los diferentes métodos que se utilizan para pasar o
transmitir parámetros.
Los métodos mas empleados para realizar el paso de parámetros son:
• paso por valor (también conocido por parámetro valor)
• paso por referencia o diferencia (también conocido por parámetro variable)
• paso por nombre
• paso por resultado

Paso por Valor


El paso por valor se utiliza en muchos lenguajes de programación: por ejemplo, C, Modulo-2,
Pascal, Algol y Snobol. La razón de su popularidad es la analogía con los argumentos de una
función, donde los valores se proporcionan en el orden de cálculo de resultados. Los parámetros
se tratan como variables locales y los valores iniciales se proporcionan copiando los valores de
los correspondientes argumentos.
• Los parametros formales –locales a la función- reciben como valores iniciales los valores
de parámetros actuales y con ellos se ejecutan las acciones descritos en el subprograma.
• No se hace diferencia entre un argumento que es variable, Constante o expresión, ya que
solo importa el valor del argumento.

PASO POR REFERENCIA

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.

Programación Orientada a Objetos

• Tecnología orientada a objetos


– Una Perspectiva Histórica
– ¿Cuáles son las ventajas de un lenguaje orientado a objetos?
• El modelo orientado a objetos
– Objetos
– Clases
– Herencia
– Envío de mensajes
• Características asociadas a la POO
– Abstracción
– Encapsulamiento
– Ocultamiento
• Lenguajes de programación orientado a objetos
• Análisis y diseño orientado a objetos
• Resumen
Una Perspectiva Histórica

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

Frente a esta dificultad aparecieron los lenguajes basados en la programación estructurada. La


idea principal de esta forma de programación es separar las partes complejas del programa en
módulos o segmentos que sean ejecutados conforme se requieran. De esta manera tenemos un
diseño modular, compuesto por módulos independientes que puedan comunicarse entre sí. Poco
a poco este estilo de programación fue reemplazando al estilo “espagueti” impuesto por la
programación lineal.
Entonces, vemos que la evolución que se fue dando en la programación se orientaba siempre a ir
descomponiendo más el programa. Este tipo de descomposición conduce directamente a la
programación orientada a objetos.

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.

¿Cuáles son las ventajas de un lenguaje orientado a objetos?


• Fomenta la reutilización y extensión del código.
• Permite crear sistemas más complejos.
• Relacionar el sistema al mundo real.
• Facilita la creación de programas visuales.
• Construcción de prototipos

Página 55 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

• Agiliza el desarrollo de software


• Facilita el trabajo en equipo
• Facilita el mantenimiento del software
Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela
y representa el mundo real tan fielmente como sea posible.

El modelo Orientado a Objetos


Para entender este modelo vamos a revisar 4 conceptos básicos:
– Objetos
– Clases
– Herencia
– Envío de mensajes
Objetos

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.

Características asociadas al POO

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:

public class Automovil {


// variables
// métodos
}

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

esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstracción y el


ocultamiento que veremos a continuación.
La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que
tendremos a las Clases como cajas negras donde sólo se conoce el comportamiento pero no los
detalles internos, y esto es conveniente porque nos interesará será conocer qué hace la Clase pero
no será necesario saber cómo lo hace.

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.

Lenguajes de Programación Orientado a Objetos

En 1985, E. Stroustrup extendió el lenguaje de programación C a C++, es decir C con conceptos


de clases y objetos, también por esas fechas se creó desde sus bases el lenguaje EIFFEL.
En 1995 apareció el más reciente lenguaje OO, Java desarrollado por SUN, que hereda
conceptos de C++.
El lenguaje de desarrollo más extendido para aplicaciones Web, el PHP 5, trae todas las
características necesarias para desarrollar software orientado a objetos.
Además de otros lenguajes que fueron evolucionando, como el Pascal a Delphi.
Finalmente también otros lenguajes script como el ActionScript que si bien no es totalmente
orientado a objetos pero sí posee las características.

Análisis y diseño Orientado a Objetos

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

• ¿Por qué seguimos buscando nuevas técnicas de desarrollo? Por el aumento de la


complejidad de los sistemas.
• En un programa orientado a objetos tendremos a un conjunto de objetos colaborando
entre ellos.
• La orientación a objetos es paradigma de que está de moda para el desarrollo de software.
• Un objeto es una abstracción conceptual del mundo real que se puede traducir a un
lenguaje de programación orientado a objetos.
• Un objeto del mundo real tiene características y comportamientos, y de la misma manera,
un objeto del mundo del software tiene variables y métodos.
• ¿Una Clase es una plantilla que define las variables y métodos a ser incluidas en un tipo
de objeto específico.
• Los objetos también son llamados instancias de la Clase. Los objetos sólo almacenan su
estado. Se dice que un objeto tiene estado cuando tiene valores en sus variables.
• Los objetos se comunican entre ellos usando los mensajes. Un mensaje es la invocación
de un método del objeto.
• La orientación a objetos requiere de una metodología que integre el proceso de desarrollo
y un lenguaje de modelamiento con herramientas y técnicas adecuadas.

Página 62 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

UNIDAD III: Lenguajes 4GL y generadores

1. Lenguajes orientados a usuarios finales.


Lenguajes de 4ta generación.

Lenguajes de cuarta generación


Lo que en un lenguaje de tercera generación (3GL) como COBOL requiere cientos de líneas de
código, tan solo necesita diez o veinte líneas en un 4GL. Comparado con un 3GL, que es
procedural, un 4GL es un lenguaje no procedural: el usuario define qué se debe hacer, no cómo
debe hacerse. Los 4GL se apoyan en unas herramientas de mucho más alto nivel denominadas
herramientas de cuarta generación. El usuario no debe definir los pasos a seguir en un programa
para realizar una determinada tarea, tan sólo debe definir una serie de parámetros que estas
herramientas utilizarán para generar un programa de aplicación. Se dice que los 4GL pueden
mejorar la productividad de los programadores en un factor de 10, aunque se limita el tipo de
problemas que pueden resolver.
Existen muchos lenguajes de cuarta generación hoy en día, unos más usados que otros, ya sea
por su portabilidad, facilidad de uso o eficiencia.
Algunos de ellos son: SheerPower4GL, PowerBuilder, WinDev, Focus, Natural, Progress4GL,
SQL, Oracle Reports, PostScript, Matemática, MatLab, Ramis, entre otros.
El término “Lenguajes de Cuarta Generación” (4GL) fue primeramente usado para describir a los
lenguajes de especificación, que son lenguajes de alto nivel no procedurales (el usuario define
qué se debe hacer, no cómo debe hacerse [1]), la denotación 4GL fue utilizada por primera vez
por James Martín en 1982[2]. Los lenguajes RPG de IBM e Informatics de IBM y MARK-IV
respectivamente pueden ser considerados los primeros lenguajes de este tipo. [1]

Ventajas Principales

Lenguajes de Tercera Generación Lenguajes de Cuarta Generación


Estandarización Flexibilidad
Actualizaciones Continuas Nuevas Aplicaciones
Volumen de Código Conversión de Código
Rendimiento de Ejecución Mayor Productividad

LOS 4GL ABARCAN 7 herramientas:

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.

Lenguajes de programación de alto nivel


Están diseñados para generar código de programa con menos instrucciones que los lenguajes
convencionales como los de 3ra generación
Los programas y aplicaciones basados en estos lenguajes se desarrollan en un tiempo mucho mas
corto

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.

Paquetes de software de aplicación


Es un conjunto preescrito, precodificado y disponible comercialmente, de programas que hacen
innecesario que individuos u organizaciones escriban su propio software para ciertas funciones.
Los paquetes de software de aplicación consisten en software de aplicación preescrito que se
vende comercialmente.
Eliminan la necesidad de escribir software para ciertas funciones, Hay paquetes de este tipo para
las principales aplicaciones de negocios en macrocomputadoras, minicomputadoras y PC
Los paquetes para sistemas grandes deben ser instalados por especialistas técnicos.
Cualidades más representativas:
Mantenimiento automático de bases de datos
Recopilan la información de diferentes vistas que necesita el usuario, se carga en una Base de
Conocimiento (unidad conceptual donde guarda toda una aplicación o conjunto de las mismas),
infiere una estructura normalizada en tercera forma (algoritmo matemático complejo)
Ej. Se ingresan los siguientes datos en un conjunto de transacciones: numero de factura, codigo
del cliente, razón social, código de producto, fecha de factura, descripción del producto,
cantidad, número de ítem, etc. LA HERRAMIENTA, es capaz de construir un programa que
cree las siguientes tablas en la base de datos correspondientes:
Clientes, con código de cliente, razón social, etc
Fac_Cabecera, con nro de fac, fecha, código de clie, etc
Fac_Itemcon nro de ítem, código de producto, cantidad, etc
Facilidad para el cambio de plataforma
Guarda las indicaciones dadas por el desarrollador en un metalenguaje. Luego se seleccionan y
configuran las características del entorno deseado ej VB como lenguaje y Access como base de
datos (en un MODELO), luego es posible crear un nuevo MODELO, con lenguaje NET o JAVA
o RPG o Visual Fox, etc., con bases de datos como ORACLE, SQL Server, DB2400, etc. (sin
volver a desarrollar los mismos programas)

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.

Otra forma de agrupar los 4GL es en función de la naturaleza de su sintaxis:


Lenguajes procedurales. El programa se desarrolla como una secuencia de pasos que la
computadora ejecuta para llegar al fin deseado. Los desarrolladores deben codificar los flujos de
control de las actividades a realizar, además de las actividades en si.
Lenguajes conducidos por eventos. Permiten a los desarrolladores especificar la ejecución de
rutinas asociadas a acciones dadas del usuario, tales como apretar una tecla o mover el ratón, sin
tener que codificar cada paso dado para ejecutar dicha acción.

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.

Lenguajes estructurados de recupero de información.

SQL (Structured Query Language)


SQL (lenguaje de consultas estructurado) es un lenguaje de acceso a bases de datos relacionales
con el cual se pueden crear y manipular las mismas. SQL “es un conjunto de objetos
eficientemente almacenados”. La información de las bases de datos se guarda en tablas.
Una sentencia SQL es una frase con la que decimos lo que queremos obtener y de que tablas
deseamos obtenerla. Una sentencia tiene un formato de cómo realizarse y empieza con una
palabra reservada que indica la acción que se quiere realizar, luego siguen lo que uno quiere
hacer respecto a la acción definida. SQL permite realizar consultas mediante sentencias SQL con
el fin de poder desplegar información importante que se quiera de alguna o varias tablas.

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.

Si bien el SQL es conocido genéricamente como Lenguaje Estructurado de Consultas (quizás


porque la sentencia que más lo identifica es el SELECT), contiene sentencias que se
corresponden con tres tipos de funciones:

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.

Funciones de definición de datos (datadefinition language (DDL) que se almacena en un


diccionario o directorio de datos. Un directorio o diccionario de datos es un archivo que
contiene metadatos, es decir, "datos sobre datos".
Conjunto de instrucciones que operan de acuerdo a una sintaxis y que permiten al administrador
de la base definir los datos con facilidad y precisión, especificando sus distintas estructuras.

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:

SELECT Campo1, count (*)


FROM Tabla
GROUP BY Campo1
HAVING count (*) > 1

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.

Elección del lenguaje.


Si somos principiantes lo más recomendable es empezar por un lenguaje fácil de aprender, que
más tarde no quedemos limitados por este, y que por sobre todas las cosas nos permita obtener
resultados rápidamente. Por lo mencionado anteriormente es deseable aprender un lenguaje
como el Basic o el Pascal, ya que estos cumplen con estas características.

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.

Requisitos y elección del lenguaje:

 Área de aplicación del lenguaje :Científica o comercial o especificas (armado de


juegos para niños)
 Complejidad algorítmica y computacional: Mayores tiempos para la implementación
 Entorno en el que se desarrolla el software: Sobre que plataforma se va correr, si es
propietario o libre.
 Consideraciones de rendimiento (Performance)
 Manejo de las estructuras de datos: Posibilidad de poder acceder a distintas
estructuras de datos, generalmente se hace vía OBDC (conectividad con bases de
datos típicas, posibilidad de poder acceder a interfaces que te conecten
 Disponibilidad de un compilador: Si existe o no la posibilidad de tenerlo (por
antigüedad o por mantenimiento posterior), haciendo hincapié en los costos.
 Herramientas y rutinas ya desarrolladas
 Portabilidad: Dos tipos mismo lenguaje en distintos entornos y de un lenguaje a otro
diferentes
 Tiempo de desarrollo
 Posibilidad de conseguir programadores

RELACIÓN COSTO – BENEFICIO


Debemos tener en cuenta que cuando trabajamos con lenguajes de bajo nivel la relación es que
debemos escribir más líneas de código que si empleáramos un lenguaje de alto nivel para realizar
la misma tarea, por esto tendremos una mayor cantidad de horas de programación y en
consecuencia un mayor costo. Por este motivo y como en computación las cosas son
generalmente para ayer, en la mayoría de los casos se utilizan lenguajes de alto nivel ya que
estos permiten obtener resultados en poco tiempo. A pesar de esto están mejor pagas las horas de
programación de lenguajes de bajo nivel que las de alto nivel.

2. Ayudas automatizadas de desarrollo y programas generadores para personal


especializado.
Prototipos y modelización: herramientas y métodos para el desarrollo de
prototipos.
Tendencias.
Estado del arte.

Página 69 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

UNIDAD IV: 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”

Desde el punto de vista del Gestor de Recursos


“Un Sistema Operativo es el administrador de recursos ofrecidos por el hardware para alcanzar
un eficaz rendimiento de los mismos”

Página 70 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Los recursos fundamentales que administra son:


El procesador
La memoria
Las entradas y salidas
La información

DEFINICIÒN: Un Sistema Operativo es un conjunto de programas que ordenadamente


relacionados entre sí, contribuyen a que la computadora lleve a cabo correctamente su trabajo.

Cubren dos objetivos fundamentales:


 Facilitar el trabajo al usuario
 Gestionar en forma eficiente los recursos

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.

131. Las primeras computadoras.

1944 Howard Aiken construyó la primera computadora electromecánica llamada MARK I en la


Universidad de Harvard.
John W. Mauchly y J. Presper Eckert Jr. construyeron la primera computadora electrónica a base
de válvulas de vacío llamada ENIAC.

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.

132. Accesos por operador

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

133. Secuencia automática de trabajos

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.

Este programa monitor, contenía las siguientes partes:


- El secuenciador automático de trabajos.
- El intérprete de las tarjetas de control
- Los controladores de software de entrada/salida (drivers)

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

134. Mejora del rendimiento

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

La computadora recibía programas y los procesaba en una velocidad considerable.


Las acciones de copiado de tarjetas a cinta y de cinta a impresora eran lentas y como se separaba
del control de la computadora, posibilitaba realizar otros trabajos distintos. Este tratamiento se lo
conoce como OFF-LINE.
Se tuvo que dedicar a una computadora a la gestión de copias.
Así surgieron los denominados Procesos Satélites, que fueron los antecesores de los actuales
sistemas multicomputadoras.

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

En el proceso anterior el tiempo de carga de la cinta a la computadora es relativamente lento con


respecto a la velocidad interna del proceso, consumiéndose un tiempo de protocolo entre el
procesador y la unidad de cinta.

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.

Este sistema trae consigo diversos problemas:

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

En los sistemas operativos multiprogramados surge el concepto de planificar el procesador y a


partir de ellos comienza una nueva estructura interna de los mismos, apareciendo un núcleo
central (kernel) compuesto de rutinas para la gestión de la memoria central, el procesador, los
dispositivos y el resto de los recursos disponibles.

Proceso por lotes (Batch)

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.

Tiempo Compartido (Time Sharing)

La multiprogramación no permitía el diálogo entre el usuario y el proceso, entonces el siguiente


paso en el desarrollo de sistemas operativos fue la introducción de la multiprogramación
interactiva.
Aparecieron los terminales conversacionales o interactivos (teclado-pantalla)
El usuario va dando datos para ser procesados a medida que el proceso los necesita y recibía
respuesta inmediata a sus datos.
Este modo de trabajo es por sesiones.
Una sesión es un conjunto de trabajos que se realizan desde que un usuario se conecta a la
computadora hasta que se despide de la misma.
Existe un intérprete de comandos que mantiene el diálogo entre el usuario y el sistema operativo.
El usuario cree tener a su disposición todos los recursos de la computadora, pero en realidad
existen otros usuarios con sesiones activadas en forma simultánea.

Página 78 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Los sistemas de tiempo compartido se caracterizan por:

Ser muy convencionales


Atender a varios usuarios simultáneamente
Ofrecer tiempos de respuesta relativamente cortos (segundos)
Mantener una interrogación secuencial de peticiones de usuarios (polling)
Poseer una fuerte gestión de archivos
Utilizar técnicas de buffering y spooling
Gestionar memoria virtual

Como ejemplos tenemos MVS de IBM, el UNIX, y el VMS de DEC,

Tiempo Real (Real Time)

Es otra modalidad de los sistemas operativos multiprogramados, en la que se necesita un tiempo


de respuesta pequeño ante cualquier petición.

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:

Fuertes restricciones en el tiempo de respuesta (milisegundos)


La información debe estar permanentemente actualizada
El sistema debe permanecer prácticamente inactivo para atender lo más rápido posible cualquier
evento de entrada
Manejo eficaz de interrupciones
Manejo sencillo de prioridades
Gestión de memoria real

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

136. Proceso distribuido.

Consiste en conexión de computadoras entre sí a través de una gran variedad de dispositivos,


existiendo varias modalidades entre las que podemos citar la conexión de varias computadoras
compartiendo un mismo almacenamiento principal o aquellos que se conectan a una misma red
nacional o internacional para el intercambio de información.

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.

3.1 Estructura de los sistemas operativos

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.).

Se pueden plantear las siguientes necesidades:


Requisitos del usuario: facilidad de uso y aprendizaje, seguridad, rapidez, y adecuado al uso que
se quiere destinar.
Requisitos del software: estos son aspectos de mantenimiento, forma de operación, restricciones
de uso, eficiencia, tolerancia frente a errores, flexibilidad.

Tipos de estructuras de los actuales sistemas operativos:

311. Estructura Monolítica

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.

312. Estructura Jerárquica.


Divide al sistema operativo en pequeñas partes, con una clara interfase entre las partes.
El primero de estos sistemas operativos fue el THE ( TECHNISCHE HOGESCHOOL, EINDHOVEN)
utilizado con fines didácticos.
En este sistema operativo pueden verse las distintas capas en su orden jerárquico:
Nivel -1.- Hardware
Nivel 0.- Planificación del procesador
Nivel 1.- Gestión de la memoria
Nivel 2.- Controlador de la consola del operador
Nivel 3.- Control de las operaciones de entrada/salida
Nivel 4.- Gestión de archivos
Nivel 5.- Control de programas de usuario

En esta estructura se basan la mayoría de los sistemas operativos actuales.


Otra forma de ver este tipo de sistema es la denominada anillos concéntricos o rings.

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

Aplicación Gestión de CPU


De
Usuario

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)

313. Máquina Virtual


Se trata de un tipo de sistema operativo que presenta una infernase para cada proceso, mostrando
una máquina que parece idéntica a la máquina real subyacente.

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 objetivo de los sistemas operativos de máquina virtual es el de integrar distintos sistemas


operativos dando la sensación de ser máquinas diferentes.

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

314. Cliente – servidor

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

32. PRESTACIONES DE UN SISTEMA OPERATIVO.


Se pueden considerar desde dos puntos de vista distintos:
Punto de vista del programador
Ejecución de programas: facilidades para cargar un programa en memoria y ejecutarlo.
Operaciones de E/S: facilidades para que un programa pueda tratar un archivo, enviar o
recibir datos a un dispositivo, etc.

Página 85 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Gestión de Archivos: facilidades de uso y organización de archivos.


Punto de vista del sistema:
Asignación de recursos: mecanismos de resolución de conflictos de asignación de
recursos cuando varios procesos o usuarios están compitiendo por ellos.
Control: de tiempos de utilización de recursos por los usuarios para su facturación o
simplemente para la obtención de estadísticas de utilización
Protección: defensa contra acciones no deseadas.

321. Servicios de usuario


El SO ofrece a los usuarios, sus servicios de dos formas:

Las llamadas al sistema operativo desde un proceso

Constituyen la interfase entre un programa en ejecución y el sistema operativo. Se agrupan de la


siguiente forma:
Gestión de procesos
Gestión de operaciones de Entrada/Salida
Gestión del sistema de archivos
Protección

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

La ejecución de programas del propio sistema

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

322. Servicios del sistema


El intérprete de comandos y los programas del sistema son los que fijan el entorno y la forma de
ver el sistema operativo por los usuarios.
El programador, tiene una visión totalmente diferente. Para él son todos recursos físicos y
dispositivos que deben ser convertidos en entidades lógicas para ofrecérselas a los usuarios.
Podemos decir que un SO es un programa activado por eventos, es decir que si no hay programas
en ejecución ni operaciones de entrada/salida, etc. el sistema estará inactivo hasta que se
produzca alguna nueva petición. Normalmente cada evento producirá una interrupción de la
ejecución del sistema operativo.

Llamadas al sistema operativo.


Se agrupan por el tipo y no por la acción que realizan, pueden ser:

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

Terminación anormal: Cuando aparece un error en la ejecución de un programa, éste se da por


terminado, devolviendo el control al intérprete de comandos, que indicará tal situación de error
al usuario.
Peticiones de estado: Se procesa la petición solicitada y se devuelve el control al programa que la
solicitó.
Peticiones de recursos: Los programas solicitarán recursos durante su ejecución que serán
atendidos de inmediato o se entrará en un estado de espera hasta que puedan ser atendidos
Peticiones de entrada/salida: De igual forma, los programas las solicitarán y serán atendidas de
inmediato o tras un pequeño período de espera.

Interrupciones de los dispositivos de E/S


Una vez que un programa en ejecución realiza una petición de entrada/salida, se pueden tomar
dos tipos de acción por parte del sistema operativo.
El proceso queda en espera hasta que se termina la operación de entrada/salida: en este
caso el dispositivo externo, cuando termine la operación, producirá una interrupción que
dará control al sistema operativo, el cual activará el proceso que estaba en espera.
El proceso seguirá realizando estas operaciones: En este caso el dispositivo externo
también produce una interrupción en el sistema operativo, el cual no activará el proceso
puesto que no estaba en espera, pero sí le indicará que la operación solicitada ha
terminado.

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

Si un procesador intentase acceder a direcciones que están fuera de la zona de memoria de su


espacio de direccionamiento, se producirá una interrupción que dará control al sistema operativo
dando cuenta del error que se ha producido.

Protección del procesador


Otro tipo de problemas que pueden presentarse son los bucles infinitos o accesos al procesador
que no lo liberan nunca. En estos casos la única solución es la de apagar y volver a encender
(reset), para volver a comenzar desde el principio. Para evitarlo, el hardware incluye un
temporizador que marca períodos de tiempo, de manera que al terminar un período de tiempo se
produzca una interrupción y tome el control el SO.

2. Administración de los diversos componentes del sistema.


Administración del procesador.

El núcleo (kernel) de un SO es un conjunto de rutinas cuya misión es la de gestionar el


procesador.
Uno de los conceptos más importantes que gira en torno a un sistema operativo es el del proceso.
Un proceso es un programa en ejecución junto con el entorno asociado (registros, variables, etc.)
Concepto de proceso:

Página 89 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

La diferencia entre un programa (conjunto de instrucciones) y un proceso (instrucciones


ejecutándose) es obvia, pero fundamental para entender el funcionamiento de los sistemas
operativos.
Un proceso es una actividad que se apoya en datos, recursos, un estado en cada momento y un
programa.

Bloque de control del proceso


Un proceso se representa por un conjunto de datos donde se incluyen el estado en cada momento,
los recursos utilizados, registros, etc. denominado Bloque de Control del Proceso.
La información contenida en el bloque de control es la siguiente:
Estado del proceso
Estadísticas de tiempo y ocupación de recursos
Ocupación de memoria interna y externa
Recursos en uso
Archivos en uso
Privilegios

Figura de los bloques de proceso y del sistema

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

Estado de los procesos: Se dividen en dos tipos


Estados activos
Son aquellos que compiten con el procesador o están en condiciones de hacerlo y se
dividen en:
Ejecución: estado en el que se encuentra un proceso cuando tiene el control del
procesador.
Preparado: Aquellos que están listos para ser ejecutados, pero aún no lo están
por alguna causa.
Bloqueado: son los que no se pueden ejecutar ya que necesitan algún recurso no
disponible.
Estados inactivos
Son aquellos que no pueden competir con el procesador, pero que pueden volver a
hacerlo por medio de ciertas operaciones, hay dos tipos:

Suspendido bloqueado: proceso suspendido en espera de un evento, sin que


hayan desaparecido las causas de su bloqueo.
Suspendido preparado: proceso que ha sido suspendido, pero no tiene causa
para ser bloqueado.

Transiciones de estado: se denominan a los cambios que todo proceso puede tener cambiar de
estado varias veces a lo largo de su existencia.

Estado de un proceso y sus transacciones

Estas transiciones son las siguientes


Comienzo de la ejecución
Paso a estado de ejecución
Paso a estado bloqueado
Paso a estado preparado
Paso a estado suspendido bloqueado
Paso a estado suspendido preparado

Página 93 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Operaciones sobre procesos


Creación: puede ser jerárquica o no jerárquica
Destrucción
Suspensión
Reanudar
Cambiar la prioridad
Temporizar la ejecución
Despertar un proceso

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:

Catastróficos: imposibilitan el funcionamiento del sistema y no hay modo de recuperarlo


(falla en la tensión de alimentación)

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.

51 Planificación del procesador


El objetivo es dar un buen servicio a todos los procesos que existan en un momento dado en el
sistema.

Página 95 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Se distinguen varios niveles de planificación:

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.

5.3 Criterios para elegir o diseñar un algoritmo de planificación:


Tiempo de respuesta, de servicio, de ejecución, de procesador, de espera, eficiencia, rendimiento.

Página 96 de 114
UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

5.5 Algoritmos de Planificación

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

552 Round-Robin (RR)


Es la asignación cíclica o planificación en rueda, es una mejora del la FCFS. Trata de ser más
justa en cuanto a la respuesta tanto de los procesos cortos como de los largos.
Consiste en conceder a cada proceso un período de tiempo q (quantum), transcurrido el cual, si el
proceso no ha terminado, se le devuelve al final de la cola de los procesos preparados,
concediéndose el procesador al siguiente proceso por su correspondiente quantum.
Características.
Baja sobrecarga si el cambio de contexto es eficiente y los procesos siempre están en la
memoria principal.
El tamaño óptimo del quantum depende de:
El tipo de sistema
Las cargas que vaya a soportar el sistema
El número de procesos en el sistema y su tipo
Es la política mas utilizada para tiempo compartido
Ofrece un índice de servicio uniforme para todos los procesos
Es una política apropiativa.

553 El siguiente proceso el más corto (SJN)


El Método SHORTEST JOB NEXT es una política de planificación no apropiativa que trata de cubrir
los mismos objetivos que la RR. Toma de la cola de procesos preparados el que necesite menos
tiempo de ejecución para realizar su trabajo, para ello debe saber el tiempo de procesador que
necesita cada proceso, lo cual es tarea nada fácil, pero posible a través de diversos métodos como
pueden ser la información suministrada por el propio usuario, por el propio programa, basándose
en la historia anterior (heurística), etc.
Características:
No es apropiativa
El tiempo de espera aumenta de acuerdo con la longitud de los procesos, pero el tiempo
medio de espera con respecto a otras políticas es óptimo.
Es poco predecible.
No es justa con los procesos largos.
Buen tiempo de servicio
Resulta difícil de poner en práctica por los datos que necesitar para realizarse la
planificació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

Donde: P es la prioridad del proceso


w es el tiempo de espera en la cola de procesos preparados
t es el tiempo de ejecución del proceso

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)

557 Colas múltiples


Esta política divide la cola de procesos preparados en varias colas separadas, de manera que los
procesos se asignan a una determinada cola de acuerdo a sus necesidades y tipo.
Para determinar en cada caso qué cola es la que suministrará un proceso para que acceda al
procesador cuando éste deje a otro anterior, será controlada por un algoritmo de planificación
entre colas, que normalmente es apropiativo de prioridad fija.

558 Colas múltiples con realimentación (FB FEEDBACK MULTIPLE QUEUES)


Intenta dar un trato justo a los procesos pro medio de separación de los mismos en categorías,
para así darles el servicio que necesitan. Los procesos limitados por procesador irán a las colas
de menor prioridad (nivel más alto), mientras los de mayor prioridad serán aquellos procesos
muy interactivos
Características:
Soporta bien la sobrecarga.
Es apropiativa
Es muy adaptable a las necesidades del sistema, ya que cada cola puede ser gestionada de forma
diferente.

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.

721 Asignación de direcciones.


En qué direcciones se deben cargar?
El programador simplemente definirá una sentencia de inicio que marcará el comienzo de sus
instrucciones, y a partir de ella, describirá el resto de su programa. Posteriormente el compilador
traducirá a lenguaje de máquina el programa fuente y les asignará a las diferentes instrucciones y
variables un desplazamiento con respecto a la sentencia inicial que se denomina cero relativo.
Una vez enlazado el programa, el cargador podrá colocarlo en memoria asignándole al cero
relativo una dirección real, se realiza lo que se denomina transformación de direcciones relativas
en absolutas o reales.

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.

División de la memoria. El monitor residente


La introducción de los sistemas operativos para utilizar mejor el hardware dividió la memoria en
dos zonas, una utilizable por el usuario y otra reservada para la parte residente del propio sistema
operativo denominada comúnmente monitor.
Este reparto de la memoria introduce nuevos problemas que son necesarios resolver:
Cómo asegurar la independencia de ambas zonas (protección)

Página 100 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

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

Página 101 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

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.

Particiones contiguas de tamaño fijo


Se puede gestionar la memoria con particiones continuas de tamaño fijo, de tal forma que el
número de ellas y sus tamaños se definirán al inicializar el sistema, quedando inamovibles para
toda la sesión hasta que se apague el equipo.
Cuando un programa tenga que cargarse para su ejecución, el sistema operativo le asignará una
partición que pueda contenerlo, para ello es necesario que los programas declaren sus
necesidades de memoria al sistema.
Las primeras técnicas que utilizaron este tipo de partición de la memoria realizaban la gestión
por medio de colas de espera.
Para solucionar problemas que pueden aparecer con el método anterior, se puede utilizar otra
técnica consistente en una sola cola de espera, y será el sistema por medio del Planificador de
Trabajos el encargado de seleccionar qué programa cargar y en que partición.
En este caso, el planificador de trabajos puede realizar la selección de varias formas:
Respetando el orden de llegada (FIFO) produce infrautilización de la memoria.
Seleccionar el trabajo de tamaño más adecuado a la partición libre (el más adecuado o Best Fit)
se realiza analizando la cola de espera y eligiendo el de tamaño más adecuado a la partición
libre.
Seleccionar el primer trabajo que queda en la partición disponible (el primero disponible o First
Fit) de características similares a la anterior

Se mejora notablemente el rendimiento si se añade a la gestión de las particiones técnicas de


intercambio, de tal forma que un programa pendiente de un suceso o interrupción puede ser
sustituido por otro.
Si se analiza la utilización de particiones, aparecen dos problemas originados pro la propia
estructura de las mismas que disminuyen la efectividad de la gestión, éstos son los siguientes:
Fragmentación interna y fragmentación externa.

Particiones contiguas de tamaño variable

Página 102 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Los inconvenientes de la técnica anterior nacen de la dificultad de definir unas particiones de


tamaño adecuado para todos los trabajos que se deben usar.
En este caso, el sistema operativo mantendrá una tabla interna donde registrará las zonas de
memoria disponible o huecos, asignando a cada trabajo una partición del tamaño solicitado. Esta
técnica es la denominada de particiones contiguas de tamaño variable.
Cuando se arranca el sistema, a medida que van apareciendo trabajos en la cola, se van
asignando las sucesivas particiones hasta que la memoria se complete, aunque siempre aparece
una pequeña fragmentación externa (parte final de la memoria)
El sistema asignará estos huecos mientras existan trabajos en espera que quepan en ellos. Lo hará
buscando el primer trabajo que quepa en el hueco a asignar (First Fit), o aquel que se acople
mejor (Best Fit).
La memoria sufre un constante proceso de fragmentación. Para evitarlo, surge la idea de
recolocar las zonas de memorias utilizadas para lograr cada cierto tiempo un único hueco de
memoria disponible. Esta operación se denomina compactación.
Con las particiones variables se logra un mejor aprovechamiento de memoria que con las
particiones fijas. Ahora bien, la fragmentación que sufre la memoria en su mayor inconveniente
debido a la sobrecarga que se origina en el procesador para realizar la compactación con la
consiguiente pérdida de tiempo.

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.

Rendimiento. Memoria cache. Registros asociativos.


Para transformar cada dirección lógica (p,d) generada por el procesador en su dirección real, el
sistema accede en primer lugar a la tabla de páginas correspondiente (registro base + p) y
posteriormente a la dirección real (frame + d). De esta manera, cada dirección provoca dos

Página 103 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

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

Página 104 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

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.

746 Memoria virtual

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

Carga por petición de páginas

El algoritmo de intercambio no llevará a memoria todo el programa, sino solamente cargará


aquellas páginas que se le piden.
Cuando el procesador genere una dirección que pertenezca a una página que o se encuentre en
memoria – falta de páginas – la buscará, y a continuación la traerá a memoria desde el
correspondiente dispositivo de memoria secundaria.
El tratamiento de las faltas de página introduce un retraso adicional en la ejecución de los
programas y afecta por tanto al rendimiento general del sistema.
Reemplazamiento de páginas

La solución adoptada, generalmente, es sustituir alguna de las páginas cargadas (reemplazar


páginas). La rutina del sistema que gestiona la interrupción de falta de página deberá trabajar de
la siguiente manera:
Encontrar la página solicitada en el almacenamiento secundario.
Encontrar un frame libre.
Si existe, utilizarlo.

Página 105 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Si no existe, utilizar un algoritmo de reemplazamiento para seleccionar la página a


reemplazar.
Salvar la pagina reemplazada en el almacenamiento secundario, actualizando las tablas
afectadas.
Llevar la página solicitada al frame libre y actualizar las tablas correspondientes.

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).

Algoritmo de reemplazamiento FIFO

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)

Página 106 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

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.

7.47 Criterios de reemplazamiento de páginas

¿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?

Administración de los dispositivos

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)

Los dispositivos de hardware se pueden reunir en tres grandes grupos

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

Página 107 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

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.

Tambores magnéticos: suelen emplearse para el intercambio o swapping, están divididos en


pistas circulares donde cada una tiene su propia cabeza de lectura/escritura.

Terminales

Se denomina Terminal al conjunto formado por un teclado y una pantalla.


Los terminales se dividen en dos categorías

 Conectados a través del estándar RS-232, a través de un cable físico, este


cable en la computadora termina en una tarjeta hardware o interfaz que a su
vez está conectada al bus de la computadora

 Mapeados en memoria no necesitan línea de conexión a la computadora ya


que están directamente conectados al bus del mismo.

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

Interfaz procesador periférico

La velocidad y complejidad de los periféricos determinan cómo deben ser conectados al


procesador. Estudiaremos tres tipos de conexión:

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.

Controladores: los dispositivos complejos (discos) no se conectan directamente al procesador,


sino que lo hacen a través de un controlador que contiene el estado del dispositivo (status),
controla el mismo y chequea los datos transferidos.

Página 108 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Canales: normalmente los controladores se conectan al procesador a través de un canal o


procesador de entrada/salida. El propósito de un canal es conseguir que los dispositivos sean
tratados como virtuales, abstractos o transparentes.
Los canales son manejados por comandos y cuando terminan la operación devuelven el status
correspondiente e interrumpen al procesador.
Los canales pueden ser de distintos tipos, selectores (manejan varios dispositivos, pero sólo
pueden transferir datos de uno a uno) multiplexores (manejan varios dispositivos y pueden
transferir datos simultáneamente.

Software de control de entrada/salida (driver)


Se define driver como “el software formado por un conjunto de rutinas y tablas que, formando
parte del núcleo del sistema operativo, ejecutan y controlan todas las operaciones de
entrada/salida sobre cualquier periférico conectado a la computadora, siendo particulares para
cada dispositivo.
Se encuentran permanentemente alojados en memoria principal y requieren una elevada rapidez
de ejecución sin formar parte del proceso de usuario que los utilice.

El tratamiento por el núcleo de un sistema operativo de toda la información de entrada/salida


desde, o a un periférico, se puede dividir en dos niveles de estudio; tratamiento independiente del
periférico o tratamiento dependiente del periférico.

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.

Estructuras de datos de un driver.


Las rutinas de un driver para dar un correcto servicio a las peticiones de E/S necesitan para cada
dispositivo una serie de datos que se encuentran en estructura de datos en forma de tabla , de
manera que su composición depende del sistema operativo, aunque tiene forma y nombres
similares a los siguientes:
Bloque de control del driver es la representación del driver desde el punto de vista del sistema
operativo. Contiene aquellos parámetros que son susceptibles de ser variados dinámicamente y
aquellos que definen el tipo de dispositivo que puede ser atendido por el driver.
Bloque de control de la unidad: cada dispositivo físico se relaciona desde el punto de vista del
sistema operativo como una unidad dentro del tipo al que le corresponda y es definido e
identificado por el sistema operativo por medio de su BCU.
Paquete de petición de entrada/salida (PES) cuando un proceso de usuario intenta hacer una
operación de E/S, el sistema operativo crea un paquete asociado a dicho proceso y a dicha
petición para ser tratado por el driver. Este paquete se coloca en una cola prioritaria para se
atendido por el driver al que va dirigido.

Interrupciones sectorizadas

Página 109 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

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.

Direcciones de E/S del dispositivo


Los dispositivos periféricos o sus controladores están provistos de unos registros, la dirección de
memoria que contiene los valores de los mismos se conoce con el nombre dirección de E/S (I/O
address). El sistema operativo asigna una zona de memoria que contiene los valores de los
registros de todos los dispositivos que se conoce con el nombre de pagina de E/S (I/O page). En
general, esta zona suele ser la más alta de la memoria.

Administración de los archivos.


El sistema operativo tiene la misión de hacer ver al usuario el tratamiento de la información
almacenada en soportes externos desde un punto de vista lógico, independizándolo de la realidad
física.
Desde otro punto de vista, el sistema operativo debe manejar estos archivos asegurando la
independencia y el acceso por aquellos usuarios que lo tengan permitido, y esto lo podrá hacer
organizándolos según diferentes criterios. La parte que se encarga de esta función es la
denominada subsitema de archivos.

9.2 Estructura de la información


Un conjunto de caracteres relacionados entre sí se denomina campo, distintos campos reunidos y
referidos a una misma entidad configuran un registro, y un conjunto de registros relacionados
entre sí configuran lo que se denomina archivo.

9.3 Soporte físico de la información


Los primeros sistemas operativos desarrollaron su gestión de archivos utilizando cinta
magnética, tenían el problema de tiempo de acceso. Con la aparición de los discos magnéticos, la
cinta pasó a segundo plano. En la actualidad las cintas magnéticas se utilizan para la realización
de copias de seguridad y como respaldo de los discos en determinadas operaciones.

Registros físicos y lógicos. Bloqueo de registros.


Registro físico: es la unidad básica de información que se transfiere en cada operación de lectura
o escritura. También se denomina bloque y en los discos se denomina sector.
Registros lógicos: es la información que maneja el usuario en unidades lógicas de tamaño
variable según la aplicación y el archivo que se trate.
Para mejorar la velocidad de acceso a la información y optimizar el uso del dispositivo, el
sistema puede bloquear los registros (registros bloqueados).

9.4Planificación de los accesos a disco.


Es importante que la gestión de la información sobre disco sea eficiente puesto que representa un
altísimo porcentaje de operaciones de almacenamiento y recuperación de datos. Por ello, es
necesario agilizar al máximo los accesos a la información contenida en los mismos.
Ante una petición de acceso a un bloque determinado, el hardware del disco debe realizar,
fundamentalmente, tres operaciones:

Página 110 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

Búsqueda: mover el brazo buscando la pista o cilindro correspondiente


Latencia: esperar a que el bloque se sitúe frente a la cabeza de lectura/escritura
Transmisión: transmitir el bloque deseado.

Algoritmos de planificación: si mientras se realiza un acceso llegan más peticiones, el sistema


deberá mantenerlas en una lista de espera. Finalizando el acceso que se estaba atendiendo, el
disco quedará libre y el sistema podrá decidir el orden en el que atenderá las peticiones
pendientes, buscando minimizar el desplazamiento del brazo del disco y así el tiempo de servicio
de petición.
Los algoritmos que pueden planificar dichas peticiones son:

Primero en llegar, primero en acceder (FCFS)


Primero el de menor tiempo de búsqueda (SSTF); este atenderá primero la petición más cercana
a la última servida, o lo que es lo mismo, aquella que requiera un desplazamiento menor del
brazo. Es útil para sistemas batch.
Exploración (scan); se establece un recorrido predeterminado para el brazo del disco que va del
primer al último cilindro y vuelta. En ese recorrido irá atendiendo las peticiones más cercanas
según el sentido del desplazamiento. Este ha sido el algoritmo base a partir del cual se han
desarrollado los algoritmos de planificación de discos más utilizados en los sistemas actuales.
Exploración circular: el movimiento del brazo sigue siendo el mismo que en el caso anterior,
pero sólo atiende peticiones en uno de los sentidos. Al llegar al último cilindro regresará al
principio rápidamente sin atender petición alguna.
En la práctica, en los dos algoritmos de exploración, el brazo del disco no llegará a los cilindros
extremos del disco, sino que cambiará de sentido al servir la última petición.

9.5 Soporte lógico, subsistema de archivos.


El sistema será el responsable de realizar las operaciones de lectura, escritura, actualización,
borrado, etc. adecuándolas a las características de los dispositivos físicos utilizados. A esta parte
del sistema se la denomina subsistema de archivos. Su misión es realizar las siguientes tareas;
gestión del almacenamiento, métodos de acceso, gestión de archivos, protección e integridad de
los archivos.

9.6 Gestión del almacenamiento, asignación de espacio


Los objetivos son: utilizar eficazmente el espacio de almacenamiento y posibilitar un acceso
rápido a la información almacenada.

Control de espacio disponible; el subsistema necesita controlar en todo momento el espacio


disponible. Comúnmente el mantendrá en cada dispositivo una lista de espacio libre a la que irá
añadiendo el espacio liberado por los archivos que se borran, y de la que restará el asignado a
nuevas peticiones.
Una primera forma de controlar es mantener un mapa de bits por dispositivo, donde cada uno de
los bloques del disco está representado por un bit cuyo valor indica su estado (0 libre, 1
asignado), otra es mantener en el subsistema un apuntador al primer bloque libre del disco, éste
apuntará al siguiente y así sucesivamente. Esto no es eficiente ya que el mantenimiento de los
apuntadores consume mucho espacio y provoca un gran número de operaciones de E/S. La
solución más extendida parte de la consideración se mantiene en cada disco una tabla de grupos
de bloques libres. Dicha tabla contiene la dirección del primer bloque de cada grupo y el número

Página 111 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

de ellos que lo forman. Si el espacio no se asigna muy fragmentadamente, esta alternativa es la


más eficaz ya que permite conocer el espacio disponible con un solo acceso a disco.

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.

Asignación del espacio de almacenamiento: el sistema operativo es el responsable de plasmar en


disco los archivos que crean los usuarios, dándoles el espacio necesario, a través de dos
estrategias: asignar N bits contiguos de espacio en disco o almacenar el archivo en trozos no
contiguos.
La asignación puede ser
Contigua: responde bien a las búsquedas en secuencia directa. Produce fragmentación externa
Enlazada: evita la fragmentación externa, logra buenos resultados en los accesos secuenciales. N
es válida para accesos directos. Consume espacio para los apuntadores.
Indexada: permite el acceso directo y consume espacio para los bloques de índices.
Algunos sistemas operativos utilizan un solo método de asignación, mientras otros utilizan varios
según las características de cada archivo.

9.7 Métodos de acceso


Es un conjunto de rutinas y tablas que posibilitan acceder a la información de los archivos según
un esquema lógico determinado.
Algunos sistemas operativos ofrecen un solo método de acceso a sus usuarios, en cambio otros
permiten utilizar varios y es el usuario el que decide cual usar.
Acceso secuencial: permite el acceso a los registros de un archivo en un orden preestablecido,
del primero al último y de uno en uno. Es un método muy utilizado por su simplicidad,
especialmente en archivos con poca información.
Acceso directo: permite el acceso directo a cualquier parte del archivo, no es necesario pasar por
la información anterior para acceder a un determinado registro. Es el más adecuado para acceder
con rapidez a grandes cantidades de información.
Acceso directo indexado: se construye un índice o tabla de relaciones entre las claves y sus
bloques físicos para cada archivo. La localización de un registro se realiza accediendo primero a
ese índice y con la dirección del bloque correspondiente a la clave solicitada, se alcanzará el
bloque adecuado.

9.8 Directorio de archivos


Son archivos de estructura especial, cuyos registros contienen la descripción de los archivos
existentes en el sistema. Mediante estos directorios, el subsistema podrá localizar rapidamente un
archivo solicitado (en que volumen está) y conocer sus características (organización, edad,
tamaño, protección, etc.)

Página 112 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

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).

9.9 Seguridad de los archivos


La seguridad de los archivos, de su contenido, se debe enfocar bajo dos aspectos: disponibilidad
de la información (los archivos contienen la información prevista y se puede acceder a ella) y el
otro es su privacidad (control de acceso a los mismos)

9.10 Diseño del subsistema de archivos


El diseño de un subsistema debe afrontar dos aspectos diferentes; uno es la visión del usuario y
los servicios que éste puede solicitar y la otra es la realización mediante algoritmos y estructuras
de datos de la visión del usuario.

Página 113 de 114


UNIVERSIDAD DE BUENOS AIRES - Facultad de Ciencias Económicas
Cátedra Teoría de Los Lenguajes y Sistemas Operativos

3. Análisis de los sistemas operativos más difundidos.

Trabajo práctico de investigación de los alumnos, con presentación grupal:


No mas de 20 carillas A4.

INTRODUCCION
HISTORIA
CONTEXTO
MERCADO
DISTRIBUCION
ASPECTOS GENERALES
INTERFACE
SEGURIDAD
CONECTIVIDAD
ESCALABILIDAD
ASPECTOS TECNICOS
RAZONES PARA UTILIZAR
CONCLUSION

Tendencia.

Página 114 de 114

También podría gustarte