Está en la página 1de 74

INDICE

PAG
I. Introducción a los sistemas operativos 5
I.1. Definición y concepto de sistema operativo 5
I.2. Características de los sistemas operativos 6
I.3. Clasificación de los sistemas operativos 7
I.4. Historia y desarrollo de los sistemas operativos 8
II. Estructura del sistema 11
II.1. Metodologías de diseño 13
II.2. Núcleo (kernel) y niveles de un sistema operativo 13
II.3. Programación de entrada/salida 14
II.4. Interrupciones del procesador 14
III. Administración de los procesos 21
III.1. Concepto de proceso, Concurrencia y secuenciabilidad 23
III.2. Regiones criticas, Exclusión mutua, Sincronización 26
IV. Interbloqueo (Dead Lock) 29
IV.1. Análisis, Prevención 32
IV.2. Detección y recuperación 32
IV.3. Mecanismos para evitarlo 34
IV.4. Nivel de implantación de estrategias 34
V. Control de procesos y recursos 36
VI. Introducción a los lenguajes y autómatas 38
VI.1. Conjuntos finitos e infinitos 39
VI.1.1. Alfabeto 39
VI.1.2. Propiedades de string (Longitud y concatenación) 40
VI.1.3. Lenguaje y su representacion finita. 41
VII. Gramáticas 41
VII.1. Introducción y estructuras de las gramáticas 42
VII.2. Clasificación de las gramáticas (CHOMSKG) 43
VII.3. Representación de gramáticas 44
VII.3.1. Notación de BNF, Diagramas sintácticos 45
VIII. Lenguajes regulares 47
IX. Autómatas finitos 48
IX.1. Autómatas finitos determinísticos (AFD) 49
IX.2. Autómatas finitos no deterministicos AFND) 50
IX.3. Equivalencias AFND y AFD 50
IX.4. Propiedades de los lenguajes aceptados por un autómata 51
finito
IX.5. Autómatas finito y expresiones regulares 52
IX.6. Determinación de lenguajes regulares y no regulares 52
X. Autómatas de Push-Down 53
XI. Maquinas de Turing 53
XI.1. Definición de maquina de Turing 54
XI.2. Funcionamiento de la maquina de Turing 55
XI.3. Ejemplo de mayor fuerza de la maquina de Turing 55
XI.4. Extensiones de la maquina deTuring 56
XI.5. Maquina de Turing no deterministica 57
XI.6. El problema HALFING para las maquinas de Turing 57
XII. Gramáticas autómatas 58
XII.1. Lenguajes regulares 59
XII.1.1. Teorema de Kleene, Las aplicaciones del lema 59
Pumping
XII.1.2. El teorema MCHILL nerode 60
XII.2. Lenguajes de contexto libre 60
XII.2.1. Forma normal EHUMSKG, Lema de BARHILL el 61
Pumping
XII.2.2. Autómata de Pushdawn, Compilador de lenguajes 61
formales
XII.2.3. Lenguajes Brackat 61
XII.3. Lenguajes de contexto sensitivo 62
XII.3.1. Autómata lineal Bounded, Aspectos prácticos 62
Ejemplificación con un lenguaje conocido 62
XIII. Aplicaciones a lenguajes 63
XIII.1. Objetivos y filosofía de diseño de lenguajes de 63
programación
XIII.1.1. Comunicación humana 63
XIII.1.2. Prevención y detección 64
XIII.1.3. Utilidad, Eficiencia 65
XIII.1.4. Independencia de a maquina 65
XIII.1.5. Simplicidad, uniformidad 66
XIII.1.6. otras filosofias de diseño 66
XIV. Diseño detallado 68
XIV.1.1. Microestructuras 68
XIV.1.2. Estructuras d expresión 69
XIV.1.3. Estructuras de datos 70
XIV.1.4. Estructuras de control 70
XIV.1.5. Estructuras del compilador 71
XIV.1.6. Estructura I/O 71
XV. Otras aplicaciones
XVI. Unidad integradora (proyecto final) 73
INTRODUCCCION
En este apartado se desarrollaran temas relacionados a la informática, que se
explicaran en dieciséis unidades cada una con sus subtemas correspondientes.
Aquí se dará a conocer los conceptos más importantes del cálculo mercantil como
son: Sistemas operativos, Administración de los procesos, gramáticas, Lenguajes
regulares, Autómatas finitos, entre otros.
Se habla sobre como esta clasificados los sistemas operativos: tenemos el
Multiusuario: ya que Permite que dos o más usuarios utilicen sus programas al
mismo tiempo. Multiprocesador: soporta el abrir un mismo programa en más de
una CPU. Multitarea: Permite que varios programas se ejecuten al mismo tiempo.
Multitramo: Permite que diversas partes de un solo programa funcionen al mismo
tiempo. Tiempo Real: Responde a las entradas inmediatamente. Los sistemas
operativos como DOS y UNIX, no funcionan en tiempo real.

La estructura general del sistema esta compuesto por el Gestor de archivos. Ya


que Gestiona la asignación de espacio en la memoria del disco y de las
estructuras de datos usadas para representar información. Manejador de base
de datos. Sirve de interfaz entre los datos y los programas de aplicación. Y por
ultimo tenemos aplicaciones a los lenguajes ya que se basa en objetivos y
filosofías del diseño de lenguajes de programación nos permiten tener una visión
acerca de un lenguaje determinado. es la mas importante para un informático.
Introducción a los Sistemas Operativos

I.- INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS


Información General:

Un Sistema Operativo (SO) es una colección organizada de extensiones de


software del hardware, consiente en rutinas de control que hacen funcionar una
computadora y proporcionan un entorno para la ejecución de los programas.
Existen otros programas que se apoyan en el SO para poder acceder a los
recursos que necesitan. Esto se lleva a cabo a través de llamadas sistema
operativo. También el SO debe brindar una forma de que el usuario se pueda
comunicar con él a través de una interfaz que le brinde una vía de comunicación
con el hardware del sistema informático.

El objetivo principal del SO es lograr que el sistema informático se use de


manera cómoda, y el objetivo secundario es el lograr que el hardware de la
computadora se emplee de modo eficiente.

El SO debe asegurar el correcto funcionamiento del sistema informático. Para


lograr esto el hardware debe brindar algún mecanismo apropiado que impida que
los usuarios intervengan en el funcionamiento del sistema y así mismo el SO debe
poder utilizar este recurso de hardware de modo que esto se cumpla.

El SO debe ofrecer servicios a los programas y sus usuarios para facilitar la


tarea de programación.

XVI.1. DEFINICIÓN Y CONCEPTO DE SISTEMA OPERATIVO

El sistema operativo es el programa (o software) más importante de un


ordenador. Para que funcionen los otros programas, cada ordenador de uso
general debe tener un sistema operativo. Los sistemas operativos realizan tareas
básicas, tales como reconocimiento de la conexión del teclado, enviar la
información a la pantalla, no perder de vista archivos y directorios en el disco, y
controlar los dispositivos periféricos tales como impresoras, escáner, etc.

En sistemas grandes, el sistema operativo tiene incluso mayor responsabilidad y


poder, es como un policía de tráfico, se asegura de que los programas y usuarios
que están funcionando al mismo tiempo no interfieran entre ellos. El sistema
operativo también es responsable de la seguridad, asegurándose de que los
usuarios no autorizados no tengan acceso al sistema.

INFORMATICA IV Página 5
Introducción a los Sistemas Operativos

CONCEPTO DE SISTEMA OPERATIVO

Conjunto de programas que se integran con el hardware para facilitar al usuario,


el aprovechamiento de los recursos disponibles. Algunos de sus objetivos
principales son:

o Provee de un ambiente conveniente de trabajo.


o Hace uso eficiente del Hardware.
o Provee de una adecuada distribución de los recursos.

Para un Sistema Operativo real deberá satisfacer las siguientes funciones:

o Gobierna el Sistema.
o Asigna los recursos.
o Administra y controlar la ejecución de los programas.

Un sistema de computo en muchos casos cuenta con demasiados recursos para


ser utilizados por un solo usuario, es en estos casos cuando se puede dar servicio
a varios procesos.

XVI.2. CLASIFICACIÓN DE LOS SISTEMAS OPERATIVOS

Los sistemas operativos pueden ser clasificados de la siguiente forma:

 Multiusuario: Permite que dos o más usuarios utilicen sus programas al


mismo tiempo. Algunos sistemas operativos permiten a centenares o
millares de usuarios al mismo tiempo.

 Multiprocesador: soporta el abrir un mismo programa en más de una


CPU.

 Multitarea: Permite que varios programas se ejecuten al mismo tiempo.

 Multitramo: Permite que diversas partes de un solo programa funcionen al


mismo tiempo.

 Tiempo Real: Responde a las entradas inmediatamente. Los sistemas


operativos como DOS y UNIX, no funcionan en tiempo real.

6
Introducción a los Sistemas Operativos

XVI.3. CARACTERÍSTICAS DE LOS SISTEMAS OPERATIVOS

En general, se puede decir que un Sistema Operativo tiene las siguientes


características:

o Conveniencia. Un Sistema Operativo hace más conveniente el uso


de una computadora.
o Eficiencia. Un Sistema Operativo permite que los recursos de la
computadora se usen de la manera más eficiente posible.
o Habilidad para evolucionar. Un Sistema Operativo deberá
construirse de manera que permita el desarrollo, prueba o introducción
efectiva de nuevas funciones del sistema sin interferir con el servicio.
o Encargado de administrar el hardware. El Sistema Operativo se
encarga de manejar de una mejor manera los recursos de la computadora
en cuanto a hardware se refiere, esto es, asignar a cada proceso una
parte del procesador para poder compartir los recursos.
o Relacionar dispositivos (gestionar a través del kernel). El Sistema
Operativo se debe encargar de comunicar a los dispositivos periféricos,
cuando el usuario así lo requiera.
o Organizar datos para acceso rápido y seguro.
o Manejar las comunicaciones en red. El Sistema Operativo permite al
usuario manejar con alta facilidad todo lo referente a la instalación y uso
de las redes de computadoras.
o Procesamiento por bytes de flujo a través del bus de datos.
o Facilitar las entradas y salidas. Un Sistema Operativo debe hacerle
fácil al usuario el acceso y manejo de los dispositivos de Entrada/Salida
de la computadora.
o Técnicas de recuperación de errores.
o Evita que otros usuarios interfieran. El Sistema Operativo evita que
los usuarios se bloqueen entre ellos, informándoles si esa aplicación esta
siendo ocupada por otro usuario.
o Generación de estadísticas.
o Permite que se puedan compartir el hardware y los datos entre los
usuarios.

El software de aplicación son programas que se utilizan para diseñar, tal como el
procesador de palabras, lenguajes de programación, hojas de cálculo, etc.

7
Introducción a los Sistemas Operativos

El software de base sirve para interactuar el usuario con la máquina, son un


conjunto de programas que facilitan el ambiente plataforma, y permite el diseño
del mismo.

El Software de base está compuesto por :

o Cargadores.
o Compiladores.
o Ensambladores.
o Macros.

XVI.4. HISTORIA Y DESARROLLO DE LOS SISTEMAS OPERATIVOS


Los Sistemas Operativos, al igual que el Hardware de los computadores, han
sufrido una serie de cambios revolucionarios llamados generaciones. En el caso
del Hardware, las generaciones han sido marcadas por grandes avances en los
componentes utilizados, pasando de válvulas ( primera generación ) a transistores
( segunda generación ), a circuitos integrados ( tercera generación), a circuitos
integrados de gran y muy gran escala (cuarta generación). Cada generación
Sucesiva de hardware ha ido acompañada de reducciones substanciales en los
costos, tamaño, emisión de calor y consumo de energía, y por incrementos
notables en velocidad y capacidad.
Generacion Cero (década de 1940)
Los primeros sistemas computacionales no poseían sistemas operativos. Los
usuarios tenían completo acceso al lenguaje de la maquina. Todas las
instrucciones eran codificadas a mano.
Primera Generacion (década de 1950)
Los sistemas operativos de los años cincuenta fueron diseñados para hacer mas
fluida la transición entre trabajos. Antes de que los sistemas fueran diseñados, se
perdía un tiempo considerable entre la terminación de un trabajo y el inicio del
siguiente. Este fue el comienzo de los sistemas de procesamiento por lotes,
donde los trabajos se reunían por grupos o lotes. Cuando el trabajo estaba en
ejecución, este tenia control total de la maquina. Al terminar cada trabajo, el
control era devuelto al sistema operativo, el cual limpiaba y leía e iniciaba el
trabajo siguiente.
Al inicio de los 50's esto había mejorado un poco con la introducción de tarjetas
perforadas (las cuales servían para introducir los programas de lenguajes de
máquina), puesto que ya no había necesidad de utilizar los tableros enchufables.
Además el laboratorio de investigación General Motors implementó el primer
sistema operativo para la IBM 701. Los sistemas de los 50's generalmente
ejecutaban una sola tarea, y la transición entre tareas se suavizaba para lograr la
máxima utilización del sistema. Esto se conoce como sistemas de procesamiento

8
Introducción a los Sistemas Operativos

por lotes de un sólo flujo, ya que los programas y los datos eran sometidos en
grupos o lotes.
La introducción del transistor a mediados de los 50's cambió la imagen
radicalmente.
Se crearon máquinas suficientemente confiables las cuales se instalaban en
lugares especialmente acondicionados, aunque sólo las grandes universidades y
las grandes corporaciones o bien las oficinas del gobierno se podían dar el lujo de
tenerlas.
Para poder correr un trabajo (programa), tenían que escribirlo en papel (en
Fortran o en lenguaje ensamblador) y después se perforaría en tarjetas.
Enseguida se llevaría la pila de tarjetas al cuarto de introducción al sistema y la
entregaría a uno de los operadores. Cuando la computadora terminara el trabajo,
un operador se dirigiría a la impresora y desprendería la salida y la llevaría al
cuarto de salida, para que la recogiera el programador.
Segunda Generacion (a mitad de la década de 1960)
La característica de los sistemas operativos fue el desarrollo de los sistemas
compartidos con multiprogramación, y los principios del multiprocesamiento. En
los sistemas de multiprogramación, varios programas de usuario se encuentran al
mismo tiempo en el almacenamiento principal, y el procesador se cambia
rápidamente de un trabajo a otro. En los sistemas de multiprocesamiento se
utilizan varios procesadores en un solo sistema computacional, con la finalidad de
incrementar el poder de procesamiento de la maquina.
La independencia de dispositivos aparece después. Un usuario que desea escribir
datos en una cinta en sistemas de la primera generación tenia que hacer
referencia especifica a una unidad de cinta particular. En la segunda generación,
el programa del usuario especificaba tan solo que un archivo iba a ser escrito en
una unidad de cinta con cierto número de pistas y cierta densidad.
Se desarrollo sistemas compartidos, en la que los usuarios podían acoplarse
directamente con el computador a través de terminales. Surgieron sistemas de
tiempo real, en que los computadores fueron utilizados en el control de procesos
industriales. Los sistemas de tiempo real se caracterizan por proveer una
respuesta inmediata.
Tercera Generacion (mitad de década 1960 a mitad década de 1970)
Se inicia en 1964, con la introducción de la familia de computadores Sistema/360
de IBM. Los computadores de esta generación fueron diseñados como sistemas
para usos generales . Casi siempre eran sistemas grandes, voluminosos, con el
propósito de serlo todo para toda la gente. Eran sistemas de modos múltiples,
algunos de ellos soportaban simultáneamente procesos por lotes, tiempo
compartido, procesamiento de tiempo real y multiprocesamiento. Eran grandes y
costosos, nunca antes se había construido algo similar, y muchos de los
esfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho
después de lo que el planificador marcaba como fecha de terminación.

9
Introducción a los Sistemas Operativos

Estos sistemas introdujeron mayor complejidad a los ambientes computacionales;


