Revista - Estructura de Datos Físicas y Lógicas

Page 1

REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACIÓN UNIVERSITARIA, CIENCIA Y TECNOLOGÍA INSTITUTO UNIVERSITARIO POLITÉCNICO “SANTIAGO MARIÑO” EXTENSIÓN MARACAY

ESTRUCTURAS DE DATOS FÍSICAS Y LÓGICAS Revista Digital

Autor: Alfonso A. Arias M. C.I.: 27.646.696 Asignatura: Sistemas Operativos I Docente de la asignatura: Prof. Merlin Ortega

Maracay, Agosto 2020


ESQUEMA


ESTRUCTURAS DE DATOS LOGICAS Y FISICAS

En forma general, en informática, la estructura lógica es el esqueleto

o

armazón

conceptual.

Está

constituido

por

abstracciones de la realidad para enfocarse en el ámbito conceptual sin entrar en detalles físicos (estos detalles son descritos en la estructura física).

Se

denomina

dato

cualquier

objeto

manipulable

por

el

ordenador. Un dato puede ser un carácter leído de un teclado, información

almacenada

en

un

disco,

un

número que se

encuentra en la memoria principal, entre otros.

Una Estructura de Datos es una colección de datos organizada de un modo particular y sobre la que se definen ciertas operaciones.

Sera

homogénea

cuando

todos

los

datos

elementales que la forman son del mismo tipo o heterogénea, en caso contrario.


Los tipos de datos más frecuentes utilizados en los diferentes lenguajes

de programación son los

datos

simples

(lógico,

carácter, entero, real) y los datos estructurados o compuestos. Los tipos de datos simples o primitivos no están compuestos de otras estructuras de datos; son los más frecuentes y utilizados por casi todos los lenguajes. Los tipos de datos compuestos se construyen a partir de otros tipos de datos; un ejemplo es la cadena de caracteres.

Las estructuras de datos Lógicas pueden ser de dos tipos: Estáticas: Son aquellas en las que el tamaño ocupado en memoria se define antes de que el programa se ejecute y no puede modificarse durante la ejecución del programa. Estas estructuras están implementadas en casi todos los lenguajes: registros, ficheros y tablas (o arrays).

Dinámicas: Son aquellas cuya ocupación en memora puede aumentar o disminuir en tiempo de ejecución. La elección del tipo de estructura de datos idónea a cada aplicación dependerá esencialmente del tipo de aplicación y en menor medida del lenguaje, ya que si no tiene implementada una estructura, deberá ser simulada con el algoritmo adecuado.

En

ocasiones

interesará

manejar

las

estructuras

como

elementos únicos, y otras nos interesará manejar los elementos


que componen los tipos de datos estructurados como elementos separados.

Clasificaciones de las agrupaciones de datos: 

Según cómo se ubiquen en la memoria del ordenador:

o

Agrupaciones contiguas/Agrupaciones enlazadas

➔ Las agrupaciones contiguas son aquellas que ocupan posiciones sucesivas o contiguas de bits en memoria. La posición de un elemento dentro de la agrupación se puede calcular sumando al comienzo de la agrupación una cantidad determinada. ➔ Las agrupaciones enlazadas son aquellas que tienen la información dispersa en la memoria, y la manera de acceder desde un elemento a otro es mediante la dirección en memoria dónde está el siguiente elemento.

Según los tipos de datos que contengan:

o

Agrupaciones homogéneas/Agrupaciones heterogéneas

➔ Las agrupaciones homogéneas son aquellas que guardan grupos de elementos iguales (todos los elementos guardados son enteros, reales). ➔

Las agrupaciones heterogéneas son las que agrupan

elementos (campos) de diferentes tipos.

Según si tienen un tamaño fijo de elementos o puede crecer:

o

Agrupaciones estáticas/Agrupaciones dinámicas


➔ Las agrupaciones estáticas son las que guardan un número predeterminado de elementos, que no puede ser modificado en el momento en que se ejecuta el programa. Hay que elegir el número cuando escribimos el programa, antes de compilarlo. ➔ Las agrupaciones dinámicas son aquellas que pueden ir modificando el número de elementos que contienen a medida que va siendo necesario guardar más información.

Estructuras Estáticas Simples:

Booleanos: El tipo de dato lógico o booleano es en computación aquel que puede representar valores de

lógica

binaria,

esto

es

2

valores,

que

normalmente representan falso o verdadero.1 Se utiliza normalmente en la programación, estadística, electrónica, matemáticas (Álgebra booleana), etc.

