Librocompleto Calculo Para La Ingenieria

228
Crist ´ obal Pareja ´ Angel Andeyro Manuel Ojeda Introducci´ on a la Inform´ atica I. Aspectos generales

Transcript of Librocompleto Calculo Para La Ingenieria

Cristobal Pareja

Angel Andeyro

Manuel Ojeda

Introduccion a la Informatica

I. Aspectos generales

1a Edicion

Febrero 1994

c© Cristobal Pareja

Angel Andeyro

Manuel Ojeda

ISBN: 84-7491-489-2

Deposito Legal: M-7713-94

Indice General

Presentacion 11

1 Conceptos Basicos 171.1 Informatica . . . . . . . . . . . . . . . . . . . . . . . . . . 171.2 Computador . . . . . . . . . . . . . . . . . . . . . . . . . . 181.3 Sistema operativo . . . . . . . . . . . . . . . . . . . . . . . 191.4 Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 201.5 Algoritmos y programas . . . . . . . . . . . . . . . . . . . 21

1.5.1 Algoritmos . . . . . . . . . . . . . . . . . . . . . . 221.5.2 Programacion . . . . . . . . . . . . . . . . . . . . . 241.5.3 Lenguajes de Programacion . . . . . . . . . . . . . 25

1.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.7 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . 28

2 Representacion de la informacion 292.1 Conceptos previos . . . . . . . . . . . . . . . . . . . . . . 29

2.1.1 Informacion analogica y digital . . . . . . . . . . . 292.1.2 Unidades de informacion en los sistemas digitales . 302.1.3 Sistemas de numeracion posicionales . . . . . . . . 31

2.2 Representacion digital de los datos . . . . . . . . . . . . . 352.2.1 Representacion de los numeros enteros . . . . . . . 352.2.2 Representacion de los numeros reales . . . . . . . . 392.2.3 Limitaciones de los sistemas de representacion di-

gital de los numeros . . . . . . . . . . . . . . . . . 422.2.4 Representacion de los caracteres . . . . . . . . . . 462.2.5 Organizacion de datos mas complejos . . . . . . . 47

6 Indice general

2.2.6 Representacion de las instrucciones . . . . . . . . . 482.3 Codigos redundantes . . . . . . . . . . . . . . . . . . . . . 49

2.3.1 Informacion y redundancia . . . . . . . . . . . . . 492.3.2 Codigos solo autodetectores: p de n . . . . . . . . 512.3.3 Codigos autocorrectores: Hamming . . . . . . . . . 51

2.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.5 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . 57

3 Estructura fısica de un computador 593.1 Componentes de un computador . . . . . . . . . . . . . . 60

3.1.1 Memoria principal . . . . . . . . . . . . . . . . . . 623.1.2 Unidad central de proceso . . . . . . . . . . . . . . 673.1.3 Perifericos . . . . . . . . . . . . . . . . . . . . . . . 703.1.4 Buses de comunicacion . . . . . . . . . . . . . . . . 74

3.2 Lenguajes de maquina . . . . . . . . . . . . . . . . . . . . 773.2.1 Formato de las instrucciones . . . . . . . . . . . . 783.2.2 Tipos de Instrucciones . . . . . . . . . . . . . . . . 79

3.3 Un ejemplo de recapitulacion . . . . . . . . . . . . . . . . 803.3.1 UCP con acumulador . . . . . . . . . . . . . . . . 813.3.2 Un juego de instrucciones de maquina de una di-

reccion . . . . . . . . . . . . . . . . . . . . . . . . . 823.3.3 Ejecucion de una instruccion. Detalle . . . . . . . 843.3.4 Traduccion y ejecucion de un programa sencillo . . 85

3.4 Observaciones complementarias . . . . . . . . . . . . . . . 883.4.1 Tipos de direccionamiento . . . . . . . . . . . . . . 893.4.2 Subrutinas . . . . . . . . . . . . . . . . . . . . . . 913.4.3 Interrupciones . . . . . . . . . . . . . . . . . . . . 94

3.5 Otras arquitecturas . . . . . . . . . . . . . . . . . . . . . . 953.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . 983.7 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . 99

4 Sistemas Operativos 1014.1 Cometido de un sistema operativo . . . . . . . . . . . . . 102

4.1.1 Funciones de los sistemas operativos . . . . . . . . 1024.1.2 Formas de trabajo de los sistemas operativos . . . 103

4.2 Conceptos basicos de los sistemas operativos . . . . . . . . 105

Indice general 7

4.2.1 Procesos . . . . . . . . . . . . . . . . . . . . . . . . 1054.2.2 Archivos . . . . . . . . . . . . . . . . . . . . . . . . 1064.2.3 Nucleo . . . . . . . . . . . . . . . . . . . . . . . . . 1094.2.4 Multiprogramacion . . . . . . . . . . . . . . . . . . 1104.2.5 Interfaz de usuario . . . . . . . . . . . . . . . . . . 1114.2.6 Gestion de la memoria . . . . . . . . . . . . . . . . 112

4.3 Clasificacion de los sistemas operativos . . . . . . . . . . . 1164.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174.5 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . 117

5 Lenguajes de programacion 1195.1 Lenguajes de bajo y alto nivel . . . . . . . . . . . . . . . . 120

5.1.1 Lenguajes orientados a la maquina . . . . . . . . . 1205.1.2 Lenguajes de alto nivel . . . . . . . . . . . . . . . . 1225.1.3 Paradigmas de programacion . . . . . . . . . . . . 124

5.2 Descripcion de los lenguajes de programacion . . . . . . . 1315.2.1 Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . 1315.2.2 Semantica . . . . . . . . . . . . . . . . . . . . . . . 137

5.3 Procesadores de lenguajes . . . . . . . . . . . . . . . . . . 1415.3.1 Compiladores e interpretes . . . . . . . . . . . . . 1445.3.2 Entornos de programacion . . . . . . . . . . . . . . 144

5.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485.5 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . 149

6 Bases de datos 1516.1 Bases de datos y SGBD . . . . . . . . . . . . . . . . . . . 151

6.1.1 Archivos y SGA . . . . . . . . . . . . . . . . . . . 1516.1.2 Bases de datos y SGBD . . . . . . . . . . . . . . . 1526.1.3 Niveles de una base de datos . . . . . . . . . . . . 154

6.2 El modelo entidad-relacion . . . . . . . . . . . . . . . . . . 1556.3 Modelos de datos basados en registros . . . . . . . . . . . 158

6.3.1 El modelo relacional . . . . . . . . . . . . . . . . . 1586.4 Lenguajes asociados a los SGBD . . . . . . . . . . . . . . 160

6.4.1 Lenguajes relacionales . . . . . . . . . . . . . . . . 1616.5 Elementos de un SGBD . . . . . . . . . . . . . . . . . . . 1636.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

8 Indice general

6.7 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . 165

7 Historia de los instrumentos de calculo 1677.1 Precursores de los computadores digitales . . . . . . . . . 167

7.1.1 La antiguedad . . . . . . . . . . . . . . . . . . . . 1677.1.2 Antecedentes del calculo mecanico . . . . . . . . . 1687.1.3 La maquina de Pascal . . . . . . . . . . . . . . . . 1687.1.4 La maquina de Babbage . . . . . . . . . . . . . . . 1697.1.5 La tabulacion mecanica . . . . . . . . . . . . . . . 170

7.2 Nacimiento de los computadores . . . . . . . . . . . . . . 1717.2.1 El modelo de von Neumann . . . . . . . . . . . . . 1727.2.2 Generaciones tecnologicas . . . . . . . . . . . . . . 172

7.3 Evolucion de los lenguajes y de la metodologıa . . . . . . 1757.4 Tecnologıa actual, tendencias y perspectivas . . . . . . . . 176

7.4.1 Inteligencia artificial . . . . . . . . . . . . . . . . . 1787.4.2 Las comunicaciones . . . . . . . . . . . . . . . . . . 178

7.5 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . 179

A Introduccion al DOS 181A.1 Organizacion de recursos . . . . . . . . . . . . . . . . . . . 182

A.1.1 Principales dispositivos . . . . . . . . . . . . . . . 182A.1.2 Archivos . . . . . . . . . . . . . . . . . . . . . . . . 182A.1.3 Directorios . . . . . . . . . . . . . . . . . . . . . . 184A.1.4 Prompt . . . . . . . . . . . . . . . . . . . . . . . . 187

A.2 Ordenes del DOS . . . . . . . . . . . . . . . . . . . . . . . 187A.2.1 Ordenes basicas . . . . . . . . . . . . . . . . . . . . 190A.2.2 Manejo de archivos . . . . . . . . . . . . . . . . . . 191A.2.3 Manejo de directorios . . . . . . . . . . . . . . . . 193A.2.4 Indicadores del sistema . . . . . . . . . . . . . . . 194A.2.5 Procesamiento por lotes . . . . . . . . . . . . . . . 195

A.3 Configuracion del DOS . . . . . . . . . . . . . . . . . . . . 195A.4 Otros aspectos de interes . . . . . . . . . . . . . . . . . . . 198

A.4.1 Encauzamiento: tubos y demas . . . . . . . . . . . 198A.4.2 Atributos y proteccion de archivos . . . . . . . . . 201A.4.3 Ampliaciones de la memoria en los PCs . . . . . . 201

Indice general 9

B Introduccion a UNIX 205B.1 Breve descripcion tecnica . . . . . . . . . . . . . . . . . . 205B.2 Una sesion con UNIX . . . . . . . . . . . . . . . . . . . . 207B.3 Gestion de archivos . . . . . . . . . . . . . . . . . . . . . . 208

B.3.1 Identificadores . . . . . . . . . . . . . . . . . . . . 209B.3.2 Tipos de archivos en UNIX . . . . . . . . . . . . . 209B.3.3 Permisos asociados con un archivo . . . . . . . . . 210B.3.4 Ordenes para la gestion de archivos . . . . . . . . . 211

B.4 El shell de UNIX . . . . . . . . . . . . . . . . . . . . . . . 212B.4.1 Encauzamiento de la entrada y salida . . . . . . . 213B.4.2 Caracteres comodın . . . . . . . . . . . . . . . . . 213B.4.3 Guiones de shell . . . . . . . . . . . . . . . . . . . 214

B.5 UNIX como sistema multitarea . . . . . . . . . . . . . . . 214B.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . 216B.7 Prontuario de comandos UNIX . . . . . . . . . . . . . . . 216B.8 Diferencias entre DOS y UNIX . . . . . . . . . . . . . . . 221

Bibliografıa 223

Indice alfabetico 228

Presentacion

Hay muchos y excelentes libros sobre informatica en un nivel intro-ductorio, con diversos enfoques y escritos en nuestra lengua. Muchos deellos estan dirigidos a futuros informaticos, por lo que resultan, quiza,demasiado profundos para quienes solo persiguen aplicar la informaticaen su trabajo; muchos otros, en cambio, se dirigen a no profesionales,por lo que ofrecen una vision panoramica demasiado general de diver-sos aspectos de la informatica, sin detenerse a analizar las implicacionespracticas de esos aspectos.

Este libro se situa entre ambos extremos, ofreciendo un medio paraintroducir en la informatica a profesionales de otros campos que, sin em-bargo, necesiten aplicar adecuadamente los computadores en su trabajo,poniendo en marcha programas de aplicacion o manejando bancos dedatos e incluso, muchas veces, resolviendo por sı mismos problemas nocontemplados en los programas comercializados.

Ası pues, el contenido del texto incluye los temas que consideramosbasicos para una introduccion practica a la informatica. Quiza sea esteenfoque practico lo que mejor distinga a este texto de otros de intro-duccion a la informatica, que adolecen muchas veces de contenidos muyextensos y teoricos, casi enciclopedicos, en los que es difıcil diferenciarlos conocimientos utiles en general de aquellos que solo encontraran deutilidad informaticos profesionales.

Por lo tanto, este libro se dirige a quienes necesiten una formacionintroductoria en informatica, con un enfoque basico y practico, pero rigu-roso. Entre ellos se encuentran, en primer lugar, todos aquellos alumnos

12 Presentacion

de los primeros cursos universitarios que cuenten con asignaturas sobreinformatica, tanto si se utiliza como herramienta aplicada a la resolucionde problemas como si es el propio objeto de estudio.

Este libro se dirige asimismo a aquellas personas que, de una u otraforma, estan relacionadas con el mundo de la informatica (operadores,comerciales, empresarios, etc.) y, sin embargo, ignoran lo que se escondetras la fachada de un computador (como se almacena la informacion,cuales son los procesos que se estan ejecutando en su interior, etc.) yque utilizan una jerga tecnica sin entender bien de que hablan.

Por ultimo, este libro se dirige tambien a todos los usuarios de com-putadores que esten interesados en conocer mejor su herramienta detrabajo, en saber que estan haciendo y por que lo hacen. El desarrolloy abaratamiento de los sistemas informaticos hace que computadoresde gran potencia que antes solo se encontraban en grandes centros decalculo, atendidos por administradores de sistemas cualificados y dedi-cados por completo a dicha tarea, esten hoy sobre nuestra mesa, y que elusuario se tenga que encargar de administrar los recursos de su computa-dor, por ejemplo, gestionando la memoria, haciendo copias de seguridad,eliminando virus, etc. Por todo ello, cualquier usuario deberıa dedicarsiquiera una pequena parte de su tiempo a conocer los principios basicosde funcionamiento y gestion de su computador.

A todos ellos, este texto les ofrece la posibilidad de adquirir esosconocimientos, partiendo de cero, o de actualizarlos.

Se ha seleccionado el contenido partiendo de las directrices senaladasen [DCG*89] y [ACM91] aunque, en un nivel introductorio, no sea po-sible ni deseable abarcar todos los temas que solo interesan al futuroprofesional de la informatica. Ası por ejemplo, quedan completamentefuera del alcance de nuestro texto las areas de inteligencia artificial yrobotica (AI) o la comunicacion hombre-maquina (HU).

Es frecuente, en cambio, que los destinatarios mencionados necesi-ten una parte de conocimientos generales sobre informatica y otra sobredesarrollo de algoritmos en un lenguaje de alto nivel: ambas partes se in-cluyen en los programas de asignaturas de introduccion a la informatica

Presentacion 13

de los primeros cursos universitarios, y tambien interesan esas dos par-tes a los profesionales que usen la informatica como una herramienta ydeseen sacar partido de ella.

El presente texto comprende dos volumenes, complementarios, dedi-cados respectivamente a esas dos partes, separando ası la presentacionde los conceptos generales y el desarrollo y organizacion de algoritmosy estructuras de datos. En la primera parte, el enfoque practico nosha llevado a relacionar los contenidos estudiados con sus repercusionespracticas o su utilizacion. En la segunda, se ha unificado el estudio delos algoritmos con su desarrollo, haciendo uso de un lenguaje de progra-macion concreto.

Este primer volumen se ha dividido en siete capıtulos, de los cua-les el primero ofrece una vision panoramica de la informatica, de loscomputadores y de su uso en la actualidad: bien poniendo en marchaaplicaciones ya desarrolladas y adaptandolas a nuestras necesidades, opreparando soluciones para problemas nuevos. Se presentan asimismolas primeras aproximaciones a los conceptos de algoritmo, programaciony lenguajes de programacion.

En el capıtulo 2 se aborda la representacion digital de la informacion.Conociendo las distintas formas de representacion, el programador podraelegir las mas apropiadas a las caracterısticas y naturaleza de su pro-blema y prever sus limitaciones. Por otra parte, el usuario de aplicacio-nes tendra una idea aproximada de como se almacena su informacion, elespacio que ocupa y las circunstancias en que los resultados podrıan noser del todo fiables.

El capıtulo 3 esta dedicado al aspecto fısico de los computadores ysus perifericos. Se explica su funcionamiento introduciendo los lenguajesde bajo nivel, y se comentan brevemente las arquitecturas orientadas alprocesamiento en paralelo.

En el capıtulo 4 se estudian los conceptos basicos para entender loque son los sistemas operativos, cuales son sus funciones y como lasllevan a cabo.

El capıtulo 5 se dedica a los lenguajes de programacion, en espe-

14 Presentacion

cial los lenguajes evolucionados. Se tratan distintos modelos de progra-macion, ademas del imperativo, de amplia difusion en estos anos. Seintroducen los metalenguajes para describir su sintaxis por su utilidad,tanto a programadores como a simples usuarios de sistemas operativos,incluso en el nivel de los comandos. Finalmente, se estudian los distintostipos de traductores y los entornos de programacion.

El capıtulo 6 trata sobre las bases de datos, una de las aplicacionesde mayor aplicacion en el mundo empresarial. Entre los modelos des-arrollados, destacamos el relacional y, entre los lenguajes de consulta, elSQL, debido a la extensa difusion de ambos en la actualidad.

Hemos dedicado el capıtulo 7 a los orıgenes, estado actual y pers-pectivas de futuro de la informatica. Aunque muchos textos situan estetema al principio, hemos preferido estudiarlo una vez que se conocenlos conceptos y la terminologıa basicos. De esta forma mejora la com-prension del capıtulo y puede valorarse en su justa medida cada uno delos logros historicos que en el se recogen.

Debido al enfoque practico que perseguimos con este libro, se inclu-yen dos apendices dedicados a introducir en el manejo de dos sistemasoperativos concretos de gran difusion en la actualidad: el DOS y elUNIX. El hecho de traer aquı estos anexos responde a dos razones: porun lado, conocer las caracterısticas de cada sistema interesa al estudiantecomo un ejemplo particular del capıtulo 4, permitiendo ver como se llevaa la practica lo estudiado en la teorıa; por otro, siempre resulta de uti-lidad al principiante disponer de un pequeno prontuario de las ordeneso mecanismos mas inmediatos que necesitara sin duda para empezar adesenvolverse en el entorno de esos sistemas operativos.

En la mayorıa de los capıtulos, se ha incluido una pequena coleccionde cuestiones y sencillos ejercicios de aplicacion, utiles para afianzar losconceptos introducidos.

Ademas, en cada capıtulo se han seleccionado unas pocas referencias,para completar los contenidos presentados con otros enfoques, o bienpara profundizar en el tema.

Presentacion 15

Agradecimientos

En primer lugar, es inexcusable agradecer a la Editorial la confianzaque ha puesto en nosotros al aceptar una publicacion sobre un tema enel que, ya lo hemos dicho, existen abundantes textos en nuestra lengua,ası como su paciencia en la recepcion de los originales.

Tambien debemos dejar constancia de nuestra gratitud hacia loscompaneros que nos han alentado, desde el principio, a redactar estetrabajo. En especial, a Benjamın Hernandez Blazquez, Marıa AngelesMedina Sanchez, Salvador Paz Martınez, Inma Perez de Guzman Mo-lina y Marisol Timoneda Salinas, y tambien a todos aquellos alumnosque, repetidamente, nos han sugerido la compilacion de unos apuntes declase.

Durante la redaccion de este trabajo, se han recogido numerosas opi-niones y sugerencias. En particular, debemos agraceder las minuciosasrevisiones y comentarios hechos por Manuel Enciso Garcıa-Oliveros, Car-los Rossi Jimenez, Jose Luis Galan Garcıa, Jaime Fernandez Martınez,Ma Angeles Cano Colorado, Oscar Martın Sanchez y Cristina RodrıguezIglesias.

Finalmente, quisieramos pedir la colaboracion de los lectores parasubsanar las posibles deficiencias que encuentren.

Capıtulo 1

Conceptos Basicos

1.1 Informatica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.2 Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.3 Sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . 191.4 Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.5 Algoritmos y programas . . . . . . . . . . . . . . . . . . . . . . 211.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.7 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . . . . 28

El objetivo principal de este capıtulo consiste en ofrecer una visiongeneral del contenido del libro, presentando los conceptos generales ylos terminos mas usados en informatica. Esta primera aproximacionnos permite situar cada uno de los temas siguientes en relacion con losdemas, y dentro del contexto de la informatica.

1.1 Informatica

La informatica es la ciencia que estudia el procesamiento automaticode la informacion. Aunque la necesidad de razonar sobre este tipo deprocesos existe desde tiempo atras, la consolidacion de la informaticacomo ciencia solo se produce con el desarrollo de los computadores, apartir de los anos cuarenta. Se trata, por lo tanto, de una ciencia muyjoven, pero que ha evolucionado a gran velocidad.

18 Capıtulo 1. Conceptos Basicos

La piedra maestra sobre la cual se ha podido desarrollar la infor-matica la representa el computador, que es una herramienta de graneficacia en muy diversos trabajos, y en particular en aquellos que ma-nejan un gran volumen de datos o de operaciones. Esta versatilidadtiene dos aspectos: por un lado, es posible usarlo como herramientapara aplicaciones concretas ya desarrolladas (1.4), y por otro se pue-den disenar soluciones a la medida de problemas nuevos, mediante laprogramacion (1.5).

El desarrollo de un programa nuevo para resolver un determinadoproblema requiere, por una parte, conocer algun procedimiento siste-matico (algoritmo) que lleve a su solucion, y por otra, la necesidad deexpresarlo en un lenguaje de programacion que el computador puedacomprender y ejecutar.

1.2 Computador

Un computador es una maquina electronica que procesa informacionsiguiendo las instrucciones de un programa registrado.

Para comunicarse con el exterior dispone de unos medios de entrada,a traves de los que recibe la informacion, y unos medios de salida, pordonde la envıa. Tiene dispositivos que le permiten almacenar la infor-macion (los datos, los resultados y el propio programa) y procesarlasiguiendo las instrucciones del programa.

La informacion que se procesa en el computador (programas, da-tos y resultados) esta expresada en forma digital binaria, combinandoceros y unos. En consecuencia, tanto los programas como los datos yresultados deben codificarse en este formato para poder ser procesados.Una vez obtenidos los resultados, estos tienen que ser decodificados paramostrarlos al usuario.

Como hemos visto, un computador se compone de dos partes cla-ramente diferenciadas: una fısica, que podemos tocar, constituida porcircuitos electronicos, teclado, pantalla, unidades de disco, etc., llamadohardware, o en castellano soporte fısico, y otra parte inmaterial, que no

1.3. Sistema operativo 19

usuariosoftware de aplicaciones y del sistema

sistema operativohardware

Tabla 1.1. Estructura de niveles en un computador.

podemos tocar, constituida por los programas y datos, llamada softwareen ingles y soporte logico en castellano. Ambas partes estan ıntimamenterelacionadas de forma que una no puede operar sin la otra y viceversa.

1.3 Sistema operativo

Cuando se pone en marcha el computador, el primer programa queentra en funcionamiento es el sistema operativo, que gestiona y coordinalos dos aspectos, fısico y logico, del computador. Se trata de un conjuntode programas que se interrelacionan estrechamente con el hardware, ges-tionando los procesos en ejecucion, las operaciones de entrada y salida yla memoria. Por ello, resulta imprescindible para el funcionamiento delcomputador.

Los demas programas funcionan sobre el sistema operativo, y songestionados por el. Entre ellos, se encuentran las herramientas parael desarrollo de programas (tales como los editores y traductores delenguajes), y tambien los programas de aplicaciones.

Por lo tanto, podemos decir que dentro del computador existe ciertaorganizacion por niveles (vease la tabla 1.1): en el nivel mas bajo seencuentra el hardware, que por sı mismo no puede realizar ninguna tarea;a continuacion se encuentra el sistema operativo, y desde el se arrancanlos otros programas, que a su vez se relacionan directamente con elusuario.

En resumen, el hardware no puede funcionar por sı mismo: nece-sita la ayuda del software. La union de ambos constituye una maquinavirtual, tremendamente versatil.

20 Capıtulo 1. Conceptos Basicos

1.4 Aplicaciones

El software de aplicaciones esta formado por aquellos programas quehan sido desarrollados para realizar tareas concretas. Se llama ası por-que el computador “se aplica” a un trabajo determinado, facilitando suejecucion y resolucion. Por ejemplo, un procesador de textos, una hojade calculo, un gestor de bases de datos, un generador de graficos, unprograma de contabilidad, juegos, etc.

Entre las aplicaciones mas utilizadas se encuentran las siguientes:

• Los procesadores de textos son programas que facilitan la elabo-racion de textos en el computador, desde una carta hasta un li-bro. Permiten operar con margenes, tabuladores, justificacion,sangrado, tipos de letra, busqueda y sustitucion de palabras, pa-ginacion, separacion de sılabas, sinonimos, ortografıa, etc. Sonprobablemente los programas mas usados.

• Las hojas de calculo son programas utilizados en la creacion detablas, con datos relacionados entre sı, inicialmente ideados parael analisis financiero. Tienen un formato matricial, en el que sepueden definir operaciones y funciones sobre las distintas compo-nentes de la matriz. Al modificar algun dato, todas las operacionesque lo utilizan son actualizadas de forma automatica.

• Los gestores de bases de datos permiten gestionar la informacionreferida a personas o artıculos, realizando operaciones de edicion,ordenacion, busqueda, etc.

• Los generadores de graficos facilitan la creacion de distintos tiposde graficos, a partir de datos de hojas de calculo o bases de datos,o directamente introducidos por el usuario.

Existen muchas otras aplicaciones, de uso menos general, como sonlos programas matematicos, estadısticos, de CAD (Diseno Asistido porComputador), aplicaciones contables y de gestion de empresas, comuni-caciones, juegos, etc.

1.5. Algoritmos y programas 21

El desarrollo del software de aplicaciones ha sido muy grande (se cal-cula que para los computadores compatibles con IBM hay mas de cienmil aplicaciones diferentes). A su vez, los distintos programas van evo-lucionando, y aparecen nuevas versiones con mas posibilidades y mayorvelocidad de ejecucion, aunque tambien con mayor demanda de potenciay memoria.

En algunos casos, varios de estos programas se unen en uno solo,compartiendo datos e instrucciones, y constituyen un paquete integrado.En general suele integrarse una hoja de calculo con un generador degraficos y, a veces, con una base de datos y un procesador de textos.

Gran parte de los programas de aplicacion pueden configurarse, enmayor o menor medida, de acuerdo con los gustos y necesidades delusuario; sin embargo, es posible que un programa concreto no puedaatender esas necesidades. En este caso, resulta muy difıcil, por no decirimposible (e ilegal en muchos casos), modificar el programa para incluiruna nueva tarea. Conscientes de esta falta de flexibilidad del software,muchos fabricantes estan presentando programas de aplicacion que asu vez pueden ser programados, mediante lenguajes de programacionpropios o estandares.

Ası pues, aunque la mayorıa de las personas que utilizan los compu-tadores trabajan con programas de aplicacion y no necesitan recurrir ala programacion, tambien hay un buen numero de usuarios que, sin serinformaticos profesionales, pueden obtener un mayor rendimiento de es-tos programas a traves de la programacion. Por ejemplo, muchas hojasde calculo, gestores de bases de datos y paquetes matematicos, hoy endıa, son programables.

1.5 Algoritmos y programas

El desarrollo de programas es otro de los aspectos fundamentalesde la utilizacion de los computadores porque continuamente aparecennuevos problemas o tareas susceptibles de ser procesados de forma au-tomatica. Al mismo tiempo se van detectando las lagunas o deficienciasen las aplicaciones existentes, lo que impulsa a su renovacion con la

22 Capıtulo 1. Conceptos Basicos

creacion de nuevas versiones de los programas existentes. El desarrollodel hardware posibilita tambien la aparicion de nuevas aplicaciones maspotentes y con mayores demandas de recursos.

Desde el planteamiento de un problema hasta la obtencion de susolucion en el computador hay que recorrer una serie de etapas:

1. En primer lugar, antes de resolver un problema en el computadorhay que conocer los pasos y operaciones que hay que realizar paraobtener la solucion del problema, es decir, su algoritmo, porqueel computador solamente es capaz de seguir aquellas instruccionesque nosotros le indiquemos. Si no conocemos el proceso que nosconduce a la solucion del problema, el computador no nos la va adar. Esta secuencia de pasos y operaciones constituye una soluciongeneral al problema planteado de forma que, siguiendo el proceso,se llega a la solucion del problema sean cuales fueran los datosproporcionados.

2. Una vez conocida esta solucion general del problema, hay que ex-presarla en un lenguaje especial, que pueda ser comprendido yejecutado por el computador, es decir, en un lenguaje de progra-macion, creando un programa.

3. Posteriormente, hay que comprobar que el programa produce lassoluciones esperadas (ya sea utilizando datos de prueba o mediantemetodos formales) y subsanar los errores detectados.

4. Por ultimo, es importante documentar el programa de forma quesi cambiaran algunas de las circunstancias iniciales, sea posiblemodificar y adaptar convenientemente, facilitando las labores demantenimiento.

1.5.1 Algoritmos

Una de las caracterısticas de los seres humanos es su capacidad paraplantearse y resolver problemas. Estos pueden ser de naturaleza muy

1.5. Algoritmos y programas 23

diversa, desde los problemas mas inmediatos relacionados con la pro-pia subsistencia, hasta los problemas mas abstractos de naturaleza ma-tematica o filosofica.

Un algoritmo es la descripcion precisa de los pasos que nos permitenobtener la solucion de un problema determinado. En general, los pa-sos son acciones u operaciones que se efectuan sobre ciertos objetos. Alcomienzo del algoritmo, los objetos tienen unos valores iniciales (los da-tos) que varıan como consecuencia del proceso descrito por el algoritmo,obteniendose los valores de salida o resultados.

La informatica estudia el procesamiento de la informacion mediantealgoritmos, aunque el concepto de algoritmo, que proviene de las ma-tematicas, es muy anterior e independiente de la existencia de la in-formatica y los computadores. 1

El concepto de algoritmo tiene una importancia fundamental den-tro de la informatica, por ser previo a la resolucion del problema en elcomputador; si no se conoce el algoritmo para resolver un problema, nopuede plantearse su resolucion en el computador.

Aunque existen algoritmos registrados para la realizacion de tareasmuy variadas, en general los algoritmos desarrollados resuelven solo de-terminadas partes de un problema como, por ejemplo, la ordenacion deuna lista de valores, pero no un problema real completo. En consecuen-cia, habra que disenar un algoritmo para su resolucion.

El diseno de algoritmos implica un analisis profundo del problema,de sus datos iniciales, del proceso que se les aplica y de los resultadosesperados. A partir de este analisis debe establecerse cual es la mejorestructura de datos para resolver el problema. De hecho, Niklaus Wirth,uno de los padres de la programacion estructurada, titula una de susobras fundamentales Algoritmos + Estructuras de Datos = Programas,mostrando la importancia que concede a dichas estructuras [Wir86b].

1Se conoce un algoritmo para el calculo del maximo comun divisor de dos numerosnaturales, debido a Euclides, que data del siglo IV a.C., al que se conoce como el“abuelo” de todos los algoritmos.

24 Capıtulo 1. Conceptos Basicos

Existen tecnicas que facilitan el diseno de algoritmos, tales como laprogramacion estructurada, la programacion modular, el refinamientopor pasos, el diseno descendente y la estructuracion y abstraccion de losdatos.

Para poder expresar algoritmos se utilizan lenguajes con la necesariaprecision, llamados lenguajes algorıtmicos, que son independientes de loslenguajes de programacion. Los mas utilizados son el seudocodigo y losdiagramas de flujo.

Dado un problema concreto y conocido el algoritmo que lo resuelve,para obtener la solucion del problema tenemos que partir de los datosde entrada, y ejecutar las acciones descritas en el algoritmo. Al procesode ejecutar un algoritmo concreto para unos datos determinados se lellama computo, de donde procede el termino computador. El procesadores quien ejecuta materialmente el computo.

1.5.2 Programacion

Como decıamos al principio, consideramos al computador como unaherramienta que nos ayuda en la resolucion de problemas; para ello espreciso conocer previamente un algoritmo que lleve a su solucion. Acontinuacion hay que expresar el algoritmo en un lenguaje de progra-macion, que pueda ser comprendido y ejecutado por el computador,desarrollandose un programa. A este proceso se le llama programacion.

Una aportacion sustancial para realizar este paso tan delicado con lacorreccion necesaria la constituyen:

1. El refinamiento por pasos, que permite aumentar el grado de de-talle en la expresion del algoritmo segun convenga, para adaptarloa las necesidades del lenguaje.

2. La programacion estructurada, que utiliza las estructuras de pro-gramacion propias de los lenguajes evolucionados.

3. La programacion modular que, al permitir el uso de modulos osubprogramas, facilita el empleo de otras tecnicas de diseno dealgoritmos y la depuracion de los programas .

1.5. Algoritmos y programas 25

4. No debe olvidarse la importancia de la estructuracion y abstraccionde datos, presente tambien en los lenguajes evolucionados, quedebe emplearse con todo su potencial en el diseno de algoritmos y,posteriormente, en los programas.

El desarrollo de aplicaciones cada vez mas complejas y el crecimientodel sector de produccion de software, ha hecho que se apliquen a la pro-gramacion tecnicas de ingenierıa que garanticen la viabilidad y calidadde los grandes proyectos de aplicaciones, lo que se conoce como inge-nierıa del software.

1.5.3 Lenguajes de Programacion

El computador dispone de un conjunto de instrucciones que son reco-nocidas y ejecutadas por el procesador. Estas instrucciones se expresan,al igual que los datos, en forma digital binaria, si bien para reconocerlasmejor y evitar errores se les asignan unos nombres mnemotecnicos quepermiten recordar sus funciones. Estas instrucciones constituyen el len-guaje de maquina del computador, y suelen ser diferentes en funcion delfabricante del procesador.

El lenguaje de maquina es ejecutado a gran velocidad por el procesa-dor, en los computadores actuales esta velocidad se mide en millones deoperaciones por segundo; por otra parte, el lenguaje de maquina permiteel acceso directo a todos los organos del computador. Por estos motivosel lenguaje maquina es insustituible en aquellas aplicaciones donde seanecesaria una gran rapidez de ejecucion, o el acceso directo a ciertosorganos del computador.

Las instrucciones del lenguaje de maquina son en general muy pocopotentes, operan sobre datos de pequeno tamano, y en muchos casos noincluyen ni multiplicaciones ni divisiones. Para poder operar sobre da-tos mayores o realizar operaciones mas complejas, tales como potenciaso logaritmos, hay que fraccionar los datos y aplicar sucesivamente lasoperaciones simples, siguiendo algoritmos especıficos. Por este motivo,y por su estrecha relacion con el hardware, a los lenguajes de maquina seles llama lenguajes de bajo nivel . En consecuencia, la tarea de escribir

26 Capıtulo 1. Conceptos Basicos

programa en ejecucion

programa objeto

programa fuente

algoritmo

problemaJJJ

JJJ

JJJ

JJJ

diseno de algoritmos

programacion

traductor

procesador

Figura 1.1. Resolucion de un problema mediante la programacion.

programas en lenguaje de maquina es tediosa y esta sujeta a muchoserrores.

Ante la necesidad de escribir programas cada vez mas complejos yfiables, los informaticos desarrollaron lenguajes con niveles mas elevadosde abstraccion, que incluıan operaciones y datos mas complejos a losque llamaron lenguajes de alto nivel. De esta forma se acorta el caminoentre el algoritmo y su expresion en forma de programa, porque loslenguajes de alto nivel pueden expresar mejor las acciones y objetos queintervienen en los algoritmos.

Una de las grandes ventajas de estos lenguajes radica en que la tra-duccion del programa escrito en lenguaje de alto nivel (programa fuente)al lenguaje de maquina (programa objeto) que, como recordamos, es elunico que puede ser ejecutado por el computador, es automatica y serealiza por un programa traductor.

Para ello, junto con las especificaciones del lenguaje, reglas de sinta-xis y semantica, se desarrollan los necesarios programas de traduccion.Durante el proceso de traduccion se suelen detectar errores, debidos al

1.6. Ejercicios 27

incumplimiento de las reglas sintacticas del lenguaje o a causas mas suti-les, que deben corregirse antes de poder ejecutar el programa. Si durantela ejecucion de un programa se realizan operaciones no permitidas (talescomo divisiones por cero, accesos fuera de lımites, . . . ) se producen losllamados errores de ejecucion.

Aunque un programa se haya traducido eliminando todos los erroressintacticos y de ejecucion, aun puede no realizar correctamente la tareapara la que fue creado, por contener errores logicos. Por lo tanto esnecesario comprobar el funcionamiento del programa utilizando datosde prueba que permitan realizar los calculos a mano y comprobar asılas partes mas conflictivas del programa. Este proceso se conoce comodepuracion de los programas.

En la actualidad la mayorıa de los programas se escriben en lengua-jes de alto nivel, reservandose los lenguajes de bajo nivel para aquellasaplicaciones donde se necesite una elevada velocidad o un acceso directoa los organos del computador; por ejemplo, en los programas traductoreso en programas de gestion del computador.

1.6 Ejercicios

1. Trate de describir con precision mediante frases sencillas algunas tareascotidianas, como leer un libro o realizar un trayecto en autobus.

2. Dado el algoritmo de Euclides que se menciona en el apartado 1.5.1,

Sean A,B,R ∈ IN.Mientras B 6= 0, hacer: R← A modulo B

A← BB ← R

Escribir A

trate de seguirlo, utilizando lapiz y papel (por ejemplo, para A = 12 yB = 8). Esta formulado desde el punto de vista del procesador: cuando sedice “leer A, B”, el procesador debe pedir dos valores para las variablesA y B al usuario; la instruccion “mientras b 6= 0 hacer ...” significaque mientras la condicion sea cierta hay que realizar las operaciones

28 Capıtulo 1. Conceptos Basicos

comprendidas entre dicha instruccion (...) que, en nuestro caso, es unasecuencia de tres. La operacion “modulo” expresa el resto de la divisionentera, y el sımbolo “←” indica que, tras calcular el resultado de laexpresion a su derecha, se retendra como el valor de la variable a suizquierda.

3. Clasifique los siguientes elementos del computador como pertenecientes alhardware, al software del sistema o al de aplicaciones: pantalla, teclado,unidad de entrada y salida, programa del sistema operativo, compilador,procesador de textos, etc.

1.7 Comentarios bibliograficos

Existe una gran cantidad de textos de introduccion a la informatica quese pueden recomendar con caracter general. Aun cinendonos a los escritos encastellano o traducidos, existen bastantes textos excelentes sobre el tema, condiversos enfoques.

En [GL86] encontramos un panorama general sobre informatica en el que seutiliza como tema unificador el concepto de algoritmo, que sus autores juzgancomo el concepto central de la computacion. Se trata de un texto apropiadopara el principiante y de lectura amena. El libro de Bishop ([Bis91]) es tambienun libro muy asequible de introduccion en informatica.

[PLT89] trata con gran detalle la estructura fısica de los computadores, porlo que interesara a quienes deseen detenerse en este aspecto de la informatica.

Recomendamos [FSV87] a quien desee dirigirse hacia los fundamentos teori-cos de la informatica (la teorıa de algoritmos, la logica y la teorıa de automatasy lenguajes formales).

Por ultimo, puesto que la informatica es una ciencia reciente, cuenta conmuchos vocablos nuevos, en su mayorıa anglicismos, que muchas veces se em-plean de forma ilegıtima, o que se aplican con un sentido equivocado. En [VJ85]y [MA85] puede consultarse el significado de esos terminos.

Capıtulo 2

Representacion digital dela informacion

2.1 Conceptos previos . . . . . . . . . . . . . . . . . . . . . . . . . 292.2 Representacion digital de los datos . . . . . . . . . . . . . . . . 352.3 Codigos redundantes . . . . . . . . . . . . . . . . . . . . . . . . 492.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.5 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . . . . 57

La representacion de la informacion en los computadores digitalespersigue dos objetivos: en primer lugar, procesarla, permitiendo su ma-nipulacion eficiente, para lo cual se han ideado diferentes convenios, delos que veremos los mas importantes; y en segundo, asegurarla contraerrores durante su almacenamiento o durante las transmisiones, lo quese consigue incorporando en la codificacion el empleo de la redundanciapara detectar y corregir dichos errores.

2.1 Conceptos previos

2.1.1 Informacion analogica y digital

Las magnitudes continuas son las que pueden adoptar los infinitosvalores de un intervalo de numeros reales, tales como la longitud de unsegmento, velocidad, temperatura, intensidad de un sonido, etc.

30 Capıtulo 2. Representacion de la informacion

Las magnitudes discretas tienen naturaleza discontinua, tales comola longitud (numero de sılabas) de una palabra, capacidad (numero depasajeros) de un vehıculo, etc.

En la practica, es frecuente que las magnitudes continuas sean trata-das como discretas: el peso de una persona (que se redondea en kilos); latemperatura (en grados y decimas de grado); la longitud de un segmento,medida con un dispositivo de precision hasta los milımetros.

En relacion con ambos tipos de magnitud se considera la informacionanalogica, que es de naturaleza continua, pudiendo tomar infinitos valo-res; y la informacion digital, que es de naturaleza discreta. Aunque estaultima puede tomar infinitos valores ( IN), en un computador digital lainformacion es discreta y, ademas, finita.

En las calculadoras, la digitalizacion de variables analogicas produceun efecto de redondeo, que debe ser tenido en cuenta y tratado con-venientemente para evitar errores de calculo (vease la seccion 2.3); enel monitor de un ordenador, supone el ajuste de la imagen proyectadasobre una matriz de puntos.

2.1.2 Unidades de informacion en los sistemas digitales

La razon de ser de un computador es el procesamiento de infor-macion. Para poder hablar con propiedad de este procesamiento, debe-mos definir unidades de medida que nos permitan cuantificar de algunmodo la accion del computador sobre la informacion suministrada. Con-sideramos las siguientes:

• Bit (BInary digiT ) es la cantidad de informacion que puede alma-cenarse en una variable binaria. No hay que confundir el bit conla variable ni con su valor: una variable binaria es la que puedetomar dos valores estables: 0 o 1, blanco o negro, sı o no, etc.

La necesidad de codificar informaciones mas complejas ha llevadoa agrupar varios bits, apareciendo ası las siguientes unidades:

• El byte u octeto es la cantidad de informacion que puede codificarseen 8 bits; representa por tanto 28 = 256 valores.

2.1. Conceptos previos 31

• La palabra se define en relacion con la maquina considerada, comola cantidad de informacion que la maquina puede manejar de unasola vez. Para evitar equıvocos, se habla de palabras de 8 bits, 16bits, 32 bits, etc.

• 1 Kbyte = 210 bytes = 1.024 bytes. Se suele llamar kilobyte, aun-que esto puede resultar equıvoco, ya que el prefijo “kilo” significa1.000 (y no 1.024).

• 1 Mbyte = 1.048.576 bytes (220 = 1.0242). Analogamente, debeadvertirse que “mega” no significa un millon en este contexto.

2.1.3 Sistemas de numeracion posicionales

Aunque se conocen sistemas no posicionales, tales como el de nume-racion romana o el sexagesimal, que usamos para medir el tiempo y losangulos, el sistema de numeracion mas difundido en la actualidad es sinduda el sistema decimal posicional, o sistema arabigo-hindu, inventadohacia el siglo VIII.

Por otra parte, en el contexto de la informatica se usan frecuente-mente sistemas de numeracion posicional en bases tales como 2 (ya queel bit tiene dos posiciones), 16 (como compactacion de palabras de 4bits), etc.

Para aprender a manejarlos, se recurre frecuentemente a la analogıacon el sistema de numeracion mas conocido: el de base 10. Se llamadecimal porque cada cifra o dıgito puede tomar diez posibles valores: del0 al 9; se llama posicional porque el valor real de cada dıgito dependede su posicion.

10475 = 1 ∗ 104 + 0 ∗ 103 + 4 ∗ 102 + 7 ∗ 101 + 5 ∗ 100

A la cantidad 10 se le llama base; las potencias de 10 son los pesosasociados a cada posicion, y los factores o coeficientes de cada peso sonlas cifras de la representacion. Tambien se podrıa haber representadoen forma polinomica del siguiente modo:

10475 = 1 ∗ 104 + 0 ∗ 103 + 47 ∗ 101 + 5 ∗ 100

32 Capıtulo 2. Representacion de la informacion

pero la primera forma es la unica donde las cifras son todas menoresque la base. En general, esta afirmacion adopta la siguiente forma, cuyademostracion se incluye al final de este capıtulo.

Teorema 2.1 En un sistema de numeracion en base b > 1, todo enteroN positivo tiene una unica representacion de la forma

N = cpbp + cp−1b

p−1 + . . .+ c1b1 + c0b

0

donde 0 ≤ ci < b para todo i = 0, 1, . . . , p

Conversion entre sistemas

En primer lugar, la expresion decimal de un numero de cifras cp . . . c0en base b se obtiene sencillamente sumando los valores reales correspon-dientes a los diferentes dıgitos:

[cp . . . c0](b = cp ∗ bp + . . .+ c0 ∗ b0

Por ejemplo, 275(8 = 2 ∗ 82 + 7 ∗ 81 + 5 ∗ 80 = 189(10

En segundo lugar, representar el numero 241(10 en el sistema de base5, equivale a expresarlo en forma polinomica con las sucesivas potenciasde esa base, siguiendo la idea de la demostracion del teorema:

241 5 ⇒ 241 = 48 * 5 + 1

1 48 5 ⇒ 48 = 9 * 5 + 3

3 9 5 ⇒ 9 = 1 * 5 + 4

4 1 ⇒ 1 = 0 * 5 + 1

Por lo tanto,

241 = 48 ∗ 5 + 1

= (9 ∗ 5 + 3) ∗ 5 + 1

= ((1 ∗ 5 + 4) ∗ 5 + 3) ∗ 5 + 1

= 1 ∗ 53 + 4 ∗ 52 + 3 ∗ 51 + 1 ∗ 50 = 1431(5

2.1. Conceptos previos 33

Sistemas de numeracion mas usuales

El sistema mas empleado en electronica digital es el de base 2, lla-mado binario (natural). En informatica tienen interes los sistemas cuyabase es una potencia de dos: 2, 4, 8, 16. La siguiente tabla recoge losprimeros numeros naturales, expresados en algunos de esos sistemas yen el decimal:

dec. binario octal hexad.

0 0 0 01 1 1 12 10 2 23 11 3 34 100 4 45 101 5 56 110 6 67 111 7 78 1000 10 8

dec. binario octal hexad.

9 1001 11 910 1010 12 A11 1011 13 B12 1100 14 C13 1101 15 D14 1110 16 E15 1111 17 F16 10000 20 1017 10001 21 11

En el sistema hexadecimal se usan los dıgitos 0, . . . , 9, A, . . . F para lascantidades cero, . . . , nueve, diez, . . . , quince respectivamente. Ası porejemplo, C7A(16 = 12 ∗ 162 + 7 ∗ 161 + 10 ∗ 160 = 3194(10, ya que losvalores de A y C en el sistema de base 16 son 10 y 12, respectivamente.

Se observa que, en una base cualquiera b, con N cifras (o menos)es posible expresar bN cantidades distintas; inversamente, para podercomponer C combinaciones distintas se necesita disponer de un numerode cifras igual a logb C, redondeado por exceso.

Como consecuencia de lo anterior, cuanto mayor sea la base adoptadase pueden expresar mas cantidades (combinaciones) para un numero fijode cifras; inversamente, cuanto mayor sea la base, es posible usar menoscifras para expresar una misma cantidad.

34 Capıtulo 2. Representacion de la informacion

Observacion

La conversion de binario en octal o en hexadecimal se puede abreviardel siguiente modo:

11 001 111 010 101 100(2

= 11 001 111 010 101 100= 3 1 7 2 5 4 = 317254(8= 1 1001 1110 1010 1100= 1 9 14 10 12 = 19EAC(16

¿A que se debe el funcionamiento de este mecanismo?

Operaciones aritmeticas en base dos

Para las operaciones elementales se usan las tablas correspondientesa la base de que se trate. Por ejemplo, para el caso binario la tabla desumar es la siguiente:

+ 0 10 0 11 1 10

Y entonces, son validas las reglas conocidas para las operaciones en basediez. Por ejemplo, en el sistema binario natural, tenemos:

1001+ 1011

10100

100101− 11011

01010

Para la resta se usa frecuentemente el metodo del complemento: enlugar de la resta propuesta, se halla la suma correspondiente comple-mentando el sustraendo (min− sus→ min+ comp(sus), siendo el com-plemento (comp) el numero resultante de cambiar cada cero por un unoy viceversa), suprimiendo la cifra excedente, posiblemente aparecida porel arrastre, y sumando una unidad al resultado obtenido:

100101− 11011 →

100101+ 100100

1001001 → 001010

2.2. Representacion digital de los datos 35

2.2 Representacion digital de los datos

En los sistemas digitales, no resulta viable dar una representacionvalida para codificar todos los numeros; por otra parte, los diversossistemas empleados dan diferentes tratamientos a numeros tan usualescomo el uno (segun se considere como real o como entero). Estudiaremosdiversos convenios para diferentes conjuntos de numeros, ası como suslimitaciones.

En este apartado, supondremos que disponemos de un espacio de Nbits, con lo que es posible representar 2N enteros distintos.

2.2.1 Representacion de los numeros enteros

Numeros enteros positivos

Si se considera unicamente numeros enteros positivos, con N bits deespacio serıa posible representar los numeros de 0 a 2N−1. La forma masnatural de lograrlo consiste en interpretar cada combinacion mediantela cantidad que representa en binario. Por ejemplo, con 1 byte (es decir,N = 8) se representarıan los numeros 0, . . . , 255 en este sistema.

Numeros enteros con signo. Convenio del signo-magnitud

Para representar los numeros enteros (con signo), el sistema massimple es el convenio de signo-magnitud, consistente en reservar el pri-mer dıgito binario para codificar el signo (suele representarse el signo+ con un cero y el − con un uno) y los siguientes N − 1 para el va-lor absoluto. Ası, en este sistema tienen representacion las cantidades±0, . . . ,±(2N − 1). En el caso particular de 1 byte, esas cantidades son−127, . . . ,−0,+0, . . . ,+127.

En este sistema, la aritmetica es bastante simple: la suma de canti-dades del mismo signo y la resta de cantidades de distinto signo siguenla regla basica en binario. Para sumar cantidades de distinto signo, orestar cantidades del mismo signo, resulta mas practico el metodo delcomplemento.

36 Capıtulo 2. Representacion de la informacion

Se observa el inconveniente de que el cero tiene una doble represen-tacion, por lo que el test de la comparacion para la igualdad en estesistema debe tenerlo en cuenta. Por otra parte, la suma/resta de signosy valores absolutos necesita dos algoritmos distintos, que no resultanmuy eficientes. Los siguientes sistemas surgen precisamente para tratarde paliar estas deficiencias.

Numeros enteros con signo. Complemento restringido

Para comprender mejor el funcionamiento de este convenio en bina-rio, conviene introducirlo primero en base diez. Si consideramos palabrasde N = 2 dıgitos (decimales), es posible representar 102 = 100 canti-dades distintas. En este convenio se opta por considerar los numerosnegativos de {−49, . . . ,−0}, y los positivos de {0, . . . , 49}, del siguientemodo: los numeros positivos se representan en decimal natural, mientrasque para cada negativo −z se toma la cantidad 99− z (complemento dez respecto de 102 − 1, que es la N=2 potencia de la base menos uno).Ası por ejemplo, tenemos:

repr(29) = 2 9

repr(−29) = 99− 29 = 7 0

Con este convenio, las cantidades

−49,−48, . . . ,−0, 0, 1, . . . , 48, 49

se representan respectivamente mediante

5 0 , 5 1 , . . . , 9 9 , 0 0 , 0 1 , . . . , 4 8 , 4 9

Aunque se observa el inconveniente de que el cero tiene dos repre-sentaciones, la ventaja de este convenio consiste en que la suma de dosnumeros, sea cual fuere su signo, se lleva a cabo con un mismo algoritmo,que solo se diferencia de la suma de enteros en que el posible arrastre seagrega al resultado final:

+ 23+ − 15

→→

2 3+ 8 41 0 7 +1→ 0 8

2.2. Representacion digital de los datos 37

Consideremos ahora esta representacion con palabras de N = 4 dıgitosbinarios: las cantidades representables son

−7,−6, . . . ,−0,+0, . . . ,+6,+7→ −111(2,−110(2, . . . ,−0(2,+0(2, . . . ,+110(2,+111(2

que, al complementar las negativas respecto de 1111, resulta:

→ 1000, 1001, . . . , 1111, 0000, . . . , 0110, 0111

Numeros enteros con signo. Complemento autentico

Empezamos nuevamente con la base decimal como punto de partida,y consideremos tambien palabras de longitud N = 2. Ahora se opta porconsiderar los numeros negativos de {−50, . . . ,−1}, y los positivos de{0, . . . , 49}, del siguiente modo: los numeros positivos se representan enbinario natural, mientras que para cada negativo −z se toma la cantidad100− z (complemento de z respecto de 10, que es la base para N = 2).

repr(29) = 2 9

repr(−29) = 100− 29 = 7 1

Con frecuencia se emplea otra regla equivalente para complementarlos numeros negativos, consistente en anadir una unidad al correspon-diente complemento restringido.

Con este convenio, las cantidades

−50,−49, . . . ,−1, 0, 1, . . . , 48, 49

se representan respectivamente mediante

5 0 , 5 1 , . . . , 9 9 , 0 0 , 0 1 , . . . , 4 8 , 4 9

Este sistema tiene las mismas ventajas que el anterior, y ademas elcero se representa de un unico modo.

38 Capıtulo 2. Representacion de la informacion

Como en el caso anterior, consideremos ahora la base dos, con pala-bras de N = 4 dıgitos, donde tienen cabida las cantidades

−8,−7, . . . ,−1,+0, . . . ,+7→ −1000(2,−111(2, . . . ,−1(2,+0(2, . . . ,+110(2,+111(2

que, al complementar las negativas respecto de 10000, resulta:

→ 1000, 1001, . . . , 1111, 0000, . . . , 0110, 0111.

En este sistema, la suma tambien se lleva a cabo con un mismo algo-ritmo, igual al usado para el complemento restringido, pero ignorandola posible cifra de arrastre:

+ 23+ − 15

→→

2 3+ 8 51 0 8 → 0 8

Funcionamiento de las operaciones aritmeticas

Debe subrayarse que las operaciones anteriores no coinciden con lasaritmeticas, debido a la posibilidad de que se produzca un desborda-miento; los diferentes sistemas responden ante esta circunstancia de di-ferentes modos: por ejemplo, ignorando la ultima cifra de arrastre, ointerrumpiendo su trabajo para delatar una condicion de error. Por lotanto, es necesario prever esta posibilidad y conocer de que modo re-acciona nuestro sistema. Sobre este asunto volveremos mas adelante,dentro de este mismo capıtulo.

Formatos de los numeros enteros en las computadoras

Entre los convenios presentados, el mas frecuente es el del comple-mento autentico en base dos, llamado simplemente complemento a dos.Ahora bien, dependera de la longitud de palabra la cantidad de com-binaciones posibles y, por tanto, el rango de enteros considerado. Porotra parte, aunque ciertos sistemas trabajan con palabras de longitudvariable, lo corriente es optar por uno o varios formatos con tamano fijo:simple (1 byte), doble (2 bytes), cuadruple (4 bytes) u octuple (8 bytes).

2.2. Representacion digital de los datos 39

2.2.2 Representacion de los numeros reales

Debe resaltarse que, en general, solo resulta posible representar apro-ximaciones de los numeros reales mediante numeros decimales, con solounas pocas cifras significativas. En el siguiente apartado estudiaremoslos efectos de este redondeo.

En este apartado, supondremos que disponemos de un espacio de Nbits, con lo que es posible representar 2N enteros distintos.

Convenio con coma fija

Si disponemos de un espacio de N bits para representar un numeroreal, la caracterıstica principal de este convenio es la reserva implıcitade algunos bits fijos para la parte decimal, asumiendose la coma en unaposicion fija. A su vez, existen los siguientes modos de representacionen coma fija:

• Sistema signo y valor absoluto

En este convenio se reserva un bit para codificar el signo, y del restose destina una cantidad fija para representar el valor absoluto dela parte entera, y los demas para la decimal:

1 0 1 0 0 1 0 0 1 0 1 1 1 1 0 1︸︷︷︸±

︸ ︷︷ ︸p. entera

. ︸ ︷︷ ︸dec.

Si consideramos por ejemplo N = 16, siendo el primer bit el quecodifica el signo, los siguientes 12 los de la parte entera, y los3 restantes los de la parte decimal, resulta que la representacionanterior significarıa

−010010010111.101= −(210 + 27 + 24 + 22 + 21 + 20 + 2−1 + 2−3)= −1175′625.

40 Capıtulo 2. Representacion de la informacion

• Complemento restringido y complemento autentico

Sea D = 3 el numero (fijo) de decimales asumidos. La represen-tacion de un numero x, en cualquiera de estos convenios, consisteen codificar en su lugar la parte entera de x ∗ 23 en el convenioelegido. La cantidad despreciada al truncar los decimales de x ∗ 23

es menor que 0′125(10(= 2−3).

Por ejemplo, para representar −2′8 en palabras de N = 8 y D = 3,debemos conformarnos con una aproximacion: al ser D = 3, solo po-demos representar cantidades decimales multiplos enteros de 0′001(2 =2−3

(10 = 0′125(10. Como trunc(−2′8 ∗ 8) = trunc(−22′4) = −22, repre-sentamos −22/8 = −2′75. Comprobamos que esta cantidad es efectiva-mente multiplo de 0′125, y que el siguiente multiplo (−2′875) excede lacantidad inicial (−2′8).

• Signo y valor absoluto:

2.75 = 2 +12

+14

= 1 0 0 1 0 1 1 0︸︷︷︸±

︸ ︷︷ ︸p. entera

. ︸ ︷︷ ︸dec.

• Complemento restringido (8 dıgitos):

−22 = −{

1111111110110(2

}→ 11101001 = 1 1 1 0 1 0 0 1

• Complemento autentico (8 dıgitos):

−22 = −{

10000000010110(2

}→ 11101010 = 1 1 1 0 1 0 1 0

Convenios con coma flotante

El principal inconveniente de la coma fija consiste en condicionarel orden de magnitud de las cantidades codificadas. Un sistema masgeneral debera adaptarse a ordenes tan distantes como los de la masa de

2.2. Representacion digital de los datos 41

la tierra y la del atomo. El sistema mas conocido con esta caracterısticaes la llamada notacion exponencial (o cientıfica):

140 = +0.14 ∗ 103 = +0.14E36.02215 ∗ 1023 = +0.602215E240.00000015 = +0.15E − 6

Los convenios con coma flotante funcionan del mismo modo, divi-diendo la informacion sobre una cantidad en tres partes: su signo, sumantisa (es decir, las cifras significativas de mayor orden), y el exponente(que expresa el orden de magnitud). Ası por ejemplo, consideremos lasiguiente representacion en palabras de N bits:

• El signo, adscrito al primer bit, donde el uno representa al signomenos.

• El exponente (z), situado en los siguientes e bits, puede tomar losvalores de {−2e−1, . . . , 2e−1 − 1}. Frecuentemente se representadesplazado en +2e−1 unidades:

z ∈ {−2e−1, . . . , 2e−1 − 1} ⇒ repr(z) ∈ {0, . . . , 2e − 1}

• Para la mantisa quedan M = N − e − 1 bits con lo que, para surepresentacion, se toman los primeros M dıgitos de su escritura enbinario natural.

Como ejemplo concreto, consideremos el convenio estandar IEEE 754(real con precision simple, o real corto), que es una de las codificacionesde reales mas utilizadas. Su representacion requiere un total de 32 bits,de los cuales un bit se utiliza para el signo, 8 bits para el exponentey 23 bits para la mantisa. Este convenio en concreto, utiliza un trucollamado bit oculto: como el bit mas significativo de la mantisa es un 1,ahorramos un bit simplemente asumiendolo. Se logra ası espacio parauna mantisa de 24 dıgitos significativos. El inconveniente de emplear unbit oculto consiste en que se requiere una representacion especial parael cero.

42 Capıtulo 2. Representacion de la informacion

2.2.3 Limitaciones de los sistemas de representaciondigital de los numeros

Debido a que los sistemas de codificacion considerados estan inmer-sos en sistemas finitos, solo pueden representar una cantidad finita deelementos distintos. Esta limitacion resulta crıtica a la hora de repre-sentar elementos pertenecientes a conjuntos infinitos, como son los delos numeros enteros o reales. Como consecuencia, pueden producirsesituaciones de error no deseables, por lo cual se hace necesario estudiarel alcance de esas limitaciones, ası como la manera de afrontarlas.

Limitaciones en los enteros

En los enteros, las representaciones se limitan a un intervalo reducido[mın, max ], de cardinal no superior a 2n, siendo n el tamano (en bits)de la representacion. Ası, cuando surge la codificacion de numeros fueradel rango considerado, se produce el llamado desbordamiento (overflowen ingles).

Por ejemplo, en una representacion con 4 bits seran posibles 16 con-figuraciones. Si optamos por el convenio de complementacion autentica,el intervalo considerado sera [−8, 7]. Veamos que ocurre al sumar 5 y 6.

5+ 6

→→

0101+ 0110

1011 → −5

El comportamiento de las operaciones de suma y resta en el sistemade complementacion autentica para una representacion de n bits se puededescribir ası: llamemos x′ e y′ a la representacion de x e y, y +′ y −′ a lasoperaciones de suma y resta en este sistema, ∀x, y ∈ [−2n−1, 2n−1 − 1],tenemos:

x′ ±′ y′ =

(x± y + 2n)′, si x± y < −2n−1

(x± y)′, si x± y ∈ [−2n−1, 2n−1 − 1](x± y − 2n)′, si x± y > 2n−1 − 1

Para paliar en cierta medida esta limitacion, es frecuente incorpo-rar tipos de datos correspondientes a rangos de enteros mas amplios

2.2. Representacion digital de los datos 43

(por ejemplo, duplicando la longitud de palabra de la representacion),pudiendo ası manipular con seguridad enteros de mayor orden. Asıpor ejemplo, el calculo de 8! desbordara un sistema de complementoautentico con 16 dıgitos, resultando en cambio correcto para palabrasmas largas. En ocasiones, el programador tiene la posibilidad de cam-biar de estrategia para evitar el desbordamiento. Por ejemplo, el calculode(8

3)

se puede obtener evaluando 8!3!∗5! o 8∗7∗6

3∗2∗1 indistintamente; sin em-bargo, el primero de ellos necesita manipular numeros mayores, por loque el segundo nos permite eludir en cierta medida el error por desbor-damiento.

Por otra parte, muchos de los lenguajes que se comercializan en laactualidad ofrecen la opcion de verificar o no los desbordamientos quepuedan producirse durante la ejecucion, para que los consiguientes erro-res no pasen inadvertidos.

Finalmente, la mayorıa de los lenguajes de alto nivel presentan sis-temas de construccion de tipos de datos con capacidad para definir co-dificaciones (y operaciones de manipulacion sobre los objetos cifrados)a la medida de nuestras necesidades.

Limitaciones en los reales

En este caso, incluso limitandonos a los reales contenidos en un pe-queno intervalo acotado, estos serıan infinitos, por lo cual las limitacionesen su representacion no solo afectan al tamano de los numeros consi-derados, sino tambien a la precision. En efecto, en cualquiera de losconvenios estudiados se toma como mantisa solo cierto numero reducidode dıgitos(binarios) significativos, despreciandose los demas.

En otras palabras, cada codificacion de un numero real en comaflotante representa en realidad un intervalo, cuyo tamano varıa segunla magnitud del real representante. Por consiguiente, la distribucion derepresentantes no es uniforme: un intervalo tan pequeno como [0’1, 1]cuenta con tantos representantes como [1000, 10000].

Ademas de las limitaciones de la precision, la representacion de losreales esta limitada por su tamano: existe un valor a partir del cual no

44 Capıtulo 2. Representacion de la informacion

hay representantes reales y que determina el rango de desbordamiento.

Debe observarse en este punto que existen cantidades cuya expresiondecimal es exacta, sin serlo su expresion escrita en binario natural (porejemplo, 0′1(10 = 0′0 0011 0011 . . .(2), por lo que, en principio, debe des-confiarse de la precision en la codificacion de todo numero no entero.

Aunque esta diferencia entre una cantidad y su representacion es enmuchos casos despreciable, su aparicion puede ocasionar grandes desvia-ciones respecto del comportamiento teorico.

Una situacion ası se produce cuando se comparan dos numeros realespara determinar su igualdad, ya que el resultado de la comparacionignora si esa diferencia producida es pequena o grande, lo que puedeocasionar una respuesta drasticamente distinta de la correcta. Ası porejemplo, la ejecucion del siguiente programa escrito en Pascal

Program errores (output);var suma: real;begin

suma := 0;repeat

suma := suma + 0.1;writeln(suma);

until suma = 1end.

no para.1 Frecuentemente esta situacion puede evitarse cambiando laexpresion x = y por | x− y |< ε, siendo ε la diferencia admitida.

En realidad, la aparicion de errores intolerables es posible inclusoen expresiones sencillas. Concretamente, deberıan evitarse las opera-ciones de suma y resta, cuando uno de los operandos es muy pequenoen comparacion con el otro, y la division cuando el divisor es cero o“proximo a cero”. Por ejemplo, la relacion |t/x| ≤ ε deberıa sustituirsepor |t| ≤ ε ∗ |x|.

1Suponiendo una representacion en binario puro.

2.2. Representacion digital de los datos 45

Mas aun, aun cuando se trate de un error despreciable, es frecuenteque ese error intervenga en calculos repetidos, como ocurre en la ma-nipulacion de matrices, el calculo con series recurrentes, etc.; en talessituaciones, la propagacion de un error inicial, aunque pequeno, puedegenerar un error mucho mayor. El estudio y la cuantificacion de loserrores, ası como su propagacion en calculos repetitivos y los metodospara encontrar soluciones satisfactorias, escapan del alcance y objetivosde este curso, siendo materia propia de los metodos numericos.

Otros sistemas de representacion (paquetes matematicos)

Durante la pasada decada, se han desarrollado y difundido paquetesde programas matematicos, capaces de resolver eficientemente un ex-tenso numero de problemas, manipulando expresiones tanto numericascomo simbolicas. Para ello estan provistos (aparte de otros mecanismos)de potentes sistemas aritmeticos de representacion no convencionales.Veamos dos ejemplos de estas posibilidades:

• Capacidad de representar enteros con tamano limitado solo porla memoria del ordenador, fracciones y reales con una precisionarbitraria, elegida por el usuario. Por ejemplo:

sea precision decimales = 25escribir pi

3.1415926535897932384626433

• Capacidad de establecer valores numericos (reales o complejos)mediante su definicion, en lugar de su calculo, con lo que no hayperdida de precision. Ası, es posible establecer sentencias del estilode las siguientes:

sea x0 := x tal que x2 + 5 = 0escribir (1− x0

2)/2

cuya ejecucion producirıa la escritura de 3, exactamente.

46 Capıtulo 2. Representacion de la informacion

2.2.4 Representacion de los caracteres

Existen otros convenios, ademas de los numericos, para representarlos caracteres disponibles habitualmente en un teclado de computador:los dıgitos, las letras minusculas y mayusculas, los signos de puntuaciony de operacion y otros sımbolos especiales, tales como #, &, @, %, etc.

Inicialmente surgieron numerosos convenios para codificar los carac-teres, variando el numero n de bits empleados (y con el su capacidad derepresentacion), ası como la posicion, entre 0 y 2n − 1, asignada a cadacaracter. Sin embargo, en seguida se observo la necesidad de adoptarconvenios normalizados, ası como la conveniencia de que estos tenganciertas cualidades:

• Debe incluirse el juego de letras mınimo internacional, en dos in-tervalos de posiciones consecutivas, correspondientes a las letrasminusculas y mayusculas.

• Los caracteres correspondientes a los dıgitos deben ocupar tambienposiciones correlativas, de “facil” cifrado y descifrado.

Ademas, cuando la capacidad de representacion lo permita, sera deseableque en un sistema sea posible:

• Anadir otros caracteres mas especıficos: frecuentemente, los pro-pios de una lengua (las “a” y “n” espanolas, la “u” francesa, etc.)

• Destinar ese exceso de capacidad a prevenir y subsanar posibleserrores, como veremos en el siguiente apartado.

Uno de los convenios mas extendidos en la actualidad es el ASCII, con7 bits, por lo que admite hasta 27 = 128 caracteres. Damos la siguientetabla, omitiendo los primeros 32 caracteres, por ser caracteres de control.

2.2. Representacion digital de los datos 47

32 44 , 56 8 68 D 80 P 92 \ 104 h 116 t33 ! 45 - 57 9 69 E 81 Q 93 ] 105 i 117 u34 ” 46 . 58 : 70 F 82 R 94 ˆ 106 j 118 v35 # 47 / 59 ; 71 G 83 S 95 107 k 119 w36 $ 48 0 60 ¡ 72 H 84 T 96 ‘ 108 l 120 x37 % 49 1 61 = 73 I 85 U 97 a 109 m 121 y38 & 50 2 62 ¿ 74 J 86 V 98 b 110 n 122 z39 ’ 51 3 63 ? 75 K 87 W 99 c 111 o 123 {40 ( 52 4 64 @ 76 L 88 X 100 d 112 p 124 |41 ) 53 5 65 A 77 M 89 Y 101 e 113 q 125 }42 * 54 6 66 B 78 N 90 Z 102 f 114 r 126 ˜43 + 55 7 67 C 79 O 91 [ 103 g 115 s

En este convenio, se observa en primer lugar que los dıgitos decimales“0”, . . . , “9” ocupan las posiciones 48, . . . , 57: sus valores (0000, . . . ,1001 ) coinciden con las terminaciones de sus posiciones (0110000, . . . ,0111001 ).

Siguiendo la segunda condicion, las letras mayusculas y minusculasse hallan situadas en las posiciones 65 a 90 y 97 a 122, respectivamente.

En la practica no se utilizan palabras de 7 bits, siendo frecuenteen cambio adoptar el byte (= 8 bits) como unidad. Ası, es posibleextender el convenio anterior y dar cabida a otros caracteres de usotambien interesante en ciertas aplicaciones; he aquı algunos ejemplos:

Posicion: 130 145 156 164 165 168 248Caracter: e æ £ n N ¿ ◦

2.2.5 Organizacion de datos mas complejos

Los computadores no solo almacenan y manipulan numeros y ca-racteres, sino que tambien deben organizar y tratar informaciones mascomplejas, tales como sucesiones de datos (por ejemplo, cadenas de ca-racteres), vectores, tablas, etc., ya sea formadas por datos simples o bienpor conjuntos de informacion con alguna organizacion. Con tal finalidadse han ideado diversas estrategias; aunque su estudio excede el alcancede este capıtulo, veamos un ejemplo orientativo.

48 Capıtulo 2. Representacion de la informacion

Supongamos una maquina de 1 byte (tamano de palabra). Si seadopta para los numeros enteros un convenio de 2 bytes, cada numeroocupara dos palabras consecutivas. Una forma natural y sencilla deorganizar un vector de n enteros consiste en situarlos secuencialmente,empezando en las posiciones m0,m0 + 2, . . . ,m0 + 2(n− 1), y la compo-nente i-esima del vector reside en las posiciones m0+2(i−1) y m0+2i−1,para i ∈ {1, . . . , n}.

Si se tratase de una matriz de m ∗ n, cuyas componentes ocupan kpalabras de memoria, se establece facilmente la posicion inicial para lacomponente i, j-esima:

m0 + k(n(i− 1) + j − 1)

para i ∈ {1, . . . , n}, j ∈ {1, . . . ,m} y siendo m0 la posicion inicial de lamatriz.

2.2.6 Representacion de las instrucciones

Aunque podrıa parecer impropio considerar las instrucciones comoinformaciones, lo cierto es que los programas se almacenan en la memoriadel ordenador y manipulan del mismo modo que los datos. De hecho,desde el punto de vista de la maquina, un programa no es mas que unasecuencia de elementos, cada uno de los cuales es un descriptor de unainstruccion elemental.

El formato de las instrucciones (es decir, de sus descriptores) dependede la maquina destinada a seguirlas. Si consideramos por ejemplo unamaquina de tres direcciones (vease cap. 3), sus instrucciones se compo-nen de cuatro campos que codifican respectivamente la operacion quedebe efectuarse y las posiciones de memoria en que se encuentran los(como maximo dos) argumentos y la de la palabra donde debe situarsefinalmente el resultado. En el capıtulo siguiente se presenta con detalleuno de estos formatos.

2.3. Codigos redundantes 49

2.3 Codigos redundantes

2.3.1 Informacion y redundancia

Informacion e incertidumbre.- El termino informacion tiene en ge-neral un significado muy amplio: piensese en la informacion proporcio-nada por una fotografıa o un poema. Por eso, en el contexto de la in-formatica como ciencia que trata sobre el tratamiento automatico de lainformacion, se asocia a esta un significado mas restringido y manejable.

Para definir este significado, consideremos que deseamos determinarun cierto fenomeno, que puede presentar una cantidad finita de estados.Entonces, una informacion (sobre ese fenomeno) es una sentencia capazde aportar algun conocimiento sobre tal fenomeno; esto es, capaz dedelimitar en cierta medida su estado.

Ası por ejemplo, si consideramos el fenomeno “colores del atuendoque llevaba anoche el asesino del callejon”, sabiendo que el pantalonera negro o marron, que la camisa era azul, gris o marron, y que elsombrero era gris o negro, resulta que el numero de estados es 12. Unainformacion sobre este fenomeno podrıa consistir en la sentencia “lacamisa y el pantalon eran de distinto color”; con esta informacion, soloson posibles 10 estados de nuestro fenomeno. Ahora, la afirmacion “lacamisa y el pantalon no eran ambos marrones” resulta redundante puestoque, considerandola, siguen siendo posibles los mismos 10 estados queignorandola.

En lugar de hablarse de cantidad de informacion, resulta mas facilmanipular la de incertidumbre. Una medida indirecta de ello consisteen la cantidad de estados posibles: su grado de indeterminacion. Sicierto fenomeno ofrece 12 estados posibles, su grado de indeterminaciones 12, pero resulta mas conveniente considerar como medida de la in-certidumbre el logaritmo (en base dos) de esta cantidad, puesto que laincertidumbre crece de forma exponencial (con base dos) respecto de lalongitud (numero de bits) del mensaje. Esta medida de la incertidumbrese llama entropıa asociada a un fenomeno, y se denota mediante H:

H = log2(numero de estados posibles de un fenomeno)

50 Capıtulo 2. Representacion de la informacion

Entonces, la informacion asociada a una sentencia se define comodisminucion de incertidumbre proporcionada. Siendo H0 = log2(n0)y H1 = log2(n1) las entropıas correspondientes a los estados previo yposterior a la sentencia, con n0 y n1 posibles estados, respectivamente,tenemos:

I = H0 −H1 = log2(n0)− log2(n1) = log2

(n0

n1

).

Por ejemplo, para la primera sentencia, tenemos:

I1 = log2 1′2 > 0

mientras que la segunda proporciona una cantidad de informacion nula,al ser redundante.

La redundancia en la codificacion.- En los convenios de codifica-cion/decodificacion estudiados hasta ahora, se ha supuesto que su trans-mision o su almacenamiento se efectua siempre sin ruido. En ellos, elobjetivo principal consiste en disenar convenios eficaces (sin emplear masdıgitos que los estrictamente necesarios, minimizando ası la redundan-cia), unıvocos (donde el cifrado es unico) y sin ambiguedad, siendo unicatoda decodificacion.

Para prever la posibilidad de que se produzcan perturbaciones, sehan ideado metodos capaces de descubrir en ciertas condiciones cuandose ha alterado un mensaje (codigos detectores), ası como otros capacesde restituir su estado inicial (codigos correctores).

Ambas clases de mecanismos se apoyan en el uso de la redundan-cia. Anticipamos un par de ejemplos para aclarar ambos tipos de me-canismos.

Adicion de un bit de paridad.- Para un mensaje de n bits se anadeuno, cuyo valor consigue que haya en total un numero par de unos. Seignora la posibilidad de que se altere mas de un bit, por considerarlaextremadamente improbable. En la interpretacion del mensaje se verificapreviamente la paridad, detectandose un error si se ha producido, aunqueno sera posible identificar cual para restablecer su estado.

2.3. Codigos redundantes 51

Codigo dos entre tres.- Este mecanismo consiste sencillamente entriplicar las copias de cierta informacion. Se consideran dos posibilida-des: que no se produzca ninguna alteracion, o que se produzca en una delas copias, descartandose mayores perturbaciones. En ambos casos, seinterpreta el mensaje cifrado en la mayorıa de las copias: dos (al menos)entre tres.

2.3.2 Codigos solo autodetectores: p de n

Si en una palabra de n bits (que admite 2n configuraciones) estable-cemos la restriccion de considerar validas solo aquellas con exactamentep unos (y n−p ceros), sera posible detectar si se efectua una perturbacionsimple, o una multiple, siempre que no se alteren tantos unos como ce-ros. En un codigo p de n, el grado de indeterminacion es el numero depermutaciones con repeticion de p unos y n− p ceros(

n

p

)=

n!p!(n− p)!

que alcanza su maximo cuando p = ndiv 2.

2.3.3 Codigos autocorrectores: Hamming

Fundamento

Consideremos un mensaje de n bits. La idea basica consiste en anadirun cierto numero p de bits, cada uno de los cuales asegura un ciertosubconjunto de los n+ p dıgitos totales mediante un control de paridad.Se considera la posibilidad de que exista, a lo sumo, una alteracion enuno de los n+ p bits y deseamos conocer si ha habido o no perturbaciony, en caso afirmativo, cual de los n+ p bits ha sido alterado. Puesto queel mensaje debe codificarse en los n bits, la informacion sobre el estadode perturbacion debe cifrarse en los p bits, para poder ası restablecerla.Por tanto, conocido n, p debe ser la mınima cantidad de bits tal que los2p estados posibles de los p bits de paridad acepten al menos n+ p+ 1estados distintos: no alteracion (1) o la posicion del bit alterado (n+p).Es decir:

p = mın k ∈ IN tal que 2k ≥ n+ k + 1

52 Capıtulo 2. Representacion de la informacion

Por otra parte, los p conjuntos de bits deben elegirse de modo queel estado de los p bits de paridad asociados a esos conjuntos permitalocalizar el bit alterado, en su caso y, si es posible, con facilidad.

Un modo de conseguir el objetivo descrito consiste en intercalar elbit i-esimo en la posicion 2i−1, para i = 1, . . . , p, siendo su conjuntoasociado el de los dıgitos cuyo numero de posicion, escrito en binarionatural, tiene un 1 como cifra i-esima.

Sea por ejemplo n = 4. Necesitamos p = 3 bits de paridad, quecolocaremos en las posiciones 1, 2 y 4:

posicion : 1 2 3 4 5 6 7id. en binario : 001 010 011 100 101 110 111

Ahora, el bit 001(2 esta asociado al conjunto de los bits del mensajecuya posicion acabe en 1 (1, 3, 5 y 7); el bit 010(2 esta asociado alconjunto de los bits del mensaje cuya posicion tenga un 1 en la segundacifra (2, 3, 6 y 7), y el bit 100(2 esta asociado al conjunto de los bits delmensaje cuya cifra inicial sea un 1 (4, 5, 6 y 7).

Codificacion

Sencillamente, se trata de ajustar los bits de paridad con respecto asus conjuntos asociados. Por ejemplo, si se desea transmitir el mensaje0110

0 1 1 0

bastara con ajustar el bit 10 con los 30, 50 y 70 (resultando un 1); el bit20 con los 30, 60 y 70 (resultando un 1), y el bit 40 con los 50, 60 y 70

(resultando un 0):

1 1 0 0 1 1 0

Anexo 53

Decodificacion con autocorreccion

Para rectificar y descifrar un mensaje recibido, se detectan en pri-mer lugar los bits de paridad que reflejan alguna alteracion. Si no hayninguno, el mensaje se ha mantenido intacto durante la transmision; encaso contrario, la suma de las posiciones de los bits alterados senala elbit modificado.

Por ejemplo, si el mensaje anterior se recibe ası:

1 1 0 0 0 1 0

el control de paridad arroja el siguiente resultado:

bit 10(+3 + 5 + 7) = 1 (impar)⇒ alteradobit 20(+3 + 6 + 7) = 2 (par)⇒ sin alterarbit 40(+5 + 6 + 7) = 1 (impar)⇒ alterado

Al ser 1 + 4 = 5, concluimos que el 50 bit es erroneo, por lo que elmensaje original era

1 1 0 0 1 1 0

Anexo: demostracion del teorema 2.1

Incluimos aquı esta demostracion por ser constructiva, mostrandoel proceso de expresar una cantidad en cualquier base mayor que uno.Procederemos en cuatro fases: en primer lugar, la existencia de esarepresentacion en las condiciones del teorema se demuestra facilmentepor induccion, dando un metodo para hallar esa construccion. En se-gundo, se demuestra (tambien por induccion) que ese metodo convergey a continuacion que la solucion que proporciona equivale efectivamentea la cantidad dada. Finalmente, se demuestra que no hay mas que unarepresentacion de un numero en una base (≥ 2) dada.

54 Capıtulo 2. Representacion de la informacion

1. Dada la cantidad entera y positiva N , y la base b > 1, la represen-tacion de N en base b sigue el siguiente esquema:

reprb(N) =

N si N < b

reprb(D).R en otro caso, dondeD = N div b y R = N mod b

donde el punto expresa la separacion entre las cifras de N , expre-sado en la base b, y donde div y mod representan, respectivamente,el cociente y el resto de la division entera.

2. La convergencia del metodo resulta obvia considerando que, par-tiendo de cualquier numero entero positivo N , la secuencia N =N0, N1, ... conduce al conjunto {0, ..., b} mediante la aplicacion deNi = Ni−1 div b, en un numero finito, trunc(logb N), de pasos.

3. La equivalencia queda demostrada por induccion sobre el numerode cifras de la representacion obtenida: cuando N < b, tenemos elcaso base reprb(N) = N ; en caso contrario, basta considerar quela cantidad representada por reprb(D).R es

b ∗ reprb(D) +R= b ∗ reprb(N div b) + (N mod b)

Asumiendo ahora como hipotesis inductiva que reprb(N div b) re-presenta la cantidad N div b, podemos expresar la cantidad ante-rior como

= b ∗ (N div b) + (N mod b)

que es precisamente N : recuerdese que

dividendo = divisor ∗ cociente + resto

4. En las condiciones del teorema, esa representacion es unica. Lo de-mostraremos por reduccion al absurdo. Supongamos que es posibleexpresar una cantidad x de dos modos distintos, cuyas represen-taciones tienen las cifras ...a0 y ...a′0 , siendo L la posicion de lascifras distintas de mayor peso, y consideremos por ejemplo que esaL > a′L. Entonces, se tiene:

2.4. Ejercicios 55

(a) La diferencia entre aL y a′L representa al menos bL unidades:

aL ∗ bL > a′L ∗ bL ⇒ aL ∗ bL ≥ (a′L + 1) ∗ bL = a′L ∗ bL + bL

(b) Por otra parte, la cantidad maxima que pueden representarlos dıgitos siguientes es de

L−1∑i=0

(b− 1) ∗ bi = bL − 1.

Resulta entonces que la diferencia que supone la cifra distinta demayor orden (≥ bL) no puede compensarse por ninguna combi-nacion de las siguientes (≤ bL − 1). Por tanto, si dos representa-ciones son distintas en alguna cifra, tambien lo son las cantidadesrepresentadas.

2.4 Ejercicios

1. Exprese los siguientes numeros en las demas bases:

binario puro decimal hexadecimal1001110011

67231A9E

2. Efectue las siguientes operaciones, en la base indicada:

• 11011101(2 + 11110000(2

• 11000101(2 ∗ 101001(2

• A2396(16 + 24BC2(16

• A2396(16 ∗ 1A(16

Para el ultimo apartado es recomendable construir previamente la tablade multiplicar por A, en base hexadecimal.

3. Halle el rango de los posibles enteros,

• si consideramos palabras de tamano medio

• si consideramos palabras de tamano simple

56 Capıtulo 2. Representacion de la informacion

• si consideramos palabras de tamano doble

4. Represente 7 y −3 en los siguientes formatos, y realizar la suma corres-pondiente:

• complemento restringido, en decimal

• ıdem, en binario

• complemento autentico, en decimal

• ıdem, en binario

Haga lo mismo con 12 y 7.

5. Represente los numeros 35, 0’25 y 2’6 en los siguientes formatos:

• en coma fija, con 5 bits enteros y 3 decimales

• coma flotante: signo (1 bit), mantisa (9) y exponente (6)

6. Generalice la representacion en memoria de vectores y matrices a matri-ces tridimensionales.

7. Se desea disenar un codigo capaz de cifrar una informacion con 33 posiblesestados.

• ¿Cuantos bits son necesarios?

• Con ese numero de dıgitos, ¿cuantos estados son posibles?

• Un control del tipo 2 de n, ¿cuantos dıgitos necesita?

8. Se desea transmitir mensajes de 31 bits, asegurandolos mediante uncodigo de Hamming.

• ¿Cuantos dıgitos de paridad se necesitan?

• ¿En que posiciones?

• ¿Cuales son los dıgitos asociados a cada uno de los de paridad?

9. Para el codigo de Hamming para mensajes de 4 bits introducido en elapartado 2.3.3, se desea transmitir la informacion 1001.

• Cifre el mensaje que debe enviarse

• Si consideramos las cinco posibilidades: que el mensaje llegue inal-terado a su destino, o que uno de sus cuatro dıgitos haya cambiadosu valor, descifre cada uno de esos mensajes.

2.5. Comentarios bibliograficos 57

10. Para cifrar un codigo de Hamming para mensajes de 11 bits, construimosun vector de 15 bits.

• De formulas apropiadas para hallar la paridad de los bits insertados.

• Idem para la autocorreccion que se efectua en el descifrado.

2.5 Comentarios bibliograficos

El material incluido en este capıtulo sobre la representacion de los numerosreales en coma flotante solo es una aproximacion conceptual. En [Gol91] seencontraran muchos de los detalles tecnicos omitidos aquı, tales como el tra-tamiento dado en la practica a los errores (absolutos y relativos) debidos alredondeo, el manejo de las excepciones producidas por el desbordamiento y suconcrecion en los sistemas normalizados por la IEEE.

Aunque el sistema de numeracion sexagesimal no puede considerarse posi-cional (tal como lo usamos para medir el tiempo o los angulos) por expresarseel peso asociado a las “cifras” de una cantidad explıcitamente, y no mediantesu posicion, este sistema es probablemente el precursor de los sistemas posicio-nales. Para completar la referencia historica, debe decirse que, en la antiguaBabilonia, tambien se conocıa un sistema de coma flotante, que seguramentees el primero de esta clase [Knu72].

En [For70, Rum83, KM86] puede encontrarse una gran diversidad de ejem-plos sobre la aparicion de discrepancias intolerables entre los resultados teoricosy los hallados en diversas maquinas.

Los convenios presentados en este capıtulo constituyen tan solo una pe-quena parte de los ideados para mantener o proteger la informacion. Se hanescogido algunos de los codigos mas ilustrativos y los mas difundidos, aun-que faltan otros, tales como el llamado binario reflejado y los de Gray. Unaintroduccion a los mismos puede consultarse en [Mei73].

Un aspecto de gran interes relacionado con la proteccion de la informaciones la criptologıa, que estudia mecanismos para ocultarla, cifrandola en clavessecretas (criptografıa), ası como para descifrarla (criptoanalisis). En [Dew88,Dew89] puede encontrarse una sencilla introduccion a estos temas.

Capıtulo 3

Estructura fısica de uncomputador

3.1 Componentes de un computador . . . . . . . . . . . . . . . . . 603.2 Lenguajes de maquina . . . . . . . . . . . . . . . . . . . . . . . 773.3 Un ejemplo de recapitulacion . . . . . . . . . . . . . . . . . . . 803.4 Observaciones complementarias . . . . . . . . . . . . . . . . . . 883.5 Otras arquitecturas . . . . . . . . . . . . . . . . . . . . . . . . . 953.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983.7 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . . . . 99

El principal objetivo de este tema es introducir algunos conceptosbasicos acerca de la estructura fısica (hardware) de un computador; pero¿es de verdad util preocuparse por la estructura interna de un compu-tador?

Entre las dos posiciones extremas (el simple usuario y el informaticoprofesional) se encuentra una gran cantidad de profesionales que requie-ren conocer los computadores con un cierto detalle. Al menos, siempre esnecesario conocer las caracterısticas del computador y los requerimientos(fısicos) de los programas que deben usarse.

En las siguientes secciones estudiamos el hardware de una computa-dora, formado por la UCP, la memoria y los perifericos (tambien llama-dos dispositivos de entrada y salida, E/S).

60 Capıtulo 3. Estructura fısica de un computador

El significado del termino hardware no es facil de expresar en espanolcon una sola palabra; literalmente se debe entender como “conjunto deutiles duros”; en el contexto que nos ocupa, el hardware de un computa-dor es el conjunto de dispositivos fısicos que lo componen, mientras queotra palabra inglesa, software, designa los programas que puede ejecutarel computador.

En cierto modo, el hardware es comparable al cerebro o, mas ge-neralmente, al cuerpo fısico del computador mientras que el softwareserıa lo equivalente a las ideas que pueblan el cerebro. Es convenientesenalar, a pesar de su evidencia, que el hardware y el software son per-fectamente inutiles aisladamente: de nada nos sirve un computador sino tenemos ningun programa que ejecutar, y de nada nos sirve tenermuchos programas si no disponemos de un computador que los ejecute.

Nuestra vision del sistema formado por el hardware y el software esfuncional, y en la ultima parte del capıtulo sera patente esta relacionde dependencia mutua: explicaremos el funcionamiento del hardwaresiguiendo la ejecucion de algunos programas sencillos, escritos en supropio lenguaje.

3.1 Componentes de un computador

Para introducir los conceptos basicos que estudiaremos dentro deesta seccion consideramos un computador como una unidad de pro-duccion. Una unidad de produccion adquiere materia prima, la elaboray, finalmente, vende la materia elaborada. Esto mismo es lo que hace uncomputador: toma algunos datos, los procesa y, finalmente, devuelve elresultado obtenido al procesar la informacion.

Mas concretamente, consideremos una panaderıa ideal. En esta pa-naderıa se compra harina, levadura, . . . (entrada de datos) que posterior-mente se elaboran (procesamiento) para producir pan que, finalmente,se vende (salida de datos). Para comprar y vender se necesitan perso-nas que se relacionen con el exterior; en un computador esta labor serealiza mediante los perifericos. Dentro de la panaderıa podemos encon-trar dos zonas bien diferenciadas e indispensables: la primera es la zona

3.1. Componentes de un computador 61

BUS

U.C. U.A.L.

U.C.P.

M.P.

Contr.Disco

Contr.Serie

Contr.Paralelo

Contr.Teclado

Contr.Pantalla

����bb

MonitorU. DiscoTeclado

Puerto PuertoParaleloSerie

Figura 3.1. Estructura basica de un computador.

de amasado junto con el horno, y la segunda es el almacen.

En el computador el almacen lo representa la memoria y la zonade trabajo es la unidad central de proceso o UCP que, a su vez, constade la unidad de control o UC (el encargado que controla los procesosde amasado y horneado) y la unidad aritmetica y logica o UAL (zonade amasado y horno). Naturalmente, entre las distintas zonas debenexistir pasillos de comunicacion para poder sincronizar las acciones decada uno; en un computador esta informacion se envıa y recibe a travesde los buses.

En las siguientes secciones estudiaremos cada una de las partes quecomponen la estructura fısica de un computador. La figura 3.1 presentaun esquema de la misma.

62 Capıtulo 3. Estructura fısica de un computador

3.1.1 Memoria principal

Mencionabamos en el parrafo anterior que la memoria representa elalmacen donde se guarda la informacion, en esta seccion estudiaremosalgunos detalles del almacenamiento de informacion en la memoria y delos tipos de memoria existentes.

En la memoria principal se guarda el conjunto de instrucciones (pro-grama) que esta siendo ejecutado, junto con los datos de entrada y desalida de la ejecucion. Estudiaremos la memoria de un computador desdeun punto de vista fısico (distintos medios de almacenamiento) y desdeun punto de vista logico (de tratamiento de la informacion).

Podemos encontrar similitudes entre la organizacion fısica de la me-moria y el almacen de la panaderıa ideal que introducıamos al principiodel capıtulo: en el almacen encontramos estanterıas repletas de bandejasiguales, y cuando un trabajador entra en el almacen, bien trae o bienretira algunas de estas bandejas. La unidad mınima a la que se accedeno es una barra de pan (bit) sino una bandeja completa (palabra). Lalongitud de palabra de memoria viene representada por la capacidad decada bandeja.

No podemos acceder a cada bit de la memoria aisladamente; lamınima cantidad de memoria a la que podemos acceder esta formadapor una palabra de memoria. Fısicamente, la memoria esta divididaen celdas (con una capacidad de informacion de un bit), agrupadas enpalabras de memoria.

Funcionamiento de la memoria

Para acceder a cada palabra de memoria debemos poder referirnos aellas. Esto se hace asignando una direccion numerica binaria a cada pa-labra a modo de “direccion postal”. La direccion de memoria determinauna palabra de memoria, que es la que contiene la informacion.

Supongamos que tenemos un computador que tiene palabras de me-moria de 1 byte (8 bits) y dispone de 1 Mb (220 bytes) de memoria prin-cipal. Cada direccion de memoria tiene asignado un numero en binario

3.1. Componentes de un computador 63

entre 0 y 220 − 1. Para poder denotar todas las palabras de memoriadisponibles necesitaremos al menos 20 dıgitos ya que, en general, cond bits es posible direccionar 2d palabras de memoria. Tengase en cuentaque, en principio, la longitud de palabra de memoria no tiene relacioncon la longitud de las direcciones de memoria; en el apartado sobre op-timizacion de memorias tendremos la oportunidad de profundizar algomas sobre ello.

En la memoria se realizan operaciones elementales de lectura y escri-tura, que escriben o leen la informacion contenida en una sola palabrade memoria. Tanto la UCP como la memoria se sirven de unas cuantaspalabras de acceso muy rapido, llamadas registros. Para las operacio-nes de lectura y escritura, los dispositivos de memoria disponen de dosregistros: el de direccion (RD) y el de intercambio de memoria (RIM).

El RD indica la direccion de memoria que se quiere leer o en la que sequiere escribir; puesto que debe tener capacidad para albergar cualquierdireccion de memoria, es un registro de d bits siguiendo la notacionanterior. Por su parte, el RIM alberga la palabra leıda o que se va aescribir en la direccion dada por el RD y, por lo tanto, tiene tantos bitscomo la longitud de palabra de memoria. La memoria esta conectadacon la UCP y con los perifericos a traves de los buses de direcciones, dedatos y de control que describiremos mas adelante.

El proceso de lectura o escritura se puede dividir en los siguientespasos:

1. A traves del bus de direcciones llega un numero de direccion dememoria que se almacena en el RD.

2. Simultaneamente, por el bus de control, llega una senal que indicasi la operacion que debe realizarse es de lectura o de escritura.

3. Si la operacion es de escritura, por el bus de datos llega la palabraque se quiere escribir. Esta se almacena en el RIM y se escribedonde indique RD. Si la operacion es de lectura se lee la infor-macion que se encuentra en la direccion almacenada en el RD y seescribe en el RIM.

64 Capıtulo 3. Estructura fısica de un computador

4. La memoria genera, por el bus de control, una senal de control queindica el fin de la operacion.

Clasificacion de las memorias

La memoria se encarga de intercambiar informacion con el procesadorsegun las necesidades de este. Con la tecnologıa actual los procesado-res alcanzan velocidades de varios millones de computos por segundo,lo que obliga a la memoria a tener una velocidad semejante a fin deno menguar la eficiencia del computador. Por otra parte, la capacidadde memoria es otra caracterıstica interesante, ya que, en principio,1 nopodrıamos ejecutar programas que no pudieran ser cargados completa-mente en memoria. Las caracterısticas de velocidad y capacidad estanrenidas entre sı, por lo que es necesario alcanzar un compromiso entreambas dependiendo de la finalidad. Segun el nivel de compromiso alcan-zado podemos destacar varios niveles jerarquicos de memoria: de masrapida y cara (por lo que suelen tener menor capacidad) a menos rapiday mayor capacidad:

1. Memoria principal

2. Memoria secundaria

3. Memoria auxiliar

Los dos ultimos tipos de memoria seran desarrollados en la seccion deperifericos, pues pueden ser considerados como perifericos de almacena-miento.

Hemos dicho anteriormente que las memorias son dispositivos de lec-tura y escritura, y esto es cierto cuando hablamos de la memoria prin-cipal de un computador. Sin embargo, existe otro tipo de memoriasde solo lectura que hace las veces de manual de comportamiento de lamaquina que la contiene.

1En realidad, cada programa tendra unos requerimientos mınimos de memoria, aun-que ello no significa que tenga que caber completo en la memoria.

3.1. Componentes de un computador 65

Las memorias de solo lectura reciben el nombre generico de memoriasROM (acronimo del ingles Read Only Memory). Los computadores vie-nen dotados con una memoria de este tipo donde se almacena la rutinade arranque. Otras aplicaciones de este tipo de memoria las encontra-mos en las lavadoras automaticas (los programas de lavado se almacenanen una ROM) y en los juguetes electronicos. En este tipo de memoriala informacion es almacenada de forma permanente.

Algunas variantes de la memoria ROM son la PROM (ROM pro-gramable), EPROM (PROM borrable, erasable PROM) y la EEPROM(PROM electricamente borrable). Estos tipos de memoria son utiles enla fase de desarrollo de un sistema, en la cual aun no se ha fijado elcontenido final de la ROM.

Las memorias de lectura y escritura suelen llamarse memorias RAM(del ingles Random Access Memory). Dentro de este tipo de memo-rias podemos distinguir las RAM estaticas y las RAM dinamicas. Lasestaticas se caracterizan por tener un tiempo de acceso2 igual a cada di-reccion de memoria (cada direccion tiene su propio camino de accesodentro del microchip, generalmente construido con semiconductores).Por otra parte, son memorias volatiles en el sentido de que necesitanla alimentacion electrica para conservar la informacion.

En las RAM dinamicas la informacion necesita ser recordada perio-dicamente, ya que se va descargando con el tiempo. Esta perdida deinformacion es debida a que estan construidas usando pequenos conden-sadores. La razon de ser de este tipo de memorias es la economıa, puesgeneralmente son mas baratas que las estaticas.

Optimizacion de memorias

Sabiendo la necesidad de contar con memorias cada vez mas rapidasy con mas capacidad se han ideado metodos de optimizacion para la me-moria principal. Dependiendo del aspecto por optimizar encontramos las

2El tiempo requerido para leer o escribir una palabra de memoria. En una memoriaestatica puede ser de unos 20 ns, mientras que en una dinamica puede alcanzar los 80ns.

66 Capıtulo 3. Estructura fısica de un computador

memorias cache y la memoria virtual que, respectivamente, aumentanla rapidez y la capacidad de la memoria principal.

Las memorias cache son memorias hasta mil veces mas rapidas quelas usuales pero, debido a su alto coste, suelen tener una capacidadmuy pequena. La idea que define las memorias cache no puede ser massimple: se trata de guardar en registros los contenidos de las posicionesde memoria de uso mas frecuente, de modo que sea mucho mas rapidoacceder a la informacion que hay en ellas.

El funcionamiento de la memoria cache ejerce una accion de filtrosobre las direcciones de memoria que solicita la UCP. La secuencia deacciones que se producen en las operaciones de lectura y escritura conmemoria cache son las siguientes:

1. La UCP genera una direccion de memoria que se envıa a las me-morias principal y cache.

2. Si la direccion se encuentra en la cache, sera esta la que devuelvael dato e inhiba la salida de la memoria principal. De lo contrario,sera la memoria principal la que de el dato.

3. Finalmente, se actualizan las direcciones y los datos contenidos enla cache.

Existen distintas estrategias para seleccionar las direcciones que se guar-dan en la memoria cache de modo que se mantengan en ella las direc-ciones mas usadas (observese que el conjunto de direcciones de memoriamas utilizadas variara con la fase del programa que se este ejecutando).Una buena estrategia de seleccion puede conllevar una tasa de aciertos(la direccion requerida esta en la cache) muy elevada, de donde la velo-cidad aparente de la memoria se asemejara mucho a la velocidad de lamemoria cache.

La memoria virtual se desarrolla con el proposito de poder hacer usode mas memoria de la que fısicamente se dispone. Si un programa es de-masiado grande para la memoria disponible se solıa dividir en modulosque cupieran en memoria mediante la tecnica del solapamiento (over-lay). Esta tecnica tiene el serio inconveniente de que los programas no

3.1. Componentes de un computador 67

son transportables, puesto que, en general, no funcionarıan en un com-putador con menos memoria.

Para solventar estos problemas se desarrollo la memoria virtual comoun metodo automatico para realizar el solapamiento. La idea consiste enusar la memoria secundaria, generalmente un disco duro, como memo-ria principal. Un programador que dispone de memoria virtual tiene laimpresion de estar trabajando con un mapa de direcciones de memoria(direcciones logicas) mucho mayor del que fısicamente dispone (direccio-nes fısicas).

Existen otras tecnicas para mejorar la utilizacion de la memoria comoson la paginacion y la segmentacion. Estas tecnicas utilizan programasde gestion de memoria que forman parte del sistema operativo; en elcapıtulo 4 se presentaran mas detalles sobre ellas.

3.1.2 Unidad central de proceso

La UCP representa el cerebro de la computadora y allı es donde seprocesa la informacion recibida, por lo que casi siempre nos referiremosa ella como el procesador. La UCP esta formada por la unidad de control(UC), que clasifica y organiza las instrucciones recibidas (encargado), yla unidad aritmetica y logica (UAL), que las ejecuta (donde se “amasay cuece” la informacion).

Fısicamente el procesador es un microchip y consta de unos circuitoselectronicos que permiten realizar operaciones elementales con la infor-macion. El procesador se conecta con el resto de los componentes deun computador mediante unas patillas metalicas, cada una de las cualestransporta informacion binaria, a traves de los buses de comunicacionque estudiaremos mas adelante.

El cometido de la UC consiste en recibir la instruccion que se va aejecutar, determinar su tipo (calculo aritmetico, logico, . . . ), determi-nar si esa instruccion necesita argumentos almacenados en la memoria,leer (en su caso) las direcciones de memoria que contienen los argumen-tos de la instruccion y dar la orden correspondiente a la UAL. Por suparte, la labor de la UAL es la de ejecutar las instrucciones aritmeticas

68 Capıtulo 3. Estructura fısica de un computador

y logicas, una vez que la UC ha determinado su tipo y ha leıdo sus ar-gumentos (si los hubiera). Las instrucciones que llegan a la UAL sonmuy sencillas, y se reducen a un calculo aritmetico elemental (segunel tipo de procesador, “elemental” significara bien suma-resta o biensuma-resta-multiplicacion-division), un calculo logico (and, or, . . . ), ouna instruccion de salto o bifurcacion.

Unidad de control

La UC se encarga de clasificar las instrucciones que recibe, controlarsu ejecucion y leer las zonas de la memoria que almacenan los argumentosde estas instrucciones. La UC esta dotada de unos cuantos registrosinternos de memoria que usa para almacenar datos elementales durantela ejecucion de una instruccion elemental. Esta memoria dispone deun cierto numero de registros con un cometido particular, entre los quedestacan el registro de instruccion y el contador de programa.

El registro de instruccion almacena aquella que esta siendo ejecutaday, por su parte, el contador de programa almacena la direccion de lasiguiente instruccion que debe ser ejecutada. Existen, ademas, otrosregistros que almacenan los resultados parciales de la ejecucion de unainstruccion.

El funcionamiento de la UC esta regido por los impulsos de un relojque sincroniza la realizacion de las distintas operaciones y determina lavelocidad del procesador. Su frecuencia se mide en MHz (megaherzios,millones de ciclos por segundo).

El trabajo desempenado por la unidad de control al ejecutar unainstruccion puede descomponerse en pequenos pasos como los descritosa continuacion:

1. Leer el contador de programa.

2. Almacenar en el registro de instruccion el contenido de la direccionde memoria que aparece en el contador de programa.

3. Averiguar si la instruccion necesita argumentos y, en su caso, de-terminar sus direcciones de memoria.

3.1. Componentes de un computador 69

4. Leer los argumentos y almacenarlos en los registros internos.

5. Ordenar a la UAL que ejecute el computo necesario.

6. Almacenar el resultado de la ejecucion.

7. Actualizar el contador de programa con la siguiente instruccionpor ejecutar.

La UC dispone de un dispositivo denominado secuenciador que efec-tua esta descomposicion en pasos elementales.

Unidad aritmetica y logica

La unidad aritmetica y logica es el horno donde se cuece la infor-macion; su tarea consiste en recibir instrucciones junto con sus argu-mentos y ejecutarlas, dando a cambio el resultado de su operacion.

Esta unidad consta de un(os) operador(es) que ejecuta(n) fısicamentelas instrucciones recibidas, una serie de registros para almacenar infor-macion mientras se ejecuta una instruccion (entre estos registros destacael registro acumulador , al que se hara referencia de nuevo cuando estu-diemos el direccionamiento de las instrucciones) y algunos senalizadoresde estado que indican resultados interesantes obtenidos al realizar uncomputo (resultado cero, overflow o desbordamiento, . . . )

Los operadores son dispositivos fısicos (circuitos electronicos) quepueden realizar operaciones elementales sobre datos binarios. Las ope-raciones que son capaces de hacer estos dispositivos pueden ser de des-plazamiento, logicas o aritmeticas.

Las operaciones de desplazamiento consisten en desplazar los bits deuna palabra varios lugares hacia la izquierda o hacia la derecha. Depen-diendo de la accion del desplazamiento sobre los extremos de la palabrapodemos distinguir varios tipos de desplazamiento:

1. Desplz. logico: si el extremo de la palabra que queda vacıo tras eldesplazamiento se completa con ceros.

70 Capıtulo 3. Estructura fısica de un computador

2. Desplz. aritmetico: es similar al anterior, pero se mantiene el bitde signo. Se utiliza para representar multiplicaciones y divisionesde una potencia de 2.

3. Desplz. circular: los bits que quedan fuera tras el desplazamiento seemplean en llenar los huecos libres del otro extremo de la palabra.

4. Desplz. concatenado: se desplaza conjuntamente el contenido dedos o mas registros.

Las operaciones logicas tales como NOT, AND y OR se realizan bita bit. La primera de estas operaciones solo depende de un argumento,mientras que las restantes necesitan dos argumentos.

Las operaciones aritmeticas mas importantes que se realizan en laUAL son las de suma, resta, multiplicacion y division, la de cambio designo y la de extension de signo. Esta ultima operacion se hace necesa-ria cuando se transmite informacion a un elemento con mayor longitudde palabra pues es necesario completar los bits restantes sin alterar lainformacion. En general las operaciones de multiplicar y dividir se hacenusando sumas y restas mediante un algoritmo apropiado; solo computa-dores muy potentes (y caros) disponen de operadores particulares quelas realicen directamente.

Se puede mejorar la capacidad de calculo numerico de algunos proce-sadores anadiendo un coprocesador matematico. Los dispositivos de estetipo complementan la UAL del procesador por otra mas potente; con ma-yores y mas numerosos registros operativos, con una representacion inter-na de los datos de mayor precision y con instrucciones numericas mascomplejas (funciones exponenciales, logarıtmicas y trigonometricas).

Para ello, comparten el flujo de instrucciones y datos del procesadory cuando detectan alguna instruccion numerica toman el control delprograma, ejecutan la instruccion, calculan el resultado y devuelven elcontrol al procesador.

3.1.3 Perifericos

Damos en esta seccion una vision general de los perifericos. Pode-mos considerar perifericos de entrada, de salida y de almacenamiento;

3.1. Componentes de un computador 71

asimismo podemos distinguir entre perifericos locales y perifericos remo-tos, segun su conexion al computador. Un periferico local, como el raton,se encuentra cerca de la UCP conectado mediante cables que hacen lasveces de prolongador de los buses del computador. Para un perifericoremoto, como una impresora laser del centro de calculo, la conexion serealiza a traves de una red de comunicaciones.

A continuacion se enumeran algunos de los perifericos mas impor-tantes:

De entrada de datos

1. Teclado. Es similar al teclado de una maquina de escribir y cuentaademas con algunas teclas de control.

2. Raton. Es un dispositivo que al ser desplazado sobre una superficiepermite mover el cursor por la pantalla. Existen ratones de sistemamecanico y de sistema optico.

3. Sensores. Este tipo de perifericos incluye a las pantallas tactiles,capaces de seleccionar distintas opciones reconociendo el tacto so-bre distintas zonas de la pantalla. Tambien podemos encontrarotro tipo de sensores como

(a) Lapiz optico. Cuando se posa en la pantalla reconoce la po-sicion que ocupa mediante una medicion de la luminosidadque recibe.

(b) Tableta grafica. Similar a una pizarra provista de un lapiz.Los trazos sobre la tableta aparecen en la pantalla del com-putador.

4. Escaner. Permite digitalizar imagenes planas (fotografıas o texto)y archivarlas.

De salida de datos

1. Pantalla o monitor. Es el principal instrumento de comunicacionentre el computador y el usuario. Su constitucion fısica es similar

72 Capıtulo 3. Estructura fısica de un computador

a la del tubo de imagen de un televisor. Es usual llamar consolaal conjunto formado por un teclado y un monitor.

2. Plotter. Permite realizar graficos de alta precision como mapas odisenos tecnicos.

3. Impresora. Su mision es proporcionar copias impresas en papel dela informacion guardada en el computador. Hay diversos tipos deimpresora, entre los que destacan las impresoras de margarita (yaen desuso), de matriz de puntos, de chorro de tinta y las impresoraslaser.

De entrada y salida de datos

1. Modem. Es un dispositivo que permite la comunicacion de un com-putador con otro a traves de la lınea telefonica (red conmutada)o a traves de lıneas destinadas exclusivamente a este fin (lıneaspunto a punto). Para ello convierte los datos binarios en senalesmoduladas de baja frecuencia. Existen diversos protocolos que de-terminan la forma de iniciar, efectuar y finalizar la transmision,ası como su velocidad y correccion de errores. Su nombre procedede su doble funcion: MOdulador, DEModulador. Su velocidad semide en baudios, que equivalen aproximadamente a bits por se-gundo, al incluir las necesarias senales de control.

2. Red. Las redes permiten la interconexion de varios computadoresentre sı, la utilizacion conjunta de distintos dispositivos externostales como un disco duro, una impresora, etc., y el uso compartidode programas y ficheros de datos. Cada computador conectado a lared contempla los distintos dispositivos disponibles como si fueranpropios. Por lo general uno de los computadores se dedica enexclusiva a la gestion de la red, denominandose servidor de red. Lasredes pueden ser locales, cuando se ubican en la misma habitaciono edificio, o remotas. En general, tanto el sistema operativo comolos programas de aplicacion son especıficos para el funcionamientoen red.

3.1. Componentes de un computador 73

Perifericos de almacenamiento

Aunque se trata en realidad de perifericos de entrada y salida, suelenestudiarse aparte. Los perifericos de almacenamiento son tambien co-nocidos como memorias secundarias y memorias auxiliares. La mayorıade estos dispositivos almacenan la informacion de forma magnetica. Elprimero de todos los dispositivos de almacenamiento magnetico fue launidad (lectora y grabadora) de cinta magnetica, y posteriormente sedesarrollaron las unidades de discos fijos (tambien llamados discos du-ros) y las unidades de discos flexibles.

En una cinta magnetica el acceso a la informacion es secuencial (te-nemos que hacer correr la cinta hasta que aparezca la informacion quebuscamos); esto hace que sea un medio muy lento. Generalmente lascintas magneticas, debido a su gran capacidad, se utilizan para hacerperiodicamente copias de seguridad (backup) de la informacion alma-cenada en los discos duros del computador. Recientemente se han des-arrollado los streamers, que son dispositivos cuya unica finalidad es hacercopias de seguridad de grandes volumenes de informacion, generalmentecontenida en un disco duro.

Los discos magneticos reciben este nombre por su forma y porquesu superficie es magnetica (ciertamente no es un nombre muy original,aunque sı autoexplicativo) y son dispositivos de acceso directo, esto es,no tenemos que recorrer toda la informacion que hay delante de la quenecesitamos.

Los discos magneticos necesitan organizarse logicamente para po-der albergar informacion de un modo ordenado; dar formato a un discomagnetico es dotarlo de la organizacion logica necesaria para cada mo-delo de computador (no es lo mismo el formato del DOS, que usan loscompatibles con IBM, que el formato usado por los computadores Ma-cintosh).

La informacion se almacena siguiendo cırculos concentricos llamadospistas que a su vez se dividen en sectores que contienen un cierto numerode palabras (celdas). Para indicar una direccion se especifica la pista yel sector donde comienza la informacion, por lo cual una transferencia

74 Capıtulo 3. Estructura fısica de un computador

de datos a un disco siempre empieza en la primera palabra de un sector.Las operaciones necesarias para dar formato a un disco magnetico sonbastante complejas y, por lo tanto, se suele dejar al sistema operativola gestion de todas las pequenas tareas que hay que llevar a cabo, en elcapıtulo 4 veremos que el sistema operativo es el software encargado defacilitar este tipo de tareas a los usuarios del computador.

Entre los distintos tipos de disco destacan los discos duros (harddisk), que disponen de una gran capacidad de almacenamiento (de 20a 800 Mb). Suelen ser fijos (no se pueden extraer del computador) ysuelen contener el sistema operativo y los programas de uso mas comun.

Los discos flexibles, diskettes o disquettes (en ingles, floppies), sonextraıbles y por eso pueden ser usados para transferir informacion deun computador a otro (que pueda leer discos flexibles). Estos discostienen una capacidad mucho menor que un disco duro (entre 360 Kb y2’88 Mb) y el tiempo de acceso a la informacion almacenada es bastantegrande. Actualmente coexisten discos flexibles de dos tamanos distintos,de 51

4′′ y de 31

2′′ (pulgadas), de similares prestaciones. Los computadores

compatibles con IBM pueden utilizar discos flexibles de 514′′ y de 31

2′′,

mientras que los computadores de la familia Macintosh usan exclusiva-mente los de 31

2′′. Este hecho hara que, probablemente, los discos de 51

4′′

acaben desapareciendo del mercado.

Ultimamente se han desarrollado las unidades de discos duros ex-traıbles, que tienen las ventajas de los discos duros en cuanto a capacidady a velocidad de acceso y ademas son intercambiables.

3.1.4 Buses de comunicacion

Los componentes principales de un computador son la UCP, la memo-ria y los perifericos. Estas componentes intercambian informacion cons-tantemente y, obviamente, la comunicacion debe establecerse a travesde un medio fısico que conecte la UCP con los dispositivos E/S y conel exterior. La comunicacion entre los distintos componentes se realizaa traves de lıneas que transportan informacion binaria. Este transportepuede llevarse a cabo de dos modos:

3.1. Componentes de un computador 75

• En la comunicacion en serie, la informacion se transmite un bit trasotro. El raton es un ejemplo tıpico de periferico con comunicacionen serie.

• En la comunicacion en paralelo, se transmite la informacion atraves de varias lıneas simultaneamente, de modo comparable auna autovıa de varios carriles (lıneas) por las que los vehıculos(informacion binaria) fluyen simultaneamente.

En la comunicacion en paralelo con los perifericos hay ocho o nuevelıneas, y se transmite de byte en byte. Un periferico tıpicamentecomunicado en paralelo es la impresora.

Las lıneas de comunicacion se agrupan segun el tipo de informacionque transporten, y cada uno de estos conjuntos de lıneas recibe el nombrede bus. Un bus transmite la informacion en paralelo.

Atendiendo al tipo de informacion que transmiten, los buses de co-municacion pueden ser de tres clases:

• Bus de direcciones, a traves del cual la UC determina la direccionde memoria o dispositivo de E/S con el que se intercambia infor-macion.

• Bus de datos, por el que viajan los datos para ser almacenados enla memoria o para ser usada en algun computo.

• Bus de control, que, como su nombre indica, transporta infor-macion de control para la sincronizacion de todo el trabajo.

En general los buses de datos tienen un numero de lıneas igual a lalongitud de la palabra de maquina, aunque a veces solo tienen la mitad,lo que incide negativamente en la velocidad del computador pero sueleabaratar el precio. Si el numero de celdas de memoria accesibles es 2d,los buses de direcciones suelen tener d lıneas. Por ultimo, los buses decontrol tienen un numero de lıneas variable dependiendo de las distintasmarcas y modelos de procesador.

Por el bus de datos la UC recibe (el codigo binario de) una ins-truccion, la interpreta y prepara su ejecucion. Dependiendo del tipo de

76 Capıtulo 3. Estructura fısica de un computador

instruccion, la UC puede generar algunos codigos de control que seranenviados a traves del bus de control; en su caso, averiguara a traves delbus de direcciones en que posicion (de la memoria principal) encuentranlos argumentos de la instruccion, esta informacion viajara hasta la UCpor el bus de datos y, finalmente, el resultado del computo sera trans-portado de nuevo a traves del bus de datos hacia la memoria o hacia unperiferico.

Existen dispositivos electronicos para el control de los buses que, enciertos casos, liberan a la UCP de este trabajo: son los controladores.

• Los controladores del sistema permiten el traslado del contenidode bloques de memoria, a gran velocidad, a traves del bus, conindependencia de la UCP. Se permite ası el acceso directo a lamemoria de los perifericos que puedan precisarlo (pantalla y discosduros).

• Los controladores de dispositivo actuan como intermediarios en-tre los perifericos y los buses permitiendo la comunicacion entrela UCP y sus perifericos, dado que estos ultimos no se conectandirectamente a los buses. Pueden ser especializados, como los quecontrolan la pantalla o las unidades de disco, o de proposito gene-ral, bien en serie o en paralelo.

La comunicacion entre la UCP y los controladores de dispositivose puede hacer de dos formas distintas: utilizando la propia memoriaprincipal o traves de una memoria independiente para E/S. En el primercaso cada controlador de dispositivo tiene asignada una direccion dememoria. Cuando la UCP quiere leer o escribir en el dispositivo, lohace en la direccion que dicho dispositivo tiene asignada, utilizando lasmismas instrucciones de escritura o lectura de memoria. En el segundocaso, el lenguaje maquina debe disponer de instrucciones especializadaspara el acceso a este area de E/S.

Los controladores de proposito general cumplen un determinado pro-tocolo estandar de comunicaciones y disponen de los necesarios conecto-res en el exterior del computador. Cualquier periferico que se atenga adicho protocolo puede ser conectado a ellos, facilitando su utilizacion.

3.2. Lenguajes de maquina 77

Entre los protocolos mas extendidos cabe citar el RS -232 para lospuertos en serie y el Centronics para los puertos paralelos.

3.2 Instrucciones en lenguaje de maquina

La informacion se representa dentro de un computador medianteceros y unos. Cada procesador es capaz de distinguir si recibe una ins-truccion o un dato de una forma que depende de su marca y su modelo.

El juego de instrucciones de un procesador recibe el nombre de len-guaje de maquina o codigo maquina. Una UCP solo puede entenderinstrucciones expresadas en su lenguaje de maquina, y cada instruccionespecifica una accion particular sobre algunos operandos. Una instruc-cion es una lista de ceros y unos: una parte de la lista es el codigo de laoperacion que ha de realizarse, el resto determina donde se encuentranlos argumentos de la instruccion (si los hubiera). Todo lo relacionadocon la especificacion de donde estan los argumentos de la instruccionrecibe el nombre de direccionamiento. A las instrucciones de maquinase les asignan nombres nemotecnicos, mas faciles de recordar que listasde ceros y unos.

Estas instrucciones son muy elementales, por lo tanto es necesariorealizar un gran esfuerzo de traduccion entre el lenguaje natural y elcodigo maquina. En el capıtulo 5 estudiaremos la jerarquıa de nivelesque permiten a un programador de aplicaciones escribir sus programasen lenguajes a medio camino entre el lenguaje natural y la codificacionen binario.

Hay dos tendencias basicas en el diseno de juegos de instrucciones:pocas instrucciones (algunas decenas) simples pero de ejecucion muyrapida o muchas instrucciones (unas 200) complejas, de ejecucion algomas lenta. La primera se conoce como RISC (del ingles, Reduced Instruc-tion Set Computer : computador con juego de instrucciones reducido) yla segunda como CISC (Complex Instruction Set Computer : computa-dor con juego de instrucciones complejo).

78 Capıtulo 3. Estructura fısica de un computador

3.2.1 Formato de las instrucciones

La eleccion del formato de las instrucciones de un procesador dependeen buena parte de las especificaciones fijadas por el equipo de diseno delprocesador y de otras consideraciones que veremos a continuacion.

Entre las operaciones que se ejecutan en un procesador, algunas notienen operandos, otras tienen uno, dos o a lo sumo tres. En muchosde los casos los operandos vienen expresados por sus direcciones de me-moria, por lo que se suele hablar de instrucciones de una, dos o tresdirecciones.

Pueden existir instrucciones sin operando, bien porque el operandono aparezca explıcitamente, siendo uno de los registros del procesador,o porque la propia instruccion no lo necesite, como cuando se repite unproceso o se regresa de una llamada a un subprograma.

En el otro extremo se situan las operaciones binarias, que precisantres direcciones para llevarse a cabo: las de sus dos argumentos y la dedonde ha de colocarse el resultado obtenido.

Lo ideal en un juego de instrucciones es que todas tengan el mismoformato. Adoptar, por ejemplo, un juego de instrucciones de tres di-recciones es sencillo: basta con ignorar los argumentos anadidos paraigualar el formato.

Tambien es posible elegir un juego de instrucciones con menos de tresoperandos. Las operaciones de tres argumentos se traducen entoncescomo sigue (considerando una operacion aritmetica cualquiera):

Si el juego de instrucciones es de dos direcciones, estas representana ambos argumentos, y el resultado de la ejecucion se almacena en laprimera o segunda direccion suministrada.

En las instrucciones de una direccion solo se especifica la de uno delos argumentos. En el caso de que se trate de una instruccion binaria, sehace necesario usar el registro acumulador que se encuentra en la UAL.Entonces, se toma como primer argumento el contenido del acumulador,como segundo argumento el contenido de la direccion de memoria dadopor la instruccion, y el resultado de la instruccion se almacena en elregistro acumulador (ver seccion 3.3.2).

3.2. Lenguajes de maquina 79

3.2.2 Tipos de Instrucciones

Las instrucciones del juego de un procesador pueden ser divididassegun su cometido en los siguientes grupos:

1. De movimiento de datos. Este tipo de instrucciones transfierendatos entre la memoria principal y los registros. Combinando lasdistintas procedencias con los distintos destinos posibles obtenemosbastantes tipos de instrucciones de movimiento de datos. Puedetratarse de datos aislados, de bloques de datos o de cadenas decaracteres.

2. Operaciones binarias. Estas instrucciones, aritmeticas y logicas,realizan una operacion con dos argumentos como, por ejemplo, lasoperaciones aritmeticas elementales y algunas operaciones logicasbinarias tales como AND, OR y XOR.

3. Operaciones monarias. Entre estas instrucciones podemos encon-trar las que desplazan o rotan los bits de una palabra. Algunasoperaciones binarias ocurren tan a menudo con un mismo argu-mento que, a veces, son incluidas como instrucciones de una soladireccion. Por ejemplo, tenemos la instruccion de borrar el conte-nido de una palabra de memoria, que es un caso particular de “mo-ver una palabra formada por ceros a la direccion suministrada”.

4. Instrucciones de salto. Sirven para alterar el orden de ejecucion delas instrucciones. Dentro de este grupo encontramos las instruc-ciones de salto condicional y las de salto incondicional:

La ejecucion de una instruccion de salto incondicional obliga alcomputador a “saltarse” el orden secuencial para ejecutar la ins-truccion contenida en la direccion determinada por el argumentode la instruccion de salto, y el orden de ejecucion sigue a partir dela instruccion sobre la que se salto.

Una instruccion de salto condicional necesita de instrucciones decomparacion ya que es necesario realizar una o varias comparacio-nes para comprobar la condicion.

80 Capıtulo 3. Estructura fısica de un computador

...

...

CALL 200......

......

......

RET

...

...

...

......

......

100101102103104...

200201202203

������:

XXXXXXy

Figura 3.2. Funcionamiento de una llamada a subprograma.

5. Llamada a un subprograma. Un subprograma no es mas que ungrupo de instrucciones que realiza operaciones utiles y necesariasen distintos puntos de un programa. Si, al ejecutar un programa, seencuentra una instruccion de llamada a subprograma, se ejecutantodas las instrucciones del subprograma y posteriormente se pasaa la siguiente instruccion del programa (ver la figura 3.2).

6. Entrada y salida de datos. Es el tipo de instruccion que mas cambiade un procesador a otro. Sirven para gestionar el intercambio deinformacion entre el computador y el exterior.

3.3 Un ejemplo de recapitulacion

En este apartado vamos a desarrollar un ejemplo explicativo de unconjunto de instrucciones de maquina de una direccion con acumulador.

Consideraremos un tamano de palabra de datos de 16 bits, las ins-trucciones se codifican con 4 bits, lo que permite un total de 16 instruc-ciones diferentes. Los restantes 12 bits se utilizaran para codificar lasdirecciones, lo que permite direccionar 212 = 4096 posiciones de memo-ria. El bus de datos sera de 16 bits y el de direcciones de 12 bits.

Para simplificar supondremos que el tamano de palabra de memoriaes de 16 bits, es decir que en cada direccion de memoria se almacenan 16

3.3. Un ejemplo de recapitulacion 81

bits, y que en cada operacion de lectura o escritura de memoria se trabajacon 16 bits. (En muchos sistemas el tamano de palabra de memoria esde 8 bits. Por ello, la formacion de un dato de 16 bits requiere la lecturade dos posiciones consecutivas de memoria empezando, por ejemplo, porla posicion par.)

3.3.1 UCP con acumulador

Como hemos visto (apartado 3.1.1), los registros son memorias degran velocidad utilizadas por la UCP y la memoria principal para re-alizar sus operaciones. Su tamano depende del contenido que vayan aalmacenar. En nuestro caso, el registro de direccion de memoria tendrıa12 bits y el de intercambio de memoria 16 bits.

El contador de programa tiene que almacenar una direccion de me-moria, luego tendra 12 bits, mientras que el registro de instruccion, quetiene que almacenar la instruccion completa, tendra 16 bits. Ademasexistira un registro acumulador, que desempena en este caso un papelfundamental en la ejecucion de instrucciones.

Dado que muchas instrucciones operan sobre dos operandos y pro-ducen un resultado, como primer operando se toma el contenido actualdel registro acumulador y como segundo operando se toma el contenidode la direccion que aparece en la instruccion y el resultado se almacenanuevamente en el acumulador. Por lo tanto, en las instrucciones de dosoperandos el registro acumulador hace el doble papel de operando y dedestinatario del resultado.

Supongamos que queremos sumar el contenido de la posicion de me-moria 100 con el contenido de la 150 y almacenar el resultado en la 200.En primer lugar cargamos el contenido de la posicion 100 en el acumula-dor, a continuacion llamamos a la operacion suma con la direccion 150;como veremos, esta instruccion suma al acumulador el contenido de ladireccion 150. Por ultimo, el contenido del acumulador se almacena enla posicion 200 de la memoria.

El proceso serıa el siguiente:

82 Capıtulo 3. Estructura fısica de un computador

CARGAR 100SUMAR 150ALMACENAR 200

Si utilizasemos instrucciones de tres direcciones, simplemente se es-cribirıa:

SUMAR 100 150 200

El lenguaje maquina se simplifica al tener una unica direccion, pero lasoperaciones se complican al tener que cargar y almacenar los operandosdel acumulador.

En las operaciones de cambio de signo o de complementacion, sola-mente tenemos un operando. La operacion se realiza sobre el contenidodel acumulador, donde se almacena tambien el resultado. La direccionpasada como argumento no se tiene en cuenta.

En las operaciones de E/S, el contenido de una posicion de memoriase recibe o envıa a un dispositivo externo. En este caso, no se utiliza elregistro acumulador.

3.3.2 Un juego de instrucciones de maquina de unadireccion

En la tabla 3.1 se relacionan las instrucciones de un lenguaje demaquina de una direccion simplificado. La notacion M [d] representael contenido de la direccion d de la memoria. La instruccion CARgar ddeposita el contenido de la posicion de memoria d en el acumulador.

La instruccion ALMacenar d realiza el proceso contrario: guarda elcontenido del acumulador en la direccion de memoria d.

Las instrucciones IN d y OUT d se utilizan para E/S. La primera lee undato de una posicion de memoria destinada a un dispositivo externo y loalmacena en la direccion de memoria d; la segunda toma el contenido dela posicion de memoria d y lo envıa a la direccion de memoria destinadaal dispositivo externo.3

3Por ser este un modelo muy simplificado, no se tiene en cuenta la comunicaciondirecta con el dispositivo.

3.3. Un ejemplo de recapitulacion 83

Instruccion Efecto Codigo de maquina

CAR d Ac ← M [d] 0000

ALM d M [d] ← Ac 0001

IN d read(M [d]) 0010

OUT d write(M [d]) 0011

SUM d Ac←Ac + M [d] 0100

RES d Ac←Ac – M [d] 0101

OP – Ac← –Ac 0110

MUL d Ac←Ac * M [d] 0111

DIV d Ac←Ac div M [d] 1000

NOT – Ac←not Ac 1001

AND d Ac←Ac and M [d] 1010

OR d Ac←Ac or M [d] 1011

COND d If Ac > 0 then goto d 1100

GOTO d goto d 1101

END Fin de programa 1110

Tabla 3.1. Ejemplo de juego de instrucciones de una direccion

84 Capıtulo 3. Estructura fısica de un computador

Las instrucciones SUMar d y REStar d, toman el contenido de la di-reccion de memoria d y lo suman y restan respectivamente con el conte-nido del acumulador, almacenando el resultado en dicho registro.

El mismo proceso pero aplicando la multiplicacion o la division esrealizado por MULtiplicar d y DIVidir d.

Las instrucciones OPuesto – y NOT – producen el cambio de signo(complemento a dos) o la complementacion del contenido del acumula-dor. La direccion a la que se aplican no se utiliza.

Las instrucciones logicas AND d y OR d toman el contenido de ladireccion de memoria d y del acumulador, efectuan la operacion and uor entre ambos operandos y almacenan el resultado en el acumulador.

La instruccion GOTO d da un salto incondicional y actua con indepen-dencia del valor del acumulador.

La instruccion CONDicion d, toma el valor del acumulador, compruebasi es mayor que cero, y en caso afirmativo carga en el registro contador deprograma la direccion d. En consecuencia, la siguiente instruccion queejecutara el procesador sera la contenida en la direccion d, produciendoseuna ruptura de la secuencia de ejecucion. Si no se cumple la condicionprosigue la ejecucion secuencial.

Por ultimo, la instruccion END senala el final del programa.

3.3.3 Ejecucion de una instruccion. Detalle

La ejecucion de cada instruccion de maquina conlleva una serie depasos elementales y transferencias de datos de unos organos a otros dela UCP.

Estos pasos elementales se denominan microinstrucciones y son eje-cutados por el secuenciador a partir del codigo de la instruccion demaquina.

La ejecucion de una instruccion comienza cuando se actualiza el re-gistro contador de programa. La UC envıa esta direccion a los circuitosde seleccion de memoria a traves del bus de direcciones y la senal de

3.3. Un ejemplo de recapitulacion 85

lectura a traves del bus de control. La direccion queda almacenada enel registro de direccion de memoria y al recibir la senal de lectura, selee la instruccion. La instruccion se envıa a traves del bus de datos y serecibe en el registro de instruccion de la UC. De esta forma, la UC tienedisponible la instruccion para ser decodificada y ejecutada.

Supongamos que la instruccion para ejecutar sea:

SUM 1000(10

equivalente en binario a:

0100 001111101000

La UC separa el codigo de operacion (0100) de la direccion del operando(001111101000) y, a partir del codigo, genera las senales de control paraenviar la direccion, a traves del bus de direcciones, al registro de di-reccion de la MP, efectuar la operacion de lectura y, finalmente, enviarel contenido de la direccion 1000 a un registro operativo de la UAL, atraves del bus de datos.

A continuacion se envıa la senal de control correspondiente a la sumaa la UAL, quien suma al contenido del acumulador el valor del registrooperativo, quedando el resultado almacenado en el acumulador.

3.3.4 Traduccion y ejecucion de un programa sencillo

Vamos a desarrollar un fragmento de programa para elevar un numeron a una cierta potencia a ∈ IN. El programa devolvera el valor 1 si a escero y na si es a > 0.

Tenemos que reservar un espacio de almacenamiento para los datos,resultados y constantes. Llamaremos n a la base, a al exponente y r alresultado. Usaremos una posicion adicional de memoria para almacenarla constante 1 que usaremos para decrementar la potencia.

La descripcion del proceso serıa la siguiente:

86 Capıtulo 3. Estructura fısica de un computador

Datos Direccion Contenidon d1 na d2 ar d3 r1 d4 1

d5 multiplicar r por ndecrementar a

si a > 0 ir a la direccion d5ir a la direccion d7

(entrada) d6 asignar a r el valor 1si a > 0 ir a la direccion d5

d7 continuar programa

La entrada del proceso es la direccion d6.

Para traducirlo a lenguaje maquina tenemos que fijar una direccioninicial, por ejemplo la 100, y convertir cada instruccion en sus equiva-lentes, utilizando el acumulador:

Direccion Contenido100: n101: a102: r103: 1104: CAR 102105: MUL 100106: ALM 102107: CAR 101108: RES 103109: ALM 101110: COND 104111: GOTO 116112: CAR 103113: ALM 102114: CAR 101

(pasa a la pagina siguiente)

3.3. Un ejemplo de recapitulacion 87

(viene de la pagina anterior)

Direccion Contenido115: COND 104116: Continuar programa.

El programa comienza a ejecutarse a partir de la direccion 112, re-alizando la comparacion a > 0. Veamos un ejemplo de ejecucion delprograma para los valores n = 5 y a = 0:

Direccion Instruccion Acum. a (101) r (102)0 ?

112: CAR 103 1113: ALM 102 1114: CAR 101 0115: COND 104116: Continuar programa

Veamos otro ejemplo con n = 5 y a = 3:

Direccion Instruccion Acum. a (101) r (102)3 ?

112: CAR 103 1113: ALM 102 1114: CAR 101 3115: COND 104104: CAR 102 1105: MUL 100 5106: ALM 102 5107: CAR 101 3108: RES 103 2109: ALM 101 2110: COND 104104: CAR 102 5105: MUL 100 25

(pasa a la pagina siguiente)

88 Capıtulo 3. Estructura fısica de un computador

(viene de la pagina anterior)

Direccion Instruccion Acum. a (101) r (102)106: ALM 102 25107: CAR 101 2108: RES 103 1109: ALM 101 1110: COND 104104: CAR 102 25105: MUL 100 125106: ALM 102 125107: CAR 101 1108: RES 103 0109: ALM 101 0110: COND 104111: GOTO 116116: Continuar programa.

El resultado, 125, queda almacenado en la direccion 102.

3.4 Observaciones complementarias

El conjunto de instrucciones de maquina presentado como ejemploesta muy simplificado. Los lenguajes de maquina reales pueden tenerhasta cientos de instrucciones, la mayorıa de ellas con distintas modali-dades de direccionamiento.

Los procesadores disponen tambien de numerosos registros operati-vos auxiliares, que se utilizan en la ejecucion de las instrucciones y en laformacion de las direcciones sobre las que se opera.

Para tener una panoramica mas amplia de los lenguajes de maquinaconviene conocer los distintos modos de direccionamiento y las instruc-ciones para la creacion de subprogramas.

Tambien son interesantes las instrucciones del tratamiento de lasoperaciones de E/S y de las situaciones de error o desbordamiento.

3.4. Observaciones complementarias 89

3.4.1 Tipos de direccionamiento

Cada procesador dispone de unas reglas precisas y determinadas parala definicion de las direcciones o registros donde se encuentran los datos.Estas reglas constituyen los modos de direccionamiento del procesadory pueden llegar a ser bastante complejas. Un procesador puede tenerdecenas de modos de direccionamiento diferentes, en los que participanregistros especializados.

Se llama direccion absoluta al valor numerico que cada posicion dememoria tiene asignado y por el cual se accede a ella. En general, ladireccion contenida en las instrucciones de lenguaje maquina no es la di-reccion absoluta, sino que esta se forma desplazando una cierta direccionllamada direccion de base, contenida en un registro especializado.

Se llama direccion efectiva a la direccion desde la cual, una vez reali-zadas las necesarias operaciones sobre la direccion contenida en la ins-truccion, se toman los datos.

Un registro puede contener un dato para operar con el, pero tambienpuede contener una direccion donde se encuentre el dato. (En los ejem-plos siguientes supondremos un lenguaje maquina de dos direcciones.)

• Direccionamiento inmediato

El direccionamiento inmediato consiste en incorporar el dato cons-tante a la instruccion. En realidad no es un direccionamiento pro-piamente dicho, puesto que se dispone del dato:

CAR AX, 500

Esta instruccion carga el valor constante 500 en el registro acumu-lador.

• Direccionamiento directo

La direccion contenida en la instruccion es la direccion de memoriade donde se debe obtener el dato. La instruccion:

CAR AX, [500]

90 Capıtulo 3. Estructura fısica de un computador

carga en el acumulador el contenido de la direccion de memoria500. Si la direccion es la absoluta se denomina direccionamientoabsoluto.

• Direccionamiento relativo

En el caso del direccionamiento relativo, la instruccion no contieneuna direccion sino un valor de desplazamiento que se aplica a unadireccion de referencia contenida normalmente en un registro, enuna pila o en el contador de programa. La instruccion:

CAR AX, [BX + 4]

carga en el acumulador el contenido de la direccion obtenida alsumar 4 al contenido del registro BX.

• Direccionamiento indirecto

En el direccionamiento indirecto la direccion contenida en la ins-truccion contiene la direccion en que se encuentra el operando. Lainstruccion:

CARI AX, [500]

carga en el acumulador el contenido de la posicion de memoriacuya direccion se encuentra en la direccion 500.

• Direccionamiento implıcito

En este caso se hace referencia a un registro que, por quedar so-breentendido, no se menciona en la instruccion.

En nuestro ejemplo de lenguaje maquina (ver 3.3.2) se sobreen-tiende que las operaciones se realizan y almacenan en el registroacumulador. En consecuencia, el direccionamiento de este registroqueda implıcito.

El siguiente cuadro resume los tipos de direccionamiento descritos:

3.4. Observaciones complementarias 91

Direccionamiento

InmediatoDirectoAbsoluto

Relativo

al contador de programaa un registroa pila

IndirectoImplıcito (con acumulador)

3.4.2 Subrutinas

Pilas

Las pilas son estructuras secuenciales de datos cuyo acceso se realizapor un extremo. Es semejante a la accion de apilar una serie de librossobre una mesa: se puede poner un libro sobre la pila o quitar el delextremo superior o cima, pero no insertar ni sacar libros intermedios;para acceder a uno de los libros de la parte inferior hay que retirarpreviamente los anteriores. Se dice que estas estructuras son de tipoLIFO (Last In First Out : ultimo en entrar primero en salir).

La mayorıa de los procesadores disponen de una pila para almacenarordenadamente ciertos valores y operaciones. Sobre una pila se definendos operaciones basicas: meter y sacar datos. Para su funcionamientose utiliza un puntero que senala a la cima de la pila. Para meter undato en la pila se decrementa el valor del puntero para que apunte a unaposicion sobre la actual, y a continuacion, se transfiere el dato a estaposicion. Para sacar el dato, se envıa su valor y despues se incrementael valor del puntero. De esta forma la posicion anteriormente ocupadaqueda liberada.

Estas operaciones suelen expresarse por sus mnemotecnicos en ingles:PUSH d y POP d. La primera introduce el valor contenido en la direccion den la pila, y la segunda saca el valor del extremo de la pila y lo depositaen la direccion d.

92 Capıtulo 3. Estructura fısica de un computador

base...

...

......

cima...

Puntero de pila�

......

Figura 3.3. Una pila y el puntero de pila.

......

......

YYY YYYd d

......

......

???XXX

YYYXXX

-PUSH d

← p.p.← p.p.

100101

100101

......

......

Figura 3.4. Interpretacion grafica de la orden PUSH.

3.4. Observaciones complementarias 93

......

......

??? YYYd d

......

......

YYYXXX

YYYXXX

-POP d

← p.p.← p.p.

99100101

99100101

......

......

Figura 3.5. Interpretacion grafica de la orden POP.

Llamadas a subrutinas

Un subprograma es un conjunto de instrucciones que realizan unaaccion concreta que se puede repetir varias veces a lo largo del pro-grama, como hemos visto en el ejemplo del apartado 3.3.4. En vez derepetir la codificacion de las instrucciones cada vez que se necesiten,estas se codifican una unica vez, formando un subprograma o subrutina,y se le llama desde los distintos puntos del programa. Los lenguajesde maquina disponen de instrucciones para realizar las llamadas a sub-programa, consiguiendose ası una estructura modular con un programaprincipal que llama a sus respectivos modulos cuando lo necesita.

La instruccion de llamada va acompanada de la direccion de entradadel subprograma:

CALL d

Esta instruccion llama al subprograma situado en la direccion d. Paraello, la carga en el registro contador de programa, en forma semejante alas instrucciones de salto COND o GOTO.

Sin embargo, una vez que el subprograma haya sido ejecutado, hayque volver al programa principal, por lo que se hace necesario conocer

94 Capıtulo 3. Estructura fısica de un computador

y almacenar la direccion de retorno, normalmente la direccion siguientea la de la llamada al subprograma, en el programa principal. Esta di-reccion se suele almacenar en la pila.

En consecuencia, antes de producirse un salto a un subprograma, lainstruccion de llamada debe almacenar la direccion de retorno al pro-grama principal, que es la direccion siguiente a la de llamada, en la pila.Cuando se llega a la ultima instruccion del subprograma el procesadorsaca la direccion de retorno de la pila y la carga en el registro contadorde programa, con lo cual prosigue la ejecucion del programa principal.

Los subprogramas deben terminar en una instruccion que indique alprocesador que debe volver al programa principal. Suele expresarse conel mnemotecnico:

RET

que indica el RETorno desde un subprograma.

3.4.3 Interrupciones

El trabajo del procesador puede verse interrumpido por distintosmotivos; operaciones de E/S, errores, paradas para depuracion, etc.

Una interrupcion del procesador es similar a lo que sucede cuandoestamos leyendo un libro y suena el telefono: el dispositivo externo,el telefono, avisa de su disposicion a realizar una operacion de E/S; elprocesador, el lector, almacena su estado de proceso (se fija en la paginay el lugar de la pagina donde se encuentra leyendo), y pasa a ejecutar unsubprograma de servicio de la llamada telefonica (responde al telefono,toma notas, etc., y por ultimo cuelga). A continuacion el procesadorreanuda su estado anterior a la llamada y prosigue con su proceso (ellector toma el libro, busca la pagina y continua con su lectura).

Las interrupciones pueden programarse (interrupciones de software)mediante las correspondientes instrucciones de maquina, o pueden pro-ducirse por los controladores del sistema y de dispositivos, a traves delbus de control (interrupciones de hardware).

3.5. Otras arquitecturas 95

Se puede establecer una jerarquıa de interrupciones dependiente desu prioridad; ciertas interrupciones deben ser atendidas de inmediato,incluso deteniendo otras interrupciones en curso de ejecucion.

Cada tipo de interrupcion determina la llamada a un subprogramade servicio, que contiene las instrucciones necesarias para atender lainterrupcion. Antes de atender la interrupcion, el procesador almacena elcontenido de los registros, generalmente en una estructura de tipo pila. Acontinuacion se ejecuta el subprograma, de forma similar a las llamadasde subprogramas (subrutinas). Una vez atendida la interrupcion, elprocesador recupera los contenidos de sus registros de la pila y prosiguela ejecucion del programa principal.

Para el tratamiento de las interrupciones los lenguajes de maquinasuelen disponer de instrucciones especıficas, que en forma nemotecnicasuelen expresarse como:

INT tIRET

La primera genera una INTerrupcion de tipo t, y entre otras accionesllama al subprograma de servicio t. La segunda marca el fin de dichosubprograma y provoca el retorno de la interrupcion.

3.5 Otras arquitecturas

En los ultimos anos se ha introducido una gran variedad de nuevas ar-quitecturas de computadores, especialmente orientados al procesamientoen paralelo, esto es, con capacidad para realizar varias operaciones si-multaneamente. Este modo de funcionamiento contrasta con el procesa-miento secuencial, en que las instrucciones se ejecutan una tras otra.

Actualmente, la mayorıa de los computadores incorpora algunas ca-racterısticas paralelas a bajo nivel sin que por eso puedan ser llamadoscon propiedad computadores paralelos. Estos disponen en general devarios procesadores o Unidades de Procesamiento (UP).

En esta seccion se presentan, muy brevemente, algunos esquemasbasicos que siguen las distintas arquitecturas paralelas existentes en la

96 Capıtulo 3. Estructura fısica de un computador

actualidad. Principalmente, estos modelos se diferencian entre sı enque las distintas UP pueden estar dotadas con una memoria local o no,compartir o no una memoria y operar sincronicamente o no. De modomuy general los computadores paralelos pueden clasificarse en alguna delas tres clases siguientes:

1. Arquitecturas sincronicas. Este tipo de computadores se carac-teriza por realizar paralelamente operaciones coordinadas por unreloj, una UCP o un controlador vectorial globales; a su vez puedenclasificarse en algunos de los tipos siguientes:

- Procesadores Vectoriales. Caracterizados por tener variasunidades aritmetico-logicas encadenadas, que permiten reali-zar calculos aritmeticos y logicos tanto con vectores como conescalares.

- Arquitecturas SIMD. Esta denominacion (del ingles SingleInstruction Multiple Data) caracteriza a aquellos computa-dores con una unidad central, varios procesadores y una redque permite la comunicacion entre procesadores e intercambiode datos con la memoria. Esta red de interconexion permiteque el resultado obtenido por un procesador sea comunicadoa otro procesador que lo necesite como argumento.

2. Arquitecturas MIMD. Este tipo de arquitecturas (del ingles Mul-tiple Instructions Multiple Data) emplea varios procesadores quepueden ejecutar, de forma asıncrona, programas independientesque usan datos locales. Por lo tanto, los computadores MIMD sonespecialmente utiles cuando el paralelismo de la solucion buscadarequiere que los procesadores trabajen de manera esencialmenteautonoma.

Las arquitecturas MIMD pueden clasificarse, a su vez, dependiendodel modelo de memoria que utilicen.

- De Memoria Compartida. Las arquitecturas de memoria com-partida consiguen la coordinacion entre los distintos procesa-dores mediante una memoria global, compartida. Es inte-resante observar que en este tipo de computadores se unen

3.5. Otras arquitecturas 97

varios procesadores de proposito general que comparten unamemoria global, en lugar de varias UCPs con su propia gestionde perifericos de entrada y salida.

- De Memoria Distribuida. Las arquitecturas de memoria dis-tribuida conectan los nodos (un procesador autonomo juntocon su memoria local) mediante una red de interconexionentre los procesadores. Los nodos comparten datos explı-citamente pasandose mensajes a traves de la red de interco-nexion, ya que no hay memoria compartida.Se han propuesto varias topologıas de interconexion para ar-quitecturas de memoria distribuida. Entre ellas se encuentranlas topologıas en anillo, en red, en arbol y las topologıas hi-percubicas.

3. Arquitecturas basadas en el paradigma MIMD. Por ultimo, pode-mos encontrar un tercer grupo de arquitecturas que no encajanen los dos grandes grupos anteriores. Esta clase de computadoresestan basados en el principio de asincronıa y manipulacion paralelade multiples instrucciones y datos; sin embargo, cada una de lassiguientes arquitecturas tienen alguna caracterıstica propia que lasepara de una maquina MIMD.

- Hıbridos SIMD-MIMD. Esta es una arquitectura experimen-tal en la que se permite que partes de una arquitectura MIMDpuedan ser controladas de modo SIMD.

- De Flujo de Datos. La caracterıstica fundamental de las ar-quitecturas de flujo de datos es su paradigma de ejecucion, enel que una instruccion se ejecuta tan pronto como sus operan-dos estan disponibles. De este modo, la secuencia de instruc-ciones ejecutadas esta basada en la dependencia de los datos,permitiendose ası explotar la concurrencia en los niveles detarea, rutina e instruccion.

- Dirigidas por la demanda (demand-driven). Este tipo de ar-quitecturas, tambien llamadas de reduccion, utilizan un para-digma de ejecucion en el que una instruccion se manda ejecu-tar solo cuando sus resultados se necesitan como operandos

98 Capıtulo 3. Estructura fısica de un computador

para otra instruccion que se esta ejecutando; este paradigmase conoce tambien como evaluacion perezosa (del ingles lazy),ya que se ejecutan solo las instrucciones estrictamente nece-sarias para la evaluacion pedida.

3.6 Ejercicios

1. Determine el numero de lıneas de los buses de datos y direcciones precisosen un ordenador con:

(a) una memoria de 64 K palabras de 1 byte, y

(b) una memoria de 16 Mb, en palabras de 2 bytes.

2. Dado un tamano de palabra de memoria de 2 bytes y un bus de direc-ciones de 20 lıneas, calcule el tamano de memoria direccionable.

3. A partir de los datos de un modelo de computador concreto, extraiga losvalores de las siguientes magnitudes, o indique sus caracterısticas:

(a) Tamano de la memoria principal.

(b) Numero de lıneas del bus de direcciones y de datos.

(c) Tipos de memorias utilizadas (ROM, RAM, . . . ), y su velocidad deacceso.

(d) Tamano de memoria cache.

(e) Velocidad de reloj.

(f) Tipo de coprocesador.

(g) Numero de controladores en serie y en paralelo.

(h) Unidades de disco: tipos, capacidad y velocidad de acceso.

(i) Otros perifericos disponibles.

4. Desarrolle un programa en lenguaje de maquina (usando instruccionesmnemotecnicas) para sumar los 10 primeros numeros naturales.

5. Desarrolle un programa en lenguaje maquina que copie el contenido delas posiciones 1000 a 1010 de memoria en las 2000 a 2010.

6. Amplıe el juego de instrucciones con POP y PUSH para desarrollar unprograma en lenguaje maquina que copie el contenido de las direccionesde memoria 1000 a 1010 en la pila, y desde la pila en las direcciones 2000a 2010.

3.7. Comentarios bibliograficos 99

7. Amplıe el juego de instrucciones con CALL y RET para desarrollar un unsubprograma en lenguaje maquina que, al ser llamado, sustituya el valoralmacenado en el acumulador por su opuesto.

8. Con el juego de instrucciones del ejercicio anterior, escriba un subpro-grama en lenguaje maquina que, al ser llamado, sustituya los valoresalmacenados en las posiciones de memoria 1000 a 1010 por sus opuestos.

9. Escriba un programa en lenguaje maquina que genere un ciclo infinito.

10. Escriba un programa en lenguaje maquina que escriba copias de sı mismoen la memoria disponible.

3.7 Comentarios bibliograficos

• Este capıtulo resume, enormemente, un area vastısima de la informatica.Por consiguiente, solo puede constituir una introduccion sin pretensionesde algunos conceptos basicos utiles sobre la estructura fısica de los com-putadores digitales, y de la coordinacion entre estos y el soporte logico,al mas bajo nivel, que es el de la maquina.

• En [PLT89] puede encontrarse un enfoque muy didactico de este tema,presentado junto con la descripcion de un modelo real, el ODE (Ordena-dor Didactico Elemental), desarrollado por los autores.

• El texto [Mei73] es una obra clasica sobre los contenidos de este capıtulo,que ha servido para la formacion de muchas generaciones de tecnicosen computacion, por lo que su referencia es obligada. Se advierte, sinembargo, que no se trata de un mero texto introductorio, aunque su clarapresentacion facilita un buen numero de conceptos que, por sı mismos,no son sencillos.

• En [MW84] puede verse como se concretan muchos de los contenidospresentados en este tema en dos procesadores concretos, el 8088 y el8086.

• En [FM87] se presenta brevemente una vision panoramica bastante ame-na sobre las nuevas arquitecturas de computadores. Un enfoque mastecnico puede hallarse nuevamente en el ultimo capıtulo de [Mei73].

Capıtulo 4

Sistemas Operativos

4.1 Cometido de un sistema operativo . . . . . . . . . . . . . . . . 1024.2 Conceptos basicos de los sistemas operativos . . . . . . . . . . . 1054.3 Clasificacion de los sistemas operativos . . . . . . . . . . . . . . 1164.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174.5 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . . . . 117

Un computador sin software es algo sencillamente inutil salvo, quiza,como elemento decorativo. Un sistema operativo constituye, probable-mente, la parte mas importante del conjunto de software que acompana acualquier computador moderno. El sistema operativo controla todos losrecursos del computador y ofrece la base sobre la cual pueden escribirselos programas de aplicacion.

El objetivo de este capıtulo consiste en exponer los elementos basicosde un sistema operativo, presentar sus funciones fundamentales y esta-blecer las cualidades que cabe esperar de el.

En las primeras secciones se definen los conceptos basicos acerca deun sistema operativo y las funciones que debe realizar. Posteriormentese establece una clasificacion, no exhaustiva, de los sistemas operativossegun sus caracterısticas mas sobresalientes.

102 Capıtulo 4. Sistemas Operativos

4.1 Cometido de un sistema operativo

4.1.1 Funciones de los sistemas operativos

En el capıtulo anterior se ha mostrado someramente la estructurainterna de un computador, con su(s) procesador(es), sus memorias prin-cipal y secundaria, y los perifericos. Si todo programador de aplicacionestuviera que controlar “a mano” todos los componentes de la estructurainterna del computador cuando hace sus programas, muy probablemente,no existirıan tantos programas en el mercado. Por poner un ejemplo, em-plear la instruccion escribir archivo es mucho mas simple que tenerque preocuparse por mover las cabezas lectoras del disco hasta una po-sicion adecuada, esperar que se estabilicen, dirigir la informacion desdela memoria e ir escribiendo la informacion en el disco.

Conviene al programador de aplicaciones (o al mismo usuario) des-entenderse de los complejos detalles del hardware. La idea fundamentalpara conseguirlo consiste en ocultar los escabrosos detalles del hardwarepuro con software (el sistema operativo) especialmente disenado parapermitir un uso mas facil y racional de todas las partes del sistema.

Del mismo modo, el sistema operativo presenta un interfaz simpleentre el programador o usuario y otros aspectos del hardware, comoson el manejo de interrupciones, relojes, gestion de memoria y otrascaracterısticas de bajo nivel.

Segun este enfoque, el sistema operativo tiene la mision de presentaral usuario una maquina virtual que sea mas facil de programar que elhardware puro y, por lo tanto, aumente la efectividad del computadoral evitar la necesidad de trabajar a bajo nivel. Por consiguiente, puedeconsiderarse un sistema operativo como un interfaz adecuado entre elusuario y el hardware.

Un sistema operativo tambien tiene la funcion de controlar y admi-nistrar de forma ordenada el uso de todos los recursos del computador.Esta funcion se hace especialmente necesaria cuando un computador estasiendo compartido por varios usuarios simultaneamente; en este caso,la necesidad de distribuir convenientemente el tiempo de trabajo de la

4.1. Cometido de un sistema operativo 103

UCP, los espacios de memoria y los perifericos es evidente. Desde estepunto de vista, la tarea del sistema operativo es llevar el control de quienesta utilizando cada recurso y dirimir los posibles conflictos entre variosprocesos o usuarios que intenten acceder a la vez a un mismo recurso.

No existe acuerdo entre los diferentes textos al senalar cuales sonlas funciones de un sistema operativo, ya que este concepto ha evolu-cionado con su desarrollo. En general, un sistema operativo debe poderdesempenar al menos las siguientes funciones:

• Facilitar la comunicacion hombre-maquina.

• Gestionar los recursos: procesador(es), memoria(s) y perifericos,facilitando su manejo al usuario.

• Gestionar la informacion (los archivos) contenida en los perifericosde almacenamiento y la organizacion de esa informacion (en direc-torios).

• Controlar la ejecucion de aplicaciones.

4.1.2 Formas de trabajo de los sistemas operativos

Los sistemas operativos han evolucionado para cubrir las distintasnecesidades de proceso sobre maquinas de tamano y potencia muy di-versos. Aparecen ası diferentes formas de trabajo y sistemas operativosespecializados en cada una de ellas.

Una de las principales distinciones se da entre los sistemas operativosde proposito general y los dedicados.

Los primeros, que son los mas utilizados, se disenan con una intencionde polivalencia, de forma que sobre ellos puedan ejecutarse programasdiversos: editores, compiladores y aplicaciones de todo tipo. Dentro delos sistemas operativos de proposito general puede distinguirse entre mo-nousuario y multiusuario, dependiendo de si pueden atender o no a masde un proceso al mismo tiempo. Claramente, los sistemas multiusuarioson mas complejos pues, ademas de desempenar todas las funciones pro-pias de uno monousuario, deben atender a otros aspectos, tales como el

104 Capıtulo 4. Sistemas Operativos

reparto del tiempo de trabajo del (los) procesador(es) entre los distintosusuarios, la separacion entre los datos de los mismos, etc.

En los sistemas operativos de proposito general, hay dos formas detrabajo basicas: el modo interactivo y el proceso por lotes. En el primero,el usuario tiene acceso a los recursos del sistema a traves de su terminal(local o remoto), estableciendo un dialogo con el computador, donde lasordenes y las respuestas tienen lugar de un modo casi inmediato.

En un proceso por lotes, los diferentes trabajos junto con sus datos sesuceden entre sı, de forma que su ejecucion se realice automaticamente,sin ningun tipo de comunicacion entre el usuario y el sistema, hasta lafinalizacion del trabajo.

Dentro de los sistemas operativos dedicados, se suele distinguir entrelos de control de procesos, de consulta de bases de datos y transacciona-les. En el control de procesos, el computador recibe continuamente datos(realimentacion) sobre el sistema bajo control, reaccionando en conse-cuencia. En la mayorıa de estos procesos, la variable tiempo tiene unaimportancia relevante; por ejemplo, en un horno industrial, un retrasoen la reduccion de la temperatura puede tener funestas consecuencias.En estos procesos, se dice que el sistema debe operar en tiempo real.

Los sistemas de consulta deben permitir al usuario el acceso a unao varias bases de datos de una forma comoda, sin tener que conocer losdetalles internos de su organizacion y funcionamiento. de su estructura.Se puede citar como ejemplo un sistema de consultas de historias clınicasen un hospital.

Por ultimo, los sistemas transaccionales permiten la realizacion deoperaciones sobre el contenido de bases de datos. Se han extendidoenormemente en los ultimos anos. Por ejemplo, ası se llevan a cabolos movimientos de cuentas en el sector bancario, la reserva y venta debilletes en agencias de viajes, etc.

Estos sistemas deben garantizar la opacidad de la informacion confi-dencial, actualizar rapidamente la base de datos y evitar ciertas opera-ciones simultaneas sobre los mismos datos (por ejemplo, dos personasque reservan el mismo asiento).

4.2. Conceptos basicos de los sistemas operativos 105

4.2 Conceptos basicos de los sistemasoperativos

4.2.1 Procesos

Es importante el concepto de proceso para entender como funcio-nan los sistemas operativos. Un proceso consiste, esencialmente, en unarutina de acciones del sistema que puede ser ejecutada independiente-mente de otro proceso e, incluso, en paralelo. Un programa de usuarioen ejecucion puede considerarse un proceso, aunque un proceso puedeinvolucrar la ejecucion de mas de un programa y, recıprocamente, unprograma o rutina de instrucciones puede estar involucrado en mas deun proceso. Por esta razon es mas util el concepto de proceso que el deprograma al referirnos al sistema operativo.

Todo proceso creado puede ser tratado como un seudorrecurso pues,al contrario que los recursos reales, los procesos son entidades efımerasque desaparecen una vez completada su mision. Podrıa arguirse que losprocesos son consumidores de recursos en lugar de ser recursos por sımismos; sin embargo, una vez que han entrado en el estado transitoriode ser procesos, pueden ser “manejados” por otros procesos.

La gestion de procesos es una tarea fundamental de los sistemasoperativos; concretamente, la mayorıa de los sistemas operativos debensoportar la ejecucion concurrente de procesos y resolver los problemasque esta plantea, ofreciendo medios para la sincronizacion de los pro-cesos, controlando su exclusion mutua respecto de ciertos recursos, yevitando, en la medida de lo posible, las situaciones de bloqueo. Estosconceptos se explican a continuacion.

Dos o mas procesos se dicen concurrentes cuando se estan ejecutandosimultaneamente. Cuando existen mas procesadores que procesos, cadaproceso se ejecutara sin conflicto en un procesador (paralelismo); si, porel contrario, existen mas procesos que procesadores puede obtenerse una“simultaneidad aparente” (concurrencia) haciendo que los procesadoresalternen cortos perıodos de tiempo de dedicacion a los distintos procesos.

Si dos procesos concurrentes utilizan recursos distintos podran con-

106 Capıtulo 4. Sistemas Operativos

vivir sin interferencias pero si, por el contrario, los procesos necesitan losmismos recursos puede surgir conflicto. Supongase que ambos recursospretenden acceder a una impresora: es absolutamente inviable conmu-tar la dedicacion de la impresora entre ambos procesos ya que, en esecaso, el resultado serıa caotico. Este es un caso tıpico de necesidad deexclusion mutua de dos procesos respecto a un recurso.

Dos procesos concurrentes pueden necesitar cooperar al realizar sustareas; por ejemplo, un proceso que genera lıneas de texto que envıaa un buffer y otro que las consume, tomandolas del buffer de datos yenviandolas a la impresora. Cuando ası ocurre, es necesario que existauna sincronizacion de ambos procesos.

Por ultimo, puede darse la circunstancia de que dos (o mas) procesosen ejecucion concurrente se bloqueen mutuamente, en el sentido de quecada uno de ellos necesita un recurso que el otro posee. Llegados a estepunto la ejecucion se detiene, ya que cada proceso espera que el otrolibere la informacion (o el recurso) que necesita. Esta situacion se llamabloqueo (en ingles deadlock).

4.2.2 Archivos

La informacion es almacenada por el ordenador en dispositivos, comopor ejemplo los discos. Para que el usuario pueda ignorar la estructurafısica del disco, el sistema operativo debe presentar la informacion al-macenada de una forma organizada, que permita acceder a ella de unamanera logica y sencilla.

En este contexto, se entendera por archivo un conjunto de infor-macion relacionada (definida por el usuario o no). En el pueden estarcontenidos datos o programas. Un sistema operativo debe gestionar losarchivos de una forma eficiente; para ello son necesarias operaciones ta-les como la creacion, modificacion y borrado de archivos. El sistemaoperativo debe proporcionar estas operaciones, permitiendo al usuarioreferirse a los archivos mediante nombres simbolicos.

Al manipular los archivos, el computador puede acceder a ellos dedos modos, dependiendo del medio de almacenamiento en que reside el

4.2. Conceptos basicos de los sistemas operativos 107

archivo (vease 3.1.3): el acceso secuencial y el acceso directo.

• Con acceso secuencial se recorren los elementos de un archivouno tras otro, consecutivamente. Este metodo de acceso vieneimpuesto por ciertos medios de almacenamiento, tales como lascintas magneticas, aunque tambien puede darse en otros disposi-tivos, como los discos magneticos, cuando los archivos tienen estaorganizacion.

• Con acceso directo, los diferentes elementos pueden localizarse di-rectamente por su posicion, sin necesidad de recorrer los anteriorespara llegar hasta ellos. Este es el modo de acceso tıpico de los dis-cos magneticos.

Cuando el numero de archivos crece, resulta incomoda su localizaciony manipulacion. Para facilitarla, el sistema operativo presenta al usuariola posibilidad de agruparlos en compartimentos, llamados directorios. Elsistema operativo debera manejar la organizacion de directorios, ocul-tando al usuario los detalles particulares de la localizacion fısica de losarchivos y directorios, facilitandole en cambio operaciones para gestionarcomodamente el sistema de directorios.

La tecnica mas comunmente utilizada es usar una estructura en arbol,en la que existe un directorio raız que puede contener archivos y/o(sub)directorios; a su vez cada directorio puede contener mas archivosy/o mas (sub)directorios. La figura 4.1 muestra un ejemplo de sistemade archivos.

Una imagen visual bastante util de un sistema de archivos con estruc-tura de arbol se consigue al considerar un directorio como una carpetaque contiene un cierto numero de documentos (los archivos). En princi-pio nada nos impide que coloquemos una carpeta dentro de otra (salvoquiza la limitacion de espacio).1

Una operacion fundamental en la gestion de un sistema de archivoses la busqueda eficiente de un archivo determinado. Si el numero de

1Esta es la representacion utilizada en los interfaces graficos de usuario como los deApple Macintosh y Windows.

108 Capıtulo 4. Sistemas Operativos

Raız����������

XXXXXXXXXXXX

alumnos profesores juegos!!!!PPPP %

%%%

@@@

������

AAA

XXXXXXXadictivos

��ll

tetris prince

Pedro PabloLuis Eloy Joe

trivialgo mus

Figura 4.1. Un sistema de archivos con estructura de arbol.

archivos es pequeno lo mas simple y lo mejor es buscar secuencialmentearchivo tras archivo, pero si el sistema contiene muchos archivos estatactica llevara mucho tiempo y, como esto es lo habitual, se han ideadoestrategias para hacer el acceso mas eficiente.

La idea de directorio de trabajo permite agilizar la busqueda de archi-vos en el sistema; para ello es fundamental la nocion de camino (en inglespath) desde la raız del arbol hasta una rama determinada; por ejemplo,en el arbol de directorios de la figura 4.1 los juegos adictivos tienen el path\juegos\adictivos. Si el directorio de trabajo fuera \juegos enton-ces adictivos\tetris (camino relativo al directorio de trabajo) tiene elmismo significado que \juegos\adictivos\tetris (camino absoluto).

Para la optimizacion de la busqueda de archivos se suele buscar soloen el directorio de trabajo y en algunos otros paths especificados por elusuario.

Otra prestacion ofrecida por la mayorıa de los grandes sistemas ope-rativos es la proteccion de la informacion. Debido a la facilidad con quepuede borrarse la informacion almacenada, los sistemas operativos ofre-cen dos mecanismos principalmente para asegurar archivos y directorioscontra los descuidos, propios o ajenos:

• un sistema de copias de seguridad (backup), que se pone en mar-

4.2. Conceptos basicos de los sistemas operativos 109

cha automaticamente ante cada modificacion efectuada sobre cadaarchivo.

• un sistema de atributos, que permite marcar los archivos que nece-sitan copia de seguridad, como imborrables, como no susceptiblesde modificacion, etc.

Otro aspecto de la proteccion, igualmente importante en sistemasmultiusuario, consiste en permitir el acceso y garantizar que el trabajode cada usuario es privado, ocultandolo a los demas. Este efecto seconsigue por lo general mediante un sistema de marcas, que identificaal propietario de los distintos archivos y directorios, y de contrasenas,que permite reconocer el usuario concreto que se encuentra ante cadaterminal.

4.2.3 Nucleo

Se emplea frecuentemente el termino nucleo o kernel para referirse aaquella parte del sistema operativo mas cercana a la maquina y que, porlo tanto, siempre esta almacenada en la memoria principal (RAM). Elnucleo es un codigo muy frecuentemente usado por otros programas deun nivel superior (aplicaciones o utilidades). Por esta razon se presenta,aparentemente, como una ampliacion del conjunto de instrucciones dela maquina. El nucleo desempena, al menos, las siguientes funciones:

1. Manejo de interrupciones. Cada sistema operativo tiene un ciertonumero de tipos posibles de interrupciones, (vease la seccion 3.4.3).El diseno del nucleo debe garantizar que, cuando la interrupcionsea atendida para permitir que se ejecute otra tarea, la informacionque se estaba procesando quede correctamente protegida y almace-nada, garantizandose que la actividad interrumpida pueda reanu-dar su ejecucion en el punto en que la dejo, cuando sea atendidala interrupcion.

2. Soporte de entrada y salida. El nucleo debe controlar los avisosde los procesos que necesitan comunicarse con los perifericos einterceder en caso de conflicto.

110 Capıtulo 4. Sistemas Operativos

4.2.4 Multiprogramacion

En un sistema de multiprogramacion el computador puede ejecutarvarios programas simultaneamente.

La idea basica es aprovechar la mayor rapidez del procesador respectode los perifericos, discos o impresoras, en atender una peticion, o bienaprovechar el tiempo que tarda un usuario en introducir sus ordenes atraves del teclado. Con todo esto, se aprovecha mejor la potencia delprocesador que, a fin de cuentas, es el elemento mas caro del computador.

Para poder trabajar con multiprogramacion, el sistema operativodebe disponer de un mecanismo que permita que la memoria sea asignadacorrectamente, y compartida entre los distintos trabajos que se ejecutan.

A diferencia de la memoria, en la que pueden caber varios programasa la vez, la UCP en un instante concreto esta dedicada solamente a unprograma de usuario o bien a realizar una de las multiples tareas precisaspara la gestion del sistema. Hace falta un mecanismo que planifique estaactividad y su diseno es fundamental para el sistema operativo; estemecanismo se conoce como planificacion (en ingles scheduling).

El objetivo de la planificacion es optimizar el uso de la UCP. Lostrabajos que estan esperando turno se ponen “en cola”, de la cual se debeextraer el candidato mas idoneo para utilizar la UCP en cada momento.El proceso de seleccion entre los miembros de esta cola es realizado porel planificador, pudiendo existir mas de uno, por ejemplo, para controlarlos sistemas de tiempo compartido a corto, medio y largo plazo.

Para elegir el mecanismo adecuado hay que tener en cuenta cual esel uso principal del computador. Si solo se estan ejecutando procesospor lotes (vease pag. 104 o la seccion A.2.5) durante la noche es posiblerealizarlos uno tras otro, pero si existen usuarios realizando consultaspuede ponerse como objetivo que ninguno de ellos este mas de un de-terminado numero de segundos sin atencion. Las disciplinas de gestionde colas van desde la mas simple, consistente en una cola en la que elprimero que llega es el primero que es atendido, hasta mecanismos muycomplejos en maquinas con varios procesadores, donde las decisiones se

4.2. Conceptos basicos de los sistemas operativos 111

toman teniendo en cuenta otros parametros ademas del tiempo, comopor ejemplo la prioridad (importancia) de cada proceso.

En los sistemas medios tiene interes conocer el mecanismo denomi-nado round-robin, que ha sido especialmente disenado para sistemas detiempo compartido en los que hay varios usuarios en distintas terminalescompartiendo un computador. Cada uno de ellos debe tener la impresionde que el sistema trabaja solo para el; para ello, se define una unidadde tiempo (llamado quantum) que oscila entre 10 y 100 milisegundos, enfuncion del sistema, y la cola se trata como si fuera una circunferenciade forma que el algoritmo va concediendo una parte de tiempo fija acada usuario, transcurrido el tiempo asignado se le retira el control dela UCP y se cede al siguiente, y ası sucesivamente.

4.2.5 Interfaz de usuario

Sea cual fuere el sistema operativo empleado, hay un conjunto deprogramas que regulan la comunicacion de la maquina con el usuarioy senalan las reglas que rigen esta comunicacion. Esto es lo que sedenomina interfaz de usuario Hay dos tipos de interfaz:

- Interfaz de mandatos, en la que el procedimiento de comunicaciondel usuario con el computador consiste en la introduccion de ins-trucciones por medio del teclado.

- Interfaz grafico, en la que el procedimiento consiste en la seleccionpor el usuario mediante un periferico adecuado (habitualmente unraton) entre varias opciones que le son presentadas en la pantallamediante graficos, iconos o distintos tipos de esquemas.

Los interfaces de mandatos se emplearon en los primeros computado-res y aun en la actualidad se emplean en entornos como dos y unix. Sinembargo, cada vez mas se tiende a la utilizacion de interfaces graficospor lograrse con ellos una mayor productividad a costa de una menorfatiga del usuario, ya que este no necesita conocer los comandos precisospara activar cada una de las opciones disponibles.

El sistema pionero del interfaz grafico ha sido el de los computadoresApple-Macintosh. Actualmente existe un potente interfaz grafico para

112 Capıtulo 4. Sistemas Operativos

el sistema dos como es windows. El sistema unix tambien tiene variossistemas de ventanas como open-look y open-windows. Reciente-mente, ha aparecido una version de windows independiente de dos: elsistema operativo windows-nt, que permite gestionar computadores,impresoras, telefonos o telefax en una red digital unica.

4.2.6 Gestion de la memoria

En teorıa, la potencia del procesador suele permitir gran cantidadde operaciones por segundo pero, dado que para que un programa seaejecutado debe estar en la memoria principal, habra que gestionar laocupacion de memoria por parte de los programas que el procesadoresta atendiendo.

Para optimizar la memoria del computador existen dos solucionesextremas: tener una memoria real muy grande (lo cual resulta caro) otener los datos en los discos y hacerlos entrar y salir todas las veces quehaga falta (lo que resulta ineficiente). Entre ambas soluciones existenvarias posibilidades:

1. Tener la memoria dividida en un numero fijo de particiones detamano constante, de modo que en cada una de ellas puede existirun programa en ejecucion. Al elegir esta estrategia surgen dosproblemas:

(a) Fragmentacion interna: al situar un programa en una par-ticion, se desperdicia la parte sobrante de esta.

(b) Fragmentacion externa: surge al tratar de situar un programagrande, que no puede entrar en ninguna de las particionesvacıas, aunque cabrıa en la memoria si estas se pudieran agru-par.

Una forma obvia de solventar estos problemas es no fijar de ante-mano ni el numero ni el tamano de las particiones de la memoria,permitiendo ası una asignacion de recursos mas dinamica.

2. Poder dividir la memoria en un numero variable de particiones,en este caso el sistema operativo debe proporcionar al operador

4.2. Conceptos basicos de los sistemas operativos 113

un sistema que pueda variar el tamano de las particiones y adap-tarlas a los programas que estan esperando en ese momento. Estasolucion no es perfecta, ya que a medida que los programas ter-minan su ejecucion y salen de la memoria dejan un hueco libre,exactamente en el espacio que ocupaban.

A la hora de cargar un programa para su ejecucion puede ocurrirque, incluso habiendo suficiente cantidad de memoria disponible,esta no sea contigua. Entonces se debe decidir si se carga el pro-grama en el primer agujero disponible que tenga suficiente tamano,o bien en el mas pequeno de los posibles. En todo caso, la existen-cia de estos huecos tiende hacia un tipo de fragmentacion externaque puede ser bastante importante.

Para evitar estos problemas surgen varias soluciones:

(a) Compactacion, mediante la cual los programas son desplaza-dos para conseguir que todo el espacio libre sea contiguo.

(b) Comparticion, mediante la que un mismo codigo puede serusado por varios programas y, por lo tanto, por varios usua-rios.

(c) Memoria virtual, que en cierto sentido es la contrapartida dela compactacion: en lugar de luchar contra la fragmentacion,empujando los programas para que quede espacio contiguo,se permite que los programas puedan cargarse por partes envez de hacerlo como un bloque monolıtico.

Memoria virtual

La tecnica de memoria virtual permite iniciar la ejecucion de unprograma solo con una parte de este en la memoria, de manera que sepueda solicitar mas memoria en cuanto sea preciso.

La mayor ventaja que tiene este sistema es que permite trabajar conprogramas mayores que el total de la memoria fısica disponible. Con loscomputadores modernos no es frecuente que tengamos programas masgrandes que el total de la memoria disponible, por lo cual la introduccion

114 Capıtulo 4. Sistemas Operativos

de memoria virtual puede parecer un lujo excesivo. Sin embargo, puedeocurrir que muchas partes de un programa no suelen ejecutarse salvo enmuy raras ocasiones, como es el codigo para el manejo de las condicionesde error, tablas internas o rutinas que tratan solo casos especiales queafectan a muy pocos de los datos. Con la tecnica de memoria virtualbastarıa mantener en la memoria el nucleo del programa, consiguiendose,en cualquier caso, un mejor aprovechamiento de la memoria fısica, quees cara.

La idea de memoria virtual puede ser implantada en un sistema ope-rativo concreto mediante varias soluciones, siendo las mas corrientes lasde paginado y las de segmentacion.

Memoria virtual paginada.- Las tecnicas de paginacion consistenen la separacion de los conceptos de espacio de direcciones y posicionesde memoria, o lo que es lo mismo, entre memoria logica y memoriafısica. Para comprender mejor en que consiste la tecnica de paginadoconsideraremos el siguiente ejemplo:

Supongase un computador con un campo de direcciones de 16 bitsy una memoria principal de 8Kb, en palabras de un byte. En principiose pueden direccionar (espacio de direccionamiento) 216 = 65536 = 64Kpalabras de memoria (de un byte) pero solo existe espacio fısico para8·1024 = 8192 palabras, para direcciones de memoria desde 0 hasta 8191.Como la memoria logica es mucho mayor que la realmente disponiblehabra que disenar un metodo que soporte llamadas, por ejemplo, a ladireccion 8195 sin que se genere un desagradable mensaje de error. Unaposible solucion para evitar los errores cuando se producen llamadas amemoria con direcciones superiores a las realmente disponibles, comola 8195, serıa usar aritmetica modular y considerarla simplemente comola direccion 3 = 8195 − 8192 (del mismo modo que sabemos que las 15horas son las 3 de la tarde: 3 = 15 − 12). Esta alternativa implicarala inclusion de una funcion de conversion entre direcciones logicas ydirecciones fısicas.

En un sistema con memoria virtual paginada se ejecutarıan los si-guientes pasos cuando se recibe la llamada a la direccion 8195, que no

4.2. Conceptos basicos de los sistemas operativos 115

se corresponde con ninguna direccion fısica:

1. Se salva el contenido de la memoria principal en la memoria se-cundaria (generalmente el disco).

2. Se localizan las palabras correspondientes a los siguientes 8Kb dememoria direccionable, esto es, las palabras desde 8192 hasta 16383en la memoria secundaria.

3. Se cargan estas palabras en memoria principal.

4. Se cambia la funcion de conversion de direcciones de memoria.

5. La ejecucion continua con normalidad hasta que se vuelva a pro-ducir otra llamada a una direccion de memoria fuera del espaciofısico.

Memoria virtual segmentada.- En este modelo de memoria virtualse refleja de forma clara la division entre programas y datos. La ideaconsiste en dividir el espacio de direcciones en segmentos, cada uno delos cuales correspondera a una rutina, un programa o un conjunto dedatos; en este caso se estara explotando el concepto de modularidad delos programas construidos estructuradamente.

La segmentacion es una tecnica que organiza el espacio logico de me-moria en segmentos (bloques independientes) de tamano variable, quese colocan en la memoria fısica mediante algoritmos de localizacion deespacio libre. Puesto que cada segmento constituye un espacio de direc-ciones distinto, diferentes segmentos pueden crecer o encoger de maneraindependiente, sin que se afecten entre sı; por supuesto, aunque los seg-mentos pueden crecer, un segmento se puede llenar y, en este caso, seproducira un mensaje de error.

La especificacion de una direccion en una memoria segmentada (tam-bien llamada bidimensional) debe proporcionar dos componentes: unnumero de segmento y la direccion dentro del segmento. Cada segmentoforma una entidad logica que el programador puede tener en cuenta paraasignarle distintos tipos de proteccion; por ejemplo, si un segmento con-tiene un procedimiento, entonces se especificara que es un segmento de

116 Capıtulo 4. Sistemas Operativos

ejecucion, prohibiendose la escritura; si contiene una pila se especificaracomo de lectura y escritura, pero no de ejecucion. Esta practica es degran utilidad en la deteccion de errores de programacion.

4.3 Clasificacion de los sistemas operativos

El criterio mas simple de clasificacion es aquel que atiende al tamanoy potencia del hardware que manejan, y divide los sistemas operativosentre los grandes sistemas (mainframes), los de computadores de gamamedia (minis) y en los microcomputadores o micros. Cuanto mas po-tente, y por lo tanto mas cara, sea la maquina a la que va dirigidoel sistema, mayor es el interes existente en optimizar los recursos, es-forzandose el disenador en conseguir una gestion de tareas dinamica yeficiente que permita gestionar simultaneamente multiples programas sinintervencion del operador, con independencia de los dispositivos, etc.

Otro importante criterio de clasificacion es la division entre sistemaspropietarios y sistemas abiertos, es decir, si el fabricante del hardwaredispone de control exclusivo sobre el mismo o bien se trata de un sistemaabierto a toda la comunidad industrial.

En computadores pequenos y medios es ya una norma la utilizacionde sistemas abiertos, como unix, frente a los sistemas propietarios, carac-terizados por el control que sobre ellos ejerce un fabricante de hardware,por ejemplo, el sistema utilizado por los computadores Apple-Macintosho algunos derivados de unix como aix o ultrix.

La ventaja de un sistema abierto es la independencia de la maquinasobre la que se instala, por lo que tanto los programas fuente comolas bases de datos o las transacciones, pueden ser transferidas de unhardware suministrado por un fabricante a otro distinto, independizandoal usuario de los proveedores.

Las ventajas de un sistema propietario es haber sido disenado para unhardware especıfico, y por lo tanto obtiene de el las mejores prestacionesposibles. Las interfaces a las bases de datos, monitores de teleprocesoy otros productos del fabricante estan exhaustivamente probados, por

4.4. Ejercicios 117

lo que (al menos en teorıa) existiran menos problemas para utilizar talsistema.

4.4 Ejercicios

1. Haga un resumen de aquellos mandatos que se utilicen en la gestion dearchivos y directorios en un sistema operativo concreto (por ejemplo doso unix).

2. Dado que las tareas de impresion consumen bastante tiempo, es frecuenteimprimir en un “segundo plano”, y al mismo tiempo realizar otras tareas,siendo esta una de las aplicaciones tıpicas de la multiprogramacion ensistemas monousuario. Busque los mandatos necesarios para aplicar estatecnica en dos, y estudie la gestion de las colas de impresion.

3. Acceda a un interfaz grafico de usuario (por ejemplo windows) y rela-cione los mandatos del administrador de archivos con sus equivalentes enel dos, analizando las ventajas e inconvenientes de cada forma de operar.

4. Estudie el tamano maximo de programa que se puede cargar y ejecutaren la memoria en un computador bajo DOS utilizando el mandato MEM.

5. Diferencie entre los conceptos de disco virtual y de memoria virtual.(Consultese el apendice A.)

6. Estudie los mecanismos de proteccion en un sistema multiusuario con-creto, como unix. ¿Cuales de ellos tienen sentido en un sistema monou-suario y cuales no?

7. Estudie los comandos que permiten controlar la ejecucion de trabajos enun sistema multitarea como unix.

4.5 Comentarios bibliograficos

En este capıtulo no se ha hecho mas que introducir algunos de los conceptosbasicos de los sistemas operativos, sus funciones y sus principales modos defuncionamiento. Para un estudio mas profundo, se pueden consultar [Lis86],[Mil89], [PS91] y [Dei93].

En el apendice se incluye una introduccion practica y rapida, aunque ne-cesariamente incompleta, de dos de los sistemas operativos mas conocidos ydifundidos en la actualidad. Aunque para un primer contacto con el dos bas-tara en general con esta introduccion, los manuales del usuario y de referencia

118 Capıtulo 4. Sistemas Operativos

que se distribuyen al comprar un pc lo mantendran al dıa sobre las sucesivasactualizaciones del dos, proporcionandole una informacion mucho mas com-pleta. Para profundizar mas en este sistema, un libro muy detallado sobre eldos es [Jam90].

La bibliografıa sobre unix es muy extensa, desde introducciones muy ge-nerales hasta libros sobre parcelas muy especializadas. Una buena referenciaque abarca casi todo el sistema unix la constituye [RRF91]. Por otra parte,en [KP87] se dispone de una breve presentacion del sistema, con el objetivo deintroducir los requisitos necesarios para abordar una muy interesante seccionde desarrollo de aplicaciones.

Capıtulo 5

Lenguajes de programacion

5.1 Lenguajes de bajo y alto nivel . . . . . . . . . . . . . . . . . . . 1205.2 Descripcion de los lenguajes de programacion . . . . . . . . . . 1315.3 Procesadores de lenguajes . . . . . . . . . . . . . . . . . . . . . 1415.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485.5 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . . . . 149

Un lenguaje de programacion es un lenguaje artificial, disenado pararepresentar expresiones e instrucciones de forma inteligible para las com-putadoras.

Los lenguajes de programacion son, en gran medida, comparablesa los lenguajes naturales: sus sımbolos basicos constituyen su alfabeto,y con ellos se construye el vocabulario del lenguaje, cuyos elementosse llaman tokens. Estos tokens se combinan de acuerdo con las reglassintacticas del lenguaje, formando expresiones y sentencias cuyo signifi-cado viene dado por la semantica del lenguaje.

Los lenguajes de programacion son sin embargo considerablementemas simples que los naturales en su sintaxis y, especialmente, en susemantica.

En este capıtulo se introducen distintos aspectos relacionados conlos lenguajes de programacion. En primer lugar, hacemos una presen-tacion evolutiva, mostrando las aportaciones hechas por los lenguajes

120 Capıtulo 5. Lenguajes de programacion

direccion contenido. . . . . .

0000 0000 0010 0010 0000 0000 11010000 0000 0011 0000 0000 0000 11000000 0000 0100 0101 0000 0000 11010000 0000 0101 1100 0000 0000 10100000 0000 0110 0000 0000 0000 11010000 0000 0111 0101 0000 0000 11000000 0000 1000 0001 0000 0000 11010000 0000 1001 1101 0000 0000 00110000 0000 1010 0011 0000 0000 11010000 0000 1011 1110 0000 0000 ????0000 0000 1100 0000 0000 0000 1010???? ???? 1101 ???? ???? ???? ????

. . . . . .

Figura 5.1. Expresion de un programa en codigo maquina.

ensambladores y los de alto nivel y muy alto nivel, fuertemente orien-tados al problema. La descripcion de los lenguajes de programacion seefectua, cada vez en mayor medida, a traves de procedimientos formales,evitandose toda ambiguedad y facilitando el estudio de las propiedadesde los programas, por lo que estudiamos algunos de esos procedimien-tos. Finalmente, presentamos los programas procesadores de lenguajes,su funcion, sus tipos y los entornos de programacion, muy evolucionados,que facilitan hoy dıa las distintas fases de desarrollo de programas.

5.1 Lenguajes de bajo y alto nivel

5.1.1 Lenguajes orientados a la maquina

Hablando estrictamente, los unicos sımbolos que comprenden loscomputadores son dos: el cero y el uno. Combinandolos apropiada-mente, se forman las instrucciones, como se ha descrito en el capıtulo 3.

La interpretacion de estas instrucciones esta dirigida a componentesfısicos de la maquina subyacente, tales como el registro acumulador o

5.1. Lenguajes de bajo y alto nivel 121

dir. contenido. . .

IN nCAR d

m1 RES nCOND m2

CAR nRES dALM n

GOTO m1m2 OUT n

ENDd 10n ?

. . .

Figura 5.2. Un programa en lenguaje ensamblador

las direcciones de los operandos. Por estas razones tan obvias, estosrudimentarios lenguajes se llaman lenguajes orientados a la maquina o,mas brevemente, lenguajes de maquina.

El programa de la figura 5.1 esta escrito en el lenguaje maquinadefinido en el capıtulo 3.

Resulta evidente que, aun siendo los lenguajes maquina el medio deexpresion natural para las computadoras, son ciertamente aparatosospara el programador humano que deba redactarlos, leer o modificar losprogramas escritos en ellos. Presentan ademas el inconveniente de noser transportables, esto es, no ser comprendidos por maquinas diferentes.Los lenguajes evolucionados han surgido para superar estas deficiencias.

El primer paso para hacer mas humana la programacion consistioen introducir el uso de identificadores nemotecnicos para referir instruc-ciones y nombrar las direcciones de los operandos mediante sımbolos enlugar de hacerlo mediante sus codigos binarios. Nacen ası los primeroslenguajes simbolicos. El programa de la figura 5.1 podrıa traducirse a

122 Capıtulo 5. Lenguajes de programacion

un lenguaje simbolico como se indica en la figura 5.2.

Aunque el paso dado es importante, los lenguajes simbolicos con-sisten solo en una representacion mas inteligible de las instruccionesde maquina. El siguiente paso consistio en incorporar en los lengua-jes simbolicos macroinstrucciones, para representar secuencias de ins-trucciones de utilizacion frecuente. Estos lenguajes se conocen comoensambladores.

Enseguida se comprendio la necesidad de escribir programas que tra-dujeran textos escritos en ensamblador a textos escritos en lenguajemaquina. Estos programas traductores se llaman tambien ensambla-dores.

5.1.2 Lenguajes de alto nivel

A diferencia de los lenguajes orientados a la maquina, los lenguajesde alto nivel se componen de “terminos” y “frases” relacionados con elproblema en resolucion. Ası por ejemplo, una ecuacion de segundo gradoax2 + bx+ c = 0 se podrıa resolver en un lenguaje de alto nivel como seindica en la figura 5.3.

Por razones obvias, se dice que los lenguajes de alto nivel estan orien-tados al problema. Esta ventaja es doble: por un lado, permiten alprogramador concentrar su atencion sobre el problema, ignorando losdetalles propios de la maquina concreta que lo ha de resolver; por otraparte, como el discurso de los programas de alto nivel es independiente dela maquina, son altamente compatibles (transportables) entre maquinasdiferentes.

En la figura 5.4 se clasifican los lenguajes de programacion, de masevolucionados a mas cercanos a la maquina.

En los ultimos anos se ha desarrollado una generacion de lenguajesde muy alto nivel, que incorporan diversos mecanismos para aumen-tar su capacidad expresiva en algun aspecto. En el apartado siguienteintroducimos algunos de esos modelos.

5.1. Lenguajes de bajo y alto nivel 123

. . .readln (a, b, c);discrim := sqr(b) - 4 * a * c;if discrim >= 0

then beginwriteln ((-b+sqrt(discrim))/(2*a));writeln ((-b-sqrt(discrim))/(2*a))

endelse begin

real := -b/(2*a);imag := sqrt(-discr)/(2*a);writeln(real, ’+’, imag, ’i’);writeln(real, ’-’, imag, ’i’);

end. . .

Figura 5.3. Fragmento de un programa en un lenguaje de alto nivel

lenguajes simbolicos

declarativos

de alto nivel

alto y muy alto nivel

ensambladores

lenguajes binarios

de maquina

bajo nivel

Figura 5.4. Distintos tipos de lenguajes de programacion.

124 Capıtulo 5. Lenguajes de programacion

5.1.3 Paradigmas de programacion

Programacion imperativa—programacion declarativa

La forma tradicional de programar recibe el nombre de programacionimperativa, ya que un programa no es mas que una secuencia de ordeneso instrucciones que debıan ser ejecutados por el computador. Este mo-delo de computacion ha influido fuertemente en la naturaleza de loslenguajes de programacion; aunque la evolucion de estos ha permitidoesconder muchas caracterısticas de bajo nivel, los lenguajes convencio-nales todavıa presentan un estilo de programacion basado en dotar alcomputador de procedimientos para resolver problemas, diciendole comose resuelven. Este paradigma de programacion obliga al programador atener siempre presentes los detalles particulares del computador que eje-cutara sus programas.

Algunos de los lenguajes imperativos mas difundidos en la actualidadson el COBOL, BASIC, FORTRAN, Pascal, Modula 2 y C.

Una de las opciones para hacer mas simple el trabajo de programarconsiste en separar al programador del modelo computacional subya-cente. De este modo se podra concentrar en el desarrollo del programacomo una especificacion clara y concisa de la respuesta a un problema.Al elegir esta solucion se esta optando por un estilo declarativo de pro-gramacion, llamado ası porque lo que se hace es “declarar” (especificar)el problema que se quiere resolver en lugar de proporcionar la secuenciade acciones que el computador debe ejecutar para hallar la respuesta.

En lugar de indicar como operar, en programacion declarativa seindica que resolver. Por lo tanto, los lenguajes declarativos estan mascerca del enunciado que de la resolucion propiamente dicha. Por eso seles considera lenguajes de muy alto nivel.

Dentro del paradigma de programacion declarativa se han desarro-llado dos enfoques: la programacion funcional y la programacion logica.

5.1. Lenguajes de bajo y alto nivel 125

raıces(a,b,c) =let discr ≡ sqr(b) - 4 * a * cin if discr ≥ 0

then ((-b+sqrt(discr))/(2*a),(-b-sqrt(discr))/(2*a))else let (real, imag) ≡ (-b/(2*a), sqrt(-discr)/(2*a))

in ((real,‘+’,imag,‘i’),(real,‘-’,imag,‘i’))

Figura 5.5.

Programacion funcional

La programacion en un lenguaje funcional consiste en construir fun-ciones que el computador debe evaluar. La tarea primordial del pro-gramador es la construccion de una funcion que resuelva un problemadado; esta funcion puede depender de otras funciones subsidiarias y estadependencia se expresa en una notacion que obedece los principios ma-tematicos elementales. El papel del computador no es otro que el deevaluar las funciones e imprimir los resultados. Esta caracterıstica hapermitido que los lenguajes funcionales no dependan de ningun modeloparticular de arquitectura, en contraste con la mayorıa de los lenguajesimperativos.

La programacion funcional tiene sus raıces en la logica y en las ma-tematicas. En los programas funcionales se hace uso de conceptos ynotaciones familiares a toda persona que tenga conocimientos elementa-les de matematicas; de hecho, la derivacion de programas funcionales apartir de su especificacion se suele realizar mediante razonamiento ecua-cional (aplicando las ecuaciones que definen las funciones implicadas enel programa).

Un programa funcional puede interpretarse, bien como un conjuntode definiciones (declaraciones) de propiedades o bien como un conjuntode reglas de computacion. La primera interpretacion la realiza el pro-gramador que esta especificando (declarando) el problema, diciendo quese busca en lugar de como se encuentra; por el contrario, el computador

126 Capıtulo 5. Lenguajes de programacion

entiende el programa como un conjunto de reglas de reescritura que lepermitiran, finalmente, proporcionar la solucion del problema.

Los lenguajes funcionales tienen muchas caracterısticas atractivas,entre las que se encuentran:

• Los programas funcionales son bastante mas cortos y legibles quelos imperativos.

• Su fuerte base matematica hace mas facil razonar sobre la co-rreccion de los programas.

• El significado de una expresion es su valor, que no cambia durantela ejecucion del programa.

Uno de los primeros lenguajes funcionales que se desarrollaron fueel LISP, aunque no se considera completamente funcional por tenertambien caracterısticas no funcionales. Otros ejemplos de lenguajes fun-cionales desarrollados en la actualidad son el Hope, ML y Miranda. Elejemplo de la figura 5.5 muestra, en el estilo de estos lenguajes, la so-lucion de la ecuacion de segundo grado.

Programacion logica

En programacion imperativa, un programa no es otra cosa que elguion de las acciones que el computador debe seguir, y su ejecucionconsiste en obedecer esas ordenes. En programacion logica, un programaconsiste en una serie de sentencias de la logica matematica que describenun mundo, y su ejecucion consiste en deducir algun objetivo propuesto.

Las sentencias mencionadas pueden ser de dos clases: hechos, si-milares a los axiomas de la logica, o reglas de deduccion, que definenrelaciones entre objetos.

Las siguientes sentencias por ejemplo establecen una parte del pedi-gree de un perro:

5.1. Lenguajes de bajo y alto nivel 127

hij(tobi, laika)macho(tobi)hembra(laika)hij(tobi, pipo)macho(pipo). . .

y podrıan leerse como sigue: “Tobi es hijo/a de Laika”, “Tobi es macho”,etc. Establecen hechos ciertos sobre objetos concretos. Las reglas esta-blecen tambien verdades, aunque se refieren a objetos genericos,1 por loque tienen un caracter mas general:

padre(P, H) <= hij(H, P) ∧ macho(P)madre(M, H) <= hij(H, P) ∧ hembra(M)

Ahora, podrıa plantearse resolver el objetivo

hij(tobi, X)

que se pregunta por los X tales que “Tobi es hijo de X” (esto es, suspadres), y que se verifica para

X = laikaX = pipo

ofreciendo las dos soluciones. Esta es una caracterıstica propia de loslenguajes logicos: la posibilidad de dar muchas respuestas a un objetivoplanteado.

Tambien se puede plantear el objetivo

hij(X, pipo)

y se obtendrıa la relacion de todos los hijos de este perro:

X = tobi...

1Representamos los objetos concretos con palabras que empiezan en minuscula y losgenericos con palabras empezadas en mayuscula.

128 Capıtulo 5. Lenguajes de programacion

con lo que se observa otra peculiaridad de los lenguajes logicos: losargumentos de una relacion pueden representar datos o resultados de lamisma, indistintamente. O ambas cosas: el objetivo

hij(H, PM)

ofrecerıa como respuestas los pares siguientes:

H = tobi ; PM = laikaH = tobi ; PM = pipo... ; ...

Otras reglas posibles son las siguientes:

abuelo(A, N) <= padre(A, X) ∧ hij(N,X)

que significa que “A es abuelo de N si A es padre de algun X y N eshijo de ese X”. El par de reglas

antepasado(A, N) <= hij(N,A)antepasado(A, N) <= hij(N,X) ∧ antepasado(A,X)

representa la disyuncion siguiente: “A es un antepasado de N si N essu hijo (de A) o bien si N es hijo de algun X y A es un antepasado deese X.

Este modelo de programacion esta fuertemente basado en la logicade primer orden. El lenguaje de programacion logica por antonomasiaes Prolog, del que se han desarrollado distintas versiones.

Programacion orientada a los objetos

En la programacion imperativa, un programa parte de unos cuantosdatos iniciales, y evoluciona efectuando acciones que alteran los valoresde esos datos. Como se ve, datos e instrucciones estan separados deforma que, en principio, cualquier instruccion tiene acceso a cualquierobjeto.

En cambio, en el enfoque de la programacion orientada a los objetos(POO),2 un programa es una descripcion de los objetos que intervienen

2En ingles, OOP, Object Oriented Programming.

5.1. Lenguajes de bajo y alto nivel 129

en el, como agentes interactuantes. Una descripcion de objetos tiene dosaspectos: los valores de sus propiedades fısicas, y las acciones (metodos)que describen su comportamiento, constituyendo una clase de objetos.Cada objeto es un miembro o instancia de su clase, y su actividad con-siste en seguir los metodos definidos en la clase a la que pertenece. Enel transcurso de su actividad, los objetos interactuan entre sı, pero elunico modo de hacerlo es intercambiando mensajes.

Dado que cada objeto puede desenvolverse por separado, puedenevolucionar en paralelo, por lo que este enfoque es un modelo idoneopara la programacion concurrente.

En el paradigma de la POO un programa se puede entender comoun modelo fısico que simula el comportamiento de una parte (real oimaginaria) del mundo. Esta perspectiva difiere de la imperativa, enla que se hace mayor hincapie en las manipulaciones de estructuras dedatos o de modelos matematicos.

La programacion orientada a los objetos esta mas proxima a la Fısicaque a las Matematicas en el sentido de que, en lugar de describir unaparte del mundo mediante ecuaciones matematicas, lo que se hace esconstruir literalmente un modelo fısico. Uno de los primeros lengua-jes orientados a los objetos se llamo ACTOR, porque este paradigmanos presenta los objetos como actores sobre un escenario, dispuestos ainterpretar su papel (sus metodos).

Algunas de las principales caracterısticas de la programacion orien-tada a objetos pueden resumirse ası:

• Encapsulacion

Ya se ha dicho que las clases presentan dos aspectos: los valoresque definen su estado, y las acciones, cuyo efecto puede recaersobre el propio estado o emitir un mensaje a otros objetos.

Estos dos aspectos se consideran locales, inaccesibles e inalterablespor otros objetos y solo se modifican por un efecto del comporta-miento del propio objeto, o debido a la interaccion con otro comoconsecuencia de algun mensaje recibido del mismo. Al unir datos

130 Capıtulo 5. Lenguajes de programacion

y acciones, la POO alcanza un nivel de abstraccion superior al dela programacion imperativa.

En un programa de simulacion de una guerra naval, podrıa ser ne-cesario definir la clase de las naves, caracterizadas en un momentodado por su posicion (latitud y longitud), rumbo y velocidad quellevan, estado (desde intacto hasta destruido), etc. Son ademascapaces de navegar, metodo que altera su posicion.

• Herencia

A partir de un determinado objeto, se pueden crear otros que he-reden sus datos y sus metodos, o incluso mas especializados, con-tando con nuevos datos y metodos propios. Aparecen ası verdade-ras jerarquıas de objetos, similares a las clasificaciones taxonomicasque se dan en las Ciencias Naturales.

En el ejemplo anterior, los submarinos constituyen una especiali-zacion de las naves, incorporando como datos el numero de torpe-dos que poseen y su estado (sumergidos o a flote), y como metodossumergirse o salir a flote y disparar. Otra especializacion posible esla clase de los buques, que son casos particulares de naves caracteri-zadas ademas por el numero de misiles y de cargas de profundidadque llevan y capaces de disparar, aunque no pueden sumergirse.

• Polimorfismo

Con frecuencia, objetos de clases distintas hacen uso de los mismosmetodos. En la programacion orientada a objetos es posible definirmetodos llamados polimorficos, que pueden aplicarse sobre obje-tos de varias clases distintas. Las acciones concretas por ejecutardependeran de la clase del objeto al que se apliquen.

Con las clases naves definidas en los apartados anteriores, es posibledefinir metodos generales para dispararles, quiza deteriorando suestado hasta, incluso, la destruccion.

La metodologıa de resolucion de problemas en programacion orien-tada a objetos puede resumirse en los siguientes pasos:

5.2. Descripcion de los lenguajes de programacion 131

1. Identificar los objetos que intervienen en el problema.

2. Caracterizar los dos aspectos de cada objeto: sus propiedades ymensajes asociados.

3. Establecer el estado inicial del escenario, ası como la secuencia demensajes que abre el telon y hace evolucionar la funcion teatral.

Algunos ejemplos de lenguajes de programacion que soportan la pro-gramacion orientada a los objetos son Smalltalk y C++. Otros lengua-jes, estan incorporando algunas de las caracterısticas de la programacionorientada a los objetos: por ejemplo, las ultimas versiones de Turbo Pas-cal, de Borland ([Tur92]).

5.2 Descripcion de los lenguajes deprogramacion

Como dijimos en la introduccion de este tema, los sımbolos delvocabulario de un lenguaje se agrupan entre sı, formando estructurassintacticas, que posteriormente son interpretadas por un traductor. Eneste apartado estudiamos como se describen los dos aspectos, sintaxis ysemantica, de un lenguaje de programacion.

Por ejemplo, dirıamos que en castellano son validas sintacticamentelas “frases” compuestas por “sujeto” y “predicado”; en cuanto al signi-ficado, se entiende que el sujeto es quien realiza la accion, mientras queel predicado precisa la accion que se lleva a cabo.

En este caso especialısimo, la descripcion de cierta estructura delcastellano se ha llevado a cabo en el propio idioma castellano. Por elcontrario, los lenguajes de programacion no suelen describirse mediantelenguajes de programacion, sino mediante los metalenguajes, llamadosası porque son lenguajes cuyo cometido es describir otros lenguajes.

5.2.1 Sintaxis

La sintaxis estudia la forma de combinar los tokens de un lenguajepara formar frases correctas. Se concreta en una serie de reglas que

132 Capıtulo 5. Lenguajes de programacion

expresan las estructuras sintacticas validas en el lenguaje. El recono-cimiento de esas estructuras es necesario para dotarlas de significado yejecutar las acciones que representan.

Ejemplos de esas reglas, dados en nuestro idioma y para el, son lossiguientes:

• Un “sujeto” puede consistir en un “nombre propio” o un “artıculo”seguido de un “nombre comun”.

• Los nombres propios son “Ana”, “Ronda”, ..., “Andalucıa”.

Para describir la sintaxis de un lenguaje se utiliza una secuencia desımbolos terminales, que son los elementos validos de dicho lenguaje.Las aplicacion de las reglas (tambien llamadas producciones), permitensustituir un sımbolo no terminal por una secuencia de sımbolos, termi-nales o no. Un programa se deriva ası partiendo de un unico sımboloinicial , no terminal, que es el embrion del que surgen las frases por laaplicacion sucesiva de las reglas sintacticas.

Siguiendo el ejemplo anterior, serıan sımbolos terminales las palabras“el”, “la”, ..., “Ana”, etc. Algunos sımbolos no terminales son “frase”,“artıculo” y “nombre propio”. Entre ellos, “frase” es el sımbolo inicial.

Esta sucinta explicacion se comprendera mejor examinando la no-tacion BNF y los diagramas sintacticos, que introducimos seguidamente.

Notacion BNF

Una de las formas mas extendidas para describir la sintaxis de loslenguajes de programacion es la notacion BNF (Backus-Naur Form),utilizada por sus autores para el desarrollo del lenguaje Algol 60. Dadoque la notacion BNF es un lenguaje que nos permite describir la sintaxisde otro lenguaje, pertenece al grupo de los metalenguajes.

Para describir una produccion en BNF hay que expresar la equiva-lencia de unos sımbolos a otros. A tal fin se situa a la izquierda unsımbolo no terminal y a la derecha la combinacion de sımbolos (termi-nales o no) equivalente, enlazados mediante otros sımbolos (llamados a

5.2. Descripcion de los lenguajes de programacion 133

veces metasımbolos), que no pertenecen al lenguaje sino a BNF. Dichosmetasımbolos tienen el siguiente cometido:

• “<” y “>” delimitan los sımbolos no terminales, y de esta formapoderlos distinguir de los terminales.

• El metasımbolo “|” se utiliza para separar varias combinacionesposibles, entre las que debe elegirse.

• El metasımbolo “::=” expresa la equivalencia dentro de las pro-ducciones, por lo tanto, separa el sımbolo situado a su izquierdade una o mas combinaciones de sımbolos y metasımbolos situadosa su derecha (separadas mediante “|”), y expresa que el primeropuede sustituirse por la combinacion de los segundos.

Por ejemplo, dadas las producciones:

<trapito> ::= <prenda> <color><prenda> ::= pantalon | camisa | sombrero<color> ::= gris | marron

<trapito> representa el sımbolo inicial, <prenda> y <color> son losotros sımbolos no terminales, y pantalon, camisa, sombrero, gris y ne-gro son los sımbolos terminales. Las frases validas generadas por esagramatica son:

pantalon grispantalon marroncamisa griscamisa marronsombrero grissombrero marron

Observaciones

• A veces resulta mas comodo distinguir los sımbolos terminales ylos no terminales escribiendo su inicial con minuscula y mayuscula,respectivamente, evitando el uso de “<” y “>”. Por ejemplo, conla gramatica

134 Capıtulo 5. Lenguajes de programacion

Sılaba ::= Cons VocCons ::= b | c | d | ... | zVoc ::= a | e | i | o | u

resultan las siguientes sılabas validas: “ba”, “be”, “bi”, ..., “zi”,“zo” y “zu”.

• Como un sımbolo no terminal cualquiera (digamos el L por ejem-plo) puede aparecer en ambos lados de las producciones,

I ::= aLL ::= bL|c

sus sustituciones podrıan generar estructuras que lo contengan:

L → . . .L . . .

De este modo, una gramatica puede resultar recursiva, generandoun numero infinito de frases:

“ac”, “abc”, “abbc”, “abbbc”, . . .

Hoy dıa, todos los lenguajes de programacion de alto nivel tienengramaticas recursivas.

• Por otra parte, la notacion BNF se puede ampliar (EBNF), usandolos metasımbolos “[” y “]” para expresar una parte opcional y losmetasımbolos “{” y “}” para abreviar la repeticion de estructuras.Ası por ejemplo, A[B]C expresa las frases “ABC” y “AC”, y {A}representa bien la frase vacıa o una de las siguientes: “A”, “AA”,“AAA”, . . .

Diagramas sintacticos

Otra forma, tambien muy extendida, para expresar las reglas sintac-ticas de un lenguaje es mediante diagramas o grafos sintacticos. La

5.2. Descripcion de los lenguajes de programacion 135

sintaxis del lenguaje Pascal, por ejemplo, fue inicialmente expresada deesta forma.

De acuerdo con esta representacion, los sımbolos terminales se repre-sentan dentro de cırculos o rectangulos con las esquinas redondeadas, yel sımbolo inicial y los sımbolos no terminales dentro de cuadrados orectangulos. Los sucesivos sımbolos se unen entre sı mediante flechas,que indican el orden y sentido de produccion.

Veamos las principales representaciones:

- Sımbolo inicial L ����L -

- Sımbolo terminal Z ����Z-&%

'$Z- o bien

- P1 | P2 | ... | Pn

-

-

-

-

-

-

-

����P1�

���P2

����Pn

...

�-

- P1 P2 ... Pn

-����P1 -����P2 - . . . -

����Pn -

136 Capıtulo 5. Lenguajes de programacion

- {P}

-

� �P

-

...................................

..........................................

..................................

.

�...................................

.....................................................

........................

La utilizacion de los diagramas sintacticos facilita la construccion defrases correctas, pues es suficiente con seguir el sentido de las flechas e irinsertando los correspondientes sımbolos segun aparecen en el diagrama.

Recıprocamente, si al ir leyendo los sımbolos de una frase se sigueuno de los caminos contemplados en el diagrama sintactico, esa frase escorrecta desde el punto de vista sintactico.

Tanto la notacion BNF como los diagramas sintacticos son equiva-lentes, si bien, en general estos ultimos son de mas facil comprensiony se aconsejan como punto de partida en la definicion de lenguajes deprogramacion.

Ejemplo Un identificador en Pascal se expresa mediante una letraaislada o seguida por una secuencia de letras o numeros o el caracter desubrayado, “ ”. Serıan identificadores validos los siguientes: “x”, “y”,“z”, “altura”, “longitud”, “x1”, “y1”, “x max”, “y max”

Su diagrama sintactico serıa el siguiente:

� �letra- -

� �letra

� �dıgito

................................................................................................................

�................................................................................................................-

...................................

..........................................

..................................

.

�...................................

.....................................................

........................

En BNF puede expresarse ası:

5.2. Descripcion de los lenguajes de programacion 137

Identificador ::= Letra | Letra Letras o dıgitosLetras o dıgitos ::= Let o dıg | Let o dıg Letras o dıgitosLet o dıg ::= Letra | Dıgito | SubrLetra ::= a | b | c | ... | zDıgito ::= 0 | 1 | ... | 9Subr ::=

5.2.2 Semantica

En el apartado anterior se han estudiado metodos para describir lasintaxis correcta de los lenguajes. La semantica de un lenguaje tratadel significado asociado con los programas correctos en el, esto es, de sufuncionamiento.

Es claro que lo mas natural y rapido para explicar un lenguaje esproceder informalmente, a traves de ejemplos o, mas aun, matizandoel exacto funcionamiento de cada construccion sintactica (declaracion,sentencia, etc.) No obstante, en los ultimos anos, ha surgido la nece-sidad de precisar la interpretacion asociada con cada estructura valida(sintacticamente) en un lenguaje.

Se evitan ası las ambiguedades inherentes a las descripciones infor-males de los lenguajes naturales y se consigue un entorno formal quefacilita el estudio de propiedades de los programas, tales como la co-rreccion o la eficiencia algorıtmica.

Semantica operacional

En este enfoque, el significado de una estructura sintactica vienedado por el modo con que la maquina lleva a cabo su evaluacion o suejecucion. Ası, la interpretacion de un programa consiste en reproducirla historia de los cambios de estado que producen sus construcciones alinterpretarse.

La semantica operacional de un lenguaje se define dando la funcion detransicion (⇒) que asocia a una construccion sintactica, en cada estado,el nuevo estado. Abreviadamente, escribimos

K:E ⇒ E′

138 Capıtulo 5. Lenguajes de programacion

para indicar que, al interpretar la construccion sintactica K en el estadoE, se origina el estado E′.

Por ejemplo, si representamos el estado inicial de una maquina me-diante {. . . , A = 2, B = 5, . . .}, la ejecucion de

beginA := A+B;B := A−B;A := A−B

end

produce la siguiente computacion:

beginA := A+B;B := A−B;A := A−B

end

:

. . .A = 2B = 5. . .

beginB := A−B;A := A−B

end

:

. . .A = 7B = 5. . .

{A := A−B

}:

. . .A = 7B = 2. . .

⇒ :

. . .A = 5B = 2. . .

La semantica operacional puede centrarse en los detalles mas finos de

la ejecucion (semantica operacional estructural) o ignorarlos (semantica

5.2. Descripcion de los lenguajes de programacion 139

natural):

beginA := A+B;B := A−B;A := A−B

end

:

. . .A = 2B = 5. . .

⇒. . .A = 5B = 2. . .

Semantica denotacional

El significado de una construccion sintactica viene dado por el efectoque produce. En lugar de explicar como se efectua cada construccionsintactica, solo interesa ahora que significa. En terminos linguısticos,puede considerarse la funcion semantica como una funcion que asociaun significado a cada significante.

Los significantes son las posibles construcciones validas del lenguaje,y estan definidos por las reglas sintacticas, agrupados en distintas cate-gorıas: declaraciones, expresiones, instrucciones, etc. Los significantesson objetos matematicos, agrupados en distintas categorıas, correspon-dientes a las categorıas sintacticas.

Por ejemplo, las cantidades numericas seran el significado asociadoa literales, variables, expresiones y funciones numericas; puesto que elefecto de una instruccion de asignacion consiste en alterar el estado de lamemoria, su semantica es una funcion entre estados de la memoria, etc.

Mas en general, una instruccion puede alterar la memoria, la entraday la salida, que podrıan consistir matematicamente en un vector y sendaslistas. Si representamos esas tres entidades mediante M , I y O, el estadode la maquina sera la terna E = M × I ×O.

Entonces, podemos precisar el significado de una instruccion ası:

S[[Instr ]] : E → E.

Concretamente, tenemos:

• S[[x← x0]](M, I,O) = (M ′, I, O)

140 Capıtulo 5. Lenguajes de programacion

donde M ′ es el estado de la memoria M , sustituyendo el valorasociado con el identificador x por x0.

• S[[write(x0)]](M, I,O) = (M, I,O′)

donde O′ es el estado de la salida O, anadiendo el valor x0.

• S[[read(x)]](M, I,O) = (M ′, I ′, O)

donde M ′ se obtiene al sustituir x por x0 en M (siendo x0 el primerdato de la entrada), y ademas I = (x0, x1, . . .) y I ′ = (x1, . . .).

Como se ve, el efecto asociado a cada construccion K se precisa medianteuna funcion, S[[K]], llamada su funcion semantica.

Siguiendo con el ejemplo anterior, podemos interpretar la instruccioncompuesta mediante la composicion de funciones, ası:

S[[begin A := A+B;B := A−B;A := A−B end]]= S[[A := A+B]] ◦ S[[B := A−B]] ◦ S[[A := A−B]].

En el caso de las instrucciones, el dominio y codominio de esas fun-ciones semanticas se representan mediante el estado de la maquina; parainterpretar las demas construcciones sintacticas (tales como las decla-raciones, los identificadores, los literales o las expresiones) se necesitaigualmente formalizar sus conjuntos dominio y codominio asociados. Losmodelos matematicos correspondientes a estas entidades se llaman de-notaciones, de donde procede el nombre de este enfoque de la semantica.

Semantica axiomatica

Este enfoque atiende a las “propiedades” que tiene la interpretacionde cada sentencia I. Estas propiedades se expresan a traves de asercionessobre el estado de la maquina abstraıda, antes y despues de esa sentencia.Se escribe

{C0} I {C1}para expresar que, si se verifica C0 al comienzo de la instruccion I,cuando esta termine3 se verificara C1. La condicion (C0) que describe el

3Observese que no se asegura que en las condiciones C0 la instruccion I termine, sinosolo que llegaremos a C1 “si esta termina”

5.3. Procesadores de lenguajes 141

estado previo a I se llama precondicion, y la postcondicion (C1) se refiereal estado tras I.

En el ejemplo anterior, podemos escribir lo siguiente:

{A = A0 ∧B = B0}beginA := A+B;B := A−B;A := A−B

end{A = B0 ∧B = A0}

Por lo tanto, la semantica axiomatica nos permite estudiar las pro-piedades que verifica un programa, gracias al empleo de la logica depredicados.

5.3 Procesadores de lenguajes

Aunque, hablando estrictamente, el unico lenguaje que los computa-dores comprenden es el codigo maquina, pueden ejecutar tambien pro-gramas escritos en lenguajes de alto nivel, gracias a los traductores, pro-gramas que convierten programas escritos en lenguajes evolucionados enprogramas en codigo maquina:

traductores :programa

en un lenguajeevolucionado

→programa

en lenguajede maquina

En general, un traductor es un programa que convierte un programa,escrito en un lenguaje, en un programa equivalente, escrito en otro len-guaje. Llamamos programa fuente y programa objeto respectivamenteal programa inicial y al final. Estos terminos se aplican tambien a loslenguajes respectivos.

El proceso de traduccion se lleva a cabo en varias fases; en cadauna de ellas, pueden aflorar algunos de los errores, de diversa ındole,cometidos por el programador. Por otra parte, una componente esencial

142 Capıtulo 5. Lenguajes de programacion

que manejan estas etapas es la tabla de sımbolos, estructura de datos quecontiene los identificadores que intervienen en el programa, junto con sudescripcion. Las etapas mencionadas son basicamente las siguientes:

• Analisis lexico.- En esta fase, el texto del programa se traduce enuna lista de sımbolos, llamados tokens, tales como: el sımbolo deabrir parentesis, el sımbolo de asignacion, el identificador ‘pi’, elnumero entero −71, etc.

La escritura incorrecta de identificadores (por ejemplo, empezandopor un dıgito en lugar de un caracter) es uno de los errores lexicosmas frecuentes.

• Analisis sintactico.- Su mision consiste en recorrer la lista de to-kens, que le va proporcionando el analizador lexico, y tratar deagruparlos para reconocer “frases” o estructuras sintacticas, talescomo declaraciones, sentencias o expresiones, siguiendo las reglasdel lenguaje (vease 5.2.1). Por ejemplo en la figura 5.6:

El uso no equilibrado de parentesis o de otros delimitadores sonerrores sintacticos frecuentes.

• Acciones semanticas.- Un programa no es solo un reconocedor deestructuras gramaticales: debe llevar a cabo las acciones indicadaspor el programa fuente. Estas acciones representan el significadodel programa, y son tales como las siguientes:

– Dar de alta un identificador en la tabla de sımbolos y reservarespacio de memoria para su descripcion.

– Consultar la tabla de sımbolos y extraer la descripcion aso-ciada a un objeto.

– Comprobar la compatibilidad de tipo entre los objetos queaparecen en el programa.

Ejemplos de errores asociados con las acciones mencionadas sonlos siguientes:

– Intentar definir un identificador ya definido.

5.3. Procesadores de lenguajes 143

while n >= 10 do n := n − 10

ident. literal ident. literal

expr. op. expr. expr. op. expr.

ident. “:=” expr.

inst. de asignacion

“while” expr. “do” instruccion

inst. while

instruccion

................

................

................

................

................

...........

...........................................................................................

............................................

........ ........ ........ ........ ........ ....

..................................................................................

............................................

........ ........ ........ ........ ........ ....

........................................................................................................................................................................................

........................................................................................................

................

........

........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........

Figura 5.6. Reconocimiento sintactico de una sentencia

– Tratar de usar un identificador desconocido.

– Escribir una operacion imposible entre sus operandos, debidoa su tipo.

Entre las acciones mencionadas, el aspecto de la verificacion detipos esta muy desarrollado en los lenguajes evolucionados, ya queası se evita un gran numero de errores durante el desarrollo de losprogramas. Los lenguajes que llevan a cabo este tipo de compro-baciones se dicen fuertemente tipados; se dice que la verificacionde tipos es estatica cuando se lleva a cabo antes de la evaluacion.

• Generacion de codigo.- Esta fase consiste en producir una repre-sentacion del programa coherente con la sintaxis y semantica dadasen las etapas anteriores. Esta representacion puede consistir direc-tamente en el codigo maquina, aunque por lo general se obtendrapreviamente una version en lenguaje ensamblador e incluso a ve-ces, antes aun, una representacion del programa (llamada codigo

144 Capıtulo 5. Lenguajes de programacion

intermedio) apropiada para facilitar la traduccion final.

• Optimizacion.- En esta etapa se efectuan manipulaciones sobre elcodigo intermedio o sobre el codigo objeto final, con el objeto demejorar la calidad del codigo generado. Por lo general, estas me-joras consisten en disminuir el tamano del codigo generado y enhacerlo mas eficiente, sin alterar a cambio el efecto que deba pro-ducir el programa.

5.3.1 Compiladores e interpretes

Existen dos modos de traduccion, comparables en todo a las dos mo-dalidades de traduccion siguientes, entre las diferentes lenguas humanas:

• En el proceso de compilacion, una editorial parte del volumen ori-ginal, escrito en el idioma fuente, y produce el volumen corres-pondiente, escrito en el lenguaje objeto. Los lectores en el idiomaobjeto interpretan el texto solo despues de estar completamentetraducido.

• La interpretacion es la traduccion simultanea, por ejemplo en unaconvencion internacional: un interprete traduce fragmentos pe-quenos de frases en el idioma fuente al idioma objeto, a medida quelas escucha. Los congresistas reciben e interpretan la traduccion amedida que esta se produce.

Entre ambas modalidades, existen traductores mixtos, que en una pri-mera fase desarrollan una semicompilacion, que incluye diversas com-probaciones lexicas y sintacticas, y produce una representacion del pro-grama fuente en un codigo intermedio; y en una fase posterior ejecutanla interpretacion de ese codigo intermedio.

5.3.2 Entornos de programacion

Para crear un programa ejecutable en el computador hay que reali-zar una serie de etapas que, tradicionalmente, se venıan efectuando conprogramas independientes. Entre ellos se pueden citar los siguientes:

5.3. Procesadores de lenguajes 145

• Editores

Son programas que permiten el trabajo con textos, que sirven paracrear los programas fuente. Debido a que, por lo general, trabajanen codificacion ASCII pura, carecen de algunas de las facilidadesde los procesadores de textos, tales como el uso de diferentes tiposde letra, o la gestion de tıtulos, subtıtulos y parrafos.

• Compiladores

Los compiladores, como se ha explicado en este mismo tema, sonlos programas que realizan la traduccion del programa fuente ge-nerando el programa objeto. Tradicionalmente, era frecuente queel proceso de compilacion se realizase en varias fases, y que el com-pilador estuviera constituido por varios modulos, de forma que, sino se presentan errores, las distintas fases de la compilacion se su-cedan secuencialmente, al ser ejecutados los distintos modulos delcompilador mediante un fichero de proceso por lotes.

• Enlazadores

Los programas fuente suelen contener llamadas a funciones pre-definidas del lenguaje. En general, estas funciones se encuentranprecompiladas en unas bibliotecas que se suministran junto con eltraductor del lenguaje, que se pueden adquirir o desarrollar porseparado. A veces el propio programa fuente se va compilandopor partes, modulos, o unidades. El programa enlazador (linker)se encarga de incorporar al programa objeto el codigo correspon-diente a las llamadas a funciones y de unir los distintos modulosprecompilados.

• Depuradores

Algunos de los errores que pueden aparecer en programacion sonmuy difıciles de detectar. La ejecucion del programa puede noproporcionarnos la informacion suficiente para saber con seguridaddonde esta el error. Los programas de depuracion (debuggers) per-miten hacer un seguimiento preciso de la ejecucion de las instruc-ciones, y de esta forma aislar y detectar los errores. Para ello, los

146 Capıtulo 5. Lenguajes de programacion

programas de depuracion toman el control de la ejecucion del pro-grama y, entre otras posibilidades, permiten: ejecutar el programapaso a paso; establecer puntos de detencion del programa; generaruna relacion de las instrucciones ejecutadas en un computo deter-minado (traza del programa); conocer en cada momento los valoresde las variables que nos interesen (tablas de seguimiento), etc.

En la actualidad, es frecuente que algunos o todos estos programasque solıan ser independientes se agrupen en un unico programa que pasaa constituir un verdadero entorno de programacion.

Si la integracion entre los distintos componentes del entorno es alta,se acelera notablemente el proceso de creacion de programas, y se puededisponer de recursos y ayudas a la programacion que serıan impensablesen programas separados. Entre ellos podemos destacar:

• Ayudas a la edicion

Los entornos integrados presentan interesantes ayudas a la edicionpermitiendo, por ejemplo, abrir varios programas a la vez y copiarbloques de uno a otro, buscar y sustituir grupos de caracteres, etc.

• Sensibilidad al contexto

Esta es una caracterıstica de muchos editores de los entornos inte-grados, por la que, durante la escritura del programa el editor de-tecta los distintos tipos de tokens del lenguaje (tales como sımbolosy palabras reservadas, constantes, etc.), resaltandolas mediante elcolor, el tipo de letra o la intensidad, tanto en pantalla como en lascopias impresas. Este es el caso del compilador de Turbo Pascal,a partir de la version 7.0.

En algunos entornos integrados sencillos se realiza el analisis sintac-tico al terminar cada construccion sintactica, rechazandose las in-correctas. Un ejemplo de la ayuda proporcionada consiste en elequilibrado de ciertos delimitadores, tales como los parentesis, em-parejandose apropiadamente o detectandose el error.

• Ayuda contextual

5.3. Procesadores de lenguajes 147

Los entornos integrados disponen de un sistema de ayuda interac-tiva, con deteccion del contexto, tanto para los mandatos del en-torno como para las instrucciones del lenguaje. Al realizar una pe-ticion de ayuda aparece en pantalla una explicacion precisamentedel mandato que estamos utilizando.

• Compilacion en la memoria principal

Para conseguir una mayor velocidad durante el proceso de depu-racion y puesta a punto de un programa, los entornos integradostienen la posibilidad de compilar los programas en la memoriaprincipal. Una vez que el programa esta terminado, puede compi-larse en disco, con el simple cambio de una opcion. Las distintasfases de compilacion, enlazado y ejecucion se suceden sin que elusuario lo advierta, obteniendose un alto nivel de interaccion y deproductividad, al reducirse los tiempos de espera.

• Depuracion integrada

Los entornos de programacion incluyen, por lo general, carac-terısticas propias de los programas de depuracion avanzados comolas que hemos mencionado anteriormente. La gran ventaja es quedichas opciones estan disponibles dentro del propio entorno, porlo que no es necesario cambiar de programa.

• Gestion de proyectos

Los entornos de programacion permiten la gestion de grandes pro-gramas, mediante la compilacion separada por modulos o unidades.Al compilar el programa principal, el gestor de programas, ordenala recompilacion solamente de los modulos que han sido modi-ficados desde la ultima compilacion. Esta compilacion separadafacilita la utilizacion de bibliotecas especializadas (para graficos,calculo numerico, etc.) y tambien el desarrollo de programas pordistintos grupos de trabajo.

148 Capıtulo 5. Lenguajes de programacion

5.4 Ejercicios

1. Siguiendo el ejemplo de las figuras 5.3 y 5.5, describa en ambos estilosel calculo del area de un triangulo, conociendo las medidas de los lados,aplicando la formula de Heron:

A =√p(p− a)(p− b)(p− c)

siendo p el semiperımetro del triangulo:

p =a+ b+ c

2.

2. Siguiendo el ejemplo de la genealogıa perruna, defina la relacion “herma-nos”, que se da entre dos perros distintos con los mismos padres.

3. Para escribir una lista de nombres en castellano, los sucesivos elementosde la lista se separan entre sı con comas y el ultimo con la conjuncion “y”.Tambien son validas las listas con un unico nombre, que naturalmentese escribe sin separador alguno.Por ejemplo, si consideramos los nombres Ana, Juan y Elisa, resultanvalidas las siguientes listas:

AnaJuan y ElisaElisa, Juan y AnaAna, Ana, Ana, Ana y Ana

Exprese esa sintaxis mediante BNF y diagramas sintacticos.

4. Para escribir un numero en cierta calculadora, se aplican las siguientesreglas:

(a) Un numero se expresa mediante una cantidad, que puede ser enterao decimal, y que puede estar precedida o no por un signo “+” o“-”.

(b) Una cantidad entera se expresa mediante uno o mas dıgitos

(c) Una cantidad decimal se puede expresar con uno o mas dıgitos(parte entera), a continuacion una coma y despues uno o mas dıgitos(parte decimal). Tambien es posible expresar cantidades decimalessin parte entera o sin parte decimal, aunque debe aparecer al menosuna de ellas, ademas de la coma.

5.5. Comentarios bibliograficos 149

Por ejemplo, son validos los siguientes numeros:

-1 ,7+6, ,368+,8852 -123,456

(a) Expresela mediante diagramas de flujo

(b) Expresela mediante EBNF

(c) Genere unas cuantas sentencias validas

5. En el ejemplo de semantica axiomatica sobre el intercambio de valoresentre variables numericas, precise las aserciones intermedias C1 y C2:

begin{A = A0 ∧B = B0}

A := A+B;{...C1...}

B := A−B;{...C2...}

A := A−B{A = B0 ∧B = A0}

end

6. Estudie las facilidades que ofrece la ultima version del entorno de pro-gramacion de Turbo Pascal ([Tur92]). Concretamente, relacione las queposee para la depuracion de programas.

5.5 Comentarios bibliograficos

El area de los lenguajes de computador es realmente amplia y profunda. Esinutil pues pretender resenar siquiera una pequena parte de las referencias massignificativas sobre aspectos tan diversos como el estudio de las gramaticas yla teorıa de automatas, la semantica, el desarrollo de traductores y entornos deprogramacion y los diferentes paradigmas. Ademas de inutil, serıa vano pre-tenderlo en un texto introductorio y general como es este, incluso limitandonosal terreno de las aplicaciones por profesionales no informaticos.

Encontramos que el estudio de los distintos mecanismos expresivos comunesa muchos lenguajes es preferible desde la practica de algun lenguaje concreto(como Pascal, por ejemplo) o desde el desarrollo de algoritmos con un lenguaje

150 Capıtulo 5. Lenguajes de programacion

de especificaciones. En el segundo tomo de este texto adoptamos el primerpunto de vista; en [GGSV93] se adopta el segundo.

Para ampliar conocimientos sobre los entornos de programacion, tampocoparece haber nada tan recomendable como empezar por uno concreto. Lasultimas versiones de Turbo Pascal, de Borland ([Tur92]) son ejemplares enambos aspectos, lo que explica su gran difusion, tanto en el ambiente educativocomo en el de las aplicaciones.

Naturalmente, la formacion lograda ası dotara al estudiante de un puntode vista imperativo. No es este un grave inconveniente (ya que este ha sido ysigue siendo todavıa el paradigma de mayor difusion) siempre que su educacionhaya transcurrido por la senda de la disciplina y los buenos habitos y metodos.

Sin embargo, no son pocas las aplicaciones actuales que adoptan otro en-foque distinto del imperativo. Aunque cada modelo introducido es de por sıun mundo, damos algunas referencias de ellos. En [Tes84] se ofrece una vistapanoramica sobre los lenguajes de programacion de la pasada decada. Un libroclasico sobre programacion en lenguaje Pascal es [Gro86]. Sobre programacionfuncional, [BW88] y [Bai90] son buenas introducciones, respectivamente en loslenguajes Miranda y Hope. En [GGSV93] se consideran ambos enfoques, elimperativo y el funcional. Una buena introduccion al Prolog puede hallarseen [CM87]. Para adentrarse en este bello lenguaje, debe leerse [SS86]. La fi-losofıa orientada a los objetos se extiende con rapidez, por lo que tambien lasreferencias sobre el tema proliferan. [Pas86], [Tho89] y [Weg89] son artıculosintroductorios a este modelo de programacion.

Finalmente, en [Wir86a] puede verse una explicacion ampliada de la no-tacion BNF y diagramas de flujo, ası como una introduccion a los problemasque plantea el analisis sintactico y la compilacion de programas en lenguajesde alto nivel.

Capıtulo 6

Bases de datos

6.1 Bases de datos y SGBD . . . . . . . . . . . . . . . . . . . . . . 1516.2 El modelo entidad-relacion . . . . . . . . . . . . . . . . . . . . . 1556.3 Modelos de datos basados en registros . . . . . . . . . . . . . . 1586.4 Lenguajes asociados a los SGBD . . . . . . . . . . . . . . . . . 1606.5 Elementos de un SGBD . . . . . . . . . . . . . . . . . . . . . . 1636.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1646.7 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . . . . 165

6.1 Bases de datos y SGBD

6.1.1 Archivos y SGA

En el capıtulo 2 se vio la posibilidad que tienen los computadoresde trabajar con datos elementales (tales como numeros reales, enteros,caracteres y valores logicos) o de organizarlos en estructuras mas com-plejas, tales como vectores o tablas. En el 4 se introdujeron los archivoscomo organizacion basica de la informacion, almacenada en un disposi-tivo fısico; entonces no fue preciso distinguir en ellos ningun tipo de or-ganizacion: podıan considerarse como listas de elementos de caracteres.

Ahora interesa considerar un archivo como una lista de datos delmismo tipo, cada dato de un archivo es un registro, y puede tener unaestructura compuesta por varios datos de distinto tipo, llamados cam-pos. Considerando el fichero de los alumnos de un colegio como sımil

152 Capıtulo 6. Bases de datos

de archivo, cada ficha es un registro, y cada dato consignado en ellaconstituye un campo.

La utilizacion de los archivos en informatica ha permitido desarrollarprogramas de aplicacion en areas muy diversas: el fichero de socios deuna biblioteca, el de su fondo bibliografico, el de clientes de cualquierempresa, el de proveedores, el de artıculos de un inventario, etc. Losprogramas desarrollados para gestionar archivos se llaman en generalsistemas de gestion de archivos (SGA). Debido a su directa aplicabilidad,la utilizacion de los archivos y los SGA han evolucionado muchısimo enlos ultimos anos, originando las bases de datos y, correspondientemente,los programas dedicados a su gestion.

6.1.2 Bases de datos y SGBD

Hablando en terminos muy amplios, una base de datos consiste enuna coleccion de datos, organizados de forma integrada en archivos, juntocon un conjunto de programas dedicados a su gestion. Estos programasforman los sistemas de gestion de bases de datos (SGBD).

Al igual que los SGA, los SGBD son programas destinados principal-mente a almacenar, manipular y recuperar la informacion, y desempenanoperaciones que suelen tener lugar a diario: altas y bajas de clientes,apuntes en las cuentas bancarias, adquisicion y perdida de libros o suprestamo y devolucion, elaboracion de informes sobre los clientes o so-cios morosos, sobre las calificaciones de los alumnos de un curso en unaasignatura y un largo etcetera.

Sin embargo, en los SGA el programador debıa controlar artesanal-mente multiples detalles, tales como la descripcion pormenorizada de losdatos, su almacenamiento en los dispositivos, la concordancia de cadarutina que maneje esos datos con la descripcion de los mismos, la con-cordancia de los datos cuando se repitan en distintos archivos, etc. Masaun, el programador es responsable de que cada modificacion de los datoso de los programas se vea reflejada en todos esos puntos.

En cambio, los SGBD controlan automaticamente operaciones comoel almacenamiento de los datos en los dispositivos fısicos, ası como el

6.1. Bases de datos y SGBD 153

acceso de los programas a los mismos; ademas, aseguran la consistenciade los datos repetidos y de los programas que los manejan, etc.

Gracias a estas ventajas, con los SGBD es posible concentrar masatencion en el problema (a su nivel) y mucha menos en los detalles (debajo nivel) de su implantacion fısica (o interna), lo que facilita enor-memente el diseno, desarrollo y mantenimiento de las bases de datos ypermite, por lo tanto, afrontar otras de gran envergadura.

Conclusion

En resumen, los SGA consisten en agregados de programas y archi-vos, anadidos por el programador para cubrir ad hoc necesidades nuevas.En cambio, los SGBD son sistemas “integrados” de programas y archi-vos, disenados con el proposito especıfico de desarrollar y gestionar basesde datos, como indica su nombre, de acuerdo con un plan general.

Por ello, la funcionalidad de los SGBD es superior a la de los SGA.Mas concretamente, se pueden identificar las siguientes diferencias entreambos tipos de sistemas:

• En general, los SGA consisten en aglomerados de programas y ar-chivos rıgidos, puesto que se han agregado sucesivamente para re-solver solo operaciones muy concretas. Por el contrario, los SGBDse caracterizan por una gran flexibilidad, permitiendo la reestruc-turacion de la informacion gestionada, la incorporacion de nuevasaplicaciones, o la modificacion de las existentes manteniendo laorganizacion global.

• La informacion de los SGA presenta frecuentemente redundanciasinnecesarias. La repeticion de los datos en los diversos archivoses ineficiente: ademas de hacer un mal aprovechamiento de lamemoria, aumenta y dificulta a la vez las operaciones de consultay mantenimiento de esa informacion. La redundancia de los datoslleva aparejado ademas el riesgo de que esos datos repetidos noconcuerden (inconsistencia), lo que se supera en los SGBD graciasa su alto grado de integracion.

154 Capıtulo 6. Bases de datos

• Por lo comun, los SGA estan implantados en sistemas operativosmonousuario, por lo que carecen de mecanismos para atender adiferentes personas desde diferentes puntos. En cambio, los SGBDestan disenados muchas veces para funcionar en sistemas multiu-suario, pudiendo atender consultas y actualizaciones de los datosque se solicitan al mismo tiempo, y estan dotados con mecanis-mos para garantizar la seguridad y confidencialidad de los datos ensistemas multiusuario.

• Los SGA carecen en general de proteccion frente a fallos del sis-tema. En cambio, los SGBD disponen de los mecanismos necesa-rios para recuperar la informacion en caso de necesidad.

Por consiguiente, los SGBD aventajan a los SGA en muchos aspec-tos. Aunque se ha senalado el inconveniente de que, al ser sistemas mascomplejos y potentes, tienen mayores requerimientos de hardware y soft-ware, este problema se esta atenuando con el aumento de potencia quelos computadores personales estan experimentando hoy en dıa y con elabaratamiento del software.

A pesar de las ventajas que suponen las bases de datos, debe ad-vertirse que el buen diseno de una base de datos no es una cualidadintrınseca de los SGBD, ası como tampoco son propios de los SGA losdefectos de un mal diseno o desarrollo. Una base de datos desarrolladacon un SGA puede resultar segura, funcionar en un entorno multiusua-rio y estar exenta de redundancias (en la informacion) aunque, eso sı,debe ser el desarrollador quien se preocupe de mantener esas cualida-des, mientras que un SGBD asume algunas de esas responsabilidades yfacilita muchas otras.

6.1.3 Niveles de una base de datos

La complejidad de una base de datos puede superarse dotando alsistema de una organizacion logica que facilite su manejo. Segun lasnormas del ANSI/SPARC1 ([Stu75]), esta organizacion debe constar de

1American National Standard Institute.

6.2. El modelo entidad-relacion 155

los tres niveles siguientes, de mas proximo al problema a mas cercano ala maquina:

• Nivel interno o fısico, formado por los detalles de la organizacionfısica de la base de datos, tales como la representacion escogida delos datos a bajo nivel y el almacenamiento real de los datos en losdiscos u otros dispositivos fısicos.

• Nivel conceptual o logico donde se describe, a alto nivel, la infor-macion de la base de datos, ignorando los detalles de su almace-namiento.

• Nivel externo o de vision, que comprende las visiones particularesque tienen de la base de datos los distintos usuarios, ya sean usua-rios finales o programadores, con frecuencia en distintos lenguajes.Estos ultimos ven la descripcion de la informacion en sus lenguajesrespectivos.

6.2 El modelo entidad-relacion

Un modelo de datos es un enfoque adoptado para formalizar la in-formacion del mundo real que atane a una base de datos. En el nivelconceptual y logico, existen dos grupos de modelos: los basados en ob-jetos, y los basados en registros.

El modelo entidad-relacion es seguramente el mas ampliamente acep-tado entre los primeros. En el se concibe la realidad como un conjunto deobjetos (llamados entidades y caracterizadas por atributos) y relacionesentre los mismos. En los ejemplos mencionados, constituye una entidadcada cliente concreto, cada cuenta bancaria, cada socio de la biblioteca,cada uno de sus libros, etc. Resulta natural agrupar las entidades en gru-pos homogeneos (conjuntos de entidades): en el conjunto de entidades“libros”, por ejemplo, tendrıan cabida todos los libros de la biblioteca.Considerando ahora este conjunto de entidades, podemos identificar enellas los atributos siguientes: tıtulo, autor, editorial, signatura, numerode registro, etc.

156 Capıtulo 6. Bases de datos

Las asociaciones entre varios conjuntos de entidades pueden esta-blecerse mediante relaciones. Por ejemplo, se puede considerar una re-lacion entre los conjuntos de entidades “socios”-“libros” para expresarlos “prestamos”. Tambien es posible caracterizar las relaciones con atri-butos (como la “fecha” de devolucion para un prestamo).

Las relaciones entre entidades pueden ser de varios tipos:

• Una relacion entre dos entidades es de uno a uno (abreviadamente,1:1) si existe una correspondencia biunıvoca entre ellas. Por ejem-plo, cada automovil tiene una unica matrıcula y viceversa.

• La relacion “socios”-“libros” mencionada en el parrafo anterior esde uno a muchos (1:m): un socio puede tener prestados desdeninguno hasta muchos libros al mismo tiempo, pero cada librotiene, a lo sumo, un unico socio que lo ha pedido.

• La relacion entre “profesores”-“asignaturas” es de muchos a mu-chos (m:m), ya que un profesor puede impartir varias asignaturas,e igualmente una asignatura puede ser impartida por varios pro-fesores. En este tipo de relaciones no se imponen restriccionessobre el numero de elementos por relacionar de cada conjunto deentidades.

Con estos conceptos, es posible representar graficamente la estruc-tura de una base de datos del siguiente modo:

• Cada conjunto de entidades se expresa mediante un rectangulo.

• Los atributos que caracterizan un conjunto de entidades se repre-sentan con elipses asociadas al rectangulo correspondiente.

• Las relaciones se representan mediante rombos, unidos con lıneas alos conjuntos de entidades asociados. En los casos de las relaciones1:1 y 1:m, el conjunto de entidades dado por el 1 se senala desdela relacion con una flecha:

– Relacion m:m

6.2. El modelo entidad-relacion 157

����fecha

�����

���

����

��������

librosHH

H���HHH���

socios

���������

���

autortıtulo

editor

signatura

registronombre

domicilio

n0.socio

prestamos

?

����

���

EEEEEEEE

TTTTT

BBBBBB

lll

Figura 6.1. Representacion grafica de una relacion

QQQ���QQQ

���

– Relacion 1:m

QQQ���QQQ

���

– Relacion 1:1

QQQ���QQQ

���

� -

Por ejemplo, la relacion “prestamos” puede representarse como mues-tra la figura 6.1.

158 Capıtulo 6. Bases de datos

6.3 Modelos de bases de datos basados enregistros

Tradicionalmente, se han considerado diferentes enfoques a la horade organizar una base de datos. Cada uno adoptaba una concepciondistinta de la realidad, dependiendo del tipo de estructura de datos masadecuado para construir un modelo del problema planteado.

En el modelo jerarquico subyace una estructura de datos arbores-cente. Ejemplos de esta estructura son la genealogıa de los toros de lidiay la organizacion de directorios de un disco. Esta orientacion se sueleusar cuando el problema abarca solo relaciones 1:m.

El enfoque en red adopta como modelo de datos el concepto ma-tematico de grafo: un conjunto de puntos llamados nodos, que se conec-tan unos con otros mediante lıneas llamadas arcos. El ejemplo arquetipode grafo es una red de carreteras: los arcos son los diferentes tramos, ylos nodos las intersecciones. En este tipo de relaciones se pueden repre-sentar tambien las relaciones m:m, aunque no de un modo muy natural.

Al igual que en el modelo entidad-relacion, en el enfoque de datos enred la base de datos consiste en un conjunto de entidades (que son losnodos de un grafo), caracterizadas por atributos y relacionadas medianterelaciones (que son los arcos). En el modelo en red, a las relaciones seles llama ligaduras, y son siempre binarias, si bien es posible construirrelaciones de cualquier orden combinando dichas relaciones binarias.

En la actualidad, los modelos jerarquico y en red se consideran am-pliamente superados por el modelo relacional, que esta muy desarrolladoy extensamente difundido, funcionando en equipos grandes y pequenos.Debido a su importancia, le dedicamos el siguiente apartado.

6.3.1 El modelo relacional

El enfoque relacional considera una base de datos como un conjuntode tablas,2 que representan entidades o relaciones. Dados n conjuntos de

2Llamadas relaciones, de donde viene el nombre de este modelo.

6.3. Modelos de datos basados en registros 159

entidades E1, ..., En, una tabla es un conjunto de n-tuplas de la forma(e1, ..., en), donde ei ∈ Ei; en otras palabras, una relacion es un subcon-junto del producto cartesiano E1 × ...× En.

Visto un conjunto de entidades como una tabla, cada fila representauna entidad concreta, y cada columna un atributo:

librosAutor Tıtulo Editor Signatura Registro

... ... ... ... ...

Si la tabla representa una relacion, cada columna es una de las en-tidades vinculadas por ella. En realidad, no es preciso consignar cadaentidad completa, sino que basta con incluir los atributos necesarios paradeterminarla unıvocamente. Este conjunto de atributos se llama clavede la entidad:

prestamosRegistro Num. socio Fecha

... ... ...

Pongamos un ejemplo. Una base de datos correspondiente a la in-formacion de cierta carrera universitaria3 podrıa constar, entre otras, dedos relaciones, que almacenan respectivamente los datos personales delos alumnos y las asignaturas en que se han matriculado en un curso:

Direcciones (nombreAl, direccion, telefono)

Matrıculas (nombreAs, nombreAl, curso, numCreditos, nota)

El atributo nombreAl es una clave para la primera relacion. Unaclave de la segunda la forman los atributos nombreAs y nombreAl.

En realidad, no se han establecido las relaciones concretas entre lasentidades (para lo cual se requerirıa rellenar las tablas con los datos re-ales) sino solo el encabezamiento de cada tabla asociada al que llamamosesquema de la relacion.

3Se supondra para simplificar que los nombres de los alumnos no pueden repetirse,y que tambien las asignaturas tienen nombres distintos.

160 Capıtulo 6. Bases de datos

Las relaciones establecidas para describir nuestro modelo no son lasunicas posibles. De hecho, el planteamiento puede mejorarse facilmente,sustituyendo la ultima relacion por las dos siguientes:

Asignaturas (nombreAs, curso, numCreditos)

Matrıculas’ (nombreAl, nombreAs, nota)

en las que ya no se repiten el curso y numero de creditos de cada asig-natura por cada alumno que se matricule en ella, mejorando el aprove-chamiento de la memoria y la gestion posterior de ella en consultas yactualizaciones de la informacion.

Este proceso (llamado normalizacion) no siempre resulta tan senci-llo. Sin embargo, mediante su empleo se llega a describir una base dedatos gracias a relaciones naturales y sin redundancias, con las ventajasmencionadas.

6.4 Lenguajes asociados a los SGBD

Visto el SGBD como un intermediario, debera proporcionar al admi-nistrador un medio con que definir la base de datos durante su creacion orealizar posteriores reestructuraciones, de acuerdo con los nuevos reque-rimientos, facilitandole el establecimiento de relaciones entre los datos.Finalmente, debera poner al alcance del usuario toda la informacion paraque este la manipule de un modo flexible y eficiente.

Los SGBD proporcionan lenguajes de alto nivel para que los usuariossoliciten sus operaciones, ya que la propia base de datos oculta muchosdetalles de la representacion y el almacenamiento de las relaciones, ydichos lenguajes pueden obviar esos detalles.

Los lenguajes de los SGBD son en general de dos tipos:

• Lenguajes de definicion de datos

Estos lenguajes recogen la descripcion de los datos tal como laconcibe el usuario, esto es, la definicion de los esquemas de la base

6.4. Lenguajes asociados a los SGBD 161

de datos. Como interpretacion de esas definiciones, producen eldiccionario de datos (vease 6.5) ası como la forma real, a bajonivel, en que los datos se organizan en los distintos dispositivosfısicos, discos normalmente.

• Lenguajes de manipulacion de datos

Estos lenguajes permiten al usuario realizar operaciones tales comoanadir informacion nueva en la base de datos, suprimir, modificaro consultar la existente.

Estas operaciones tienen una gran potencia, ya que los lenguajesde consulta modernos disponen de mecanismos para definir lasoperaciones mas frecuentes. Por otra parte, tienen tambien unagran flexibilidad, estando dotados de medios para que el usuariopueda desarrollar programas de acuerdo con sus necesidades, yasea ofreciendo lenguajes de programacion propios o bien enlazandocon lenguajes de programacion de alto nivel.

6.4.1 Lenguajes relacionales

Se han desarrollado dos enfoques de los lenguajes relacionales: elalgebra relacional y el calculo relacional, aunque la mayorıa de los len-guajes de consulta comercializados actualmente incluyen caracterısticasde ambos. Entre ellos, es obligado citar el SQL (Structured Query Lan-guage), que funciona tanto en bases de datos desarrolladas para mi-crocomputadores, como en otras para minis y mainframes, tales comoInformix-SQL, Ingres y Oracle. A continuacion presentamos brevementelos enfoques mencionados en el estilo de SQL.

• En los lenguajes basados en el algebra relacional las operacionesse realizan con tablas y su resultado es tambien una tabla. Lasprincipales son las siguientes:

– La operacion de seleccion extrae de una relacion las tuplasque verifican cierto predicado. Por ejemplo:

seleccion (Matrıculas’, nota ≥ 5)

162 Capıtulo 6. Bases de datos

consiste en la relacion de las papeletas de aprobado; en cadauna se consigna el nombre de un alumno, una asignatura y lanota obtenida. El esquema de la relacion obtenida es

<nombreAl, nombreAs, nota, convocatoria>

que coincide con el de la relacion Matrıculas’.

– La proyeccion extrae de una relacion las columnas que se indi-quen, eliminando las filas repetidas en la relacion resultante.Por ejemplo:

proyeccion (Matrıculas, <nombreAs, curso, numCreditos>)

coincide con la relacion de Asignaturas.

– La concatenacion de dos relaciones que tengan alguna co-lumna en comun consiste en otra tabla, que pivota en la(s)columna(s) comun(es). Por ejemplo, la relacion Matrıculaspodrıa obtenerse ası:

concatenacion (Matrıculas’, nombreAs)

Considerando que una tabla es un conjunto de tuplas, el algebrarelacional tambien incluye las operaciones conocidas de union, in-terseccion y diferencia (de conjuntos de tuplas), entre relacionescon la misma estructura.

• Los lenguajes basados en el calculo relacional son declarativos: lasconsultas se expresan especificando la informacion deseada me-diante el calculo de predicados de primer orden. Por ejemplo, ladefinicion siguiente

{< n, d > | ∃ t ((< n, d, t >∈ Direcciones) ∧∀ a, c((< n, a, c >∈ Matrıculas’)⇒ (c ≥ 9))}

facilitarıa la relacion de aquellos alumnos que han obtenido un so-bresaliente en todas las asignaturas de las que se han matriculado,junto con su direccion.

6.5. Elementos de un SGBD 163

6.5 Elementos de un SGBD

Siguiendo la presentacion por capas que se hizo de los sistemas ope-rativos, en una base de datos pueden distinguirse tres niveles:

• El mas bajo se encuentra directamente sobre el sistema operativo,y consiste en los archivos de datos, los de ındices y el diccionariode datos:

– Los archivos de ındices tienen identico cometido al del ındicede un libro, permitiendo localizar rapidamente un registro atraves de su direccion (pagina) en un archivo de datos (libro).

– El diccionario de datos es un archivo que contiene la des-cripcion de la estructura de los archivos de datos a los tresniveles; esto es, de los distintos esquemas de la base de datos.

• El nivel intermedio es el del sistema de gestion propiamente dicho,y comprende los siguientes modulos:

– Un programa compilador para el lenguaje de definicion dedatos, que construye (o modifica) el diccionario de datos.

– Un interprete del lenguaje de consultas: cuando las instruc-ciones del lenguaje de manipulacion de datos se insertan entresentencias de otros lenguajes de alto nivel, el precompiladortraduce esas instrucciones al lenguaje de alto nivel.

– Un programa gestor de la base de datos, que es el intermedia-rio entre los archivos, que contienen informacion a bajo nivelestructurada conforme al diccionario de datos, y los progra-mas que acceden a ellos a un nivel mas alto.

– Es corriente que los SGBD faciliten rutinas de reorganizaciony generacion de ındices de los registros de la base de datossiguiendo ciertos criterios.

– Frecuentemente se incluye un optimizador que, basandose enlas definiciones de las tablas y los ındices, crea el camino maseficiente de acceso a los datos. Este camino se construye enun paso de la compilacion de un programa de alto nivel o en

164 Capıtulo 6. Bases de datos

el momento de la ejecucion. Este modulo permite al usuariodesentenderse de los detalles de nivel fısico.

– Muchos SGBD ofrecen tambien diversas rutinas de generacionde programas, tales como formatos de pantalla, generacion deetiquetas, listados o informes a medida.

– Otro aspecto de gran desarrollo en la actualidad son las lla-madas herramientas CASE4, cuyo objetivo es facilitar el des-arrollo y mantenimiento de programas de cierta envergadura.

• En el nivel mas alto se encuentran el administrador y los usuariosde la misma:

– El administrador de la base de datos es la persona que redefineel esquema de la base de datos en las sucesivas modificaciones.Ademas, concede o deniega a los distintos usuarios el accesoa toda la base de datos o a parte de ella.

– Los usuarios pueden tener diferentes niveles de especializa-cion, con diferentes grados de acceso a la base de datos.Si tomamos como ejemplo la base de datos de un banco, el ni-vel menos especializado lo representa un cliente, capaz de con-sultar los datos de su cuenta o modificarlos como consecuen-cia de una transaccion efectuada en un cajero automatico.En un nivel intermedio se hallarıan los empleados, autoriza-dos a realizar consultas y movimientos mas complejos. Losprogramadores de aplicaciones se hallarıan en el nivel masespecializado.

6.6 Ejercicios

1. Los campos de un registro de un archivo pueden definirse mediante sutamano (maximo), es decir, su numero de caracteres o de dıgitos ente-ros y decimales. En este supuesto, fije el tamano que tienen los camposcorrespondientes a los siguientes datos: nombre, apellidos, domicilio, po-blacion, provincia, codigo postal y telefono.

4Computer Aided Software Engineering: ingenierıa de la programacion asistida porcomputador.

6.7. Comentarios bibliograficos 165

2. Se desea gestionar una videoteca mediante una base de datos, mante-niendo datos sobre los clientes y las cintas. Se considera la posibilidadde consultar la base de datos para conocer en un momento dado lasexistencias por temas, autores y actores.

• Describa los niveles de vision y conceptual segun las normas delANSI/SPARC.

• Identifique unos atributos apropiados para caracterizar las entida-des “clientes” y “cintas”.

• Identifique las relaciones 1:1, 1:m y m:m que existan.

• Construya un diagrama E-R.

• Construya el esquema de relacion correspondiente.

3. Encuentre un sistema de gestion de bases de datos e identifique sus ca-racterısticas, valorando en que medida alcanza los objetivos propuestospor los SGBD, cuales son los elementos que posee y sus limitaciones.

4. En la base de datos referida a una carrera universitaria utilizada comoejemplo del modelo relacional se define la siguiente relacion

Notas ≡ (nombreAl, curso, grupo, nombreP, nombreAs, feb, mayo,final)

de cada alumno, en cada asignatura, con sus calificaciones de febrero,mayo y final. Se ha aprovechado la tabla para incluir el nombre delprofesor que imparte la asignatura en ese grupo.

• Mejore el planteamiento para evitar que se repita el nombre delprofesor cada vez que aparezca un alumno suyo.

• Evite asimismo la repeticion del curso y grupo de cada alumno cadavez que aparece una asignatura.

5. Actuando como administrador de la base de datos del ejercicio anterior,establezca a que informacion pueden acceder: un alumno, un profesor, elpersonal de administracion, el jefe de estudios y el director del centro.

6.7 Comentarios bibliograficos

Las bases de datos constituyen, ya se ha dicho, un area de directa aplicacionen muy diversos campos del mundo empresarial. Pero tampoco puede negarse

166 Capıtulo 6. Bases de datos

la contribucion de los SGA, que tambien han evolucionado considerablemente,ofreciendo un elevado nivel, muy cercano a los problemas reales, proporcionandoun ambiente sencillo, apto para su uso por no profesionales de la informatica.Un ejemplo de SGA es el dBase, cuyo reducido coste, sencillo manejo y escasosrequerimientos fısicos la hacen tremendamente asequible. Entre los numerososlibros que se han escrito sobre ella, encontramos en [Bye90] una referenciabasica y practica de la version III plus.

Entre las bases de datos relacionales que funcionan en PC’s bajo DOS,deben mencionarse tambien Oracle y DB2/2. Aunque su medio principal son losentornos grandes, es posible usarlas en microcomputadores con fines educativos(lo que contribuye por otra parte a su difusion), ası como en la fase de desarrollo.En [MW83] se introducen informalmente los conceptos basicos de las bases dedatos relacionales, revisandose igualmente algunas de amplia difusion.

Posiblemente, SQL es el lenguaje de consulta de bases de datos mas exten-dido en la actualidad (DB2, Oracle, Informix, Arity, RDB, etc.) En [HH89] sepresenta este lenguaje, desde su fundamentacion en la logica del primer ordenhasta su utilizacion en algunos SGBD comercializados.

Entre los numerosos textos sobre esta tematica, indicamos [KS93], [Dat93]y [MP93], muy completos y actualizados.

En los anos noventa ha surgido un nuevo enfoque de bases de datos, el delas orientadas al objeto, que esta despertando un vivo interes y tiene una grany rapida acogida. [SH90] es un estudio comparado de sus principios con los delmodelo relacional.

Capıtulo 7

Historia de losinstrumentos de calculo

7.1 Precursores de los computadores digitales . . . . . . . . . . . . 1677.2 Nacimiento de los computadores . . . . . . . . . . . . . . . . . 1717.3 Evolucion de los lenguajes y de la metodologıa . . . . . . . . . 1757.4 Tecnologıa actual, tendencias y perspectivas . . . . . . . . . . . 1767.5 Comentarios bibliograficos . . . . . . . . . . . . . . . . . . . . . 179

El nacimiento de la Computacion, tal como la vemos hoy dıa, es re-cientısimo (apenas tiene medio siglo de edad), e incluso esta en plenodesarrollo; por eso, junto al interes que despierta el origen de los ins-trumentos de calculo y la informatica, surge la necesidad de conocer,siquiera someramente, su alcance en la actualidad, ası como la de ima-ginar las expectativas de futuro previsibles.

7.1 Precursores de los computadores digitales

7.1.1 La antiguedad

Desde que los hombres aprendieron a contar han necesitado apoyarseen el calculo para manipular cantidades y buscar metodos para facili-tarlo. Estos metodos fueron bastante rudimentarios hasta que los sabios

168 Capıtulo 7. Historia de los instrumentos de calculo

y astronomos hindues recogieron la herencia greco-babilonica inventandola numeracion posicional actual.

Con el desarrollo de esos metodos, fue necesario anotar numeros (yafueran considerados datos, cantidades auxiliares o resultados finales),apareciendo ası los primeros instrumentos de computo: el uso de losdedos con tal objeto condujo a las primeras tecnicas de calculo digital; yparecida finalidad tuvo el uso de piedras (calculi, termino latino del queprocede la palabra calculo) entre los romanos, el de los nudos (quipa)sobre una cuerda, o las muescas practicadas por diversos pueblos sobrevaras de madera.

Desde entonces, los avances se han debido a progresos en los metodos,en los instrumentos y en la integracion de ambos.

Dos utensilios de esta epoca merecen ser citados: la maquina analo-gica de Anticıteros, precursora de los calendarios astronomicos bizanti-nos; y especialmente el abaco, que aparecio entre el tercer y el primermilenio a. C., y puede ser considerado como la primera maquina digital,ya basada en la numeracion posicional.

7.1.2 Antecedentes del calculo mecanico

Los automatas de reloj que todavıa adornan los campanarios de lasiglesias medievales (a partir de finales del s. XIII) son automatismosmecanicos disenados para reproducir una secuencia fija de movimientos.Precisamente se les ha llamado automatas de programa interior paraexpresar ası que la serie de sus movimientos esta intrınsecamente descritaen su maquinaria.

7.1.3 La maquina de Pascal

Hacia la mitad del s. XVII, Pascal construyo una calculadora, capazde sumar y restar, basandose en la pieza fundamental de los engranajesde los molinos: la rueda dentada. El funcionamiento de la maquina dePascal puede compararse al de un cuentakilometros: cada rueda poseediez posiciones y, a cada vuelta, provoca en la siguiente un arrastre deuna posicion.

7.1. Precursores de los computadores digitales 169

Son directos descendientes de la maquina de Pascal las maquinaselectromecanicas de oficina, hoy ya en desuso, y las UAL de los actualescomputadores, cambiando las ruedas dentadas por circuitos electronicos.

En 1673, Leibnitz perfecciono la maquina de Pascal, incorporandolela multiplicacion (por adicion repetida del multiplicando en diferentesordenes decimales) y la division.

Las rudimentarias operaciones que facilitaban estos aparatosos ins-trumentos no compensaban su costosa construccion. Por ello, los pro-gresos consistieron en perfeccionamientos menores hasta finales del sigloXIX, en que se supo incorporar a las maquinas de calculo una aportacionprocedente de la industria textil.

7.1.4 La maquina de Babbage

Las maquinas de Pascal y Leibnitz se consideran de programa exte-rior, debido a que las instrucciones son aportadas por el hombre juntocon los datos, como ocurre con las calculadoras mas simples. No obs-tante, sus instrucciones son demasiado simples como para poder consi-derarse un programa. Esta nocion aparecio cabalmente con la maquinade Jacquard, mecanico frances que en 1790 concibio la idea de un telarautomatico, capaz de tejer sus dibujos obedeciendo secuencias de ins-trucciones previamente registradas en tarjetas perforadas. El telar deJacquard fue construido en 1800, y ha revolucionado la industria textil,pero el interes que tiene para nosotros es la aportacion del verdaderoconcepto de programa exterior, tal como lo entendemos actualmente.

En el s. XIX, C. Babbage concibio su Maquina Analıtica (1834), ca-paz de seguir las secuencias de instrucciones proporcionadas desde el ex-terior (como los datos), previamente registradas en tarjetas perforadas.El modus operandi de la maquina de Babbage consistıa en ir leyendotarjetas (descriptoras de operaciones) y ejecutandolas sucesivamente.

La gran aportacion de Babbage consiste en reunir las dos siguientescaracterısticas:

• la flexibilidad de las calculadoras de Pascal y Leibnitz, que operansobre distintos datos, pero carecen de automatismo, estando su

170 Capıtulo 7. Historia de los instrumentos de calculo

velocidad siempre limitada por la lentitud de introducir los datosy las operaciones

• el automatismo de los automatas de reloj, que no requieren la in-tervencion humana, por lo que funcionan sin interrupcion, aunquecarecen de flexibilidad, ya que cada secuencia de movimientos re-quiere el diseno de una maquina distinta.

Babbage no pudo terminar la construccion de su maquina de diferen-cias. Repetidamente se ha sostenido que la complejidad de esta maquinarozaba probablemente los lımites de la mecanica; sin embargo, estudiosrecientes [Swa93] demuestran que su diseno era completamente viable.

En el diseno de la maquina de diferencias se definen los organosesenciales de cualquier sistema computacional actual:

Entrada de instrucciones y datosAlmacen memoria

Unidad de Control con su actual cometidoMolino calculador, U.A.L.Salida con su actual cometido

Por ello se le ha llamado el “Padre de la Computacion moderna”.1

7.1.5 La tabulacion mecanica

El desarrollo de los estados modernos fue lo que determino la nece-sidad de procesar grandes volumenes de datos: siguiendo un mandatoconstitucional en EE.UU., era necesario realizar un censo de la poblacioncada diez anos. En 1886 se hizo patente la imposibilidad de obtener losresultados del censo de 1880 antes de 1890. Consciente de esta situacion,Hollerit, funcionario de la oficina de censos, ideo un sistema de tabu-lacion de los datos basado en tarjetas perforadas similares a las del telarde Jacquard.

1Entre los muchos campos que abarco Babbage citamos los primeros metodos queposteriormente originaron la Investigacion Operativa.

7.2. Nacimiento de los computadores 171

Con su sistema, Hollerit consiguio procesar el censo de 1890 en lacuarta parte del tiempo requerido para el de 1880. Su metodo fue taneficiente que abandono la Oficina de Censos, e inauguro una companıa dedesarrollo de maquinas electromagneticas (incorporando a su invento losavances en electromecanica y electricidad, construidos para perfeccionarel telefono) que fue la precursora de la actual IBM.

Con el desarrollo de los computadores, las tarjetas perforadas pasa-ron a ser uno de los principales soportes de la informacion, situacion queperduro hasta finales de los anos setenta.

7.2 Nacimiento y evolucion de loscomputadores digitales

En la primera mitad del siglo XX, gracias a los avances en tecnologıaelectronica, se crearon las primeras calculadoras electromecanicas, quefuncionaban a base de reles.

Al poseer los reles dos estados (abierto y cerrado), constituyen el ele-mento ideal para representar los dos dıgitos de la numeracion binaria (0y 1), y tambien los dos valores logicos (verdadero y falso) del algebra deBoole. Por ello, los reles pueden considerarse elementos de memoria ca-paces de albergar resultados parciales. Ademas, estos instrumentos erancapaces de seguir secuencias de instrucciones almacenadas previamentesobre tarjetas perforadas.

Los primeros computadores que funcionaron a base de tecnologıaelectrica fueron:

1. En 1943, el Harvard Mark I, con reles electromagneticos.

2. En 1943, el Colosus I, considerado como el primer computadorelectronico, a base de (200) valvulas, disenado durante la II Gue-rra Mundial para descifrar los mensajes del encriptador alemanEnigma.

172 Capıtulo 7. Historia de los instrumentos de calculo

3. En 1946, el ENIAC,2 tambien a base de (18.000) valvulas, disenadopara confeccionar tablas balısticas.

A partir de los reles, la lenta mecanica fue poco a poco desplazadapor la electricidad: el tubo de rayos catodicos, el transistor, los circuitosimpresos y mas tarde integrados, etc.

En realidad, estas maquinas estaban programadas al mas bajo nivel(en terminos de direcciones fısicas de memoria, etc.) para desempenartareas muy especıficas. Por ello, carecıan por completo de versatilidad,debido a la dificultad que entranaba reprogramarlas.

7.2.1 El modelo de von Neumann

En 1945, von Neumann dio el paso definitivo, incorporando a lasmaquinas de reles de entonces los dos siguientes conceptos:

1. Programa registrado, utilizando la memoria del calculador paraalmacenar el programa de instrucciones junto con los datos.

2. Ruptura (condicional) de secuencia, es decir, capacidad automati-ca de decision: dependiendo de cierto valor se ejecutarıa una partedel programa u otra.

En 1945, von Neumann definio su modelo de computador,3 que es enesencia el que funciona en nuestros dıas, con dos caracterısticas:

1. La secuencialidad en la transmision y tratamiento de los datos

2. La codificacion de instrucciones mediante impulsos electromagne-ticos, reemplazando el cableado

7.2.2 Generaciones tecnologicas

Las maquinas basadas en el modelo de von Neumann se comercia-lizaron en los anos cincuenta (1952-55) y, desde entonces, la carrera hasido y sigue siendo imparable. De esta decada parten las siguientes ge-neraciones tecnologicas:

2Electronic Numerical Integrator And Calculator.3Tambien conocido como Maquinas de von Neumann.

7.2. Nacimiento de los computadores 173

Primera generacion

Las valvulas electronicas desplazaron a los reles, y los computadoresadquirieron velocidad y potencia. Citamos entre los computadores de laprimera generacion el ENIAC, terminado en 1946, y el UNIVAC,4 pri-mera maquina con la arquitectura de von Neumann. El modus operandiera el siguiente:

• carga del programa y los datos, previamente perforados (T1)

• ejecucion (T2)

• salida de los resultados (T3)

El tiempo total invertido es la suma T1 + T2 + T3. Las fases pri-mera y tercera se llaman tiempos de ocio del procesador, porque en ellospermanecıa inactivo.

Segunda generacion

El aumento de potencia se debe a una innovacion de los laboratoriosBell en 1948: el transistor. En cuanto al modo de trabajar, se introdujola simultaneidad de las operaciones de calculo con las de carga y salida,reduciendose los perıodos de ocio del procesador.

Para aumentar la velocidad de las operaciones de carga/salida, queretrasaban todo el proceso, se introdujo el uso de cintas magneticas,mas rapidas que las tarjetas perforadas. Este modo de trabajar se llamaoff-lining.

Tercera generacion

Tecnologicamente, los avances en velocidad y potencia se deben a laincorporacion de circuitos integrados (1952) y memorias de semiconduc-tores (1971).

4UNIVersal Automatic Computer.

174 Capıtulo 7. Historia de los instrumentos de calculo

En esta generacion el trabajo se caracteriza por explotar la simul-taneidad del procesamiento con las operaciones de entrada/salida me-diante la multiprogramacion, consistente en que varios programas co-existen en memoria, y cuando uno de ellos debe realizar una operacionde entrada/salida, el procesador no se detiene, sino que se dedica a otroprograma. Ası, la UCP nunca esta ociosa habiendo trabajo por hacer,facilitandose ademas la asignacion de prioridades a los programas que seencuentran a la espera.

Cuarta generacion

Se incorporan nuevas tecnologıas de fabricacion y de integracion delos componentes fısicos entre sı (VLSI: Very Large Scale of Integration).

En cuanto a la explotacion, se generalizan:

• el teleprocesamiento: extension del sistema de carga y procesoa terminales remotas, sacando partido de la asignacion de prio-ridades.

• los sistemas interactivos o conversacionales: los usuarios intervie-nen en el desarrollo de las sucesivas etapas, lo que trae consigouna mayor flexibilidad en la modificacion y puesta a punto deprogramas.

• el tiempo compartido, con lo que se mejora el tiempo medio derespuesta.

• esta generacion se corresponde cronologicamente con la difusion delos llamados computadores personales.

7.3. Evolucion de los lenguajes y de la metodologıa 175

7.3 Evolucion de los lenguajes y de lametodologıa

Mientras tanto, a partir de los anos cincuenta, los lenguajes tambienemprenden la carrera de su evolucion particular: para evitar la codifi-cacion de programas a bajo nivel, es preciso que sea la maquina la queadquiera lenguajes proximos al humano.

A la aparicion del FORTRAN (FORmula TRANslator system) si-guieron el Algol y el Cobol, intentando acercarse a un lenguaje univer-sal. La avalancha posterior de lenguajes y dialectos demostro que esastentativas de universalidad resultaron vanas.

Por otra parte, la actividad de la programacion experimento en losanos sesenta un desarrollo mucho mas rapido que las tecnicas emplea-das en el; esta crıtica situacion se conoce como crisis del software. Noexistıa una metodologıa de la programacion: cada programador desarro-llaba sus propios metodos o “trucos” para programar, y se considerabaa la programacion mas como un arte que como una tecnica. Muy prontosurgio la necesidad de sistematizar la programacion, desarrollando he-rramientas y habitos de diseno metodicos y disciplinados para conseguirque los programas fueran correctos, eficientes y mantenibles. La tesisde la programacion estructurada y las aportaciones de Dahl, Dijkstra,Hoare [DDH72] y el propio Wirth, vinieron a conferir a la programacionun caracter de disciplina.

Aparece ası la programacion estructurada y modular y comienzan aaplicarse tecnicas de diseno de algoritmos como el metodo de los refi-namientos sucesivos. En este contexto nace el lenguaje Pascal, que fuecreado con el proposito de ensenar a programar de una forma metodica ydisciplinada. De hecho, se considera como un lenguaje ideal para entraren contacto con la programacion, por lo que es el primero que muchasuniversidades vienen ensenando durante anos. Los nuevos lenguajes deprogramacion que aparecen a partir de los anos setenta incorporan estastecnicas, facilitando su desarrollo y aplicacion.

Posteriormente, los lenguajes de programacion han seguido evolucio-nando, y paralelamente las tecnicas de desarrollo de algoritmos. En el

176 Capıtulo 7. Historia de los instrumentos de calculo

capıtulo 5 se han recogido algunos de los modelos de programacion masempleados.

7.4 Tecnologıa actual, tendencias yperspectivas

A partir de la aparicion del computador personal al principio de losanos ochenta, la informatica ha dejado de ser un coto cerrado de ungrupo restringido de especialistas y se ha popularizado, alcanzando ausuarios sin ningun tipo de conocimientos previos en este area.

Hoy en dıa, la Informatica esta difundida por un sinfın de sectores:las finanzas, la gestion, la investigacion, el control de procesos industria-les (diseno, concepcion y fabricacion asistidas por computador), la edu-cacion, la edicion, la composicion musical, etc., y el numero de usuariosque utilizan la informatica en su trabajo o en su ocio sigue aumentando.

En los paıses desarrollados, cada dıa esta mas cercana la prediccionde “un computador en cada puesto de trabajo y en cada hogar”.

Por ello, se hace necesario facilitar la relacion entre el usuario y elcomputador y disminuir el tiempo de aprendizaje, y para lograrlo serecurre a modelos mas intuitivos que muestran al computador comoun escritorio o mesa de trabajo, a las aplicaciones como tareas y losficheros de datos como carpetas de documentos, mediante entornos detipo grafico (4.2.5).

A su vez, se ha dado una notable evolucion tecnologica: los com-putadores son cada vez mas potentes y mas baratos. Se puede afirmarque esta evolucion es mas rapida en el campo del hardware que en elsoftware. Aparecen computadores con enormes posibilidades, pero losprogramas capaces de aprovecharlas llegan con varios anos de retraso.

La mayor capacidad de proceso esta permitiendo la entrada de lainformatica en campos en los que su presencia era limitada, y la creacionde actividades enteramente nuevas, como son:

1. Vision artificial: reconocimiento de formas

7.4. Tecnologıa actual, tendencias y perspectivas 177

2. Tratamiento de imagenes: correccion de aberraciones y defectosopticos.

3. Realidad virtual: sıntesis de imagenes virtuales estereoscopicas,pelıculas virtuales.

4. Comunicaciones: enlaces mediante modem, correo electronico, es-tablecimiento de redes integradas de comunicaciones (datos, sonidoy vıdeo).

5. Juegos: de rol, arcade, ajedrez.

6. Simulacion de procesos

7. Multimedia: procesamiento de datos, sonido y vıdeo integrados.

De hecho, todo el mundo coincide en calificar este enorme desarro-llo de la informatica como una verdadera revolucion de la informacion.Como tal revolucion, tiene importantes repercusiones de ındole econo-mica y social. La utilizacion de la informatica genera un aumento dela productividad y de la calidad de la produccion. En consecuencia, lasempresas se ven obligadas a informatizarse para poder competir en elmercado. El aumento de la productividad puede significar tambien unaumento del desempleo o del ocio.

Para imaginar como seran los computadores del futuro, quizas lo masrazonable sea identificar las limitaciones de los computadores actuales,e imaginar sus formas de superacion.

Por lo pronto, la naturaleza fısica de los componentes electronicos loslimita en tamano y en velocidad. De ahı que la investigacion se orientehacia la superacion de las configuraciones tradicionales (basadas en elmodelo de von Neumann) por otras arquitecturas y redes mas avanzadas(paralelas, neuronales, ...) llamadas a veces “arquitecturas de flujo dedatos” (vease el capıtulo 3). En ellas, un programa no se compone deinstrucciones que se ejecutan “de arriba abajo”, sino de segmentos quepueden “resolverse” en cuanto los datos precisos esten disponibles. Losdatos fluyen a traves de complicadas redes, compitiendo por acaparar la

178 Capıtulo 7. Historia de los instrumentos de calculo

atencion de los recursos (principalmente los procesadores, que trabajansimultaneamente).

7.4.1 Inteligencia artificial

El ambicioso objetivo que se persigue es dotar a los computadoresdel futuro con una serie de capacidades que se engloban bajo el terminogenerico de Inteligencia Artificial. Esta disciplina se ocupa en la actua-lidad de las siguientes areas de investigacion:

• lenguajes naturales: sıntesis del habla, identificacion del lenguajehablado, traduccion automatica

• razonamiento y aprendizaje automaticos, sistemas expertos, de-mostracion automatica

• programacion automatica

Todas esas capacidades requieren, en general, un mayor estudio delproceso cognitivo. En particular, todas ellas necesitan sustituir el empleode datos por el de conocimientos, lo que plantea el difıcil problema desu representacion.

7.4.2 Las comunicaciones

Otro aspecto de la informatica con tremendo auge en la actualidades el de las comunicaciones, ya que se abre la posibilidad de acceder ala informacion de origen remoto, tratarla automaticamente y enviar losresultados a su lugar de origen.

Para ello se crean redes de comunicaciones de mayor o menor cober-tura, desde una sala o un edificio hasta redes nacionales o mundiales.

Las aplicaciones de la teleinformatica estan cada dıa mas extendidasy ya casi empiezan a parecernos algo natural. Como ejemplos podemoscitar desde el uso de los cajeros automaticos hasta la posibilidad deefectuar reservas de avion o de hotel desde puntos remotos, la consultadel catalogo de una biblioteca en una ciudad de otro paıs, el correoelectronico, etc.

7.5. Comentarios bibliograficos 179

7.5 Comentarios bibliograficos

[JM90] y [Ber86] son dos buenas recopilaciones, con caracter general, so-bre la historia pasada de los instrumentos de calculo, desde la calculadora dePascal hasta nuestros dıas. [Ber86] es extraordinariamente entretenido, con unbuen numero de anecdotas y curiosidades sobre los padres de la computacionmoderna. Especialmente interesantes son las citas de escritos de von Neumannrecogidas en el.

En [Swa93] se presentan los avatares en que se vio envuelta la construccionde la maquina analıtica de Babbage, demostrando que el proyecto era viable, apesar de no verse finalizado: En este artıculo se describe la construccion de lamaquina analıtica con motivo del segundo centenario del nacimiento de CharlesBabbage, y de acuerdo con sus planos originales.

Aunque los computadores digitales actuales tienen su origen en el modelode von Neumann (1945), la invencion del primer computador electronico esanterior, y se debe a J. V. Atanasoff, que construyo el primer computadordigital entre 1937 y 1942. De hecho, es posible que los creadoes del ENIACcopiaran algunas de sus ideas ([Mac88]).

Sobre computacion avanzada en la actualidad y perspectivas de futuro dela informatica pueden consultarse [Com87] y [Sim85]. [La 91] trata sobre estemismo tema, en relacion con las comunicaciones.

Apendice A

Introduccion al DOS

El dos es, hoy en dıa, el sistema operativo mas difundido para com-putadores PC de IBM y compatibles. Dada la gran difusion de estos,se comprende la importancia que tiene conocer el dos.

Aunque los PCs pueden comunicarse con otros a traves de redes, sumodo habitual de trabajar es autonomo, por lo que el dos es un sistemaoperativo monousuario. Su cometido (vease el capıtulo 4) consiste engestionar los recursos del sistema, controlando el uso de los dispositivos(como las unidades de disco, la impresora, el raton), administrando lamemoria principal y facilitando la ejecucion de programas y la organi-zacion de archivos dentro de los discos.

El dos es en realidad un programa (o mejor dicho un conjunto deprogramas) grabado en un disco.1 Cuando se enciende un equipo, seempieza cargando este programa en la memoria principal y se efectuanlas tareas de puesta en marcha (vease la seccion A.3); entonces entra enfuncionamiento un interprete de mandatos, que espera las ordenes delusuario (vease la seccion A.2), y las va ejecutando sucesivamente.

Asumimos en adelante una configuracion con disco fijo (duro) en elque se encuentra este programa de arranque del dos, que es actualmenteel caso mas habitual.

1De hecho, ese es el significado de las siglas que forman su nombre: “Disk OperatingSystem”, que quiere decir en ingles Sistema Operativo de Disco.

182 Apendice A. Introduccion al DOS

A.1 Organizacion de recursos

A.1.1 Principales dispositivos

Durante el trabajo con el dos, a veces necesitamos referirnos explı-citamente a los perifericos; para ello, se emplean los siguientes terminosen el lenguaje del dos:

identificador perifericonul: nulocon: consola = teclado + monitor

a: b: c: . . . unidades de discolpt1: = prn: impresoralpt2: . . . otros dispositivos en paralelo

com1: = aux: dispositivo en seriecom2: . . . otros dispositivos en serie

Todos los dispositivos pueden nombrarse omitiendo los dos puntosfinales, a excepcion de las unidades de disco que deben llevarlos obliga-toriamente.

A.1.2 Archivos

Un archivo del dos no es mas que un documento, aunque en vez deestar representado por una secuencia de letras escritas sobre papel, con-siste en una secuencia de bytes (que representan caracteres igualmente)grabados sobre una zona de un disco magnetico. Dependiendo del con-tenido de los archivos, desde el punto de vista del dos, algunos archivosson “de datos” y otros son “programas”, escritos en lenguaje de maquinao del dos.

Los archivos se nombran mediante palabras, llamadas identificadores,formadas por letras, dıgitos y los caracteres siguientes:

~ ! @ # $ % ^ & ( ) - _ { } ’

A.1. Organizacion de recursos 183

Los identificadores de los archivos tienen dos partes: nombre (de unmaximo de ocho letras) y extension (de un maximo de tres), siendo estaultima opcional. Al escribir el identificador de un archivo, estas dospartes se separan mediante un punto. Usando la notacion EBNF (veaseel capıtulo 5), esta descripcion puede expresarse ası:

identificador ::= nombre[.extension]

Ateniendonos a estas reglas, conviene elegir los nombres de los archivosrelacionados con su contenido. En cuanto a las extensiones, su elecciondepende del tipo de archivo; las mas usuales son las siguientes:

extension uso habitualcom exe Programas ejecutables

bat Lotes de ordenes (v. A.2.5)sys Programas del sistema

bas pas cobCodigo fuente de programas

en Basic, Pascal o Coboltxt Archivos de texto

Logicamente, los identificadores usados para representar archivos nopueden coincidir con los identificadores propios de dispositivos.

Con frecuencia, se necesita realizar ciertas operaciones con un grupode archivos mas o menos grande. Si esos archivos fueron bautizados si-guiendo ciertas pautas, es posible identificarlos genericamente medianteun patron o plantilla de archivo. Para ello, se usan los caracteres co-modın, * y ?, que representan respectivamente cualquier cadena de ca-racteres como terminacion del nombre o extension, y un caracter encualquier posicion del identificador. Por ejemplo:

Plantilla Interpretacionarch∗.com archivo.com, archi-1.com, arch.com,. . .c9?-9?.txt c92-93.txt, c93-94.txt, c9a-9f.txt,. . .∗.exe Todos los archivos con esa extension∗.∗ Todos los archivos

184 Apendice A. Introduccion al DOS

A.1.3 Directorios

El numero de archivos grabados en un disco llega con frecuencia aser enorme, por lo que se hace necesario clasificarlos. Este es el come-tido de los directorios y subdirectorios, algo ası como compartimentosy compartimentos dentro de compartimentos que permiten organizarjerarquicamente los archivos de un disco.

En general, los identificadores de los directorios siguen las mismasreglas que los archivos, aunque en el caso de los directorios es bastantefrecuente omitir la extension. Ademas de los identificadores corrientes,existen sımbolos especiales para indicar las siguientes posiciones:

identificador posicion\ el directorio principal o raız. el directorio actual.. el directorio “padre”

La comparacion de los directorios con compartimentos se refleja gra-ficamente en el ejemplo de la figura A.1, donde los identificadores de losdirectorios y subdirectorios senalan puertas (de entrada), y los archivosestan representados directamente por sus identificadores. Otro modomas sencillo e igualmente util de representarlos es como arboles, segunse muestra en la figura A.2.

Es importante tener en cuenta que los archivos contenidos en cadaunidad de trabajo estan organizados en forma de arbol, por lo tanto,cada unidad tiene su propio directorio raız y en todo momento cadaunidad tiene un directorio actual.

Ademas, es posible referirse a cualquier directorio o conjunto de ar-chivos indicando una ruta de acceso desde la posicion actual, esto es, eldirectorio de trabajo2 (vease 4.2.2). Con este fin, el sımbolo \ sirve paraconcatenar los pasos hacia dicha posicion.

Ası por ejemplo, considerando que el disco C: esta organizado segunla estructura anterior, es posible referirse a los archivos ejerci.tex yexamen.tex desde diversos lugares:

2Esta posicion se conoce frecuentemente como directorio “por defecto”, a causa deuna traduccion dudosa de su nombre default directory, en ingles.

A.1. Organizacion de recursos 185

\

<escuela>

<juegos>

<cartas>

grupo-C.dbf

ejerci.tex

examen.tex

carta-1.txt

carta-2.txt

tetris.exe

command.com

config.sysautoexec.bat

keyb.com

keyboard.sys

win.bat

Figura A.1.

• Desde C:\

escuela\*.tex

• Desde C:\escuela

*.tex

• Desde C:\escuela\cartas

..\*.tex

• Desde C:\escuela\juegos

..\escuela\*.tex

186 Apendice A. Introduccion al DOS

\

<escuela>

<juegos>

<cartas>

command.com

config.sys

autoexec.bat

keyb.com

keyboard.sys

win.bat

grupo-C.dbf

ejerci.tex

examen.tex

carta-1.txt

carta-2.txt

tetris.exe

Figura A.2.

A.2. Ordenes del DOS 187

• Desde cualquier lugar del disco C:

\escuela\*.tex

• Desde cualquier lugar, incluso desde otro disco:

C:\escuela\*.tex

A.1.4 Prompt

El prompt3 es un indicador con el que el dos expresa que esta es-perando nuestras ordenes, listo para ejecutarlas. El dos puede indicaresta disposicion de diversas formas, a nuestro capricho, pero la mas ex-tendida consiste en recordar el disco de trabajo y la posicion, dentro deel, en ese momento; suele finalizarse con el caracter >. Por ejemplo, elprompt

C:\ESCUELA\CLASES>

indica que la posicion de trabajo actual es el subdirectorio CLASES, deldirectorio ESCUELA, en el disco C:. A la derecha del prompt aparece elcursor, bajo nuestro control, para escribir la orden que deseemos.

A.2 Ordenes del DOS

El sistema dos ofrece un interprete de mandatos que permite alusuario la comunicacion con el computador.

Empecemos por poner unos cuantos ejemplos de ordenes, junto consu funcionamiento. En adelante, usaremos letra de molde para reprodu-cir el intercambio de informacion entre computador y usuario; lo escritopor el computador aparece en letra vertical y lo escrito por el usuario enletra oblicua:

3Aunque en espanol significa incitar o incitacion, solo usamos el termino ingles, sintraducir.

188 Apendice A. Introduccion al DOS

C:\>CD pascal

C:\PASCAL>A:A:\>Dir *.CHI

El volumen en la unidad A no tiene etiquetaEl numero de serie del volumen es 335E-11EFDirectorio de A:

ENTROPY CHI 1633 21/06/93 9:08REGLAMEN CHI 2204 27/06/93 20:07JUNIO-93 CHI 3425 29/06/93 17:03

3 Archivo(s) 176640 bytes libres

A:\>FORMAT B:

Comando o archivo no se encuentra

A:\>C:\DOS\FORMAT B:

. . . . . . . . .

A:\>CLS

Debe advertirse que en el lenguaje del dos no se distingue entre lasletras mayusculas y las minusculas. Esto afecta a los identificadores (yasea para dispositivos, archivos o directorios), ası como a las ordenes queestudiaremos.

Por otra parte, los comandos del dos pueden agruparse en dos ca-tegorıas: ordenes (internas) del dos y programas (externos). El dosconoce las primeras, y es capaz de interpretarlas y ejecutarlas en cual-quier momento; tambien es posible ordenar la ejecucion de un programatras el prompt pero, para ejecutarlo, el dos debe leer el disco para pa-sarlo a la memoria del computador. Por lo tanto, solo es posible ejecutarprogramas grabados en un disco accesible por el dos.

Por ejemplo: el cambio de unidad, las ordenes CLS, DIR y CD sonordenes internas; FORMAT en cambio es un programa. El interes de estaobservacion consiste en que, cuando se ordena un comando externo oprograma, para que este pueda ejecutarse debera darse alguna de lassiguientes circunstancias:

A.2. Ordenes del DOS 189

- el programa debera estar en la unidad y directorio de trabajo ac-tual, o

- se indicara su posicion, para que el dos pueda encontrarlo, o

- estara en alguna de las posiciones conocidas de antemano porel dos en los que busca las ordenes de uso frecuente (vease laseccion A.2.3).

En los siguientes apartados se describiran los comandos del dos masusuales. Interesa saber de cada uno si es externo o interno, su propositoy su sintaxis correcta. Usaremos las reglas EBNF (introducidas en elcapıtulo 5) escribiendo los sımbolos terminales con letra vertical y losno terminales con letra oblicua, en vez de distinguirlos con mayusculasy minusculas, o de usar los metasımbolos < y >, por tener estos otrocometido.

Ası por ejemplo, podemos decir que la estructura general de lasordenes del dos es la siguiente:

comando [argumentos] [opciones]

donde la primera palabra es el nombre del comando, y aparece siempre;los argumentos son los objetos que maneja la orden, frecuentemente ar-chivos o directorios, y no siempre aparecen (por ejemplo, la orden CLSno tiene argumentos); y las opciones son especıficas de cada comando,como /W, y alteran el funcionamiento del mismo. En estas descripcionessintacticas apareceran con frecuencia los siguientes sımbolos no termi-nales:

• Unidad : A:, B:, C:, . . .

• La [posicion], opcional, se indica cuando procede, dando una uni-dad de disco y/o un camino de acceso, bien desde el directorio raız(posicion absoluta) o desde el (sub)directorio actual abierto en eldisco correspondiente (posicion relativa):

[unidad][camino]

190 Apendice A. Introduccion al DOS

• Archivo(s), que muchas veces se expresaran de forma generica me-diante una plantilla o patron, usando los sımbolos comodın.

• Las opciones, tales como /B, /S, . . .

Por otra parte, muchas de las ordenes incluyen en su sintaxis partesopcionales, frecuentemente un disco, una posicion dentro de el o unconjunto de archivos. Cuando esas partes opcionales se omiten, se asumeque se trata del disco de trabajo actual, del (sub)directorio abierto, detodos los archivos a la vista, etc.

A.2.1 Ordenes basicas

CLS (interna)

• Proposito: Borra la pantalla, situando el prompt y el cursor en sucomienzo.

• Sintaxis: CLS

Cambio de unidad (interna)

• Proposito: Establece una nueva unidad de trabajo.

• Sintaxis: unidad

FORMAT (externa)

• Proposito: Preparar un disco para ser usado por el dos, creandoel directorio (vacıo) inicial.

• Sintaxis: [posicion]FORMAT unidad [opciones]

• Algunas de las opciones usadas con este comando son las siguientes:

– /S, para transferir a un disco el sistema operativo, haciendoası posible iniciar el funcionamiento del dos con ese disco.

– /V, para dar un nombre a un disco.

A.2. Ordenes del DOS 191

A.2.2 Manejo de archivos

DIR (interna)

• Proposito: Proporciona informacion sobre:

– la posicion especificada,

– los archivos visibles en esa posicion,

– las puertas (de acceso a directorios) a la vista, incluyendo elsubdirectorio actual, desde la posicion indicada,

– la memoria libre en una unidad.

• Sintaxis: DIR [posicion][archivo(s)] [/W][/P]

• Ejemplo:

C:\PASCAL-6> DIR /w

El volumen en la unidad C tiene etiqueta BLAISE

El numero de serie del volumen es 0F1E-18DF

Directorio de C:\PASCAL-6

. .. TVISION TVDEMOSUTILS TURBO3 TURBO EXE UNZIP EXEREADME COM TURBO TPL TURBO TP TPC EXETPTOUR EXE TPTOUR CBT TPTOUR1 CBT TPTOUR_P CBTTPTOUR CBT TPTOUR_U CBT README TURBO HLPTPC CFG NONAME00 PAS

22 Archivo(s) 5171200 bytes libres

• Opciones

– /P sirve para parar la relacion de pagina en pagina.

– Con la opcion /W, solo se da el identificador de cada archivoy se aprovecha la pantalla a lo ancho, con lo que la relacionocupa menos lıneas.

192 Apendice A. Introduccion al DOS

COPY (interna)

• Proposito: Copia uno o varios archivos, con el mismo nombre odistinto; tambien se usa para transferir archivos hacia o desde undispositivo.

• Sintaxis: COPY [posicion][archivo(s)] [posicion][archivo(s)]

• Este comando tiene dos argumentos: el(los) archivo(s) fuente yel(los) archivo(s) destino; sin embargo, es frecuente omitir uno deellos. Por ejemplo, las dos ordenes siguientes

C:\> COPY autoexec.bat a:\

A:\> COPY c:\autoexec.bat

tienen el mismo efecto.

COMP (externa)

• Proposito: Compara los contenidos de uno o varios pares de archi-vos.

• Sintaxis:

[posicion]COMP [posicion][archivo(s)] [posicion][archivo(s)]

DEL (interna)

• Proposito: Borra un archivo o un grupo de ellos de un disco.

• Sintaxis: (ERASE | DEL) [posicion][archivo(s)]

REN (interna)

• Proposito: Renombra el identificador de un archivo o grupo deellos.

• Sintaxis: (REN | RENAME) [posicion][archivo(s)] [archivo(s)]

TYPE (interna)

A.2. Ordenes del DOS 193

• Proposito: Muestra en la pantalla el contenido de un archivo.

• Sintaxis: TYPE [posicion][archivo(s)]

PRINT (externa)

• Proposito: Envıa un archivo a la impresora, colocandolo en la colade impresion.

• Sintaxis: [posicion]PRINT [posicion][archivo(s)] [/C][/T]

• Opciones

– Con /C se cancela(n) de la cola el (los) archivo(s) especifica-dos.

– /T cancela toda la cola de impresion

A.2.3 Manejo de directorios

CD (interna)

• Proposito: Cambia el directorio de trabajo actual.

• Sintaxis: (CHDIR | CD) [unidad]camino

TREE (externa)

• Proposito: Muestra la estructura de subdirectorios de un directoriodado, de un modo muy similar al mostrado en la figura A.2.

• Sintaxis: TREE [directorio] [/F]

• Opciones

– Con la opcion /F se incluyen los archivos contenidos en cadasubdirectorio.

MD (interna)

• Proposito: Construye un nuevo subdirectorio.

194 Apendice A. Introduccion al DOS

• Sintaxis: (MKDIR | MD) [unidad]camino

RD (interna)

• Proposito: Borra un subdirectorio, que debe estar vacıo.

• Sintaxis: (RMDIR | RD) [unidad]camino

PATH (interna)

• Proposito: Establece rutas de busqueda alternativas a la posicionde trabajo actual.

• Sintaxis: PATH [posicion];{posicion}]

A.2.4 Indicadores del sistema

Durante el funcionamiento del dos existen unos cuantos datos dereferencia, tales como el path, a las que se llama indicadores:

• Date y time permiten conocer o alterar la fecha y la hora delsistema. Aunque su valor es actualizado constantemente por elpropio computador, tambien el usuario puede establecer uno.

• Ver es la version del dos en uso.

• Verify es un conmutador (con dos posiciones: on y off ) que,cuando esta activo, indica al dos que compruebe las operacionesde escritura de archivos.

• Break es tambien un conmutador: cuando esta activo (on), el doscomprueba frecuentemente si se producen interrupciones durantela ejecucion de programas.

• El prompt ya ha sido introducido. Por lo general, su aspecto y lainformacion que proporciona se establece durante el arranque delsistema (vease la seccion A.3), aunque el usuario puede redefinirloa su antojo haciendo que indique, por ejemplo, la hora del sistema.

A.3. Configuracion del DOS 195

A.2.5 Procesamiento por lotes

Cuando se necesita ejecutar repetidamente una secuencia de ordenes,es posible definir un lote de ordenes (vease 4.1.2) (por ejemplo, la se-cuencia cd pascal, turbo y cd ..), agrupandolas bajo un nombre (comopascal.bat, por ejemplo), de manera que baste con ordenar ese identi-ficador para que el dos lleve a cabo la secuencia, una a una:

pascal.bat ;

cd pascalturbocd ..

El identificador asociado a un lote de ordenes debe tener la extensionbat4 obligatoriamente. Sin embargo, en su posterior utilizacion puedeomitirse la extension.

Como un lote de ordenes es un archivo de texto, puede construirse conun editor cualquiera, o copiandolo directamente del teclado, mediante:

copy con: pascal.bat

donde el retorno de carro representa el final de lınea, y la combinacionCtrl+Z la marca del fin de archivo.

En un archivo bat pueden usarse, ademas de las ordenes usuales deldos, otras especıficas (ECHO, REM, PAUSE, GOTO, IF, FOR), con las que sepueden construir programas con gran flexibilidad.

A.3 Configuracion del DOS

El elemento del sistema operativo de mas bajo nivel es el BIOS:el sistema basico de entrada y salida (del ingles, Basic Input/OutputSystem). Se trata de un conjunto de rutinas situadas en la memoriaROM del computador que realiza tareas basicas como las pruebas de quelos perifericos estan conectados o el programa para poder leer los ficherosdel dos, bien del disco duro o bien de discos flexibles. Estas rutinas noson suministradas por el fabricante del sistema operativo sino que son

4En ingles, batch significa lote.

196 Apendice A. Introduccion al DOS

entregadas con el hardware, por lo que se suele utilizar la expresionfirmware para hacer referencia a este tipo de software introducido en laROM.

Ya se ha dicho que el dos esta grabado en un disco. En efecto,cuando se enciende el computador, el programa de la ROM extrae deldisco un programa generador del dos que, en lıneas generales, da lossiguientes pasos, representados en la figura A.3:

1. Construye y carga en la memoria RAM la primera parte del sis-tema operativo, responsable de las operaciones de entrada y salida(BIOS ), ası como de la gestion de archivos y directorios y de laejecucion de los programas (nucleo).

2. Se busca en el disco un archivo llamado CONFIG.SYS y, si existe,se adoptan sus mandatos, estableciendo ciertos parametros inicia-les del dos e instalando algunos controladores de dispositivos, talcomo veremos a continuacion.

3. Se carga en la memoria el interprete de comandos; normalmentees el programa COMMAND.COM, aunque en el archivo CONFIG.SYSpodrıa haberse especificado otro.

4. Finalmente, se busca en el disco el archivo AUTOEXEC.BAT y, siexiste, se ejecuta este lote de ordenes.

Los archivos CONFIG.SYS y AUTOEXEC.BAT pueden ser modificados (ocreados) por el usuario para configurar el funcionamiento del dos segunsus necesidades, y obtener de el el maximo rendimiento.

El siguiente ejemplo de archivo CONFIG.SYS

BREAK=ON (1)COUNTRY=34 (2)BUFFERS=25,8 (3)FILES=20 (4)SHELL=C:\DOS\COMMAND.COM (5)INSTALL=C:\DOS\KEYB.COM SP,,C:\KEYBOARD.SYS (6)

opera ası:

A.3. Configuracion del DOS 197

� �Principio

?...

?¿Existe

config.sys?

Se establecen losparametros del DOS

y se instalan loscontroladores de

dispositivos indicados

Se usan losvalores por

defecto de DOS

¿Existeautoexec.bat?

Se ejecutael lote

de ordenes

?� �Fin

...........................................................................................................................................................................................................................................................................................

..............................................

.............................................

..........................................

..........................................

................

? ?

sı no

?...?.....................................................................................................................................................................................................................................................................................................

......................................

......................................

.......................................

......................................

......................................

............................

sı no

?

-�

Figura A.3. Diagrama de flujo del arranque de dos.

198 Apendice A. Introduccion al DOS

1. Activa la verificacion de interrupciones.

2. Establece los formatos de fechas, horas, separadores y moneda delpaıs.

3. Establece el tamano de ciertas zonas de memoria usadas durantelas operaciones de entrada y salida con el disco.

4. Establece el numero maximo de archivos que es posible tener abier-tos a la vez.

5. Elige el interprete de comandos usual.

6. Finalmente, instala el programa controlador del teclado en caste-llano.

Terminamos esta seccion con un ejemplo de AUTOEXEC.BAT tıpico,que no necesita comentario alguno:

CLSDATETIMEECHO OFFPATH C:\;C:\dos;C:\LOTES;C:\UTILES;C:\PASCALPROMPT $P$GVERKEYB SP,,C:\DOS\KEYBOARD.SYSC:\RATON\MSMOUSE /2INSTALL=C:\DOS\KEYB.COM SP,,C:\KEYBOARD.SYSSET EDITOR=C:\UTILES\epsilon

A.4 Otros aspectos de interes

A.4.1 Encauzamiento: tubos y demas

En principio, ordenes como DIR y TYPE dirigen su salida hacia lapantalla. El interprete de comandos del dos nos ofrece la posibilidad

A.4. Otros aspectos de interes 199

de desviar la salida de esas ordenes hacia otro dispositivo, mediante losoperadores de redireccionamiento:

. . . >DIR /w > lpt1:

o confeccionar un archivo con ella:

. . . >DIR /w > dir\list.txt

e incluso agregar esa informacion a la de un archivo ya existente:

. . . >DIR >> dir\list.txt

Otras ordenes toman su entrada del teclado:

. . . >DEL *.*¡Se eliminaran todos los archivos del directorio!¿Esta usted seguro? (S/N) S. . . >

En cambio, si se tiene un archivo llamado si.txt, cuyo contenidoconsiste unicamente en el caracter “s”:

si.txt ; s

es posible conseguir que una orden capte su entrada del mismo, ası:

. . . >DEL *.* < SI

. . . >

Los siguientes programas, llamados filtros, permiten sacar partidodel redireccionamiento:

• SORT toma como entrada unas cuantas lıneas del teclado o de unarchivo de texto (donde el retorno de carro representa el final delınea y la combinacion Ctrl+Z la marca del final), escribiendo acontinuacion las mismas lıneas, pero en orden alfabetico (ASCII):

. . . > SORT

uno

dos

tres

200 Apendice A. Introduccion al DOS

^Z

dos

tres

uno

. . . >

• MORE escribe su entrada en la pantalla, de pagina en pagina.

• FIND busca en un archivo el texto especificado, mostrando todaslas lıneas que lo contengan:

. . . >FIND "ornitorrinco" < australi.txt

Al igual que se puede dirigir la salida mediante > y >>, es posibleconvertir un archivo en argumento de un programa:

. . . > SORT < agenda.txt

adela 2008586bernardo 7388196. . .zutano 5494389

Otra interesante utilidad consiste en convertir una salida por la pan-talla en el argumento de un programa:

. . . >DIR | SORT

pudiendose combinar con el redireccionamiento:

. . . >DIR | SORT > DirOrden.txt

A.4. Otros aspectos de interes 201

A.4.2 Atributos y proteccion de archivos

Los sistemas operativos ofrecen mecanismos de proteccion de la in-formacion que gestionan. Su interes se da mayormente en sistemas mul-tiusuario, en los que resulta esencial mantener lo privado del trabajo delos usuarios, pero incluso en un sistema monousuario como el dos, sonde utilidad. En este sistema, cada archivo posee los siguientes atributos:

• R es el atributo de “solo lectura”. Cuando se activa (+R), no sepuede borrar ni modificar el archivo que lo posee. La opcion -Rdesactiva este atributo.

• La marca A indica que se desea hacer copia de seguridad, y esdetectada por los programas backup y xcopy.

El programa ATTRIB nos permite establecer y conocer los atributosde un archivo o de un grupo de ellos:

[posicion]ATTRIB [±R][±A] [archivo(s)]

Estos atributos se indican mediante letras:

a archivo modificador archivo de solo lecturah archivo oculto: las ordenes DIR y COPY lo ignorans archivo del sistema

A.4.3 Ampliaciones de la memoria en los PCs

Los primeros procesadores de IBM para computadores personales,tales como el 8088 y el 8086,5 fueron disenados para direccionar 1 Mb dememoria; sin embargo, los desarrollos posteriores del hardware y el soft-ware se encontraron pronto con limitaciones de memoria. Este problemaobligo a introducir algunas ampliaciones del concepto de memoria. Eneste apartado se dara una vision sobre los diferentes tipos de memoriaque se pueden encontrar en un PC trabajando bajo dos.

Un PC puede tener tres tipos diferentes de memoria: convencional,expandida y extendida.

5Los computadores que usan estos procesadores se conocen como XT.

202 Apendice A. Introduccion al DOS

1. La memoria convencional es el primer megabyte de memoria delcomputador, con un procesador del tipo 8088 o superior. Esteera el unico tipo de memoria disponible en los primeros PCs; unprograma en ejecucion se carga en los primeros 640 Kb de memoriaconvencional, y los restantes 384 Kb son utilizados por dispositivosde hardware.

2. La memoria expandida se anade al computador, y no forma partede la memoria manejada directamente por el procesador. El accesoy la gestion de esta memoria se efectua mediante un subsistemaespecial hardware/software.

3. La memoria extendida es la que esta por encima del primer me-gabyte y solo puede accederse mediante un procesador6 80286 osuperior.

A continuacion se discute con mayor detalle la gestion de las memoriasexpandida o extendida.

Memoria expandida

La memoria expandida es el tipo de memoria mas flexible que un PCpuede tener, lo cual tambien hace que sea la mas compleja de todas. Estamemoria permite al procesador acceder a mas memoria de la disponiblebajo el lımite de los 640 Kb.

La memoria expandida no puede ser gestionada directamente porel dos; para ello se utilizan programas (tales como EMM7, EMM386y QEMM) que se cargan normalmente en el archivo de configuracionconfig.sys.

Es importante conocer como actua el EMM para comprender mejorlas diferencias entre las memorias expandida y extendida. Cuando elEMM se ejecuta lo que hace es buscar un trozo de memoria sin utilizar enlos 384 Kb superiores del primer Mb; este trozo de memoria, usualmentede 64 Kb, se divide a su vez en cuatro paginas de memoria de 16 Kb que

6Los computadores que usan un procesador 80286 son conocidos como AT.7Siglas del ingles Expanded Memory Manager .

A.4. Otros aspectos de interes 203

hacen de pivotes para mover informacion entre la memoria convencionaly la memoria expandida. El programa EMM se encarga de gestionar elintercambio de informacion entre las paginas de memoria y la memoriaexpandida.

La instalacion de memoria expandida representa la instalacion deun subsistema completo de hardware y software. El hardware consisteen una tarjeta de memoria disenada especialmente, y el software es elarchivo de gestion EMM.

La memoria expandida tiene caracterısticas de una tarjeta de memo-ria normal y de un dispositivo periferico; tiene chips de memoria, perose accede a ella como si se tratara de un puerto de entrada/salida. Enla figura A.4 se intenta reflejar la forma en que el procesador ve a lamemoria expandida.

Memoria extendida

La memoria extendida es la que esta por encima del primer megabytede memoria. Solo puede accederse a ella a traves del modo protegido delos procesadores 80286 o superior. La diferencia mas importante entrememoria expandida y extendida es que los programas que trabajen enmodo real no pueden tener acceso directo a la memoria extendida.

El modo protegido es usado para acceder a una mayor cantidad dememoria y de funciones.8 Cuando un procesador (80286 o superior) pasaa modo protegido entonces el sistema puede controlar la operacion demultiples programas en la memoria y cambiar mas facilmente de unatarea a otra. Estos procesadores tambien pueden ejecutar los programasescritos para procesadores 8088 y 8086 trabajando en modo real, aunqueen este caso no pueden acceder directamente a la memoria superior alprimer Mb. Una de las principales ventajas de disponer de memoriaextendida en un PC trabajando en modo real es su uso como un discovirtual en la memoria RAM (tambien llamado RAM-drive).

Dado que el acceso a la memoria es mucho mas rapido que a undisco duro, el uso de un disco RAM disminuira el tiempo que tarde

8Utilizando la mayor anchura del bus de direcciones.

204 Apendice A. Introduccion al DOS

Pagina de memoria EMM

Memoria Convencional

XXXXXXXXXXXXXXXXXX

1024 Kb

640 Kb

0 Kb

Memoria expandida

Figura A.4.

un programa en cargar los trozos de codigo necesarios para su correctofuncionamiento, pues la referencia a archivos contenidos en un discoRAM es la misma que si estuvieran en un disco duro. La desventajadel uso de un disco RAM es que, a diferencia de un disco duro o undisco flexible, la informacion escrita en un disco RAM es volatil (solopermanece mientras el computador este funcionando).

Apendice B

Introduccion a UNIX

El sistema operativo unix fue disenado como un sistema de tiempocompartido con una interfaz de usuario (shell) simple y manejable, dela que existen distintas versiones.

Se trata de un sistema pensado inicialmente para equipos pequenos,por lo que los algoritmos fueron seleccionados por su simplicidad y nopor su eficacia o rapidez.

Las ventajas que presenta unix sobre otros sistemas de gran difusionse basan en que el software desarrollado sobre unix es facilmente trans-portable entre maquinas de distintos fabricantes, pues no necesita unhardware determinado y puede correr sobre procesadores de distinta fi-losofıa.

No obstante lo anterior, los sistemas grandes hasta hace poco hanpreferido usar un sistema propietario a uno abierto, aunque la tendenciaactual apunta hacia la adopcion generalizada de este sistema por partede todos los grandes fabricantes.

B.1 Breve descripcion tecnica

Considerando el sistema operativo como la capa de software situadadirectamente sobre el hardware, dentro de el podemos distinguir a suvez dos subcapas:

206 Apendice B. Introduccion a UNIX

• La parte mas proxima al hardware es lo que se denomina nucleo(en ingles kernel). En el es donde se encuentran los programasque controlan la gestion de archivos, la gestion de memoria y laplanificacion del uso de la UCP.

• La parte mas proxima al usuario, un intermediario llamado inter-prete de comandos o shell. El hecho de que sea el shell el interpreteentre el usuario y el sistema tiene ventajas bastante interesantesque se detallaran mas adelante.

Una caracterıstica importante de unix es que todo se considera como unarchivo (desde los ficheros de datos hasta los perifericos y las unidadesde disco flexible). Un archivo para unix no es mas que una secuencia debytes sobre la que el sistema no impone estructura alguna, ni asigna sig-nificado a su contenido; el significado de los bytes depende unicamentede los programas que interpretan el archivo. Esta filosofıa permite quehasta los distintos dispositivos hardware tengan un sitio dentro del sis-tema de archivos.

El sistema de archivos esta organizado en estructura de arbol1, y per-mite nombrar archivos usando rutas absolutas, que parten del directorioraız, y rutas relativas, que son las que parten del directorio actual.

Es precisamente en la gestion de procesos donde mejor se puede apre-ciar la potencia de unix, pues aparecen los mecanismos que permiten quevarios procesos trabajen sobre la maquina simultaneamente optimizandoası el uso de la UCP.

Unix emplea un sistema muy simple para crear y manipular procesos.Estos se representan mediante bloques de control, y la informacion queexiste en ellos se utiliza para la planificacion de la UCP.

El planificador de la UCP esta disenado para facilitar el procesa-miento multitarea asignando fracciones de tiempo a los procesos me-diante el algoritmo round-robin: cada proceso tiene una prioridad aso-ciada, de forma que cuanto mas alto es el numero asignado, menor es

1dos tomo esta caracterıstica del sistema unix.

B.2. Una sesion con UNIX 207

la prioridad, y cuanto mas tiempo de la UCP ha consumido un proceso,menor se hace su prioridad.

No todos los sistemas unix utilizan el mismo mecanismo para lagestion de la memoria. Los primeros sistemas utilizaban exclusivamenteel mecanismo de swapping : un proceso se retira tanto mas facilmentecuanto mas tiempo lleve ocioso o haya estado en la memoria principal.

Otros sistemas utilizan la paginacion (vease el apartado 4.2.6) paraeliminar la fragmentacion externa, existiendo sistemas que utilizan elprocedimiento de paginacion por demanda (en ingles demand-paging).

B.2 Una sesion con UNIX

Puesto que unix es un sistema multiusuario, lo que debemos hacerantes de iniciar una sesion de trabajo es presentarnos al sistema. Alarrancar el computador, o al efectuar una conexion remota, unix pediranuestro nombre de usuario del siguiente modo:

login:

el usuario debe responder con el nombre de usuario que le ha sido asig-nado por el administrador del sistema. Tras introducir el nombre deusuario, supongamos que es popeye, el sistema pedira nuestra clave deacceso:

login:popeyepassword:

Como es logico, el sistema no nos permitira acceder a menos quese introduzcan un nombre de usuario y su clave de acceso correctos(debe tenerse en cuenta que unix distingue entre letras mayusculas yminusculas) que el administrador debe habernos proporcionado. En laprimera conexion al sistema, lo primero que debemos hacer es cambiar laclave de acceso de modo que nadie mas la conozca (esto se hace medianteel comando passwd).

Si todo ha ido bien, el sistema aceptara la peticion de entrada, nos co-locara en nuestro directorio de trabajo y en pantalla aparecera el promptdel sistema, que en el shell sh generalmente es $.

208 Apendice B. Introduccion a UNIX

Un servicio importante que ofrece todo sistema unix es el de ayudainteractiva, llamada tambien ayuda en lınea2. El comando man hace unallamada al manual, y puede ser usado para obtener informacion acercade un comando, su sintaxis y sus posibles opciones (flags), su semanticae incluso de sus bugs o situaciones en las que dicho comando no realizasu labor correctamente. Por ejemplo,

$man passwd

da completa informacion acerca del comando passwd, recuerdese que $es el prompt del sistema, y no hay que teclearlo.

En un sistema multiusuario, uno puede estar interesado por saber quepersonas estan trabajando simultaneamente en el sistema. Esto se puedesaber, y se dispone de dos comandos para ello: who y finger: la ordenwho proporciona los nombres de usuario de todas aquellas personas quese encuentran conectadas al sistema, mientras que finger proporcionainformacion mas detallada acerca de ellas.

Una vez que sepamos quienes estan conectados al sistema, podemosestablecer contacto directo con ellos mediante los comandos write otalk, e incluso evitar ser molestados con mensajes de otros usuarios des-activando nuestra capacidad para recibir mensajes mediante mesg -n.

Al terminar una sesion de trabajo se debe cerrar la conexion con elsistema mediante exit o logout para impedir que alguien no autorizadopueda acceder al sistema. Sobre el asunto de la seguridad de los archivosse tratara en la siguiente seccion.

B.3 Gestion de archivos

Este apartado resultara bastante facil a aquellos usuarios que estenfamiliarizados con dos, ya que muchas de las caracterısticas del sistemade archivos de unix fueron adoptadas por dos.

2En ingles, on line.

B.3. Gestion de archivos 209

B.3.1 Identificadores

El nombre de un archivo puede ser casi cualquier secuencia de ca-racteres, aunque dos nombres se consideran el mismo si coinciden susprimeros catorce caracteres. Esta permitido usar cualquier caracter AS-CII en el nombre de un archivo salvo “/”, que sirve para indicar elcamino (absoluto o relativo) del nombre de un archivo; sin embargo, esmejor no complicarse la vida y usar solo caracteres alfanumericos.

Del mismo modo que en dos, se puede hacer uso de caracteres co-modın para referirse a un conjunto de archivos cuyo nombre verificacierto patron; esta labor la realiza el shell, y se detallara mas ade-lante. Por ultimo, no se debe olvidar que unix distingue entre letrasmayusculas y minusculas.

B.3.2 Tipos de archivos en UNIX

En unix podemos encontrar varios tipos de archivos: los archivosordinarios, los directorios, los vınculos, los vınculos simbolicos y los ar-chivos especiales. De los archivos ordinarios y de los directorios pocohay que anadir a lo dicho en 4.2.2, por lo cual solo incidiremos en losvınculos, simbolicos o no, y los archivos especiales.

Vınculos.- Un vınculo (en ingles link) no es mas que otro nombre paraun archivo. Esto tiene interes, ademas del evidente ahorro de espa-cio de almacenamiento, en aquellas situaciones en las que mas deuna persona esta trabajando sobre un mismo archivo, por ejemploun capıtulo de un libro, cada autor puede tener en su directorio detrabajo un archivo (llamado por ellos respectivamente cap1.tex,introduc.tex, ConceptosGenerales.tex, . . . ) que “apunte” almismo archivo en el disco.

Vınculos simbolicos.- Este tipo de archivos solo contiene el nombrede otro archivo, que es el que se utiliza cuando el sistema operativotrabaja sobre el vınculo simbolico. Una aplicacion bastante util delos vınculos simbolicos, que tambien aclarara su funcion, aparececuando el administrador realiza una modificacion importante en laestructura de directorios; hasta que todos los usuarios se adapten

210 Apendice B. Introduccion a UNIX

a la nueva ordenacion, los vınculos simbolicos guiaran por la nuevaestructura de arbol a los usuarios que aun no esten al tanto de laactualizacion.

Archivos especiales.- Los archivos especiales representan dispositivosfısicos tales como terminales, impresoras, unidades de disco ex-terno, unidades de cinta magnetica o lectores de discos compactos.Esta forma de manejar el hardware permite trabajar al margen delas particularidades de los dispositivos fısicos.

B.3.3 Permisos asociados con un archivo

Cada archivo de unix tiene una serie de permisos asociados con el.Estos permisos otorgan la posibilidad de que el archivo pueda ser leıdo,modificado o ejecutado, tanto por el propietario del archivo como porotros usuarios.

Los permisos asociados con un archivo pueden revisarse con la opcion-l del comando ls:, que da un listado de todos los archivos del directorioactual junto con informacion adicional, como se muestra a continuacion:

$ls -l

-rw-r----- 12 popeye 79850 Sep 18 20:50 ./tema1-rw-r----- 11 popeye 76414 Sep 28 12:01 ./tema2drw-r----- 1 popeye 1024 Sep 1 19:32 ./fig

Los permisos asociados a cada archivo aparecen codificados en laforma de una lista de caracteres:

1. El primer caracter indica el tipo de archivo: el signo - indica quese trata de un archivo ordinario, mientras que d indica que setrata de un directorio, los vınculos tienen una l y los archivosespeciales tienen una b o una c, segun se trate de dispositivos dealmacenamiento por bloques o por caracteres.

2. Los siguientes tres caracteres, rw-, representan los permisos deldueno del archivo: r indica permiso de lectura, w permiso de escri-tura y - indica que el archivo no es ejecutable; si lo fuera aparecerıauna x en esa posicion.

B.3. Gestion de archivos 211

3. Los tres caracteres siguientes indican los permisos de los usua-rios del grupo del dueno del archivo, y los tres ultimos indicanlos permisos para otros usuarios, respectivamente. En el caso delos archivos relacionados mas arriba se observa que los componen-tes del grupo solo tienen permiso de lectura, no de escritura; losotros usuarios no pueden acceder a estos archivos, ni siquiera paraleerlos.

En relacion con los permisos de archivos se introduce el comando chmod,que sirve para cambiar los permisos asociados con un archivo. La sintaxisde este comando es la siguiente

$chmod nmk archivo

donde n, m y k son numeros del 0 al 7, que indican los permisos deldueno, de su grupo y de otros, respectivamente. Cada dıgito octal (puesvarıa entre 0 y 7) se determina sumando 4 para activar el permiso delectura, sumando 2 para activar el permiso de escritura y sumando 1para el permiso de ejecucion; ası pues, para asignar al archivo pruebalos permisos -rwxrw-r-- tendrıamos que escribir

$chmod 764 prueba

Naturalmente, los permisos solo puede cambiarlos el propietario delarchivo (y el administrador del sistema). Ası por ejemplo, si “presta-semos” alguno de nuestros archivos a otro usuario, este no podrıa cam-biar sus permisos. Para que pudiera hacerlo, se deberıa cambiar la pro-piedad del archivo; por ejemplo, si el usuario popeye quiere ceder lapropiedad del archivo espinacas al usuario cocoliso debera hacer usodel comando chown (del ingles CHange OWNer):

$chown cocoliso espinacas

B.3.4 Ordenes para la gestion de archivos

Debido a que el uso principal de unix es manejar archivos, exis-ten muchos comandos para manejarlos. Los nombres de los comandossuelen ser bastante similares a los de dos y generalmente consisten enabreviaturas de su funcion. A continuacion se presentan algunos de los

212 Apendice B. Introduccion a UNIX

mas comunmente utilizados; la mayor parte de ellos tienen opciones, quepueden verse usando man:

• Los comandos mas frecuentes para el manejo de directorios son:

– cd (Change Directory) sirve para cambiar el directorio actual.– pwd (Print Work Directory), que proporciona el path del di-

rectorio actual.– mkdir (del ingles MaKe DIRectory), para crear un subdirec-

torio en el directorio actual.– rmdir (ReMove DIRectory), para borrar un subdirectorio del

directorio actual.

• Los comandos principales para el manejo de archivos son:

– cat para conCATenar archivos en pantalla, esto es, mostraren la pantalla uno o varios archivos sucesivamente.

– cp para CoPiar un archivo.– find para encontrar (en ingles find) un archivo dentro del

arbol de directorios mediante su nombre o por alguna otracaracterıstica.

– ln para establecer un vınculo (en ingles LiNk) o un vınculosimbolico.

– ls para LiStar todos los archivos de un directorio.– more para listar el contenido de un archivo pantalla por pan-

talla.– mv para trasladar (“MoVer” en sentido fısico) un archivo de

un directorio a otro, o bien renombrar un archivo.– rm para eliminar (en ingles ReMove) un archivo del sistema

de directorios.

B.4 El shell de UNIX

El shell, como intermediario entre el usuario y el nucleo del sistema,es el programa que durante mas tiempo se estara usando durante una

B.4. El shell de UNIX 213

sesion de trabajo con unix. En esta seccion se hace una breve intro-duccion a las caracterısticas principales del (los) shell de unix.

Existen distintas versiones de shell, cada una de ellas con sus propiasparticularidades; en esta seccion solo se presentara sucintamente el shellsh del Sistema V. Otros shell, como el shell C (csh) y el shell Korn ksh,tienen las mismas caracterısticas basicas que sh y proporcionan algunasutilidades adicionales.

Cada vez que se lanza sh se ejecuta el archivo .profile (el nombrecomienza con un punto) que hace las veces del archivo autoexec.bat dedos. Este archivo se utiliza para la personalizacion del entorno de tra-bajo: la definicion de la variable PATH, fijar el tipo de terminal, cambiarel prompt por defecto, . . .

B.4.1 Encauzamiento de la entrada y salida

Una primera utilidad del shell es la posibilidad de redireccionamientode entrada/salida. Los operadores de redireccion son los mismos que losde dos: la salida se gestiona con > o con >> y la entrada se indica con <.Asimismo, es posible la concatenacion de programas, enviando la salidade uno a la entrada del siguiente mediante el sımbolo |. La idea, queconsiste en hacer que la salida de un comando sea la entrada de otro sinnecesidad de utilizar archivos temporales, ya debe ser conocida por losusuarios de dos.

B.4.2 Caracteres comodın

Otra importante utilidad que podemos obtener de un shell es el usode caracteres comodın. El shell permite el uso de caracteres comodın detres tipos: *, ? y [...].

El signo de interrogacion identifica a cualquier caracter, del mismomodo que en dos; sin embargo, el asterisco es interpretado de formadistinta, como muestra el siguiente ejemplo:

$ls cap*tex

214 Apendice B. Introduccion a UNIX

que hace un listado de todos los archivos del directorio actual cuyo nom-bre comience por cap y termine por tex.3 El nucleo no “ve” el asterisco,“*”, ya que este es interpretado por el shell enviando al nucleo los ar-chivos que satisfacen el patron especificado.

El ultimo tipo de caracter comodın permite indicar un rango de ca-racteres para confrontar con un caracter del nombre de un archivo, porejemplo la orden

$cat cap[1-4].tex > parte1.tex

concatena los archivos cap1.tex, cap2.tex, cap3.tex y cap4.tex poni-endolos en el archivo parte1.tex. Entre los corchetes se pueden espe-cificar rangos tanto numericos como alfabeticos.

B.4.3 Guiones de shell

Las caracterısticas de un shell permiten considerarlo como un len-guaje de programacion, en el sentido de que es posible agrupar comandosque realizan tareas sencillas, definiendo ası tareas mas complejas. Esto seconsigue mediante los llamados guiones de shell (en ingles shell scripts),que son la contrapartida unix de los archivos de extension .bat de dos.

B.5 UNIX como sistema multitarea

Como sistema multitarea unix proporciona herramientas para poderejecutar varios programas simultaneamente; el shell permite, de formafacil, controlar la ejecucion de los distintos procesos mediante la in-troduccion del concepto de ejecucion en modo subordinado (en inglesbackground).

Cuando se ha de ejecutar un comando que va a durar mucho tiempo,como por ejemplo la busqueda de un archivo determinado por toda laestructura de directorios, es conveniente ponerlo en modo subordinado,de modo que no haya que esperar a que termine para poder seguir traba-jando con el shell. El sımbolo & al final de una lınea de comandos ejecutalos procesos en modo subordinado. Por ejemplo la lınea de comandos

3Notese la diferencia con dos.

B.5. UNIX como sistema multitarea 215

$find . -name perdido -print> hallado &

[1] 1326$

se ejecuta en modo subordinado buscando recursivamente en el direc-torio actual y sus subdirectorios (esto esta indicado por el punto) elarchivo perdido y, si lo encuentra, imprime su path absoluto en el ar-chivo hallado.

Una vez que se ha creado un proceso en modo subordinado, el sistemaimprime dos numeros y presenta el prompt a la espera de nuevas ordenes.El numero entre corchetes es el identificador del trabajo y el otro numeroes el identificador del proceso.

El comando jobs visualiza todos los trabajos, junto con su identi-ficador, que se estan ejecutando en el shell actual. El identificador detrabajo se usa como argumento de comandos que permiten terminar untrabajo subordinado (kill); suspenderlo sin terminar (stop); reanudaren modo subordinado un trabajo suspendido (bg); y pasar un trabajode modo subordinado a modo principal (fg). Por ejemplo

$stop %1

suspende el trabajo con el identificador [1], y

$fg %1

reanuda el trabajo en modo principal. (Notese que se usa el signo %antes de introducir el identificador de trabajo.)

Para la gestion eficiente del sistema, podemos modificar la priori-dad con la que se ejecutan los procesos haciendo uso de los siguientescomandos:

at hora orden indica al sistema a que hora se debera ejecutar la orden.

nice orden ejecuta la orden recibida con una prioridad menor de lonormal. Esto es util para ejecutar procesos que consumen grancantidad de recursos y no corren prisa.

216 Apendice B. Introduccion a UNIX

nohup orden ejecuta la orden recibida aunque el usuario se desconectedel sistema durante la ejecucion. Util para ejecutar procesos queconsumen gran cantidad de tiempo.

B.6 Conclusion

Con todo lo anterior, lo mas importante es comprender que, en gene-ral, cuando se emplea la palabra unix no se hace una simple referencia alnucleo del sistema operativo ni siquiera en sentido amplio, sino al nucleodel sistema junto con programas de aplicaciones destinados a crear unentorno de uso general.

Lo mas importante de esta riqueza adicional puede resumirse en laposibilidad de que varios usuarios usen el computador al mismo tiempo(cosa que no puede hacerse en un pc bajo dos) y en la posibilidad deque un usuario haga varias cosas a la vez senalando las prioridades quese desea; esto es, se trata de un sistema multitarea.

B.7 Prontuario de comandos UNIX

• Gestion de archivos y directorios.

cat archivo

Concatena y muestra en la pantalla los archivos indicados.

cd path

Cambia el directorio actual.

chmod nmk archivo

Cambia los permisos (nmk) del archivo.

chown usuario archivo

Cede a usuario la propiedad del archivo.

compress archivo

Comprime el archivo.

B.7. Prontuario de comandos UNIX 217

cp (archivo archivo | archivo directorio)Realiza una copia del primer archivo bajo el nombre del se-gundo o copia el archivo en el directorio especificado.

ln archivo archivo

Crea un vınculo entre los archivos dados.

lp archivo

Imprime el archivo en papel.

ls directorio

Lista el contenido de un directorio.

mkdir directorio

Crea un subdirectorio en el directorio actual.

more archivo

Imprime el archivo especificado pantalla por pantalla.

mv (archivo archivo | archivo directorio)Renombra el primer archivo con el nombre del segundo omueve un archivo a un directorio.

pwd

Muestra el nombre del directorio actual.

rm archivo

Elimina un archivo.

rmdir directorio

Elimina un directorio.

uncompress archivo

Descomprime el archivo.

zcat archivo

Muestra en pantalla la version descomprimida del archivodado manteniendolo comprimido.

• Comunicacion con otros usuarios.

mail

Gestion del correo electronico.

218 Apendice B. Introduccion a UNIX

mesg [-y | -n]Activa o desactiva la recepcion de mensajes.

talk usuario

Establece una conexion con otro usuario para intercambiarmensajes entre terminales.

wall mensaje

Envıa ese mensaje a todos los usuarios del sistema.

write usuario

Establece una conexion con otro usuario para intercambiarmensajes.

• Utilidades.

cal [mes][ano]

Imprime la hoja del calendario del mes y ano indicado.

date [fecha y hora]Imprime la fecha y hora actuales o especifica la nueva hora yfecha.

finger

Muestra informacion detallada acerca de los usuarios conec-tados al sistema.

who

Muestra los nombres de presentacion de los usuarios conecta-dos al sistema.

• Ayuda.

man comando

Imprime en la pantalla la pagina del manual relativa al co-mando dado como argumento.

• Gestion de informacion.

awk

Orden para la busqueda y procesado de patrones.

B.7. Prontuario de comandos UNIX 219

cmp archivo archivo

Compara los archivos y muestra la primera diferencia.

comm [opciones] archivo archivo

Muestra lıneas comunes o diferentes de los archivos dados.

diff archivo archivo

Muestra los cambios necesarios para igualar los dos archivosdados.

echo cadena

Escribe sobre la pantalla la cadena especificada.

find [opciones] [caracterıstica de archivo]Encuentra un archivo a partir de una de sus caracterısticasdentro de un camino especificado.

grep,egrep,fgrep expresion archivo

Busca apariciones de una expresion dentro de un archivo.

sort [opciones] archivos

Ordena el contenido de uno o varios archivos, lınea por lınea.

tail archivo

Visualiza en pantalla el final de un archivo.

uniq entrada salida

Filtra las lıneas repetidas del archivo de entrada y las escribeen el de salida.

wc archivo

Cuenta lıneas, palabras y caracteres de un archivo.

• Gestion de trabajos y procesos.

at hora orden

Indica al sistema la hora en la que se deberan procesar lassiguientes ordenes.

bg identificador

Pasa el trabajo indicado a modo subordinado. Su nombreviene del ingles background.

220 Apendice B. Introduccion a UNIX

fg identificador

Pasa el trabajo indicado a modo principal. Su nombre vienedel ingles foreground.

jobs

Muestra el estado de los trabajos subordinados.

kill identificador

Termina el trabajo indicado.

nice comando

Ejecuta un comando con prioridad menor de la normal.

nohup comando

Ejecuta un comando, incluso si despues se suspende la sesion.

ps

Muestra el estado de los procesos actuales.

stop identificador

Suspende el trabajo indicado.

tee archivo

Copia la entrada estandar a la salida estandar, ademas de alarchivo.

time comando

Informa acerca del uso de la UCP durante la ejecucion de uncomando.

• Procesamiento de textos.

ed

Editor de archivos.

nroff, troff

Procesadores de formateo de texto.

sed

Editor en flujo.

vi

Editor de pantalla.

B.8. Diferencias entre DOS y UNIX 221

Funcion Comando dos Comando unix

Muestra la fecha DATE date

Muestra la hora TIME date

Muestra el contenido de undirectorio

DIR ls

Muestra el directorio actual CD pwd

Cambia el directorio actual CD path cd path

Crea un nuevo directorio MD, MKDIR dir mkdir dir

Suprime un directorio RD, RMDIR dir rmdir, rm -r dir

Muestra un archivo pagina apagina

MORE more

Copia un archivo COPY cp

Elimina un archivo DEL rm

Compara dos archivos COMP, FC diff, cmp

Renombrar un archivo REN(AME) mv

Mover un archivo mv

Figura B.1. Comandos basicos de dos y unix.

B.8 Diferencias entre DOS y UNIX

Aunque dos esta disenado para sistemas PC monousuario, muchasde sus caracterısticas estan fuertemente influidas por el sistema unix. Enparticular, dos se parece a unix en el diseno de su sistema de archivos,interprete de comandos y en algunas de las ordenes de manipulacion dearchivos. Debido a esto, un usuario familiarizado con las ordenes de dosno tendra demasiados problemas para comenzar a manejar un sistemaunix, o viceversa.

La mayor parte de los comandos usuales de dos tienen su contrapar-tida unix, e incluso tienen nombres muy similares, por ejemplo mkdiresta presente en ambos sistemas; la tabla de la figura B.1 muestra laequivalencia entre la mayorıa de los comandos mas usuales de dos yunix.

Dejando a un lado las caracterısticas multitarea y multiusuario de

222 Apendice B. Introduccion a UNIX

unix, las diferencias mas importantes entre dos y unix para la lınea decomandos y la gestion de archivos se enumeran a continuacion:

1. Distincion entre mayusculas y minusculas: unix es sensible a lasdiferencias entre letras mayusculas y minusculas, mientras que dosno lo es.

2. Diagonal y diagonal inversa: dos usa la diagonal inversa \ paralos paths, por ejemplo en \juegos\tetris, mientras que unix usala diagonal /, el path anterior se escribirıa /juegos/tetris.

3. Nombres de archivos: en dos los nombres de archivos estan limi-tados a ocho caracteres alfanumericos, seguidos opcionalmente deun punto y una extension de tres letras; en unix los nombres dearchivos pueden contener hasta catorce caracteres, pueden incluiruno o mas puntos que no se tratan especialmente salvo cuando esel primer caracter del nombre.

4. Sımbolos comodın: ambos sistemas permiten el uso de * o ? paraespecificar conjuntos de nombres de archivos, aunque dos es algomas rıgido con *, que solo se interpreta al final del nombre o laextension de una plantilla. Unix dispone ademas de una notacionespecial para indicar un rango de caracteres: ası pues, cap[1-3]indicara los archivos cap1, cap2 y cap3.

Bibliografıa

[ACM91] ACM/IEEE. Computing curricula. Communications of theACM, 34(6):69–84, 1991.

[Bai90] R. Bailey. Functional Programming with Hope. Ellis HorwoodLtd, 1990.

[Ber86] J. Bernstein. La maquina analıtica. Editorial Labor. Barce-lona, 1986.

[Bis91] P. Bishop. Conceptos de Informatica. Anaya, 1991.

[BW88] R. Bird y P. Wadler. Introduction to Functional Program-ming. Prentice Hall International (UK) Ltd, 1988.

[Bye90] R. A. Byers. Introduccion a las bases de datos con dBASEIIIplus. McGraw-Hill, 1990.

[CM87] W. F. Clocksin y C. S. Mellish. Programacion en Prolog.Gustavo Gili, S. A., 1987.

[Com87] Computacion avanzada y perspectivas de futuro. PrensaCientıfica, S.A. Barcelona, Dic. 1987. Numero especial deInvestigacion y Ciencia, dedicado a este tema.

[Dat93] C. J. Date. An Introduction to Database System. Volume 1,Addison-Wesley, 1993.

[DCG*89] P. Denning, D. E. Comer, D. Gries, M. C. Mulder, A. B. Tuc-ker, A. J. Turner y P.R. Young. Computing as a discipline.Communications of the ACM, 32(1):9–23, 1989.

224 Bibliografıa

[DDH72] O. J. Dahl, E. W. Dijkstra y C. A. R. Hoare. StructuredProgramming. Academic Press Ltd., 1972.

[Dei93] H. M. Deitel. Sistemas operativos. Addison Wesley iberoa-mericana, 1993.

[Dew88] A. K. Dewdney. De la creacion y ruptura de claves: primeraparte. Investigacion y Ciencia, 147:136–141, 1988.

[Dew89] A. K. Dewdney. Creacion y ruptura de claves: segunda parte.Investigacion y Ciencia, 148:95–99, 1989.

[FM87] G. C. Fox y P. C. Messina. Arquitecturas avanzadas de com-putadores. Investigacion y Ciencia, 135:24–33, 1987.

[For70] G. E. Forsyte. Pitfalls in Computation, or why a math bookisn’t enough. Technical Report, Computer Science Depart-ment, Stanford University, 1970.

[FSV87] G. Fernandez y F. Saez Vacas. Fundamentos de Informatia.Alianza Editorial. Madrid, 1987.

[GGSV93] J. Galve, J. C. Gonzalez, A. Sanchez y J. A. Velazquez. Al-gorıtmica. Diseno y analisis de algoritmos funcionales e im-perativos. ra-ma, 1993.

[GL86] L. Goldschlager y A. Lister. Introduccion moderna a la Cien-cia de la Computacion con un enfoque algorıtmico. Prentice-Hall hispanoamericana. S.A. Mejico, 1986.

[Gol91] D. Goldberg. What every computer scientist should knowabout floating-point arithmetic. ACM Computing Surveys,23(1):5–48, 1991.

[Gro86] P. Grogono. Programacion en Pascal. Addison Wesley Ibe-roamericana, 1986.

[HH89] C. J. Hursch y J. L. Hursch. SQL. El lenguaje de consultaestructurado. ra-ma, 1989.

Bibliografıa 225

[Jam90] K. Jamsa. DOS. Manual de referencia. McGraw-Hill, 1990.

[JM90] B. Jacomy y J. Marguin. De la machine a calculer de Pascal al’ ordinateur. Musee National des Techniques, CNAM. Paris,1990.

[KM86] U. W. Kulisch y W. L. Miranker. The arithmetic of the digitalcomputer: a new approach. SIAM Review, 24(1):671–677,1986.

[Knu72] D. E. Knuth. Ancient babylonian algorithms. Communica-tions of the ACM, 15(7), 1972.

[KP87] B.W. Kernighan y R. Pike. El entorno de programacion unix.Prentice Hall Hispanoamericana, 1987.

[KS93] H. F. Korth y A. Silberschatz. Fundamentos de bases dedatos. McGraw-Hill, 1993.

[La 91] La revolucion informatica. Prensa Cientıfica, S.A. Barcelona,Nov. 1991. Numero especial de Investigacion y Ciencia, de-dicado a la teleinformatica.

[Lis86] A. M. Lister. Fundamentos de los sistemas operativos. Ed.Gustavo Gili, 1986.

[MA85] B. Mendizabal Allende. Diccionario Oxford de Informatica.Dıaz de Santos, S.A., 1985.

[Mac88] A. R. Mackintosh. El computador del Dr. Atanasoff. Inves-tigacion y Ciencia, 145:86–93, 1988.

[Mei73] J. P. Meinadier. Estructura y funcionamiento de los compu-tadores digitales. Editorial AC, 1973.

[Mil89] M. Milenkovic. Sistemas operativos: conceptos y diseno.McGraw-Hill, 1989.

[MP93] A. de Miguel y M. Piattini. Concepcion y diseno de bases dedatos: del modelo E/R al modelo relacional. ra-ma, 1993.

226 Bibliografıa

[MW83] A. Mayne y M. Wood. Introduccion a las bases de datosrelacionales. Dıaz de Santos, 1983.

[MW84] C. L. Morgan y M. Waite. Introduccion al microprocesador8086/8088 (16 bits). McGraw-Hill, 1984.

[Pas86] G. A. Pascoe. Elements of object-oriented programming.BYTE, 11(8):139–144, 1986.

[PLT89] A. Prieto, A. Lloris y J. Torres. Introduccion a la Informatica.McGraw-Hill, 1989.

[PS91] J. L. Peterson y A. Silberschapz. Sistemas operativos: con-ceptos fundamentales. Ed. Reverte, 1991.

[RRF91] K.H. Rosen, R.R. Rosinski y J.M. Farber. UNIX Sistema Vversion 4. Mc Graw Hill, 1991.

[Rum83] S. M. Rump. How reliable are results of computers? Techni-cal Report, Jarbuch berblicke Mathematik, 1983. Bibliogra-phisches. Institut Mannheim, 1983.

[SH90] C. M. Stone y D. Hentchel. Database wars revisited. BYTE,15(10):233–244, 1990.

[Sim85] G. L. Simmons. Los ordenadores de la quinta generacion.Dıaz de Santos. Madrid, 1985.

[SS86] L. Sterling y E. Shapiro. The art of Prolog. MIT Press, 1986.

[Stu75] Study Group on Data Base Management Systems. Intern re-port. ACM, 1975.

[Swa93] D. D. Swade. La computadora mecanica de Charles Babbage.Investigacion y Ciencia, 199:66–71, 1993.

[Tes84] L. G. Tesler. Lenguajes de programacion. Investigacion yCiencia, 98:36–45, 1984.

[Tho89] D. Thomas. What’s an object? BYTE, 14(3):231–240, 1989.

Bibliografıa 227

[Tur92] Turbo Pascal User Guide. Borland International Inc., 1992.

[VJ85] A. Vaquero y L. Joyanes. Informatica. Glosario de terminosy siglas. McGraw-Hill, 1985.

[Weg89] P. Wegner. Learning the language. BYTE, 14(3):245–253,1989.

[Wir86a] N. Wirth. Algoritmos + Estructuras de datos = Programas.Ediciones del Castillo. Madrid, 1986.

[Wir86b] N. Wirth. Introduccion a la programacion sistematica. ElAteneo, 1986.

Indice alfabetico

accesodirecto, 73, 107secuencial, 73, 107

accionessemanticas, 142

acumulador, 78algebra relacional, 161algoritmo, 18, 22, 23

de Euclides, 27analisis

lexico, 142sintactico, 142

archivo, 106, 151de ındices, 163del DOS, 182en UNIX

directorios, 209ordinarios, 209vınculo, 209vınculo especial, 210vınculo simbolico, 209

arquitecturabasada en el MIMD, 97de flujo de datos, 97de reduccion, 97dirigida por la demanda, 97hıbrido SIMD-MIMD, 97

MIMD, 96memoria compartida, 96memoria distribuida, 97

SIMD, 96sincronica, 96

ASCII, 46at, 215, 219atributos, 109, 201ATTRIB, 201AUTOEXEC.BAT, 196awk, 218ayuda

en lınea, 208interactiva, 208

background, 214backup, 73, 108base de datos, 20, 151, 152BASIC, 124BAT, 195batch, 195baudio, 72bg, 215, 219binaria

variable, 30BIOS, 195, 196bit, 30

Indice alfabetico 229

de paridad, 50bloqueo, 106BNF, notacion, 132BREAK, 194buffer, 106bus, 61, 63, 74

de control, 63, 75de datos, 63, 75de direcciones, 63, 75

byte, 30

C, 124C++, 131calculo relacional, 162codigo

autocorrector, 51autodetector, 51corrector, 50de Hamming, 51detector, 50dos entre tres, 51fuente, 144objeto, 144p de n, 51redundante, 49

computo, 24call, 218camino, 108, 189

absoluto, 108relativo, 108

campo, 151CASE, 164cat, 212, 216CD, 193cd, 212, 216CHDIR, 193

chmod, 211, 216chown, 216cinta magnetica, 73CLS, 190cmp, 219COBOL, 124, 126coma

fija, 39flotante, 40

comm, 219COMP, 192compactacion, 113comparticion, 113compilacion

en la memoria principal, 147en un disco, 147separada, 147

compilador, 144, 145complemento

a dos, 38autentico, 37

en base dos, 38restringido, 36

compress, 216computador, 18comunicacion

en paralelo, 75en serie, 75

concurrencia de procesos, 105CONFIG.SYS, 196conjunto de entidades, 155consola, 72contador de programa, 68contrasenas, 109copias de seguridad, 108

230 Indice alfabetico

coprocesador, 70COPY, 192cp, 212, 217

DATE, 194date, 218deadlock, 106debugger, 145DEL, 192demand-driven, arquitecturas, 97demand-paging, 207depuracion, 27

integrada, 147depurador, 145diagrama sintactico, 134diccionario de datos, 163diff, 219DIR, 191direccion

absoluta, 89de base, 89de memoria, 62efectiva, 89

direccionamiento, 77, 89directo, 89implıcito, 90indirecto, 90relativo, 90

directo, acceso, 73directorio, 107

de trabajo, 108, 184del DOS, 184raız, 107

discoduro, 73fijo, 73

flexible, 73, 74virtual, 203

diseno descendente, 24diskette, 74disquette, 74DOS, 181

EBNF, 134ECHO, 195echo, 219ed, 220editor, 145EEPROM, 65egrep, 219EMM, 202encapsulacion, en POO, 129encauzamiento, 198, 213enlazador, 145entidad, 155entorno de programacion, 144entropıa, 49EPROM, 65ERASE, 192error

de ejecucion, 27logico, 27sintactico, 27

escaner, 71estructura en arbol, 107exclusion mutua de procesos, 106exit, 208extension de identificador, 183

fg, 215, 220fgrep, 219FIND, 200

Indice alfabetico 231

find, 212, 219finger, 208, 218firmware, 196floppy, 74FOR, 195FORMAT, 190formato de un disco, 73FORTRAN, 124fragmentacion

externa, 112interna, 112

generacion de codigo, 143GOTO, 195grep, 219guiones de shell, 214

hardware, 18, 60herencia, en POO, 130hojas de calculo, 20

identificador, 182del DOS, 182en UNIX, 209

patron de, 209IEEE-754, 41IF, 195impresora, 72incertidumbre, 49indicador

del DOS, 194informatica, 17informacion, 49

analogica, 30digital, 30

Informix, 161

Ingres, 161instrucciones de maquina, 78interprete, 144interactivo, trabajo, 104interfaz de usuario, 111

de mandatos, 111grafico, 111

interrupcion, 94, 109de hardware, 94de software, 94

jobs, 215, 220

Kbyte, 31kernel, 109

de unix, 206kill, 215, 220kilobyte, 31

lapiz optico, 71lenguaje

de alto nivel, 26, 122, 123de bajo nivel, 25, 120de definicion de datos, 160de maquina, 25, 77, 120, 121de manipulacion de datos, 161de muy alto nivel, 123de programacion, 18, 119declarativo, 123ensamblador, 122relacional, 161simbolico, 121, 123transportable, 122

LIFO, 91linker, 1145ln, 212, 217

232 Indice alfabetico

login, 207logout, 208lote de procesos, 104lp, 217ls, 210, 212, 217

macroinstrucciones, 122mail, 217mainframe, 116man, 212, 218Mbyte, 31MD, 193megabyte, 31megaherzio, 68memoria, 61

auxiliar, 64cache, 66convencional en un PC, 202de solo lectura, 65expandida en un PC, 202extendida en un PC, 202, 203funcionamiento de la, 62gestion de la, 112principal, 62, 64secundaria, 64virtual, 66, 113

paginada, 114segmentada, 115

mensaje, en POO, 129mesg, 208, 218MHz, 68microcomputador, 116microinstruccion, 84minicomputador, 116Miranda, 126MKDIR, 193

mkdir, 212ML, 126modelo

E-R, 155en red, 158entidad-relacion, 155jerarquico, 158relacional, 158

modem, 72modo

protegido, 203real, 203subordinado, 214

Modula-2, 124modularidad, 115modulo, 147monitor, 71MORE, 200more, 212, 217multiprogramacion, 110multitarea, 214mv, 212, 217

nucleode UNIX, 206

nucleo de un s. o., 109nice, 215, 220nivel de una B. D.

conceptual, 155de vision, 155externo, 155fısico, 155interno, 155logico, 155

nohup, 216, 220

Indice alfabetico 233

objeto, en POO, 128octeto, 30optimizacion de codigo, 144Oracle, 161orden del DOS, 187

externa, 188interna, 188

overlay, 66

paginacion, 67, 114bajo demanda, 207

palabra de memoria, 31, 62pantalla, 71paquetes integrados, 21paradigmas de programacion, 124Pascal, 124passwd, 207PATH, 108, 194path, 213PAUSE, 195PC, 181

AT, 202XT, 201

perifericos, 70de almacenamiento, 73de entrada, 71de salida, 71locales, 71remotos, 71

permisos, 210pila, 91pista, 73planificacion, 110plotter, 72polimorfismo, en POO, 130POO, 128

PRINT, 193procesador, 24, 67

vectorial, 96procesadores de textos, 20procesamiento

en paralelo, 95secuencial, 95

proceso, 105por lotes, 104, 195

profile, 213programa

fuente, 26, 141, 144grafico, 20objeto, 26, 141, 144traductor, 26transportable, 121

programacion, 24declarativa, 124estructurada, 24funcional, 125imperativa, 124logica, 126modular, 24orientada a los objetos, 128

Prolog, 128PROM, 65PROMPT, 187, 194proteccion, 108, 201protocolos, 72ps, 220puerto

en paralelo, 75en serie, 75

pwd, 212, 217

RAM, 65

234 Indice alfabetico

RAM-drive, 203raton, 71RD, 63RD, 194red, 72

local, 72remota, 72

refinamiento por pasos, 24registro, 63, 151

acumulador, 69de direccion, 63de instruccion, 68de intercambio de mem., 63

reglas sintacticas, 119relacion, 155

muchos a muchos, 156uno a muchos, 156uno a uno, 156

REM, 195REN, 192RENAME, 192resta por complementacion, 34RIM, 63rm, 212, 217RMDIR, 194rmdir, 212, 217ROM, 65round-robin, 206

scheduling, 110sector, 73secuencial, acceso, 73sed, 220segmentacion, 67, 114, 115segmento, 115semantica, 119, 137

axiomatica, 140denotacional, 139operacional, 137

sensores, 71servidor de red, 72SGA, 152SGBD, 152shell, 206

de UNIX, 212csh, 213korn, 213ksh, 213sh, 213

scripts, 214signo-magnitud, 35sincronizacion de procesos, 106sintaxis, 131sistema operativo

transaccional, 104sist. de gestion de archivos, 152sist. de gestion de B. D., 152sistema de numeracion

binario, 33decimal, 31hexadecimal, 33octal, 33posicional, 31sexagesimal, 31

sistema operativo, 19, 101, 102abierto, 116de consulta de B. D., 104de control de procesos, 104de proposito general, 103dedicado, 103monousuario, 103

Indice alfabetico 235

multiusuario, 103propietario, 116

Smalltalk, 131software, 19, 60

de aplicaciones, 20solapamiento, 66SORT, 199sort, 219SQL, 161stop, 215, 220streamer, 73subordinado, modo, 214subprograma, 93subrutina, 93swapping, 207

tabla de seguimiento, 146tableta grafica, 71tail, 219talk, 218teclado, 71tee, 220TIME, 194time, 220tokens, 119, 142traductor, 141transmision

en paralelo, 75en serie, 75

traza de un programa, 146TREE, 193tubos, 198Turbo Pascal, 131TYPE, 192

UAL, 61

UC, 61, 67UCP, 61, 67unidad, 147unidad aritm. y logica, 61, 69unidad central de proceso, 61, 69unidad de control, 61, 67uniq, 219UNIX, 205

vınculo, 209especial, 210simbolico, 209

VER, 194VERIFY, 194vi, 220VLSI, 174

wall, 218wc, 219who, 208, 218write, 218

zcat, 217