una complejidad a la cual, en un principio, no estaban acostumbrados los
usuarios.
Cuarta Generacion (mitad de década de 1970 en adelante)
Los sistemas de la cuarta generación constituyen el estado actual de la
tecnología. Muchos diseñadores y usuarios se sienten aun incómodos, después
de sus experiencias con los sistemas operativos de la tercera generación.
Con la ampliación del uso de redes de computadores y del procesamiento en
línea los usuarios obtienen acceso a computadores alejados geográficamente a
través de varios tipos de terminales.
Los sistemas de seguridad se ha incrementado mucho ahora que la información
pasa a través de varios tipos vulnerables de líneas de comunicación. La clave de
cifrado esta recibiendo mucha atención; han sido necesario codificar los datos
personales o de gran intimidad para que; aun si los datos son expuestos, no sean
de utilidad a nadie mas que a los receptores adecuados.
El porcentaje de la población que tiene acceso a un computador en la década de
los ochenta es mucho mayor que nunca y aumenta rápidamente.
El concepto de maquinas virtuales es utilizado. El usuario ya no se encuentra
interesado en los detalles físicos de; sistema de computación que esta siendo
accedida. En su lugar, el usuario ve un panorama llamado maquina virtual creado
por el sistema operativo.
Los sistemas de bases de datos han adquirido gran importancia. Nuestro mundo
es una sociedad orientada hacia la información, y el trabajo de las bases de datos
es hacer que esta información sea conveniente accesible de una manera
controlada para aquellos que tienen derechos de acceso.

10
Introducción a los Sistemas Operativos

II.- ESTRUCTURA GENERAL DEL SISTEMA.


Un sistema de base de datos se encuentra dividido en módulos cada uno de los
cuales controla una parte de la responsabilidad total de sistema. En la mayoría de
los casos, el sistema operativo proporciona únicamente los servicios más básicos
y el sistema de la base de datos debe partir de esa base y controlar además el
manejo correcto de los datos. Así el diseño de un sistema de base de datos debe
incluir la interfaz entre el sistema de base de datos y el sistema operativo.

Los componentes funcionales de un sistema de base de datos, son:

Gestor de archivos.
Gestiona la asignación de espacio en la memoria del disco y
de las estructuras de datos usadas para representar información.

Manejador de base de datos.


Sirve de interfaz entre los datos y los programas de aplicación.

Procesador de consultas.
Traduce las proposiciones en lenguajes de consulta a
instrucciones de bajo nivel. Además convierte la solicitud del
usuario en una forma más eficiente.

Compilador de DDL.
Convierte las proposiciones DDL en un conjunto de tablas
que contienen metadatos, estas se almacenan en el diccionario
de datos.

Archivo de datos.
En él se encuentran almacenados físicamente los datos de una
organización.

Diccionario de datos.
Contiene la información referente a la estructura de la base
de datos.

Indices.
Permiten un rápido acceso a registros que contienen valores
específicos.

Una forma gráfica de representar los componentes antes


mencionados y la relación que existe entre ellos sería la siguiente.

11
Introducción a los Sistemas Operativos

12
Introducción a los Sistemas Operativos

II.1.- METODOLOGÍAS DE DISEÑO

El primer paso en el diseño de una base de datos es la producción del esquema


conceptual. Normalmente, se construyen varios esquemas conceptuales, cada
uno para representar las distintas visiones que los usuarios tienen de la
información. Cada una de estas visiones suelen corresponder a las diferentes
áreas funcionales de la empresa como, por ejemplo, producción, ventas, recursos
humanos, etc.

Estas visiones de la información, denominadas vistas, se pueden identificar de


varias formas. Una opción consiste en examinar los diagramas de flujo de datos,
que se pueden haber producido previamente, para identificar cada una de las
áreas funcionales. La otra opción consiste en entrevistar a los usuarios, examinar
los procedimientos, los informes y los formularios, y también observar el
funcionamiento de la empresa.

A los esquemas conceptuales correspondientes a cada vista de usuario se les


denomina esquemas conceptuales locales. Cada uno de estos esquemas se
compone de entidades, relaciones, atributos, dominios de atributos e
identificadores. El esquema conceptual también tendrá una documentación, que
se irá produciendo durante su desarrollo. Las tareas a realizar en el diseño
conceptual son las siguientes:

1. Identificar las entidades.


2. Identificar las relaciones.
3. Identificar los atributos y asociarlos a entidades y relaciones.
4. Determinar los dominios de los atributos.
5. Determinar los identificadores.
6. Determinar las jerarquías de generalización (si las hay).
7. Dibujar el diagrama entidad-relación.
8. Revisar el esquema conceptual local con el usuario.
9.

II.2.- NÚCLEO (KERNEL) Y NIVELES DE UN SISTEMA OPERATIVO

Para otros usos de este término véase Kernel (desambiguación).

En informática, el núcleo (también conocido en español con el anglicismo kernel,


de raíces germánicas como kern) es la parte fundamental de un sistema
operativo. Es el software responsable de facilitar a los distintos programas acceso
seguro al hardware de la computadora o en forma más básica, es el encargado de
gestionar recursos, a través de servicios de llamada al sistema. Como hay
muchos programas y el acceso al hardware es limitado, el núcleo también se
encarga de decidir qué programa podrá hacer uso de un dispositivo de hardware y
durante cuánto tiempo, lo que se conoce como multiplexado. Acceder al hardware
directamente puede ser realmente complejo, por lo que los núcleos suelen
implementar una serie de abstracciones del hardware. Esto permite esconder la
complejidad, y proporciona una interfaz limpia y uniforme al hardware subyacente,
lo que facilita su uso para el programador.

13
Introducción a los Sistemas Operativos

Diseño de alto nivel en el núcleo de un sistema operativo


Difuminando las barreras entre núcleo y espacio de usuario

En la ejecución de código en un sistema operativo moderno se distinguen niveles


de privilegios diferentes. La ejecución en modo usuario es la que tiene el nivel
más bajo de prioridad, por contra, el modo de ejecución del kernel, es el nivel más
prioritario. La gestión de recursos y el acceso directo al hardware son tareas que
deben realizarse en modo kernel, pero la ejecución es restringida y muy limitada.
El modo usuario es más flexible, pero carece de las prioridades necesarias para
realizar ciertas tareas. Ambos modos de ejecución tienen marcadas sus
limitaciones, por lo que sería muy interesante lograr una comunicación entre
rutinas y programas ejecutando en los distintos modos.

II.3.- PROGRAMACIÓN DE ENTRADA/SALIDA

En este apartado y los siguientes vamos a ver algunas de las funciones más
importantes que nos proporcionan las librerías definidas por ANSI y su utilización.
Como hemos visto hasta ahora, el lenguaje C no proporciona ningún mecanismo
de comunicación ni con el usuario ni con el sistema operativo. Ello es realizado a
través de las funciones de librería proporcionadas por el compilador.

El fichero de declaraciones que normalmente más se utiliza es el stdio.h. Vamos a


ver algunas funciones definidas en él.

Una función que ya hemos utilizado y que, ella y sus variantes, es la más
utilizadas para la salida de información es printf. Esta permite dar formato y enviar
datos a la salida estándar del sistema operativo.

#include <stdio.h>

int printf ( const char *format [, argumentos, ...] );

Acepta un string de formato y cualquier número de argumentos. Estos


argumentos se aplican a cada uno de los especificadores de formato contenidos
en format. Un especificador de formato toma la forma %[flags][width][.prec][h|l]
type. El tipo puede ser:

Tipo Descripción
d, i Entero decimal con signo
o Entero octal sin signo
u Entero decimal sin signo
x Entero hexadecimal sin signo (en minúsculas)
X Entero hexadecimal sin signo (en mayúsculas)
f Coma flotante en la forma [-]dddd.dddd
e Coma flotante en la forma [-]d.dddd e[+/-]ddd
g Coma flotante según el valor

14
Introducción a los Sistemas Operativos

E Como e pero en mayúsculas


G Como g pero en mayúsculas
c Un carácter
s Cadena de caracteres terminada en '\0'
% Imprime el carácter %
p Puntero

Los flags pueden ser los caracteres:

Modificador Descripción
+ Siempre se imprime el signo, tanto + como -
- Justifica a la izquierda el resultado, añadiendo espacios al final
blank Si es positivo, imprime un espacio en lugar de un signo +
# Especifica la forma alternativa

En el campo width se especifica la anchura mínima de la forma:

Modificador Descripción
N Se imprimen al menos n caracteres.
Se imprimen al menos n caracteres y si la salida es menor, se
0n
anteponen ceros
* La lista de parámetros proporciona el valor

Hay dos modificadores de tamaño, para los tipos enteros:

Modificador Descripción
L Imprime un entero long
H Imprime un entero short

Otra función similar a printf pero para la entrada de datos es scanf. Esta toma los
datos de la entrada estándar del sistema operativo. En este caso, la lista de
argumentos debe estar formada por punteros, que indican dónde depositar los
valores.

#include <stdio.h>

int scanf ( const char *format [, argumentos, ...] );

Hay dos funciones que trabajan con strings. La primera lee un string de la entrada
estándar y la segunda lo imprime en el dispositivo de salida estándar.

#include <stdio.h>

15
Introducción a los Sistemas Operativos

char *gets ( char *s );


int puts ( char *s );

También hay funciones de lectura y escritura de caracteres individuales.

#include <stdio.h>

int getchar ( void );


int putchar ( int c );

Veamos, por ejemplo, un programa que copia la entrada estándar a la salida


estándar del sistema operativo, carácter a carácter.

#include <stdio.h>

main()
{
int c;
while ( (c = getchar()) != EOF )
putchar(c);
}

16
Introducción a los Sistemas Operativos

II.4.- INTERRUPCIONES DEL PROCESADOR

La interrupción es básicamente un suceso que altera la secuencia de ejecución de


las instrucciones .
Existen varios tipos de interrupciones de los cuales los más comunes son los
siguientes:
1) De programa o de verificación de programa: son ocasionadas por condiciones
que se producen como resultado de la ejecución de una instrucción.
Ejemplo: - la división por cero
- el intento de ejecutar una instrucción privilegiada.
2) De reloj: son producidas por un reloj interno del procesador. Para que de esa
forma se realicen funciones con una cierta regularidad.
3) De Entrada / Salida: son generadas por un controlador de E/S para indicar la
finalización de una operación; o e cambio de estado de un dispositivo o canal; o
también alguna condición de error.
4) Por fallo del Hardware o de verificación de máquina: son causadas por el mal
funcionamiento del equipo, cortes de energía, etc.
Con el uso de las interrupciones el procesador se puede utilizar de una manera
más eficaz.

Las interrupciones y el ciclo de instrucción


Utilizando interrupciones el procesador puede ejecutar instrucciones mientras una
operación de E/S está en proceso. Siguiendo esta idea se concluye que la
operación de E/S y un programa usuario son ejecutados concurrentemente.
Desde la postura del programa de usuario, una interrupción no es más que la
alteración de la secuencia normal de ejecución. Cuando el tratamiento de la
interrupción termina, la ejecución continúa.
Para tratar a las interrupciones, se agrega un ciclo de interrupción al ciclo de
instrucción.
En el ciclo de interrupción, el procesador verifica si ha ocurrido alguna
interrupción, indicado por la presencia de una señal de interrupción. Si no hay
interrupciones pendientes, el procesador continúa con el ciclo de lectura y trae la
próxima instrucción del programa en curso. Si hay una interrupción pendiente, el
procesador suspende la ejecución del programa en curso y ejecuta una rutina de
tratamiento de la interrupción.

17
Introducción a los Sistemas Operativos

tratamiento de las interrupciones


Una interrupción lleva a una serie de sucesos, tanto en el hardware del
procesador como en el software.

Tratamiento de una Interrupción simple


Cuando un dispositivo de E/S completa una operación E/S se produce en el
Hardware estas secuencias de sucesos:
1. El dispositivo envía una señal de interrupción al procesador.
2. El procesador finaliza la ejecución de la instrucción en curso ante de responder
a la interrupción.
3. El procesador pregunta por la interrupción; si existe una envía una señal de
reconocimiento al dispositivo que la género, al ser reconocido el dispositivo
suprime la señal de interrupción
4. El procesador se prepara para transferir el control a la rutina de interrupción. Se
debe salvar la información necesaria para abandonar la ejecución del programa
en curso en el punto de interrupción. La mínima información requerida es la
palabra de estado del programa (PSW) y la ubicación de la siguiente instrucción a
ejecutar, que se almacena en el contador del programa; se introducen en la pila
del control del sistema
5. Se carga el contador de programa con la ubicación de entrada del programa de
tratamiento de la interrupción.
Puede haber un solo programa por cada tipo de interrupción, o uno por cada
dispositivo y por cada tipo de interrupción, dependiendo de la arquitectura del
computador y del diseño del sistema operativo.
El procesador debe invocar a una rutina en especial si existe más de una.

18
PRACTICAS PROFESIONALES INFORMATICA IV

Esta información puede estar en la señal original de la interrupción o el


procesador tendrá que preguntarle al dispositivo que creo la interrupción para
obtener respuesta sobre la información que necesita.

Una vez cargado el contador de programa, donde se encuentra el contenido de la


instrucción, el procesador continua con el siguiente ciclo de instrucción que
comienza trayendo la próxima instrucción.
La ejecución de este programa tiene las siguientes operaciones:
6. El contador de programa y la PSW relativa al programa interrumpido se
salvaron en la pila del sistema. La rutina de tratamiento de la interrupción
comienza salvando en la pila el contenido de todos los registros del procesador.
Es necesario salvar estos valores mas cualquier otra información sobre el estado
de ejecución del programa.
7. La rutina de tratamiento de la interrupción puede ahora procesar la interrupción.
Se examina el estado de la información relativa a la operación de E/S o a otro
evento que causó la interrupción.
8. Una vez completo el tratamiento de la interrupción se recuperan de la pila los
valores de los registros que se salvaron y se recuperan sobre los registros del
procesador.
9. Finaliza con la restauración de los valores de la PSW y del contador de
programa a partir de la pila. Como resultado la siguiente instrucción a ser
ejecutada será del programa interrumpido previamente.

Es importante salvar toda la información para su reanudación posterior, ya que la


rutina de tratamiento de la interrupción no es una rutina llamada desde el
programa. La interrupción puede producirse en cualquier punto de la ejecución del
programa de usuario.

Interrupciones Múltiples
Existen dos enfoques:
1°) Se inhabilitan las interrupciones mientras se esté procesando una. El
procesador ignora la señal de interrupción quedando pendiente dicha interrupción.
Una vez finalizada la rutina de tratamiento de interrupción se habilitan las
interrupciones antes de comenzar el programa y el procesador comprueba si se
produjo alguna interrupción adicional, por lo que las interrupciones son tratadas
en forma secuencial.
La limitación es que no tiene en cuenta las prioridades relativas o necesidades
críticas de tiempo. Si el primer lote de entrada no se proceso, cuando llega el
segundo pueden perderse datos porque el buffer de dispositivos de E/S puede
estar lleno y producirse un desbordamiento.
2°) Se definen las prioridades para las interrupciones, permitiendo que una
interrupción más alta interrumpa a la rutina de tratamiento de una interrupción de
prioridad más baja.

19
PRACTICAS PROFESIONALES INFORMATICA IV

Multiprogramación
Es la técnica por medio de la cual el procesador puede soportar la ejecución de
varios trabajos activos (que se están ejecutando) al mismo tiempo.
Puede ocurrir que aún utilizando interrupciones el procesador no sea
eficientemente aprovechado.
Cuando el procesador tiene que ocuparse de varios programas, el orden de
ejecución de éstos dependerá de la prioridad relativa de cada uno y de si están
esperando una E/S.
Cuando un programa es interrumpido, el control se transfiere a la rutina de
tratamiento de la interrupción, luego de que ésta haya terminado, puede que no
se devuelva el control inmediatamente al programa de usuario que estaba
ejecutándose en el momento de la interrupción. Puede ser que el control se
transfiera a otro programa pendiente con mayor prioridad. Y por último, cuando
una prioridad más alta, se reanudará el programa de usuario que fue
interrumpido.