Para generar un dato o valor lógico a partir de otros tipos de datos, típicamente, se emplean los operadores relacionales (u operadores de relación), por ejemplo: 0 es igual a falso y 1 es igual a verdadero

(3>2)= 1 = verdadero

(7>9)= 0 = falso


Una vez se dispone de uno o varios datos de tipo booleano, estos se pueden combinar en expresiones lógicas mediante los operadores lógicos (Y, O, NO). Un ejemplo de este tipo de expresiones sería:

verdadero Y falso → falso

falso O verdadero → verdadero

NO verdadero → falso

Carácter: Un carácter es una unidad de información que corresponde aproximadamente con un grafema o con una unidad o símbolo parecido, como los de un alfabeto o silabario de la forma escrita de un lenguaje natural.

Un ejemplo de carácter es una letra, un número o un signo de puntuación. El concepto también abarca a los caracteres de control, que no se corresponden con símbolos del lenguaje


natural sino con otros fragmentos de información usados para procesar textos, tales como el retorno de carro y el tabulador, así como instrucciones para impresoras y otros dispositivos que muestran dichos textos (como el avance de página).

Los

ordenadores

y

los

equipos

de

comunicaciones

representan caracteres mediante el uso de una codificación que asigna un valor a cada carácter (típicamente, un valor entero representado

por

una

secuencia

de

bits)

que

puede ser

almacenado o transmitido por una red. La codificación más común ha sido hasta hace poco ASCII, si bien actualmente se está haciendo más popular el Unicode. Un ejemplo de codificación no digital sería el código Morse, que en lugar de usar bits representa los caracteres mediante una serie de impulsos eléctricos de longitud variable (puntos y rayas).

Enteros: Un tipo de dato entero en computación es un tipo de dato que puede representar un subconjunto finito de los números enteros. El número mayor que puede representar depende del espacio usado por el dato y la posibilidad (o no) de representar números negativos. Los tipos de dato entero disponibles y su tamaño dependen del lenguaje de programación usado así como la arquitectura en cuestión. Por ejemplo, si para almacenar un número entero disponemos de 4 bytes de memoria tememos que:

4 bytes = 4 × 8 = 32 bits


Con

32

bits

se

pueden

representar

232=4294967296

valores: 

Solo positivos (enteros sin signo): del 0 al 4294967295

Positivos y negativos (enteros con signo): del -2147483648

al 2147483647

Las típicas operaciones aritméticas: suma, resta, multiplicación y división se pueden realizar con datos de tipo entero. En el caso de la división, el resultado podría ser un valor real, en ese caso, si el resultado se ha de almacenar como entero la parte decimal del resultado deberá ser eliminada, en principio hay dos métodos para hacerlo: 

El redondeo: Aproximar el valor real al entero más cercano

(Ej: 3,8-->4 / 3,2-->3) 

El truncamiento: Eliminar del valor real la parte decimal (Ej:

3,8-->3 / 3,2-->3)


Real: El tipo de dato real es un tipo de dato en programas informáticos que representa la aproximación de un número real.

Al igual que los números enteros, el tipo real está limitado superior e inferiormente según la cantidad de memoria que haya disponible para almacenarlo. Otro elemento importante a tener en cuenta en este tipo de datos es la precisión con que se pueden representar números con decimales, cuantos decimales se pueden

representar.

Esta

característica

también

está

directamente relacionada con la cantidad de memoria disponible para almacenar un valor real.

Las típicas operaciones aritméticas: 

Suma

Resta

Multiplicación

División


Estructuras Estáticas Estructuradas:

String: En programación, una cadena de caracteres, palabras, ristra de caracteres o frase (string, en inglés) es una secuencia ordenada (de longitud arbitraria, aunque finita) de elementos que pertenecen a un cierto lenguaje formal o alfabeto análogas a una fórmula o a una oración. En general, una cadena de caracteres es una sucesión de caracteres (letras, números u otros signos o símbolos). Si no se ponen restricciones al alfabeto, una cadena podrá estar formada por cualquier combinación finita de los caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los números del '0' al '9', el espacio en blanco ' ', símbolos diversos '!', '@', '%', etcétera).

En este mismo ámbito, se utilizan habitualmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesión de caracteres. En este caso, se almacenan en un vector de datos, o matriz de datos de una sola fila (array, en inglés). Las cadenas se pueden almacenar de manera física: 

seguidas;


enlazados letra a letra.

Generalmente los caracteres se guardan uno a continuación de otro para fines de eficiencia en el acceso.

Al considerar las cadenas como un tipo de datos, hay que definir cuáles son las operaciones que es posible hacer con ellas. En principio, podrían ser muchas y llegar a ser muy sofisticadas. Las siguientes son algunas de ellas:

Asignación: Consiste en asignar una cadena a otra.

Concatenación: Consiste en unir dos cadenas o más (o una

cadena con un carácter) para formar una cadena de mayor tamaño. 

Búsqueda: Consiste en localizar dentro de una cadena una

subcadena más pequeña o un carácter. 

Extracción: Se trata de sacar fuera de una cadena una

porción de la misma según su posición dentro de ella. 

Comparación: Se utiliza para comparar dos cadenas.

Arreglo: Se le denomina vector, formación, matriz (en inglés array, del cual surge la mala traducción arreglo), a una zona de almacenamiento contiguo que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones).


En principio, se puede considerar que todas las matrices son de una dimensión, la dimensión principal, pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multidimensionales, aunque las más fáciles de imaginar son las de una, dos y tres dimensiones.

Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sería más adecuado utilizar una lista, ya que esta estructura puede cambiar de tamaño fácilmente durante la ejecución de un programa, siendo esta última una estructura dinámica (al no tener un tamaño definido). Todo vector se compone de un determinado número de elementos, lo cual lo hace que sea una estructura estática. Cada


elemento es referenciado por la posición que ocupa dentro del vector. Dichas posiciones son llamadas índice y siempre son correlativos. Existen tres formas de indexar los elementos de una matriz:

Indexación base-cero (0): en este modo el primer elemento

del vector será la componente cero ('0') del mismo, es decir, tendrá el índice '0'. En consecuencia, si el vector tiene 'n' componentes, el último elemento tendrá como índice el valor 'n-1'. El lenguaje C y el lenguaje Java son un ejemplo típico que utiliza este modo de indexación. 

Indexación base-uno (1): en esta forma de indexación, el

primer elemento de la matriz tiene el índice '1' y el último tiene el índice 'n' (para una matriz de 'n' componentes). Lua es un ejemplo de lenguaje que usa este tipo de indexación. 

Indexación

base-n

(n):

este

es

un

modo versátil

de

indexación en la que el índice del primer elemento puede ser elegido libremente, en algunos lenguajes de programación se permite que los índices puedan ser negativos e incluso de cualquier tipo escalar (también cadenas de caracteres).

Registro: Un registro, en programación, es un tipo de dato estructurado formado por la unión de varios elementos bajo una misma estructura. Estos elementos pueden ser, o bien datos elementales (entero, real, carácter,...), o bien otras estructuras de datos. A cada uno de esos elementos se le llama campo.


Un registro se diferencia de un vector en que éste es una colección de datos iguales, es decir, todos del mismo tipo, mientras que en una estructura los elementos que la componen, aunque podrían serlo, no tiene por qué ser del mismo tipo.

Archivo: Un archivo es un fichero (dato) almacenado en algún recurso

de

memoria,

generalmente

en

Disco

Duro,

pero

dependiendo del uso (en ciertos casos) son almacenados en RAM.


Un Fichero tiene muchas funciones, en programación, estos almacenan códigos o parte de ellos (en ocasiones se divide el código en varios archivos). También es posible que se necesita almacenar datos que el usuario introduce ("Como sus datos, nombre de usuario y contraseña, etc.), estos se empaquetan en un archivo y podrán ser usados luego por el programa por ejemplo, cuando el usuario desee loguearse de nuevo.

Estructuras Dinámicas:

Pilas: Una pila (stack en inglés) es una lista ordenada o estructura de datos que permite almacenar y recuperar datos, siendo el modo de acceso a sus elementos de tipo LIFO (del inglés Last In, First Out, «último en entrar, primero en salir») . Esta estructura se aplica en multitud de supuestos en el área de informática debido a su simplicidad y capacidad de dar respuesta a numerosos procesos.

Para el manejo de los datos cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.


En cada momento solamente se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado (denominado TOS, Top of Stack en inglés). La operación retirar permite la obtención de este elemento, que es retirado de la pila permitiendo el acceso al anterior (apilado con anterioridad), que pasa a ser el último, el nuevo TOS.

Las pilas suelen emplearse en los siguientes contextos:¿ 

Evaluación de expresiones en notación postfija (notación

polaca inversa). 

Reconocedores sintácticos de lenguajes independientes del

contexto. 

Implementación de recursividad.

En un sistema operativo cada proceso tiene un espacio de memoria (pila) para almacenar valores y llamadas a funciones.

Una pila acotada es una pila limitada a un tamaño máximo impuesto en su especificación.


Por analogía con objetos cotidianos, una operación apilar equivaldría a colocar un plato sobre una pila de platos, y una operación retirar equivaldría a retirarlo.

Habitualmente, junto a las dos operaciones básicas de apilar y desapilar (push, pop), las pilas puede implementar otra serie de funciones: 

Crear (constructor): crea la pila vacía.

Tamaño (size): regresa el número de elementos de la pila.

Apilar (push): añade un elemento a la pila.

Desapilar (pop): lee y retira el elemento superior de la pila.

Leer último (top o peek): lee el elemento superior de la pila

sin retirarlo. 

Vacía (empty): devuelve cierto si la pila está sin elementos

o falso en caso de que contenga alguno.

Una pila puede implementarse fácilmente ya sea mediante una matriz o una lista enlazada. Lo que identifica a una estructura de datos como una pila en cualquier caso no es su estructura sino su interfaz: al usuario solamente se le permite colocar y extraer datos en el modo que se espera de una pila y algunas otras operaciones auxiliares.

Colas: Una cola (también llamada fila) es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la


operación de extracción pull por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir.

Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), donde los objetos, personas o eventos son tomados como datos que se almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.