20
PRACTICAS PROFESIONALES INFORMATICA IV

III.- EL CONCEPTO DE PROCESO


Del latín procesus o procedere, proceso es el conjunto de fases sucesivas de un
fenómeno en un lapso de tiempo. Es la marcha hacia un fin determinado.

En el plano jurídico es la serie de actos encaminados a obtener un fin jurídico. Ej.:


proceso legislativo. Y en el plano procesal, es el ordenamiento progresivo de
actos relacionados entre sí y regulados por la Jurisdicción, para obtener una
Sentencia. Resuelve las pretensiones que las partes someten a consideración del
Estado por medio del Derecho de Acción.

De otro lado, procedimiento es la forma como se desarrollan las etapas de un


proceso. Es la serie de pasos en los que se surte el proceso. El expediente es la
historia del proceso. El diario material del mismo. Se consignan en orden riguroso
las actuaciones de las partes y del funcionario. Debe incluir: Demanda, reparto,
conciliación, peritazgos, etc, En orden cronológico, numérico y sucesivo. Se
numera en folios (hojas). Se agrupa en "cuadernos": incidentes, recursos,
medidas cautelares, etc

Litigio es el conflicto de intereses jurídicos entre sujetos (No los conflictos


unipersonales, que no interesan al derecho procesal). Puede haber litigio sin
proceso. El litigio no siempre llega a proceso por varias razones:

- El afectado renuncia a su derecho


- No acude a la Jurisdicción para su protección
- Concilia con la contraparte

Puede haber proceso sin litigio, porque se lleva la diferencia de común acuerdo.
Ejemplo: divorcio y procesos de jurisdicción voluntaria, en donde no hay litigio.

Los fines del proceso son varios: defienden un interés común que afecta a toda la
comunidad y su fin es la actuación de la Ley. Es aplicar la norma sustancial al
caso concreto.

El objeto del proceso es la relación jurídica o los hechos a los cuales debe
aplicarse una norma para decidir sus efectos en derecho. En el plano penal,
consiste en la investigación de conductas punibles y la responsabilidad de las
personas sindicadas.

En el aspecto ético, que va muy de la mano con el proceso penal por la gravedad
de los actos allí evaluados, investiga si hubo o no violación de norma ética.
Determina autores materiales, intelectuales, cómplices, circunstancias y
responsabilidades respectivas. Protege el orden jurídico y así la paz y armonía
comunitarias al castigar a quien quebrante la confianza social.

Derecho de acción es el derecho subjetivo que tienen las personas para movilizar
el aparato jurisdiccional del Estado. Sus elementos son los denominados sujetos.
El sujeto activo es cualquier persona natural por el solo acto de voluntad al
plantear el comienzo del proceso o de oficio, en caso de tratarse de autoridades
legítimamente investidas de ciertos poderes. El sujeto pasivo en el campo penal

21
PRACTI CAS PROFESIONALES INFORMATICA IV

es el Estado, representado por la rama jurisdiccional. En el plano ético es la


sociedad, representada por sus profesionales con categoría de magistrados. El
objeto es la decisión jurídica denominada sentencia. La causa o fin, como se ha
mencionado, es proteger el interés publico.

Derecho de contradicción es el derecho que tiene el demandado de formular


peticiones al Estado para defender sus intereses y contrarrestar las peticiones del
demandante. Es parte del Derecho de Acción y pertenece a toda persona natural,
jurídica o patrimonios autónomos por el hecho de ser demandado, imputado o
sindicado. Acción y Contradicción tienen la misma fuerza y tienden a conservar la
paz y la justicia social. Encuentra su fundamento en el Artículo 29 de la
Constitución Política de 1991, que dice:

"…El debido proceso se aplicará a toda clase de actuaciones judiciales y


administrativas. Nadie puede ser juzgado sino conforme a leyes preexistentes al
acto que se le imputa, ante juez o tribunal competente y con observancia de la
plenitud de las formas propias de cada juicio…"

Es la posibilidad de ejercer el derecho de defensa en igualdad de condiciones.


Satisface el interés público de la Justicia y tutela el derecho objetivo al impedir la
justicia por propia manos. Mediante el derecho de contradicción, el denunciado
busca ser oído y tener oportunidades de defensa para obtener sentencia que
resuelva legalmente el litigio

Las formas de ejercer el derecho de contradicción son varias:

a- PASIVA. El demandado no hace nada ante la demanda. No la contesta, ni


designa apoderado, ni contesta la demanda. En penal se da cuando el sindicado
huye

b- RELATIVAMENTE PASIVA. Cuando contesta la demanda pero no ataca las


pretensiones, ateniéndose a lo que se pruebe en el proceso. No se plantea
defensa ni se aportan pruebas.

c- ACEPTACIÓN DE PRETENSIONES. Es la confesión sin alegar atenuantes

d- PROPONIENDO IMPEDIMENTOS PROCESALES. Tratar de evitar que se


surta el proceso. No atacan la pretensión sino el proceso mismo. Estos
impedimentos pueden ser definitivos, es decir los que una vez declarados
terminan el proceso de manera anormal.

e- ACTIVA DE DEFENSA. Cuando el demandado ataca y prueba lo contrario a lo


que propone en la demanda

22
PRACTI CAS PROFESIONALES INFORMATICA IV

III.3.- CONCEPTO DE PROCESO, CONCURRENCIA Y SECUENCIABILIDAD

La concurrencia comprende un gran número de cuestiones de diseño, incluyendo


la comunicación entre procesos, comparición y competencia por los recursos,
sincronización de la ejecución de varios procesos y asignación del tiempo de
procesador a los procesos y es fundamental para que existan diseños como
Multiprogramación, Multiproceso y Proceso distribuido

Los procesos son concurrentes si existen simultáneamente. Cuando dos o más


procesos llegan al mismo tiempo a ejecutarse, se dice que se ha presentado una
concurrencia de procesos. Es importante mencionar que para que dos o más
procesos sean concurrentes, es necesario que tengan alguna relación entre ellos
La concurrencia puede presentarse en tres contextos diferentes:

• Varias aplicaciones: La multiprogramación se creó para permitir que el tiempo de


procesador de la máquina fuese compartido dinámicamente entre varios trabajos
o aplicaciones activas.

• Aplicaciones estructuradas: Como ampliación de los principios del diseño


modular y la programación estructurada, algunas aplicaciones pueden
implementarse eficazmente como un conjunto de procesos concurrentes.

• Estructura del sistema operativo: Las mismas ventajas de estructuración son


aplicables a los programadores de sistemas y se ha comprobado que algunos
sistemas operativos están implementados como un conjunto de procesos. Existen
tres modelos de computadora en los que se pueden ejecutar procesos
concurrentes:

• Multiprogramación con un único procesador. El sistema operativo se encarga de


ir repartiendo el tiempo del procesador entre los distintos procesos, intercalando la
ejecución de los mismos para dar así una apariencia de ejecución simultánea.

• Multiprocesador. Es una maquina formada por un conjunto de procesadores que


comparten memoria principal. En este tipo de arquitecturas, los procesos
concurrentes no sólo pueden intercalar su ejecución sino también superponerla.

• Multicomputadora. Es una maquina de memoria distribuida, que está formada


por una serie de computadoras. En este tipo de arquitecturas también es posible
la ejecución simultánea de los procesos sobre los diferentes procesadores. En
general, la concurrencia será aparente siempre que el número de procesos sea
mayor que el de procesadores disponibles, es decir, cuando haya más de un
proceso por procesador. La concurrencia será real cuando haya un proceso por

23
PRACTI CAS PROFESIONALES INFORMATICA IV

procesador. Aunque puede parecer que la intercalación y la superposición de la


ejecución de procesos presentan formas de ejecución distintas, se verá que
ambas pueden contemplase como ejemplos de procesos concurrentes Existen
diversas razones que motivan la ejecución de procesos concurrentes en un
sistema:

• Facilita la programación de aplicaciones al permitir que éstas se estructuren


como un conjunto de procesos que cooperan entre sí para alcanzar un objetivo
común.

• Acelera los cálculos. Si se quiere que una tarea se ejecute con mayor rapidez, lo
que se puede hacer es dividirla en procesos, cada uno de los cuales se ejecuta en
paralelo con los demás.

• Posibilita el uso interactivo a múltiples usuarios que trabajan de forma


simultánea.

• Permite un mejor aprovechamiento de los recursos, en especial de la CPU, ya


que pueden aprovechar las fases de entrada-salida de unos procesos para
realizar las fases de procesamiento de otros. Así como existen las razones que
motivan la ejecución de procesos concurrentes, también existen sus contras: •
Inanición e interrupción de procesos

• Ocurrencia de bloqueos

• Que dos o mas procesos requieran el mismo recurso (No apropiativo)

Tipos de procesos concurrentes.

Los procesos que ejecutan de forma concurrente en un sistema se pueden


clasificar como:

Proceso independiente: Es aquel que ejecuta sin requerir la ayuda o cooperación


de otros procesos. Un claro ejemplo de procesos independientes son los
diferentes shells que se ejecutan de forma simultánea en un sistema.

Procesos son cooperantes: Son aquellos que están diseñados para trabajar
conjuntamente en alguna actividad, para lo que deben ser capaces de
comunicarse e interactuar entre ellos. En ambos tipos de procesos
(independientes y cooperantes), puede producirse una serie de interacciones
entre ellos y pueden ser de dos tipos:

24
PRACTI CAS PROFESIONALES INFORMATICA IV

• Interacciones motivadas porque los procesos comparten o compiten por el


acceso a recursos físicos o lógicos. Por ejemplo, dos procesos independientes
compiten por el acceso a disco o para modificar una base de datos.

• Interacción motivada porque los procesos se comunican y sincronizan entre sí


para alcanzar un objetivo común, Por ejemplo, un compilador que tiene varios
procesos que trabajan conjuntamente para obtener un solo archivo de salida.

Elementos a gestionar y diseñar a causa de la concurrencia. Se pueden enumerar


los siguientes:

1. El sistema operativo debe ser capaz de seguir la pista de los distintos procesos
activos. Esto lo hace por medio de PBC‟s (Bloque de Control de Procesos)

2. El sistema operativo debe asignar y quitar los distintos recursos a cada proceso
activo. Entre estos recursos se incluyen:

• Tiempo de procesador: Es función de la planificación.

• Memoria: La mayoría de los sistemas operativos emplean esquemas de


memoria virtual.

• Archivos:

• Dispositivos de E/S:

3. El sistema operativo debe proteger los datos y los recursos físicos de cada
proceso contra injerencias no intencionadas de otros procesos.

4. Los resultados de un proceso deben ser independientes de la velocidad relativa


a la que se realiza la ejecución con respecto a otros procesos concurrentes.

Cuando dos o mas procesos llegan al mismo tiempo a ejecutarse, se dice que se
ha presentado una concurrencia de procesos. Es importante mencionar que para
que dos o mas procesos sean concurrentes , es necesario que tengan alguna
relaciones entre ellos como puede ser la cooperaciion para un determinado
trabajo o el uso de informacion y recursos compartidos, por ejemplo: en un
sistema de un procesador , la multiprogramaciion es una condicion necesaria pero
no suficiente para que exista concurrencia, ya que los procesos pueden
ejecutarse de forma totalmente independiente.

25
PRACTI CAS PROFESIONALES INFORMATICA IV

III.2.- REGIONES CRÍTICAS, EXCLUSIÓN MUTUA, SINCRONIZACIÓN

El término abstracto de refAbsRegionesCriticasregiones críticas se puede ver


realizado directamente en un lenguaje de programación. Así parte de la
responsabilidad se ha trasladado desde el programador al compilador.

De algúna manera se identifica que algún bloque de código se debe tratar como
región crítica (así funciona Java con sus bloques sincronizados):

V is shared variable
region V do
code of critical region

El compilador asegura que la variable V tenga un semáforo adjunto que se usa


para controlar el acceso exclusivo de un solo proceso a la región crítica. De este
modo no hace falta que el programador use directamente las operaciones wait() y
signal() para controlar el acceso con el posible error de olvidarse de algún signal().

Adicionalmente es posible que dentro de la región crítica se llame a otra parte del
programa (por ejemplo, un procedimiento o función) que a su vez contenga una
región crítica. Si esta región está controlada por la misma variable V el proceso
obtiene automáticamente también acceso a dicha región.

Los regiones críticas no son lo mismo que los semáforos, porque no se tiene
acceso directo a las operaciones init(), wait() y signal().

26
PRACTI CAS PROFESIONALES INFORMATICA IV

Exclusión mutua (informática).

Los algoritmos de exclusión mutua (comúnmente abreviada como mutex por


mutual exclusion) se usan en programación concurrente para evitar que
fragmentos de código conocidos como secciones críticas accedan al mismo
tiempo a recursos que no deben ser compartidos.

La mayor parte de estos recursos son las señales, contadores, colas y otros datos
que se emplean en la comunicación entre el código que se ejecuta cuando se da
servicio a una interrupción y el código que se ejecuta el resto del tiempo. Se trata
de un problema de vital importancia porque, si no se toman las precauciones
debidas, una interrupción puede ocurrir entre dos instrucciones cualesquiera del
código normal y esto puede provocar graves fallos.

La técnica que se emplea por lo común para conseguir la exclusión mutua es


inhabilitar las interrupciones durante el conjunto de instrucciones más pequeño
que impedirá la corrupción de la estructura compartida (la sección crítica). Esto
impide que el código de la interrupción se ejecute en mitad de la sección crítica.

En un sistema multiprocesador de memoria compartida, se usa la operación


indivisible test-and-set sobre una bandera, para esperar hasta que el otro
procesador la despeje. La operación test-and-set realiza ambas operaciones sin
liberar el bus de memoria a otro procesador. Así, cuando el código deja la sección
crítica, se despeja la bandera. Esto se conoce como spin lock o espera activa.

Algunos sistemas tienen instrucciones multioperación indivisibles similares a las


anteriormente descritas para manipular las listas enlazadas que se utilizan para
las colas de eventos y otras estructuras de datos que los sistemas operativos
usan comúnmente.

La mayoría de los métodos de exclusión mutua clásicos intentan reducir la


latencia y espera activa mediante las colas y cambios de contexto. Algunos
investigadores afirman que las pruebas indican que estos algoritmos especiales
pierden más tiempo del que ahorran.

La mayor parte de la investigación actual en este campo, pretende eliminar los


efectos anteriormente descritos. Si bien no hay un esquema perfecto conocido,
hay un interesante esquema no clásico de envío de mensajes entre fragmentos
de código que, aunque permite inversiones de prioridad y produce una mayor
latencia, impide los interbloqueos.

Algunos ejemplos de algoritmos clásicos de exclusión mutua son:

 El algoritmo de Dekker.
 El algoritmo de Peterson.

27
PRACTI CAS PROFESIONALES INFORMATICA IV

La sincronización

La sincronización se utiliza para regresar a un estado anterior conocido en caso


de error durante la sesión. Aunque parezca innecesario (la capa de transporte
sólo recupera errores de comunicación) ocurren muchos errores a nivel de
sesiones entre usuarios (capas superiores).

Si los datos se envían a un host remoto y éste imprime la información, un fallo en


la impresión puede hacer que se pierda un mensaje ya confirmado al emisor. Si
dividimos el mensaje en páginas (puntos de sincronización) podemos confirmarlas
y en su caso retransmitirlas individualmente resincronización.

Los usuarios pueden insertar puntos de sincronización (PdS) durante una sesión.
Cada PdS lleva un número identificativo. Cuando un extremo pide un PdS el otro
recibe una indicación. Igualmente cuando un extremo pide resincronizar el otro
recibe una indicación.

En ningún caso se recupera el error a nivel de sesión. A este nivel se dan las
primitivas para poder resincronizar pero ésta se debe llevar a cabo en niveles
superiores. Existen dos tipos de puntos de sincronización. Cada tipo de punto
tiene su conjunto de primitivas asociadas.
Dos puntos de sincronización mayor delimitan una UNIDAD DE DIÁLOGO.

28
PRACTI CAS PROFESIONALES INFORMATICA IV

IV.- INTERBLOQUEO DEAD LOCK


El interbloqueo puede definirse formalmente como sigue: Un conjunto de
procesos está en interbloqueo si cada proceso del conjunto está esperando un
evento que sólo otro proceso del conjunto puede causar. Puesto que todos los
procesos están esperando, ninguno de ellos puede causar ninguno de los eventos
que podrían despertar a cualquiera de los demás miembros del conjunto, y todos
los procesos continúan esperando indefinidamente.

Tipos de recursos

Se pueden distinguir dos categorías generales de recursos: reutilizables y


consumibles.

Reutilizables

Un recurso reutilizable es aquél que puede ser usado con seguridad por un
proceso y no se agota con el uso. Los procesos obtienen unidades de recursos
que liberan posteriormente para que otros procesos las reutilicen. Como ejemplos
de recursos reutilizables se tienen los procesadores, canales de E/S, memoria
principal y secundaria, dispositivos y estructuras de datos tales como archivos,
bases de datos y semáforos.

Consumibles

Un recurso consumible es aquél que puede ser creado (producido) y destruido


(consumido). Normalmente, no hay límite en el número de recursos consumibles
de un tipo en particular. Un proceso productor que no está bloqueado puede
liberar cualquier número de recursos consumibles. Cuando un proceso adquiere
un recurso, éste deja de existir. Como ejemplos de recursos consumibles están
las interrupciones, señales, mensajes, e información en buffers de E/S.

Condiciones para el interbloqueo?

Coffman (1971) demostró que deben cumplirse cuatro condiciones para que haya
un bloqueo mutuo:

1. Condición de exclusión mutua. Cada recurso está asignado únicamente a un


solo proceso o está disponible.

29
PRACTICAS PROFESIONALES INFORMATICA IV

2. Condición de retener y esperar.Los procesos que actualmente tienen recursos


que les fueron otorgados previamente
pueden solicitar nuevos recursos.
3. Condición de no expropiación. No es posible quitarle por la fuerza a un proceso
los recursos que le fueron
otorgados previamente. El proceso que los tiene debe liberarlos explícitamente.
4. Condición de espera circular. Debe haber una cadena circular de dos o más
procesos, cada uno de los cuales está
esperando un recurso retenido por el siguiente miembro de la cadena.

Deben estar presentes estas cuatro condiciones para que ocurra un bloqueo
mutuo. Si una o más de estas condiciones está ausente, no puede haber bloqueo
mutuo.
IV.1.- ANÁLISIS, PREVENCIÓN

La estrategia de prevención del interbloqueo consiste, a grandes rasgos, en


diseñar un sistema de manera que esté excluida, a priori, la posibilidad de
interbloqueo. Los métodos para prevenir el interbloqueo son de dos tipos. Los
métodos indirectos consisten en impedir la aparición de alguna de las tres
condiciones necesarias, antes mencionadas (condiciones 1 a 3). Los métodos
directos consisten en evitar la aparición del círculo vicioso de espera (condición
4). Se examinarán a continuación las técnicas relacionadas con cada una de las
cuatro condiciones.

Exclusión Mutua

En general, la primera de las cuatro condiciones no puede anularse. Si el acceso


a un recurso necesita exclusión mutua, el sistema operativo debe soportar la
exclusión mutua. Algunos recursos, como los archivos, pueden permitir varios
accesos para lectura, pero sólo accesos exclusivos para escritura. Incluso en este
caso, se puede producir interbloqueo si más de un proceso necesita permiso de
escritura.

30
PRACTICAS PROFESIONALES INFORMATICA IV

Análisis

El interbloqueo puede definirse formalmente como sigue: Un conjunto de


procesos está en interbloqueo si cada proceso del conjunto está esperando un
evento que sólo otro proceso del conjunto puede causar. Puesto que todos los
procesos están esperando, ninguno de ellos puede causar ninguno de los eventos
que podrían despertar a cualquiera de los demás miembros del conjunto, y todos
los procesos continúan esperando indefinidamente.

Tipos de recursos

Se pueden distinguir dos categorías generales de recursos: reutilizables y


consumibles.

Reutilizables

Un recurso reutilizable es aquél que puede ser usado con seguridad por un
proceso y no se agota con el uso. Los procesos obtienen unidades de recursos
que liberan posteriormente para que otros procesos las reutilicen. Como ejemplos
de recursos reutilizables se tienen los procesadores, canales de E/S, memoria
principal y secundaria, dispositivos y estructuras de datos tales como archivos,
bases de datos y semáforos.

Consumibles

Un recurso consumible es aquél que puede ser creado (producido) y destruido


(consumido). Normalmente, no hay límite en el número de recursos consumibles
de un tipo en particular. Un proceso productor que no está bloqueado puede
liberar cualquier número de recursos consumibles. Cuando un proceso adquiere
un recurso, éste deja de existir. Como ejemplos de recursos consumibles están
las interrupciones, señales, mensajes, e información en buffers de E/S.

Condiciones para el interbloqueo

Coffman (1971) demostró que deben cumplirse cuatro condiciones para que haya
un bloqueo mutuo:

1. Condición de exclusión mutua. Cada recurso está asignado únicamente a un


solo proceso o está disponible.
2. Condición de retener y esperar.Los procesos que actualmente tienen
recursos que les fueron otorgados previamente
pueden solicitar nuevos recursos.
3. Condición de no expropiación. No es posible quitarle por la fuerza a un
proceso los recursos que le fueron
otorgados previamente. El proceso que los tiene debe liberarlos
explícitamente.
4. Condición de espera circular. Debe haber una cadena circular de dos o más
procesos, cada uno de los cuales está
esperando un recurso retenido por el siguiente miembro de la cadena.

31
PRACTICAS PROFESIONALES INFORMATICA IV

IV.2.- DETECCIÓN Y RECUPERACIÓN

Necesitamos saber qué recursos están asignados y también necesitamos


mantener información sobre todas las solicitudes. Hay una serie de algoritmos
para la detección de interbloqueos:

- Primer tipo: se basa en la detección de ciclos o nudos en el grafo.

- Segundo tipo. Usará una matriz de asignados, un vector disponibles y una matriz
de solicitudes.

4.2.2. Recuperación del interbloqueo:

Para recuperar un sistema interbloqueado necesitamos conocer los procesos que


producen el interbloqueo y después realizaremos una de las siguientes acciones:

- Reiniciar un proceso (abandonar). Se pierde todo lo que el proceso haya


ejecutado. Si persiste el interbloqueo abandonamos más procesos. Abandonar y
comprobar el estado del sistema.

-Reiniciar todos los procesos. Devolvemos los procesos a un estado anterior en el


cual no haya interbloqueo. Para volver atrás tengo que haberlo guardado en
memoria.

- Expropiar o apropiar recursos. Vamos a expropiar recursos a procesos hasta


que deje de existir el interbloqueo. Hay recursos fácilmente expropiables o no
fácilmente expropiables.

Interbloqueo

Mecanismos para Evitar el Interbloqueo

En vez de restringir la forma o el orden en que los procesos deben solicitar


recursos, antes chequemos que sea seguro otorgar dichos recursos. Es decir, si
se presentan las condiciones suficientes para un interbloqueo, todavía es posible
evitarlos por medio de una restricción en la asignación de los procesos para tratar
de buscar estados seguros. Estas restricciones aseguran que al menos una de las
condiciones necesarias para el interbloqueo no pueda presentarse y por lo tanto,
tampoco el interbloqueo.

Otro método para evitar los interbloqueo consiste en requerir información


adicional sobre como se solicitará los recursos. Esta información puede ser:

o La necesidad máxima de recursos de los procesos que se esta


ejecutando
o La asignación actual de recursos a procesos
o La cantidad actual de instancias libres de cada recurso

32
PRACTICAS PROFESIONALES INFORMATICA IV

En base a la información que ya se tiene de la forma y del orden en que se


solicitarán los recursos, se puede tomar la desición de ejecutar el proceso o si
debe esperar. Por lo tanto, la evitación del interbloqueo solo anticipa la posibilidad
de interbloqueo y asegura que no exista nunca tal posibilidad.

Estados seguros e inseguros

Un estado de asignación de recursos se considera seguro si en él no hay


posibilidad de interbloqueo. Para que un estado sea seguro, es necesario que los
procesos formen una secuencia segura. Una secuencia segura es una ordenación
de los procesos de modo que los recursos que aún puede pedir cualquier proceso
puede ser otorgados con los recursos libres más los recursos retenidos por los
demás procesos. En base a ello, cuando un proceso realice una solicitud de
recursos, el sistema se los concederá sólo en el caso de que la solicitud
mantenga al sistema en un estado seguro. Un estado inseguro es aquel en el que
puede presentarse un interbloqueo.

Algoritmo del Banquero ( Dijkstra )

El nombre que se le asigna a este algoritmo se debe a un banquero que otorga


crédito a sus clientes y recibe pagos a partir de una fuente de capital.
En teoría funciona muy bien este algoritmo, pero en la práctica, rara vez se una,
ya que es muy difícil para los procesos saber de antemano sus necesidades
máximas de cada recurso.
Este algoritmo consiste en permitir la asignación de recursos a los usuarios
solamente cuando la asignación conduzca a estados seguros y no a estados
inseguros.

33
PRACTICAS PROFESIONALES INFORMATICA IV

IV.3.- MECANISMOS PARA EVITARLO

La práctica del fraude electoral ocasiona reacciones enérgicas, desde


manifestaciones que denuncian su simple sospecha, como en los comicios del
estado de Florida en la primera elección de George W. Bush contra Al Gore,
procesos penales e investigaciones como en Perú, después de que el presidente
Para evitar el fraude electoral, las sociedades que lo han sufrido de manera
sistemática, elaboran complicadas leyes destinadas a impedirlo. En este orden de
ideas se han creado:

 Urnas transparentes para ver que no contengan votos previos


 Padrones y listados de electores, esto ha dado problemas en países como
México, que aprovechan el listado (con datos personales del ciudadano)
para fines de convencimiento electoral
 Credenciales electorales con hologramas y fotografía del votante registrado
 Manchón con tinta indeleble en un de los dedos del elector que ya votó
(para que no vuelva a hacerlo), este ha sido uno de los mejores metodos
ya que impide en efecto que el elector vote más de una vez, aunque se ha
dado algunos casos de tinta defectuosa
 Selección aleatoria, de entre los ciudadanos, de los funcionarios de la
casilla, esta medida sin embargo tiene sus defectos, al no ser obligatoria,
los ciudadanos no siempre aceptan serlo, por lo que se tiene que volver a
sortear hasta que haya uno dispuesto a serlo, eso lleva a la posibilidad de
que los funcionarios de casilla puedan ser los mismos de siempre, ya que
ellos fueron los únicos dispuestos a ser funcionarios
 Prohibición a los partidos de que realicen actos de proselitismo el día de
las elecciones
 Control y auditoría del costo de las campañas políticas, esto no se ha
podido extender a las precampañas
 Financiamiento público para partidos (para evitar "compromisos" del
candidato hacia patrocinadores privados), sin embargo esta medida lleva a
la creación no de uno , sino de numerosos partidos de estado, además de
corrupción de organizaciones que se registran solo para apropiarse de las
sumas que da el gobierno, y aun sin embargo la acción de capital de
patrocinadores privados no ha sido prohibida
 Revisión y mejora de las formas para contar las papeletas.
 Una forma efectiva de evitar el carrusel, que consiste en que un elector,
previamente instruido, no deposita una de las boletas electorales, de una
de las elecciones, y la lleva a un lugar preestablecido, en el que se cruza
por uno de los candidatos y otro elector la lleva a la casilla y la deposita,
llevando su propia boleta al mismo lugar, para continuar el proceso, hasta
que el último no la regresa, por lo que una de las elecciones puede resultar
con menos votos que las otras, en el caso de que haya más de un puesto
de elección popular en juego. Así, el uso de mamparas translúcidas, no
opacas, podría ser un poderoso inhibidor de este procedimiento de fraude,
pues el elector en el momento de emitir su voto, sería observado, en su
silueta, si se introduce una boleta en sus ripas, que es, en México, un delito
penado con cárcel.

34
PRACTICAS PROFESIONALES INFORMATICA IV

IV.4.- NIVEL DE IMPLANTACIÓN DE ESTRATEGIAS

35
PRACTICAS PROFESIONALES INFORMATICA IV

V. CONTROL DE UN PROCESO Y RECURSOS


2.4.1 Modos de Ejecución

Antes de continuar la discusión sobre la forma en que el sistema


operativo gestiona los procesos, hace falta distinguir entre el modo
de ejecución del procesador que normalmente se asocia con el
sistema operativo y el modo que normalmente se asocia con los
programas de usuario. Ciertas instrucciones máquina pueden
ejecutarse sólo en modo privilegiado. Entre éstas están la lectura o
modificación de registros de control (como la palabra de estado),
instrucciones primitivas de E/S e instrucciones relativas a la gestión
de memoria. Y solamente se puede acceder a ciertas zonas de
memoria en el modo privilegiado. El modo de menor privilegio se
conoce como modo usuario, y el de mayor privilegio como modo de
sistema, supervisor o núcleo.

La razón por la que se usan dos modos debe quedar clara. Es


necesario proteger al sistema operativo y a las estructuras de datos
importantes, tales como los bloques de control de procesos, de las
inferencias de los programas de usuario. En el modo núcleo o
privilegiado, el software tiene control completo del procesador y de
todas las instrucciones, registros y memoria.

Surgen dos preguntas: ¿cómo conoce el procesador en qué modo


va a ejecutar?, ¿cómo se cambia de modo? Para la primera
pregunta, hay un bit en la PSW( palabra de estado ), que indica el
modo de ejecución. El bit se cambia como respuesta a ciertos
sucesos tales como una llamada al sistema y, así, se cambia de
modo.

2.4.2 Cambio de Proceso

A primera vista, la función de cambio de proceso parece sencilla. En


cierto momento, un proceso que se está ejecutando se interrumpe,
el sistema operativo pone a otro proceso en el estado de ejecución y
pasa el control a dicho proceso. Sin embargo, surgen diversas
cuestiones de diseño. En primer lugar, ¿qué sucesos provocan un
cambio de proceso? Otra cuestión es que se debe hacer una
distinción entre cambio de contexto y cambio de proceso. Por último,
¿qué debe hacer el sistema operativo con las diferentes estructuras
de datos bajo su control para llevar a cabo un cambio de proceso?

36
PRACTICAS PROFESIONALES INFORMATICA IV

VI INTRODUCCIÓN A LOS LENGUAJES Y AUTÓMATAS


Introducción

En la Teoría de los lenguajes formales, disciplina perteneciente a la informática,


se describen tres tipos de autómatas que reconocen tipos diferentes de lenguajes:
los autómatas finitos, los autómatas a pila y las máquinas de Turing.

El autómata es la primera máquina con lenguaje, es decir, un calculador lógico


cuyo juego de instrucciones se orienta hacia los sistemas de evolución
secuencial.

La aparición de los ordenadores a mediados de los 50's inauguró el campo de la


lógica programada para el control de procesos industriales. No obstante, aunque
estos ordenadores resolvían los inconvenientes de un Sistema cableado o la
llamada lógica cableada, presentaban nuevos problemas:

 Mala adaptación al entorno industrial.


 Coste elevado de los equipos.
 Necesidad de personal informático para la realización de los