La particularidad de una estructura de datos de cola es el hecho de que solo podemos acceder al primer y al último elemento de la estructura. Así mismo, los elementos solo se pueden eliminar por el principio y solo se pueden añadir por el final de la cola.


Operaciones Básicas: 

Crear: se crea la cola vacía.

Encolar: se añade un elemento a la cola. Se añade al final

de esta. 

Desencolar: (sacar, salir, eliminar): se elimina el elemento

frontal de la cola, es decir, el primer elemento que entró. 

Frente: (consultar, front): se devuelve el elemento frontal

de la cola, es decir, el primer elemento que entró.

Listas: Una lista es una colección de elementos homogéneos entre los que existe una relación lineal. 1. Cada elemento de la lista, a excepción del primero, tiene un único predecesor. 2. Cada elemento de la lista, a excepción del último, tiene un único sucesor.


Las listas no son arreglos (arrays), aunque ambos representan secuencias de elementos de un tipo, los arreglos tienen longitud fija; las listas, no; es decir, las listas son flexibles y permiten cambio de implementación. En una lista enlazada, cada elemento apunta al siguiente excepto el último que no tiene sucesor y el valor del enlace es null. Por ello los elementos son registros que contienen el dato a almacenar y un enlace al siguiente elemento. Los elementos de una lista, suelen recibir también el nombre de Nodos de la lista.

ESTRUCTURA DE DATOS FISICAS

Es el área donde el procesador puede acceder directamente. La responsabilidad de la gestión de dichas memorias cae sobre el sistema operativo. La memoria principal es la más rápida pero no es

tan

grande

como

para

mantener

guardado

todos

los

programas y los datos.

Clasificación de los dispositivos de almacenamiento 

Velocidad de acceso a los datos

Coste por unidad de datos

Fiabilidad

pérdida de datos por fallo de alimentación o crash del

sistema 

fallo físico del dispositivo de almacenamiento

Se puede diferenciar el almacenamiento:

almacenamiento volátil


almacenamiento no-volátil

Jerarquía de las Memorias

 Almacenamiento primario: es el más rápido pero es volátil (caché, memoria principal)  Almacenamiento secundario: Es no volátil, moderadamente rápido; también llamado almacenamiento en linea (memoria flash, discos magnéticos).  Almacenamiento terciario: Es no-volátil, es lento; también llamado almacenamiento off-line (cinta magnética, almacenamiento óptico)


Discos Magnéticos Parámetros:      

Capacidad: 10MB - 10GB Tasa de Transferencia: 1 - 5 MB/s Tiempo de Búsqueda (seek time): 2 - 30 ms Tiempo espera (latency): 4 - 8 ms Velocidades: 60 - 120 rpm (8-17ms) Tiempo medio entre fallos: 3 - 91 años

Estructura de un Disco Magnético

Optimización de Acceso a Disco  Un bloque es una secuencia continua de sectores de una sola pista de un plato  Algoritmos de planificación del brazo del disco: minimizar el movimiento del brazo (algoritmo del ascensor)  Organización de los ficheros: se optimiza el tiempo de acceso organizando los bloques de acuerdo a cómo van a ser accedidos los datos.


 Memoria intermedia de escritura no volátil: se escriben los bloques a una RAM no volátil intermedia; el controlador escribirá a disco cuando no tenga más peticiones pendientes.  Disco de registro histórico: es un disco dedicado a escribir un registro histórico secuencial, eliminando así el tiempo de búsqueda. (Parecido al RAM no volátil)