programas.
 Necesidad de personal especializado para el mantenimiento.

Estos problemas se solucionarían con la aparición del autómata programable o


PLC (Controlador Lógico Programable; en inglés Programable Logic Controler).

VI.1 CONJUNTOS FINITOS E INFINITOS

Los conjuntos x={1,2,3}


y={a,b,c,d}
se definen de una manera explícita. los conjuntos que contienen un número finíto
muy largo de miembros o un número infiníto de miembros se definen de manera
implícita. ejemplo: el conjunto de todos los cuadrados perfectos es definido como:
{n | n=m2 para algún número natural m}
el conjunto vacío se representa por 0, y es el conjunto que no tiene miembros, o
sea que 0 = { } una cadena de un conjunto x es una secuencia finíta de
elementos de x. las cadenas son objetos fundamentalesusados en la definición de
lenguajes. el conjunto de elementosde donde las cadenas son producidas son
llamados alfabetosde el lenguaje. un alfabeto consiste de un conjunto finíto de
objetos no divisibles. el alfabeto de un lenguaje se representa por s.

37
PRACTICAS PROFESIONALES INFORMATICA IV

VI.1.1.-ALFABETO

La noción más primitiva es la de símbolo, que es simplemente una representación


distinguible
de cualquier información. Los símbolos pueden ser cualesquiera, como w, 9, #,
etc.,
pero nosotros vamos a utilizar las letras a,b,c, etc. Un símbolo es una entidad
indivisible.
Un alfabeto es un conjunto no-bacillo de símbolos. Así, el alfabeto del idioma
español,
E = { a, b, c, . . ., z}, es solo uno de tantos alfabetos posibles. En general
utilizaremos la
Notación para representar un alfabeto.
Con los símbolos de un alfabeto es posible formar secuencias o cadenas de
caracteres, tales
Como, balas, r, etc. 4 Las cadenas de caracteres son llamadas también palabras.
Un caso particular de cadena es la palabra vacía, ", la cual no tiene ninguna letra.

El alfabeto de un lenguaje natural como el español consiste de las palabras de el


lenguaje. ejemplo: sea ={a,b,c}. las siguientes son cadenas de ese alfabeto:
abc, ccb, cab,aaaabbbccc comúnmente los elementos de un alfabeto se
representan por caracteres únicos como letras (a,b,c) o dígitos (1,2,3). la cadena
que contiene cero elementos es llamada cadena nula o vacía.

VI.1.2.- PROPIEDADES DE STRING (LONGITUD Y CONCATENACIÓN)

A) LONGITUD

La longitud o tamaño de una cadena w es el número de elementos que contiene


la cadena.
ejemplo: la cadena abcdef tiene una longitud de 6. una subcadena u de la cadena
v existe si existen las cadenas x y y de tal forma que v = xuy. esto quiere decir
que u "ocurre dentro de" v. un prefijo de v es una subcadena u en donde x es la
cadena vacía en la descomposición de v. eso quiere decir que v=uy. similarmente,
u es un sufijo de v si v=xu. ejemplo: ab es un prefijo de la cadena abcdef y ef es
un sufijo de la misma cadena.
La longitud de una palabra es la cantidad de letras que contiene, contando las
repeticiones;
se denota por | w | para una palabra w. Por ejemplo, | perro | es 5.
Cuando escribimos varias palabras o caracteres uno a continuación de otro, se
supone que
forman una sola palabra (se concatenan). La notación usada para denotar la
concatenación
de dos cadenas _ y _ es __. Por ejemplo, si w = abra y v = cada, entonces es la
palabra abracadabra.

38
PRACTICAS PROFESIONALES INFORMATICA IV

VI.1.3.-LENGUAJE

Un lenguaje es simplemente un conjunto de palabras. Así, { abracadabra } es un


lenguaje (de una sola palabra), { ali, baba, y, sus, cuarenta, ladrones } es otro, __
es otro, etc. Puesto que las secuencias fueron definidas en la sección de
preliminares. Formalmente, la palabra "casa" es la
secuencia de letras c, a, s, a.
5 La prueba de estas propiedades requiere de una definición formal de las
secuencias de caracteres, lo que nos desviaría demasiado de nuestros temas.
Que los lenguajes son conjuntos, podemos efectuar con ellos todas las
operaciones de los con-juntos(unión, intersección, diferencia). Definiremos
además la operación de concatenación de lenguajes, escrita como L1 L2, como
una extensión de la concatenación de palabras:
L1 L2 = { w | w = xy, x 2 L1, y 2 L2 } .
Por ejemplo, dados los lenguajes L1 = { cama} y L2 = { tasa}, la concatenación
L1L2 sería { canta, casa, manta, masa } . Como se ve en este ejemplo, para
calcular la concatenación de dos lenguajes hay que concatenar cada palabra del
primero de ellos con cada una del segundo.
Una operación más complicada es la llamada "estrella de Kleene" o "cerradura de
Kleene", en honor al matemático norteamericano S. C. Kleene, quien la propuso.
Definición.- Si L es un lenguaje, L_, llamado "cerradura de Kleene" de L, es el
más
pequeño conjunto que contiene: La palabra vacía, "El conjunto L
Todas las palabras formadas por la concatenación de miembros de L_
Por ejemplo, si L = { abra, cadabra } , L_ = { ", abra, abra, abra, abracadabra,
cadabra, abra,
. . . }8
Obsérvese que la definición de la estrella de Kleene es recursiva, pues en la
tercera regla estamos suponiendo que ya hay palabras en L_, las cuales
concatenamos para producir una nueva palabra. Esta noción se puede
conceptuar fácilmente de la siguiente forma: Supongamos que inicialmente L_
contiene sólo la palabra vacía y los elementos de L. Entonces de ahí tomamos
dos elementos cualesquiera, que no necesitan ser distintos, y los concatenamos,
para producir una palabra, la cual añadimos a L_ si no estaba ya. Continuando
indefinida-mente
con esta acción, se irían obteniendo todos los elementos de L_. 9
Esta definición es congruente con la notación que se utilizó para definir el
conjunto de todas las palabras sobre un alfabeto, pues de hecho es la cerradura
de Kleene del alfabeto, tomando los símbolos de éste como palabras de una letra.

39
PRACTICAS PROFESIONALES INFORMATICA IV

VI.1.3.- LENGUAJE Y SU REPRESENTACION FINITA.

Un lenguaje consiste de un grupo de cadenas de un alfabeto. usualmente ciertas


restricciones se aplican a las cadenas de el lenguaje. por ejemplo el lenguaje
español consiste de todas las cadenas de palabras que nosotros llamamos
oraciones. no todas las combinaciones de palabras forman oraciones. de alli que
un lenguaje consiste de un subconjunto de el conjunto de todas las posibles
cadenas que se pueden formar de el alfabeto.
ejemplo: el lenguaje l de cadenas de el alfabeto {a,b} en donde cada cadena
comienza con una a y tiene longitud par. las cadenas aa, ab, aaaa, abbb, abab,
abbbaaba forman parte de ese lenguaje.
El lenguaje anterior se puede definir recursivamente como base: aa, ab son
miembros de l. paso recursivo: si u es miembro de l, entonces uaa, uab, uba, ubb
son miembros de l. cierre (closure): una cadena u es miembro de l solo si puede
ser obtenida de los elementos base por un número finito de aplicaciones del paso
recursivo.
ejemplo: el lenguaje l consiste de cadenas del alfabeto {a,b} en donde cada
ocurrencia de b es inmediatamente precedida por una a. por ejemplo, l, a, abaab
estan en l y bb, bab, abb
no estan en l. base: l es miembro de l. paso recursivo: si u es miembro de l,
entoncesua, uab son miembros de l. cierre (closure): una cadena u es miembro de
l solo si puede ser obtenida de los elementos base por un número finito de
aplicaciones del paso recursivo.
definiciones recursivas como la anterior son una herramienta para definir las
cadenas de un lenguaje. sin embargo esta técnica no es suficiente para definir
lenguajes complejos como los lenguajes de programación.
Otra técnica para construír lenguajes es usar operaciones de conjuntos (sets)
para construír, desde conjuntos mas simples conjuntos complejos de cadenas.
Por ejemplo la concatenación de los lenguajes x y y, denotada xy, es el lenguaje
xy = {uv | u es miembro de x y v es miembro de y}
la concatenación de x consigo mismo n veces es denotada como xn. x0 es
definida como {l}. ejemplo: sea x = {a,b,c} y y = {abb, ba}. Entonces xy =
{aabb,babb,cabb,aba,bba,cba}
x0 = {l} x1 = x = {a,b,c} x2 = xx = {aa,ab,ac,ba,bb,bc,ca,cb,cc} x3= x
2x={aaa,aab,aac,aba,abb,abc,aca,acb,acc,baa,bab,bac,bba,bbb,bbc,bca,bcb,bcc,
caa,cab,cac,cba,cbb,cbc,cca,ccb,ccc}
Una operación importante es el "kleene star", denotada para un conjunto x como
x*, que no es otra cosa que la concatenación de del mismo lenguaje. lo anterior
también es representado como vx* = u xi i=0 contiene todos loas cadenas
construidas desde x incluyendo la cadena nula. si no se incluye la cadena vacía
entonces tenemos a vx+ = u xi i=1el conjunto de cadenas no nulas construidas
desde x. ejemplo: el lenguaje l = {a,b}*{bb}{a,b}* consiste de las cadenas del
alfabeto {a,b} que contiene la subcadena bb. la concatenación de el conjunto {bb}
asegura la presencia de bb en cualquier cadena en l. los conjuntos {a,b}* permiten
cualquier número de a's y b's, en cualquier orden, y que preceden y siguen la
ocurrencia de bb. las cadenas bb, abba, ababbbabab, bbaaaa, aaaabb son
ejemplos de cadenas de el lenguaje l.

40
PRACTICAS PROFESIONALES INFORMATICA IV

VII Gramática
Gramática es el estudio de las reglas y principios que regulan el uso del lenguaje
a nivel intraoracional (dentro de la oración). También se denomina así al conjunto
de reglas y principios que gobiernan el uso de un lenguaje determinado, por lo
que puede decirse que cada lenguaje tiene su propia gramática.

La gramática es parte del estudio general del lenguaje denominado lingüística.


Clásicamente el estudio de la lengua se divide en cuatro niveles:

 Nivel fonético-fonológico.
 Nivel sintáctico-morfológico.
 Nivel léxico-semántico.
 Nivel pragmático.

A veces se restringe el uso del término gramática a las reglas y principios que
definen el segundo de estos niveles. Sin embargo, la separación de los niveles no
es totalmente nítida porque ciertas reglas gramaticales se realizan en el nivel
fonético-fonológico e igualmente existen parámetros o criterios semánticos que
sirven para decidir cuando una determinada construcción es agramatical.

VII.2.- INTRODUCCIÓN Y ESTRUCTURAS DE LAS GRAMÁTICAS

Planteamiento del problema

Suponemos que queremos imponer restricciones contextuales a un lenguaje.

Queremos definir el lenguaje de las expresiones naturales-booleanas

Las secuencias de la forma:

t * t + f ; 3 * 41 + 5 , serán secuencias contextualmente correctas

3 * 44 + t ; t * f + 5 , serán secuencias contextualmente incorrectas.

41
PRACTICAS PROFESIONALES INFORMATICA IV

ESTRUCTURA PROFUNDA Y ESTRUCTURA SUPERFICIAL

Estructura profunda en la teoría estándar

En la teoría estándar, la estructura profunda se deriva de las reglas presentes en


el subcomponente base del componente sintáctico. Se entiende en este modelo
que la estructura profunda es una oración activa, declarativa, positiva y canónica
a partir de la cual se realiza la interpretación semántica.

La estructura profunda se relaciona con la Estructura superficial a través del


llamado subcomponente transformacional del componente sintáctico. Es el tipo de
relación que, por ejemplo, debe esperarse entre una oración activa y su forma
pasiva.

Estructura profunda en rección y ligamiento

En Rección y ligamiento, la estructura profunda es rebautizada como Estructura-


P, dado que el término “profunda” acarreaba matices ajenos a las ideas de la
teoría.

La estructura-P no se deriva de un conjunto de reglas, sino que es resultado de la


proyección de determinadas unidades léxicas en el componente computacional.
Esta proyección se da a través de la Teoría de la X‟ y de la Teoría-θ (o teoría
temática).

A diferencia del modelo estándar, rección y ligamiento asigna interpretación


semántica sobre la estructura-S (la estructura superficial renombrada), dejando
como única función para la Estructura-P el ser la representación sobre la que se
realizan los desplazamientos de constituyentes.

42
PRACTICAS PROFESIONALES INFORMATICA IV

VII.2.- CLASIFICAION DE LAS GRAMATICAS

1. SEA ∑={a, b } V={S, M}

P: S → asa
S → Ma
aS → b

Es una gramática tipo 0 pues la longitud del extremo izquierdo en la ultima regla
es 2 y del derecho es 1.

2. SEA ∑= {a, b} V= {S, M, N}


P: S → Ma
M → aM
M→b
M→ bN
N→a

Es una gramática tipo 2, pues el elemento izquierdo de toda regla de producción


es una variable. No es tipo 3 por que en la regla S → Ma, M no esta al final.

3. SEA ∑= {a, b, c} V= {S}


P: S → aSa
aS → bc

Es una gramática tipo 1 pues la longitud de los términos a la izquierda es menor ó


igual a la derecha. Pero no es de tipo 2 pues aS → bc la expresión de la
izquierdazo es variable.

43
PRACTICAS PROFESIONALES INFORMATICA IV

VII.2.1.- CONTEXTO SENSITIVO, SENSIBLE AL CONTEXTO, LIBRE DE


CONTEXTO

Una gramática sensible al contexto es una gramática formal G = (N, Σ, P, S) tal


que todas las producciones P son de la forma:

αAβ → αγβ

con A en N y α y β en (N U Σ)* y γ en (N U Σ)+, con la posibilidad de la regla


lambda

S→λ

con λ, la cadena vacía.

Se lo llama sensible al contexto porque α y β determinan la forma que debe tener


una cadena que puede ser reemplazada por alguna de las producciones. Una
lenguaje formal que puede ser descripto para una gramática sensible al contexto
se llama lenguaje sensible al contexto

Definición alternativa

Otra forma de definir las gramáticas sensibles al contexto, es aquella gramática


formal con la única restricción que todas las producciones α -> β en P cumplan
que |α| ≤ |β| donde |α| es la longitud de α. Se las llama de longitud no
decreciente.

Se demuestra que las gramáticas sensibles al contexto, y las de longitud creciente


son equivalentes en el sentido que generan los mismos lenguajes, a través de
una doble contención, es decir, toda gramática libre de contexto está contenida en
las de longitud creciente y viceversa.

Ejemplo [editar]
S → abc | aSBc
cB → Bc
bB → bb

Esta gramática genera este lenguaje: , que no es libre de


contexto. Esto lo sabemos gracias al lema del bombeo. También existe una
gramática sensible al contexto para , pero es mucho más
compleja que la anterior

Obtenido de
"http://es.wikipedia.org/wiki/Gram%C3%A1ticas_sensibles_al_contexto"

44
PRACTICAS PROFESIONALES INFORMATICA IV

Gramática libre de contexto

Una gramática libre de contexto en lingüística e informática es una gramática


formal en la que cada regla de producción es de la forma:

V→w

Donde V es un símbolo no terminal y w es una cadena de terminales y/o no


terminales. El término libre de contexto se refiere al hecho de que el no terminal V
puede siempre ser sustituido por w sin tener en cuenta el contexto en el que
ocurra. Un lenguaje formal es libre de contexto si hay una gramática libre de
contexto que lo genera.

Las gramáticas libres de contexto permiten describir la mayoría de los lenguajes


de programación, de hecho, la síntaxis de la mayoría de lenguajes de
programación está definida mediante gramáticas libres de contexto. Por otro lado,
estas gramáticas son suficientemente simples como para permitir el diseño de
eficientes algoritmos de análisis sintáctico que, para una cadena de caracteres
dada determinen como puede ser generada desde la gramática. Los analizadores
LL y LR tratan restringidos subconjuntos de gramáticas libres de contexto.

La notación más frecuentemente utilizada para expresar gramáticas libres de


contexto es la forma Backus-Naur.

VII.2.2.- ESTRUCTURA DE FASE

Fases del compilador


Esquema de un compilador:

Dos puntos de vista:

1. Transformaciones que sufren los datos de entrada: fases del compilador


2. Organización jerárquica de los módulos que constituyen el compilador

45
PRACTICAS PROFESIONALES INFORMATICA IV

VII.3.- REPRESENTACION DE GRAMATICAS

La gramática léxico-funcional (LFG o lexical-functional grammar) es un modelo


lingüístico computacional desarrollado a finales de la década de 1970 en la
Universidad de Stanford en California, como fruto de la colaboración entre la
lingüista Joan Bresnan (de tradición generativista) y el informático Ronald Kaplan,
conocido por sus trabajos pioneros sobre análisis morfosintáctico automático
mediante redes de transición aumentadas. El objetivo de la LFG consiste en la
elaboración de un modelo altamente formalizado del lenguaje humano, un modelo
del lenguaje computacionalmente preciso, psicológicamente realista y de
orientación lingüística lexicista y funcional [2] [3].

En el terreno de la sintaxis, la LFG se caracteriza por mantener que la estructura


sintáctica debe representarse al menos en dos niveles: uno correspondiente a la
estructura de constituyentes (representada habitualmente mediante un diagrama
arbóreo) y otro correspondiente a la estructura funcional. La estructura de
constituyentes (denominada, en este modelo, “estructura-c”) se describe
formalmente mediante una gramática sintagmática independiente del contexto y
constituye la base del procesamiento fonológico de la oración. Por su parte, la
estructura funcional (o “estructura-f”) representa en LFG las funciones
gramaticales y otras propiedades gramaticales de base funcional presentes en la
oración, como la concordancia, el tiempo, la definitud, el control o la anáfora. La
estructura-f adopta la forma de una matriz no ordenada de rasgos, donde cada
rasgo está compuesto por un parámetro o propiedad lingüística y por el valor que
adopta dicha propiedad en la estructura analizada. A modo de ejemplo, véase (en
EF_1) una estructura-f posible para la oración “El alumno aprobó los exámenes”,
dejando la explicación de algunos de los detalles de su representación para los
siguientes apartados.