En discos duros y otros soportes, la estructura lógica hace referencia a su sector de arranque, la tabla de asignación de ficheros (FAT), el directorio raíz y la zona de datos, de forma conceptual, sin hablar sobre cómo son físicamente almacenados los datos en el disco, ni específicamente qué datos se almacenan.

RAID


Redundant Arrays of Inexpensive Disks  Originalmente, una alternativa más barata a los discos grandes y caros.  Hoy en día los RAIDs son utilizados por su gran ancho de banda y su fiabilidad. De aquí que la “I” se intrerprete como independiente más que como inexpensive.

Mejora de la fiabilidad vía Redundancia  Un sistema con 100 discos, cada uno con un TMEF de 100.000 h (aprox. 11 años) tendrá un TMEF del sistema de 1000 h (aprox. 41 días)  Redundancia: almacena información extra que se puede utilizar para recuperar información perdida en un fallo del disco.  P.Ej.: Mirroring (o shadowing) o duplica cada disco. Los discos lógicos consisten de 2 discos físicos o cada escritura se realiza en los dos discos o si uno de los 2 discos falla, los datos se encuentran o disponibles en el otro.

Niveles de RAID  Se pueden mejorar las prestaciones introduciendo paralelismo.  Consideraremos 4 discos de datos y los discos adicionales para la información redundante: o RAID de nivel 0 o RAID de nivel 1 o RAID de nivel 2 o RAID de nivel 3 o RAID de nivel 4 o RAID de nivel 5 o RAID de nivel 6


RAID 0 (No redundante): o Tiras a nivel de Bloque o No redundante o En aplicaciones de alta velocidad, donde no sea crítico la pérdida de datos.

RAID 1 (Con espejo): o Discos en espejo. o Buenas características en escritura o Populares para aplicaciones de almacenamiento de ficheros log.

RAID 2 (Redundante con código Hamming):  Códigos de Correción de Errores Tipo Memoria (Memory Style ECC)  RAID 3 (Bit de paridad intercalado): o Se utiliza un único bit de paridad; no-detección o Cuando se escriben los datos, se calcula el bit de paridad y se escribe. o Notable mejora de prestaciones en grandes trasferencias. o En un entorno a transacciones, el entorno sufre pues sólo se puede ejecutar una sola E/S a la vez

RAID 4 (Paridad en bloques): o Proporciona tasas de lectura de bloques independientes más altas que el nivel 3. o Sin embargo, el bloque de paridad es un cuello de botella para escrituras de bloques independientes.

RAID 5 (Paridad distribuida a nivel de bloques):


o o o

Datos y paridad distribuidos en los discos. Mejores niveles de transferencia de E/S que el nivel 4. Reemplaza en la práctica al nivel 4.

Disco Óptico 

CD-ROM o Los discos son portátiles o Gran capacidad de almacenamiento (600MB) o Tiempos de búsqueda y latencia grandes; menores tasas de transferencia de datos que los discos magnéticos.   

DVD (de 1.7 hasta 17 GB) WORM (Write-Once Read-Many) Discos Regrabables


Cinta Magnética  Para grandes volúmenes da datos (5GB)  El medio más barato de almacenamiento  Normalmente se utiliza para back-up o para transferir información entre sistemas.  Se utilizan robots de cintas (con varias) para grandes capacidades (desde terabytes hasta petabytes)

Estructura de Ficheros  La base de datos se almacena como una colección de ficheros.  Cada fichero es una secuencia de registros.  Cada registro es una secuencia de campos.

Registros de Longitud Fija


 

Aproximación sencilla Los registros pueden ocupar dos bloques

Listas libres  

Mejor aprovechamiento del espacio Cuidado con los punteros clavados

Registros de Longitud Variable Surgen de varias maneras en las BD:  Almacenamiento de varios tipos de registros en un mismo archivo  Tipos de registros que permiten longitudes variables para uno o para varios de los campos.  Tipos de registro que permiten campos repetidos.

Registros de Longitud Variable: cadenas de bytes  no resulta sencillo volver a utilizar el espacio  no queda espacio para el aumento de tamaño de los registros.

RLV: Estructura de páginas con ranuras  Se mantiene siempre compacto el espacio libre y el ocupado.  Los punteros son indirectos, nunca fijos

Organización de los Registros en Archivos 

Montículo: en cualquier sitio libre


 Secuencial: de acuerdo al orden secuencial dado por el valor de una clave.  Asociativa (hash): de acuerdo a la función hash de algún atributo.  En agrupaciones: se pueden guardar en el mismo archivo registros de varias relaciones diferentes.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.