EF_1: [ PRED = „aprobar < OBJ) SUJ) ((>‟ TPO = +PAS SUJ = [
PRED = „alumno‟
DEF = +
NÚM = –PL
GÉN = –FEM
PERS = 3
]
OBJ= [
PRED = „examen‟
DEF = +
NÚM = +PL
GÉN = –FEM

46
PRACTICAS PROFESIONALES INFORMATICA IV

PERS = 3
NOTACIÓN BNF, DIAGRAMAS SINTÁCTICOS

Las gramáticas de tipo 2 (que incluyen a las gramáticas de tipo 3) tienen métodos
alternativos útiles para desplegar las producciones. Una alternativa que se
encuentra con frecuencia es la notación BNF (forma Backus-Naur). Se sabe que
los lados izquierdos de todas las producciones en una gramática de tipo 2 son
símbolos no terminales únicos. Para cada uno de tales símbolos w, se combina
todas las producciones que tienen a w como lado izquierdo. El símbolo w
permanece a la izquierda, y todos los lados derechos asociados con w son
enumerados juntos, separados por el símbolo |. El símbolo relacional se
reemplaza por el símbolo ::=. Por último, los símbolos no terminales, cuando
aparezcan, serán encerrados entre paréntesis agudos < >. Esto tiene la ventaja
adicional de que los símbolos no terminales pueden tener espacios dentro de
ellos. Así, <palabra1 palabra2> muestra que la cadena entre paréntesis debe
considerarse como una "palabra", no como dos palabras. Es decir, se puede
utilizar el espacio como una "letra" conveniente y legítima en una palabra,
mientras que se utilice los paréntesis agudos para delimitar las palabras.

VIII LENGUAJE REGULAR


Un lenguaje regular es un tipo de lenguaje formal que satisface las siguientes
propiedades:

Puede ser reconocido por:

 un autómata finito determinista


 un autómata finito no determinista
 un autómata finito alterno
 una máquina de Turing de solo lectura

Es generado por:

 una gramática regular


 una gramática de prefijos

Es descrito por:

 una expresión regular

47
PRACTICAS PROFESIONALES INFORMATICA IV

IX AUTÓMATA FINITO
Un autómata finito o máquina de estado finito es un modelo matemático de un
sistema que recibe una cadena constituida por símbolos de un alfabeto y
determina si esa cadena pertenece al lenguaje que el autómata reconoce.

IX.1.- AUTÓMATAS FINITOS DETERMINISTAS (AFD)

- Definiciones:

. Alfabeto: conjunto finito de símbolos.

. Cadena: secuencia de símbolos de un alfabeto terminada por un símbolo de

fin de cadena.

. Flujo de entrada a un autómata: cadenas analizadas.

AFD: M(S,,,i,F)

. S: conjunto finito de estados.

. : alfabeto de entrada.

. : función de transición de estados: S x Ó → S.

. i: estado inicial.

. F: conjunto de estados de aceptación: F ⊆ S

48
PRACTICAS PROFESIONALES INFORMATICA IV

IX.2.- AUTÓMATAS FINITOS NO DETERMINISTAS (AFND)

· Son autómatas en cuyo diagrama de transición existen varios arcos


etiquetados con el

· mismo símbolo saliendo del mismo estado, o bien hay transiciones no


existentes.

En un momento dado, en un AFND puede suceder lo siguiente:

· Existen varias transiciones posibles aplicables.

· No existe ninguna transición aplicable (máquina no totalmente definida).

· Las transiciones de los AFND pueden ser inciertas.

· Un AFND acepta una cierta cadena si es posible que tras analizarla el


autómata puede en uno de los estados de aceptación.

- AFND: M(S,Σ,ρ,i,F)

. S: conjunto finito de estados.

. Σ: alfabeto de entrada.

. ρ: subconjunto de S x Σ x S.

. i: estado inicial.

. F: conjunto de estados de aceptación: F ⊆ S

49
PRACTICAS PROFESIONALES INFORMATICA IV

IX.3.- EQUIVALENCIAS DE AFND Y AFD

Existe una equivalencia en entre los AFD y AFND, de forma que un autómata M
es equivalente a un autómata M‟ si L(M) = L (M‟).

v Ya que una función es un caso especial de relación (es decir, las funciones
son relaciones que poseen requerimientos adicionales), las funciones de
los AFD se consideran como relaciones en los AFND

v En consecuencia, todo AFD es un AFND

v La colección de lenguajes aceptados por los AFND incluye a todos los


lenguajes aceptados por los AFD

v Por lo tanto, los AFND no son más potentes que los AFD con respecto a
los lenguajes que aceptan.

IX.4.- PROPIEDADES DE LOS LENGUAJES ACEPTADOS POR UN


AUTÓMATA FINITO

Sea  un alfabeto. El conjunto de los lenguajes regulares sobre  se define


recursivamente como sigue:

1.  es un lenguaje regular

2.  es un lenguaje regular

3. Para todo a  , a es un lenguaje regular

4. Si A y B son lenguajes regulares, entonces AB, A · B y A* son lenguajes


regulares

5. Ningun otro lenguaje sobre  es regular

50
PRACTICAS PROFESIONALES INFORMATICA IV

IX.4.- PROPIEDADES DE LOS LENGUAJES ACEPTADOS POR UN


AUTÓMATA FINITO

Debe ser cerrado con respecto a las operaciones de unión, concatenación,


cerradura de estrella y complemento

“Un conjunto C es cerrado con respecto a la operación  si

x, y є C  (x  y) є C

x є C   x є C”

Ú Son generados por expresiones regulares

Son formas de trabajo para análisis léxico

IX.5.- AUTÓMATA FINITO

Un autómata finito o máquina de estado finito es un modelo matemático de un


sistema que recibe una cadena constituida por símbolos de un alfabeto y
determina si esa cadena pertenece al lenguaje que el autómata reconoce.

EXPRESIÓN REGULAR

Una, a menudo llamada también patrón, es una expresión que describe un conjunto de
cadenas sin enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas
Handel, Händel y Haendel se describe mediante el patrón "H(a|ä|ae)ndel". La mayoría de
las formalizaciones proporcionan los siguientes constructores: una expresión regular es
una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye
utilizando caracteres del alfabeto sobre el cual se define el lenguaje. Específicamente, las
expresiones regulares se construyen utilizando los operadores unión concatenación y
clausura de Kleene.

51
PRACTICAS PROFESIONALES INFORMATICA IV

Lenguaje regular
Un lenguaje regular es un tipo de lenguaje formal que satisface las siguientes
propiedades:

Puede ser reconocido por:

 un autómata finito determinista


 un autómata finito no determinista
 un autómata finito alterno
 una máquina de Turing de solo lectura

Es generado por:

 una gramática regular


 una gramática de prefijos

52
PRACTICAS PROFESIONALES INFORMATICA IV

X.- AUTÓMATAS PUSH - DOWN

Un autómata de pila o Push-Down es un autómata que cuenta con un mecanismo


que permita almacenamiento ilimitado y opera como una pila. El autómata de pila
(se abrevia PDA de sus siglas en inglés Push-Down Autómata) tiene una cinta de
entrada, un control finito y una pila. La pila es una cadena de símbolos de algún
alfabeto. El símbolo que se encuentra más a la izquierda se considera como que
está en la “cima”. El dispositivo será no determinístico y tendrá un número finito
de alternativas de movimiento en cada situación

XI.- MÁQUINA DE TURING

La máquina de Turing es un modelo computacional introducido por Alan Turing


en el trabajo “On computable numbers, with an application to the
Entscheidungsproblem”, publicado por la Sociedad Matemática de Londres, en el
cual se estudiaba la cuestión planteada por David Hilbert sobre si las matemáticas
son decidibles, es decir, si hay un método definido que pueda aplicarse a
cualquier sentencia matemática y que nos diga si esa sentencia es cierta o no.
Turing construyó un modelo formal de computador, la máquina de Turing, y
demostró que existían problemas que una máquina no podía resolver. La máquina
de Turing es un modelo matemático abstracto que formaliza el concepto de
algoritmo.

XI.1.- MÁQUINA DE TURING

La máquina de Turing consta de un cabezal lector/escritor y una cinta infinita en la


que el cabezal lee el contenido, borra el contenido anterior y escribe un nuevo
valor. Las operaciones que se pueden realizar en esta máquina se limitan a:

 avanzar el cabezal lector/escritor hacia la derecha.


 avanzar el cabezal lector/escritor hacia la izquierda.

El cómputo es determinado a partir de una tabla de estados de la forma:

(estado, valor) (nuevo estado, nuevo valor, dirección)

Esta tabla toma como parámetros el estado actual de la máquina y el carácter


leído de la cinta, dando la dirección para mover el cabezal, el nuevo estado de la
máquina y el valor a ser escrito en la cinta.

Con este aparato extremadamente sencillo es posible realizar cualquier cómputo


que un computador digital sea capaz de realizar.

53
PRACTICAS PROFESIONALES INFORMATICA IV

XI.2.- FUNCIONAMIENTO DE LA MAQUINA DE TURING

¿Como funciona una maquina de turing?

Una máquina de Turing es un dispositivo que transforma un INPUT en un


OUTPUT después de algunos pasos. Tanto el INPUT como el OUPUT constan de
números en código binario (ceros y unos). En su versión original la máquina de
Turing consiste en una cinta infinitamente larga con unos y ceros que pasa a
través de una caja. La caja es tan fina que solo el trozo de cinta que ocupa un bit
(0 ó 1) está en su interior. La máquina tiene una serie de estados internos finitos
que también se pueden numerar en binario.

Para llevar a cabo algún algoritmo, la máquina se inicializa en algún estado


interno arbitrario. A continuación, se pone en marcha y la máquina lee el bit que
se encuentra en ese momento en su interior y ejecuta alguna operación con ese
bit (lo cambia o no, dependiendo de su estado interno). Después se mueve hacia
la derecha o hacia la izquierda, y vuelve a procesar el siguiente bit de la misma
manera. Al final se para, dejando el resultado al lado izquierdo por ejemplo.

11011iUna instrucción típica podría ser: 01

La traducción es como sigue: si la máquina se encuentra en el estado interno 0 y


lee 1 en la cinta, entonces pasará al estado interno 1101 (13), escribirá 1 y se
moverá hacia la izquierda un paso (la cinta se moverá hacia la derecha).

A continuación es conveniente inventar una notación para la secuencia del


INPUT. Esta notación se llama notación binaria expandida. Consiste en cambiar la
secuencia original binaria por otra construida de la siguiente forma: el 0 se cambia
por 0 y el 1 por 10 y se ponen un cero a la izquierda y/o a la derecha del resultado
si empieza o acaba en 1 respectivamente. Así por ejemplo, el número 13 que en
binario es 1101 es en binario expandido 1010010 con un cero delante por esta
última regla 01010010. Para volver al original hay que contraer el binario
expandido con la siguiente regla:

Empezamos a leer por la izquierda el bianrio expandido. Cuando encontremos un


0 tomamos nota de cuántos 1 hay hasta llegar al siguiente 0 y lo escribimos. Si
encontramos que hay dos 0 seguidos, apuntaríamos un 0 porque no habría
ningún 1.Veamos con el 13 cómo se haría. El primer 0 se encuentra en la primera
posición y el siguiente 0 está en la posición 3. Entre los dos solo hay un 1. Lo
anotamos. Seguidamente hay un 1, y después un 0, entonces apuntamos 1
porque hay un 1 entre medias de ellos. Esto es lo que se hace sucesivamente y
encontramos: 1101 que es el número original.

54
PRACTICAS PROFESIONALES INFORMATICA IV

XI.3.- EJEMPLO DE MAYOR FUERZA DE LA MAQUINA DE TURING

No todos los problemas pueden ser resueltos. Un problema indecidible es uno


que no puede ser resuelto con un algoritmo aún si se dispone de espacio y tiempo
ilimitado. Actualmente se conocen muchos problemas indecidibles, como por
ejemplo:

 El Entscheidungsproblem (problema de decisión en alemán) que se define


como: Dada una frase del cálculo de predicados de primer orden, decidir si
ella es un teorema. Church y Turing demostraron independientemente que
este problema es indecidible.
 El Problema de la parada, que se define así: Dado un programa y su
entrada, decidir si ese programa terminará para esa entrada o si correrá
indefinidamente. Turing demostró que se trata de un problema indecidible.
 Un número computable es un número real que puede ser aproximado por
un algoritmo con un nivel de exactitud arbitrario. Turing demostró que casi
todos los números no son computables. Por ejemplo, la Constante de
Chaitin no es computable aunque sí que está bien definido.

XI.4.- EXTENSIONES DE LAS MÁQUINAS DE TURING

Hay otras definiciones de las máquinas de Turing que son equivalentes. Algunos
de esos modelos alternativos son mucho más complicados aunque todos tienen la
misma potencia computacional (o de cálculo). Muchas de ellas dotan de mayor
flexibilidad al diseño de una máquina de Turing que resuelva un problema en
particular. Ejemplos [Kelley Dean]:

Máquina de Turing Multipista

Es aquella mediante la cual cada celda de la cinta se divide en subceldas. Cada


subcelda es capaz de contener símbolos de la cinta. La cinta tiene cada celda
subdividida en tres subceldas. Se dice que esta cinta tiene múltiples pistas.
Puesto que cada celda de esta máquina de Turing contiene múltiples caracteres,
el contenido de las celdas de la cinta puede ser representado mediante n-tuplas
ordenadas. En el ejemplo anterior, las celdas de la cinta contienen (B, a, a), (b, a,
a) y (b, b, B). Por tanto, los movimientos que realice está máquina dependerán de
su estado actual y de la n-tupla que represente el contenido de la celda actual.

55
PRACTICAS PROFESIONALES INFORMATICA IV

XI.5.- MÁQUINA DE TURING NO DETERMINISTA.

Es una Máquina de Turing con cinta limitada a la izquierda, que se caracteriza por
que a partir de un estado y un símbolo puede haber diferentes transiciones,

El número de transiciones asociado a cada para estado/símbolo SIEMPRE ES


FINITO.

Teorema 7.3 El lenguaje L es reconocido por una Máquina de Turing No


Determinista L es reconocido por una Máquina de Turing Determinista.
(Ambos modelos tienen el mismo poder computacional)

Demostración:(Idea Intuitiva)

1. Si L es reconocido por una Máquina de Turing Determinista, L es


reconocido por una Máquina de Turing No Determinista. Las Máquinas de
Turing deterministas son Máquina de Turing no deterministas en las que
sólo hay una transición por cada par estado/símbolo.

2. Si L es reconocido por una Máquina de Turing No Determinista, L es


reconocido por una Máquina de Turing Determinista. La demostración
consiste en determinar cómo una Máquina de Turing determinista puede
simular el comportamiento de una Máquina de Turing no determinista. Para
ello, en primer lugar, y ya que el número de transiciones asociadas a cada
par estado/símbolo es finito, se determina r, el número máximo de
opciones asociadas a las transiciones (en el ejemplo anterior, r=3).
Además, se necesita disponer de una Máquina de Turing determinista con
3 cintas, limitadas a la izquierda.

La primera cinta, recoge la información de entrada, la cadena a reconocer. La


segunda cinta sirve para llevar la cuenta de qué opciones se van tomando. Para
ello, sobre esa cinta hay que ir generando cadenas del alfabeto {1, 2, .., r} por orden
numérico:

56
PRACTICAS PROFESIONALES INFORMATICA IV

XI.5.- QUÉ ES EL PROBLEMA DE HALFING PARA LA MÁQUINA DE


TURING
Es un problema irresoluble mejor conocido como el problema de parada.
Teorema.- El problema de parada para las maquinas de Turing es
irresoluble.

Podemos usar la irresolubilidad del problema de parada para demostrar


que otros problemas también son irresolubles. Una forma de hacerlo es
demostrando que, si un determinado problema se puede resolver, el problema
de parada también es resoluble.

Sea M una maquina de Turing arbitraria con un alfabeto de entrada ∑.


Sea w ¿Parará M con la cadena w como cadena de entrada?
En caso del problema de parada está formado por la pareja máquina de
Turing-cadena de entrada. Una solución a dicho problema seria un algoritmo
que, para cualquier caso, respondiera si o no de forma correcta, es decir, un
algoritmo lo bastante general como para responder correctamente al problema
de parada para cualquier combinación de máquina de Turing y cadena de
entrada.

1. Mediante un grafo explique la construcción modular de maquina de


turing describiendo cada uno de sus elementos:

Ejemplo : 25.3E-18

Sea G = <N,S,P,S> una gramática


a)S es una forma sentencial
b)Si
sentencial.

57
PRACTICAS PROFESIONALES INFORMATICA IV

XII.- GRAMÁTICA (AUTÓMATA)

Una gramática ("G") desde el punto de vista de un autómata, es un conjunto finito


de reglas que describen toda la secuencia de símbolos pertenecientes a un
lenguaje específico L. Dos gramáticas que describan el mismo lenguaje se llaman
gramáticas equivalentes.

Una gramática es una estructura algebraica formada por cuatro elementos


fundamentales:

G = { NT, T, S, P }

donde

 NT es el conjunto de elementos No Terminales


 T es el conjunto de elementos Terminales
 S es el Símbolo inicial de la gramática
 P es el conjunto de Reglas de Producción

XII.1.- LENGUAJES REGULARES

 Los lenguajes regulares constituyen el menor conjunto de lenguajes sobre


S que es cerrado con respecto a las operaciones de concatenación, unión
y cerradura de Kleene.


Además contienen el lenguaje vacío  y los lenguajes unitarios {a} para a S.

 Desde el punto de vista práctico se utilizan como la base para la


construcción de analizadores léxicos (scanners).

 Def.- Sea S un alfabeto. El conjunto de los lenguajes regulares sobre S se


define recursivamente así:
  es un lenguaje regular.
 {e} es un lenguaje regular.
 Para toda aS, {a} es un lenguaje regular.
 Si A y B son lenguajes regulares, entonces A B, AB y A* son
lenguajes regulares.
 Ningún otro lenguaje sobre S es regular.

58
PRACTICAS PROFESIONALES INFORMATICA IV

XII.1.1.- TEOREMA DE KLEENE, LAS APLICACIONES DEL LEMA


PUMPING

Veremos en esta sección que se cumple el recíproco de la proposición 4.2.3:


Todo lenguaje regular ha de ser formalmente regular. Sea

una gráfica de transición. Consideremos la siguiente


transformación:

Observación 4.1 El lenguaje de la gráfica de transición coincide con el

conjunto .

Observación 4.2 :
1.

.
2.

.
Por tanto, se tiene la igualdad conjuntista

59
PRACTICAS PROFESIONALES INFORMATICA IV

XII.2.- EL TEOREMA DE MYHILL-NERODE Y LA MINIMIZACIÓN DE


AUTÓMATAS FINITOS

60
PRACTICAS PROFESIONALES INFORMATICA IV

XII.3.- LENGUAJES DE CONTEXTO LIBRE

Un lenguaje de contexto libre, también denominado lenguaje independiente


de contexto, es un lenguaje generado por una gramática de tipo 2 en la Jerarquía
de Chomsky, también llamada gramática libre de contexto.

Los lenguajes libres del contexto tienen una gran importancia en la definición de
lenguajes de programación, interpretación del lenguaje natural, construcción de
compiladores, etc.

XII.4.- AUTÓMATA LINEAL BOUNDED, ASPECTOS PRÁCTICOS

Autómata limitado linear (autómatas limitados lineares plurales, LBA abreviado) es


una forma restricta de una máquina no determinista de Turing. Posee una cinta
compuesta de las células que pueden contener símbolos de un alfabeto finito, una
cabeza de la cual pueda leer o escribir a una célula en la cinta a la vez y pueda
ser movido, y de un número finito de estados. Diferencia de una máquina de
Turing en eso mientras que la cinta inicialmente se considera infinita, sólo una
porción contigua finita que longitud es una función linear de la longitud de la
entrada inicial se puede alcanzar por la cabeza de lectura/grabación. Esta
limitación hace un LBA un modelo más exacto de las computadoras que existen
realmente que una máquina de Turing en algunos respectos. Los autómatas
limitados lineares son aceptadores para la clase de idiomas sensibles al contexto.
La única restricción puesta en las gramáticas para tales idiomas es que ninguna
producción traz una secuencia a una secuencia más corta. Así ninguna derivación
de una secuencia en una lengua sensible al contexto puede contener una forma
sentential más de largo que la secuencia sí mismo. Puesto que hay una
correspondencia una por entre los autómatas linear-limitados y tales gramáticas,
no más de cinta que lo ocupada por la secuencia original no es necesaria para la
secuencia ser reconocido por el autómata.

61
PRACTICAS PROFESIONALES INFORMATICA IV

XII.3.2.- EJEMPLIFICACIÓN CON UN LENGUAJE CONOCIDO

El lenguaje VRML (Virtual Reality Modelling Language) permite la visualización y


manejo de estructuras en tres dimensiones de forma muy sencilla y compacta, ya
que el lenguaje de programación es un lenguaje de texto y se interpreta mediante
un visor que se puede instalar como una extensión (plug-in) de los navegadores
más habituales (Netscape e Internet Explorer).

En la presente comunicación, queremos presentar algunas de las propiedades


que hacen de VRML un excelente vehículo para la comprensión de las estructuras
cristalinas de los materiales.

El lenguaje VRML (Virtual Reality Modelling Language) es un lenguaje abierto de


descripción de entornos tridimensionales. Nació en 1994 en Silicon Graphics. En
1995 se publicó la versión 1.0, y en 1996 la 2.0. A finales de 1997, con ligeros
cambios respecto a la versión 2.0, el lenguaje VRML97 fue estandarizado por ISO
(ISO/IEC 14772-1:1997). Actualmente se halla en proceso de aprobación una
reforma de VRML97 para añadir algunas funcionalidades, y la próxima generación
del estándar, llamada X3D, está siendo desarrollada por el consorcio

XII.3.2.- EJEMPLIFICACIÓN CON UN LENGUAJE CONOCIDO

Una familia de lenguas es un grupo de lenguas emparentadas históricamente y


que parecen derivar de una lengua más antigua que por diversificación dialectal
dio lugar a diferentes lenguas, normalmente ininteligibles entre sí. En sentido
estricto, una familia de lenguas es una unidad filogenética, es decir, todos sus
miembros derivan de un ancestro común.

62
PRACTICAS PROFESIONALES INFORMATICA IV

XIII.- APLICACIONES DE LENGUAJES

En el presente trabajo se determinan pasos a seguir para poder un lenguaje


determinado; en esta investigación se incluyen los objetivos y filosofías del diseño
de lenguajes de programación así como el diseño detallado de un lenguaje en
especifico (Lenguaje C).

Los objetivos y filosofías del diseño de lenguajes de programación nos permiten


tener una visión acerca de un lenguaje determinado.

El Lenguaje C fue creado en 1971 por Deniss Ritchie. Este lenguaje incluye una
sintaxis simplificada, aritmética de direcciones de memoria (permitiendo al
programador la manipulación de bites, bytes y direcciones de memoria) y el
concepto de apuntador, sus códigos son eficientes y tiene portabilidad para poder
correr en cualquier maquina.

XIII.3.- OBJETIVOS Y FILOSOFÍA DE DISEÑO DE LENGUAJES DE


PROGRAMACIÓN

La filosofía detrás del diseño de Stop es muy simple. Se trata de un lenguaje


orientado al procesamiento de datos a través de la manipulación de elementos
mantenidos en una estructura de datos en la que el primer elemento en entrar es
el último en salir y que es lo que se conoce popularmente como una pila. La
sencillez de la estructura y rigidez en su operación son dos elementos muy
importantes en este caso. La primera deja entrever lo que es posible hacer con
una estructura de datos como ésta. La segunda impone una limitante, que para
efectos del desarrollo del presente lenguaje se ha tenido que sobrepasar
aparentándose tomar algunas libertades en el manejo de los elementos.

Principalmente, la modalidad de procesamiento se ha tomado como una guía para


la descripción de la disposición y manipulación de los elementos a trabajar. Al
final, lo importante a considerar es el orden en que los elementos sean dispuestos
para posteriormente ser tomados de la pila por instrucciones y operadores.

Como podrá verse, el acceso a la pila se ha liberado de su enfoque tradicional


considerando que la ganancia obtenida en las facilidades de manipulación de
datos es más que suficiente para justificar tal libertad. Plantear un diseño
estrictamente apegado a la funcionalidad de una pila implicaría una importante
reducción en el grupo de operaciones disponibles, lo que traería consigo la
reducción del lenguaje a crear. Sin embargo, como podrá apreciarse al final, esta
libertad es meramente conceptual, ya que las operaciones que hagan uso de ésta
pueden ser descritas por una serie de acciones que impliquen extraer y reinsertar
a los elementos en la pila en el orden necesario para obtener el efecto deseado.

63
PRACTICAS PROFESIONALES INFORMATICA IV

En el diseño de Stop se ha tratado de seguir muchos de los principios usados en


los modernos lenguajes de programación hasta el punto donde su implementación
no sea demasiado complicada para el desarrollo de un proyecto semestral.
Principalmente se ha buscado que sea regular, modular y estructurado.

Un aspecto importante, y motivo de muchos debates, es la carencia en la


declaración de tipos de datos. Mientras que es cierto que Stop identifica el tipo de
dato con el que se está trabajando, también es cierto que no es posible
determinar el tipo de dato que una variable u operación puede llegar a recibir para
su almacenamiento hasta el momento de su ejecución. Cada celda en la pila es
capaz de mantener cualquier tipo de dato, una variable es una extensión en el
almacenamiento de datos de la pila.

Finalmente, se trata de un lenguaje de propósito general que cae dentro de un


paradigma imperativo-procedimental. Se recalca este hecho ya que por la
modalidad de procesamiento a veces resulta difícil o confuso identificar bajo que
modelo de programación catalogar a Stop.

XIII.1.1.- COMUNICACION HUMANA

“Un individuo no comunica, participa en una comunicación o se convierte en parte


de ella; la comunicación como sistema no debe entenderse sobre la base de un
simple modelo de acción y reacción, por compleja que sea su formulación; como
sistema debe entenderse a nivel transaccional».

 IMPOSIBILIDAD DE NO COMUNICAR

Se deriva de una propiedad básica del comportamiento, esto es, no hay algo que
sea lo contrario de comportamiento, no existe el no-comportamiento y, por lo
tanto, es imposible no comportarse.

El comportamiento como comunicación no es un fenómeno aleatorio, sino

que está guiado por reglas, así como el lenguaje lo está por su gramática.

Existiría un código abstracto de reglas de la comunicación nunca formalizado ni


plenamente consciente que se iría adquiriendo a lo largo de

la vida.

La intencionalidad no es un prerequisito de la comunicación. Por ejemplo, cuando


alguien duerme, comunica que está cansado, que no quiere ser interrumpido, que
guarde silencio, sin que tenga la intención y la conciencia de que aquello
ocurriera.

64
PRACTICAS PROFESIONALES INFORMATICA IV

 NIVELES DE CONTENIDO Y RELACION DE LA COMUNICACIÓN

La comunicación opera a distintos niveles de abstracción. En la comunicación


verbal es posible describir un nivel denotativo simple que es sinónimo del
contenido explícito del mensaje. A este aspecto de la comunicación se le
denomina referencial o de contenido. Por ejemplo, «pongan atención a este
ejemplo», es una comunicación verbal, donde el

contenido es aquello que se dijo (escrito).

También existe un nivel de abstracción en donde se incluye todos aquellos

mensajes implícitos o explícitos acerca de la codificación lingüística realizada al


enviar el mensaje; este nivel es el metalingüístico y corresponde a la semántica
(significados) y sintaxis (orden) del lenguaje. Por ejemplo, decir "coloquen
atención en este ejemplo" es un error semántico.

XIII.1.2.- PREVENCIÓN Y DETECCIÓN DE ERRORES

Debido a que el programador comete errores se debe tomar en cuenta lo


siguiente:

1. 1. El programador no sabe lo que hace y el compilador


ha de limitar sus acciones

2. 2. Hay que prevenir cierto tipo de errores

a) a) Ejecutar datos de control de flujo limitado

b) b) Prever errores en el uso de datos (Tipado fuerte)

c) c) Prever a los apuntadores erróneos con la gestión de


memoria implícita

3. 3. Hay que facilitar su detección, identificación y


corrección

a) a) Prever la redundancia

b) b) Tener que declarar variables antes de utilizar.

c) c) Evitar coerciones inductoras de errores

d) d) Hacer comprobaciones en tiempo de ejecución

e) e) Tener mas control sobre los apuntadores a NULL

65
PRACTICAS PROFESIONALES INFORMATICA IV

XIII.1.3.- utilidad y eficiencia

Utilidad

Utilidad hace referencia:

 En Economía:
o Es un criterio para encontrar el punto óptimo de eficiencia de Pareto,
en el cual no es posible beneficiar a más elementos de un sistema sin
perjudicar a otros
o La función de utilidad, cuya derivada es la utilidad marginal.

Aplicación web

Una aplicación web es un sistema informático que los usuarios utilizan


accediendo a un servidor web a través de Internet o de una intranet. Las
aplicaciones web son populares debido a la practicidad del navegador web como
cliente ligero. La facilidad para actualizar y mantener aplicaciones web sin
distribuir e instalar software en miles de potenciales clientes es otra razón de su
popularidad. Aplicaciones como los webmails, wikis, weblogs, tiendas en línea y la
Wikipedia misma son ejemplos bien conocidos de aplicaciones web.

XIII.1.3.- INDEPENDENCIA DE A MAQUINA

Los lenguajes de alto nivel logran la independencia del tipo de máquina y se


aproximan al lenguaje natural. Se puede decir que el principal problema que
presentan los lenguajes de alto nivel es la gran cantidad de ellos que existen
actualmente en uso.

Los lenguajes de alto nivel, también denominados lenguajes evolucionados,


surgen con posterioridad a los anteriores, con los siguientes objetivos, entre
otros:

 Lograr independencia de la máquina, pudiendo utilizar un mismo


programa en diferentes equipos con la única condición de disponer de un
programa traductor o compilador, que lo suministra el fabricante, para
obtener el programa ejecutable en lenguaje binario de la máquina que se
trate. Además, no se necesita conocer el hardware específico de dicha
máquina.
 Aproximarse al lenguaje natural, para que el programa se pueda escribir y
leer de una forma más sencilla, eliminando muchas de las posibilidades de
cometer errores que se daban en el lenguaje máquina, ya que se utilizan
palabras (en inglés) en lugar de cadenas de símbolos sin ningún significado
aparente.
 Incluir rutinas de uso frecuente como son las de entrada/salida, funciones
matemáticas, manejo de tablas, etc, que figuran en una especie de
librería del lenguaje, de tal manera que se pueden utilizar siempre que se
quieran sin necesidad de programarlas cada vez.

66
PRACTICAS PROFESIONALES INFORMATICA IV

XIII.1.3.- SIMPLICIDAD, UNIFORMIDAD

Hablar de la importancia de la simplicidad puede parecer superfluo por lo obvio.


Pero es que el punto central de la simplicidad se basa en el entendimiento
profundo del asunto que se quiere transmitir y en la capacidad de hacerlo de
una forma clara y concisa, es decir en conseguir el máximo efecto de
comunicación con la mínima energía.

Cuando se consigue resolver un problema de forma sencilla se suele hablar de


una solución elegante. Los buenos diseños son los que están ahí, pero no se
ven. Realizarlos sin recurrir a la simplicidad es impensable. Un diseño tortuoso y
complicado, aunque resuelva la cuestión, requiere un exceso de energía y tiempo
por parte del usuario.

La simplicidad tiene algunas ventajas notables, que Mullet y Sano (ver artículo
anterior) en el libro "Visual Design" resumen en

1. Proximidad (Approachability): Los diseños sencillos son más fáciles de


entender y favorecen el uso inmediato y la exploración exhaustiva de los
recursos del diseño.
2. Reconocibilidad (Recognizability): Son más fácilmente reconocibles y
asimilables ya que presentan menos información visual superflua.
3. Inmediatez (Immediacy): Los diseños sencillos tienen un impacto mayor
precisamente porque su facilidad de comprensión los hacen
inmediatamente reconocibles con un esfuerzo consciente mínimo.
4. Usabilidad: Por todo lo anterior suelen ser también los más fáciles de usar.

67
PRACTICAS PROFESIONALES INFORMATICA IV

XIII.1.6.- OTRAS FILOSOFIAS DE DISEÑO

En términos generales, el diseño centrado en el usuario es una filosofía y


proceso de diseño en el que las necesidades, los deseos y las limitaciones del
usuario final de una interfaz o documento toman una atención y relevancia
considerable en cada nivel del proceso de diseño. El diseño centrado en el
usuario puede ser caracterizado como un problema de resolución en múltiples
niveles, que no sólo requiere diseñadores para que analicen y prevean cómo los
usuarios se sienten más a gusto en el uso de una interfaz, sino también para
probar la validez de sus hipótesis teniendo en cuenta las conductas del usuario
con pruebas en la videa real con usuarios actuales. Tales pruebas son tan
necesarias como difíciles para los diseñadores de una interfaz, de comprender en
forma intuitiva lo que un usuario primerizo experimenta de sus diseños, y cómo es
la curva de aprehención de cada usuario.

La principal diferencia con otras filosofías del diseño de interfaz es que el diseño
centrado en el usuario intenta optimizar la interfaz del usuario alrededor de cómo
la gente puede, desea o necesita trabajar, más que forzando a los usuarios a
cambiar cómo trabajan para acomodarse a la función del sistema.

XIV DISEÑO DETALLADO

Descripción
En esta etapa se adecúa el análisis a las características específicas del ambiente
de implementación y se completan las
distintas aplicaciones del sistema con los modelos de control, interfaz o
comunicaciones, según sea el caso.

Actividades técnicas Documentos Entregables


1. Agregar detalles de Diagramas de clases y paquetes, con el
implementación al modelo del detalle de la implementación
mundo Diagramas de interacción con el detalle de
2. Desarrollar el modelo de interfaz las operaciones más importantes del
3. Desarrollar los modelos de sistema
control, persistencia y Diagramas de estados y/o actividades para
comunicaciones las clases concurrentes o complejas

68
PRACTICAS PROFESIONALES INFORMATICA IV

XIV.1.1.- MICROESTRUCTURAS

Mediante la resonancia, algunas moléculas de agua son "reclutadas" por la


vibración electrónica de las moléculas de soluto, y se transforman en
microestructuras (polímeros de agua) que son sus equivalentes –en el sentido de
tener la misma Información-.

No queremos decir con ésto que los polímeros de agua sean una copia de las
moléculas de soluto. No solamente es innecesario que las microestructuras
acuosas "copien" a las moléculas de soluto, sino que –si se piensa bien- esta
hipótesis resulta ser absurda. Es tan absurdo como pretender que la palabra
"vino" tenga una propiedad embriagadora. Ni un dibujo ni siquiera una fotografía
pueden pretender ser, no ya idénticos, sino que ni tan sólo realmente semejantes
al objeto que se supone representan. Piénsese en que todo lo más expresan una
faz de las innumerables –quizás, infinitas- faces que posee verdaderamente el
objeto real.

Sin embargo, a pesar de lo absurdo de tal pretensión, más de alguno de los


críticos de la Homeopatía han sostenido este argumento para intentar probar la
supuesta imposibilidad de las "diluciones homeopáticas". Evidentemente que es
imposible que los polímeros de agua tengan precisamente ese tipo de relación
con las moléculas de soluto. No es posible que los polímeros de agua se
parezcan –en ningún sentido de "parecerse"- a cualquiera que sea la estructura
molecular que constituya al soluto.

Lo que sí puede sostenerse como una condición de la persistencia de la


misma Información del soluto en el solvente (en los polímeros de agua), es que la
microestructura acuosa tenga la misma cantidad de información que la
contenida en el soluto.

XIV.1.4.- ESTRUCTURA DE EXPRESION

La estructura es la disposición y orden de las partes dentro de un todo. También


puede entenderse como un sistema de conceptos coherentes enlazados, cuyo
objetivo es precisar la esencia del objeto de estudio. Tanto la realidad como el
lenguaje tienen estructura. Uno de los objetivos de la semántica y de la ciencia
consiste en que la estructura del lenguaje refleje fielmente la estructura de la
realidad

69
PRACTICAS PROFESIONALES INFORMATICA IV

XIV.1.3- ESTRUCTURA DE DE DATOS

En programación, una estructura de datos es una forma de organizar un


conjunto de datos elementales con el objetivo de facilitar su manipulación. Un
dato elemental es la mínima información que se tiene en un sistema.

Una estructura de datos define la organización e interrelación de éstos y un


conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones
básicas son:

 Alta, adicionar un nuevo valor a la estructura.


 Baja, borrar un valor de la estructura.
 Búsqueda, encontrar un determinado valor en la estructura para realizar
una operación con este valor, en forma SECUENCIAL o BINARIO (siempre
y cuando los datos estén ordenados)...

Otras operaciones que se pueden realizar son:

 Ordenamiento, de los elementos pertenecientes a la estructura.


 Apareo, dadas dos estructuras originar una nueva ordenada y que
contenga a las apareadas.

Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y


eficiencia para la realización de cada operación. De esta forma, la elección de la
estructura de datos apropiada para cada problema depende de factores como la
frecuencia y el orden en que se realiza cada operación sobre los datos.

70
PRACTICAS PROFESIONALES INFORMATICA IV

XIV.1.4.- ESTRUCTURA DE CONTROL

En lenguajes de programación, las estructuras de control permiten modificar el


flujo de ejecución de las instrucciones de un programa.

Con las estructuras de control se puede:

 De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-


Then-Else y Select-Case)
 Ejecutar un grupo de sentencias mientras exista una condición (Do-While)
 Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until)
 Ejecutar un grupo de sentencias un número determinado de veces (For-
Next)
 Etc

Todas las estructuras de control tienen un único punto de entrada y un único


punto de salida. segun fuchi, las estructuras de control se puedde clasificar en :
secuenciales, iterativas y de control avanzadas, by fuchi ing, de sistemas 6 sem
Esto es una de las cosas que permite que la programación se rija por los
principios de la programación estructurada.

Los lenguajes de programación modernos tienen estructuras de control similares.


Básicamente lo que varía entre las estructuras de control de los diferentes
lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la
estructura.

Otros lenguajes ofrecen estructuras diferentes, como por ejemplo los comandos
guardados.

71
PRACTICAS PROFESIONALES INFORMATICA IV

XIV.1.5.- ESTRUCTURA DE UN COMPILADOR:

La estructura de un compilador, esta dividida en cuatro grandes módulos, cada


uno independiente del otro, se podría decir que un compilador esta formado por
cuatros módulos mas a su vez.

El primero de ellos es el preprocesador, es el encargado de transformar el


código fuente de entrada original en el código fuente puro. Es decir en expandir
las macros, incluir las librerías, realizar un preprocesado racional (capacidad de
enriquecer a un lenguaje antiguo con recursos más modernos), extender el
lenguaje y todo aquello que en el código de entrada sea representativo de una
abreviatura para facilitar la escritura del mismo

72
PRACTICAS PROFESIONALES INFORMATICA IV

El segundo modulo es el de compilación que recibe el código fuente puro, este


es él modulo principal de un compilador, pues si ocurriera algún error en esta
etapa el compilador no podría avanzar. En esta etapa se somete al código fuente
puro de entrada a un análisis léxico gráfico, a un análisis sintáctico, a un análisis
semántico, que construyen la tabla de símbolos, se genera un código intermedio
al cual se optimiza para así poder producir un código de salida generalmente en
algún lenguaje ensamblador.

El tercer modulo es el llamado modulo de ensamblado, este modulo no es ni más


mi menos que otro compilador pues recibe un código fuente de entrada escrito en
ensamblador, y produce otro código de salida, llamado código binario no
enlazado. Si por un momento viéramos a este modulo como un programa
independiente, veríamos que en este caso los términos programa compilador y
proceso de compilación son los mismos. Pues este modulo no es mas que un
compilador, que en su interior realiza como su antecesor un análisis léxico gráfico,
un análisis sintáctico, un análisis semántico, crea una tabla de símbolos, genera
un código intermedio lo optimiza y produce un código de salida llamado código
binario no enlazado, y a todo este conjunto de tares se los denomina proceso de
compilación. Como se puede ver este compilador (llamado ensamblador) a
diferencia de los demás compiladores no realiza una expansión del código fuente
original(código fuente de entrada), tiene solamente un proceso de compilación y
por supuesto no enlaza el código fuente. Es un compilador que carece de los
módulos de preprocesado y enlazado, y donde los módulos de compilación y
ensamblado son los mismos.

73
PRACTICAS PROFESIONALES INFORMATICA IV

XIV.1.6.- ESTRUCTURA I/O

Si las peticiones de entrada/salida a disco se resolvieran en el orden que van


llegando, el rendimiento del acceso a disco sería muy poco eficiente. Una de las
operaciones más lentas en los sistemas computadores es el posicionamiento de
los cabezales de lectura/escritura sobre un bloque concreto del disco, del orden
de milisegundos. Minimizar estos desplazamientos es una tarea crucial para
mejorar el rendimiento del sistema. Por tanto el kernel no atiende a las peticiones
de entrada/salida a disco a medida que llegan, sino que una parte especializada
de la block I/O layer se encarga de gestionarlas, el subsistema denominado I/O
Scheduler (planificador de entrada/salida). Por tanto, el objetivo del I/O scheduler
es la planificación de peticiones de e/s pendientes para minimizar el tiempo
gastado en mover las cabezas del disco. Se consigue este objetivo realizando dos
operaciones principales, las operaciones sorting (ordenamiento) y merging
(mezclado).

El planificador de e/s mantiene una lista de peticiones de e/s pendientes


ordenadas (sort) por número de bloque (posición en el disco). Cuando una nueva
petición de e/s llega, es insertada de manera ordenada en la lista. De esta forma
se previene que el cabezal del disco se mueva a todo lo largo del disco
caprichosamente. Si un disco duro está ocupado sirviendo una petición de e/s en
una parte del disco, y una nueva petición llega en la misma zona, esa petición
puede ser servida antes de moverse el cabezal a otra parte.

El mergin ocurre cuando una petición de e/s emitida es adyacente a una petición
ya pendiente o es la misma, las dos peticiones pueden ser mezcladas y formar
una sola petición. Esto minimiza la gestión de las peticiones, al reducir el número
y además la resolución de la petición se realizará de una sola operación, sin
necesidad de posicionamientos adicionales del cabezal.

Veamos un ejemplo: consideremos el caso donde dos aplicaciones emiten


peticiones de e/s a los siguientes bloques (identificados por un número de
bloque), que llegan al kernel en el siguiente orden: 10, 500, 12, 502, 14, 504 y 12.
El planificador de e/s más inútil serviría estos bloques en el orden de llegada. Esto
significaría siete largos posicionamientos del cabezal, incluyendo sus vueltas
hacia atrás entre dos partes alejadas del disco (la zona de los bloques 10... y la
zona de los bloques 500...). Si el planificador ordenara y mezclara estas
posiciones, el resultado sería muy diferente: 10, 12, 14, 500, 502, 504. Vemos que
sólo un largo posicionamiento hacia adelante y la eliminación de una petición de
e/s.

Los planificadores de e/s son denominados globalmente algoritmos de ascensor


(elevators), pues buscan solución a un problema muy similar al desplazamiento
óptimo de la cabina de un ascensor.

74
BIBLIOGRAFIA
www.monografias.com/trabajos11/oper/oper.shtml -

www.eumed.net/tesis/alhc/13.htm -

www.cnep.org.mx/Informacion/resenas/admonprocesos.htm

delta.cs.cinvestav.mx/~mcintosh/comun/summer2006/algebraPablo_html/node10.html

www.itculiacan.edu.mx/

www.exa.unicen.edu.ar/catedras/ccomp1/ApunteAF.pdf

es.wikipedia.org/wiki/Autómata_finito

www.mitecnologico.com/Main/AutomatasPushDown

es.wikipedia.org/wiki/Máquina_de_Turing

www.dirinfo.unsl.edu.

es.encarta.msn.com/media_461532737/aplicación_de_lenguajes_de_programación.html –

www.cs.ualberta.ca/~pfiguero/soo/metod/dis_detallado.html

http://www.monografias.com/trabajos/html

http://www.cca.org.mx/cca/cursos/htm

http://www.una.ac.cr.html

http://www.gestiopolis.com/

También podría gustarte