- Apilo
- Inconvenientes
- Al no estar ordenados los registros, las búsquedas son lentas.
- No se controla la redundancia de información.
- Requiere un mantenimiento del fichero para hacer los borrados físicos.
- Secuencial
- Ventajas respecto a la organización de apilo
- Permite recorrer el fichero de forma ordenada rápidamente(cuando se ordena por la clave).
- Buscar un registro es más rápido.
- Inconvenientes
- Solo se puede ordenar por la clave.
- Hay que reorganizar el fichero constantemente.
- Encadenada
- Ventajas respecto a la organización secuencial
- Permite ordenar por varios criterios.
- Reduce el coste de mantener información relacionada.
- Inconvenientes
- Coste de las reorganizaciones cuando hay más de una cadena.
- Pueden presentar problemas de pérdida de información si las cadenas son simples y los punteros se deterioran.
- Secuencial indexada
- Ventajas respecto a la organización encadenada
- Acceso secuencial y directo muy rápido.
- El fichero de derrama está ordenado (en la organización secuencial no ).
- Inconvenientes
- Solo puede existir un clave.
- La zona de derrama hace que las operaciones sobre el fichero sean mas lentas.
- Ocupa mas espacio en el disco que los ficheros secuenciales.
- Indexada
- Ventajas respecto a la organización secuencial indexada
- No tiene zona de derrama.
- Permite crear varios índices.
- Accesos rápidos a los registros por varias claves.
- Inconvenientes
- Si el árbol no es B+ puede que el árbol esté desbalanceado o sea difícil el acceso secuencial.
- Hashing
- Ventajas respecto a la organización indexada
- Tiempo constante de acceso al registro.
- Inconvenientes
- Dependiendo de la función de hash se pueden producir sinónimos.
jueves, 8 de marzo de 2012
Organizaciones de ficheros – Ventajas e inconvenientes (resumen)
Publicado por
jesusnoseq
en
8:53
1 comentarios
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Implementación del tipo cola usando un vector
Fichero colaVector.hpp
#ifndef __COLA_VECTOR_HPP__
#define __COLA_VECTOR_HPP__
#include
#include
#include "colainterfaz.hpp"
/*!\brief Espacio de nombres para la asignatura Estructura de datos.*/
namespace ed
{
//using std::vector;
template
class Cola:public ColaInterfaz
{
public:
// constructor por defecto
Cola(unsigned int limite=10)
{
assert(limite>0);
_elementos.resize(limite);
_limite=limite;
_cabeza=0;
_indice=0;
}
// constructor copia
Cola(const Cola &c)
{
_elementos.resize(c._elementos.size());
_cabeza=c._cabeza;
_indice=c._indice;
_limite=c._limite;
_elementos=c._elementos; // es un vector STL
}
// no hace falta crearlas para esta implementación
/*
// Sobrecarga del operador de asignación con una cola
Cola &operator=(const Cola &c) throw()
{
_cabeza=c._cabeza;
_indice=c._indice;
_limite=c._limite;
_elementos=c._elementos;
}
// Destructor
~Cola()
{
}
*/
void insertar(const G &x) throw()
{
assert(not estaLlena());
_elementos[ _indice % _limite ]= x;
_indice=_indice+1;
}
void eliminar() throw ()
{
assert(not estaVacia());
_cabeza=_cabeza+1;
}
const G & cabeza() const throw ()
{
assert(not estaVacia());
return _elementos[_cabeza%_limite];
}
bool estaVacia () const throw ()
{
return (_indice==_cabeza)? true : false;
}
bool estaLlena () const throw (){
return ((_indice-_cabeza)==_limite)? true : false;
}
private:
std::vector _elementos;
unsigned int _indice;
unsigned int _cabeza;
unsigned int _limite;
};
} //namespace ed
#endif //__COLA_VECTOR_HPP__
Publicado por
jesusnoseq
en
8:52
1 comentarios
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
domingo, 8 de enero de 2012
3.1. Los 4 componentes principales: boot, super-bloque, lista nodos índice, bloque de datos
Estructura
de un Sistema de Archivos.
Cada
sistema de archivos consta fundamentalmente de las siguientes partes:
- Boot (bloque de arranque) :
Ocupa la parte del principio del sistema de archivos, normalmente el primer sector, y puede contener el código de boot o de arranque. Este código es un pequeño programa que se encarga de buscar el sistema operativo y cargarlo en memoria. -
Super-bloque:
Ocupa el primer bloque lógico del disco y describe el estado del sistema de archivos. En el súper bloque se almacena la siguiente información del sistema de archivos:- El tamaño del sistema de archivos.
- Número de bloques libres disponibles en el sistema de archivos.
- Lista de bloques libres sistema de archivos.
- Índice del siguiente bloque libre de la lista de bloques libres.
- Tamaño de la lista de i-nodos.
- Numero total de i-nodos libres en el sistema de archivos.
- Lista de i-nodos libres en el sistema de archivos.
- Indice al siguiente i-nodo libre en la lista de i-nodos libres.
- Indicador que informa que el superbloque ha sido modificado
- Lista nodos índice (lista de i-nodos):
Se encuentra a continuación del superbloque.
Contiene una etrada por cada archivo, donde se guarda una descripcion del mismo:- Identificador del propietario del archivo y del grupo al que pertenece.
- Tipo de archivo.
- Derechos de acceso. Se reservan nueve bits para representar los derechos de lectura, escritura y ejecución (rwx) para el propietario, el grupo y el resto, y otros tres bits para definir si están o no activas las banderas setuid, setgid y sticky bit.
- Fecha de la última modificación.
- Contador de enlaces (links).
- Tamaño del archivo.
- Entradas para los bloques de dirección.
- Bloque de datos:
Empieza a continuación de la lista i-nodos y ocupa el resto del sistema de archivos. En esta zona es donde se encuentra situado el contenido de los archivos a los que se hace referencia la lista de i-nodos. Cada uno de los bloques destinados a datos sólo puede ser asignado a un archivo, tanto si lo ocupa totalmente como si no.
Cada
vez que un proceso accede a un archivo es necesario consultar el
superbloque y la lista de i-nodos. Para evitar el acceso a disco
continuamente, el sistema tiene siempre en memoria una copia del
superbloque y la tabla de i-nodos. Esto plantea problemas de
incostencia de los datos, así que un demonio se encarga de escribir
periodicamente el superbloque y la lista de i-nodos en el disco si se
han modificado.
Bibliografía
También en pdf.
Publicado por
jesusnoseq
en
5:30
0
comentarios
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas:
sistemas operativos,
SO,
trabajo,
UNIX
jueves, 1 de diciembre de 2011
Problema de lectores / escritores con prioridad de escritores
- Declaración de variables globales
semáforo lecMutex; // para modificar el numero de lectores
semáforo escMutex; // para modificar el numero de escritores
semáforo lectores; // para bloquear a los lectores cuando están los escritores
semáforo escritores; // para que solo esté un escritor en la S.C. a la vezint nEscritores=0; // número de escritores en la S.C.
int nLectores=0; // número de lectores en la S.C.
- Inicialización
init( lecMutex, 1);
init( escMutex, 1);
init( lectores, 1);
init( escritores, 1);
- Lector
while(true){
wait(lectores);
wait(lecMutex);
nLectores++;
if(nLectores == 1)
wait(escritores)
signal(lecMutex)
signal(lectores);
// leer
wait(lecMutex);
nLectores--;
if(nLectores == 0)
signal(escritores);
signal(lecMutex)
}
- Escritor
while(true){
wait(escMutex);
nEscritores++;
if(nEscritores == 1)
wait(lectores)
signal(escMutex)
wait(escritores);
// escribir
signal(escritores);
wait(escMutex);
nEscritores--;
if(nEscritores == 0)
signal(lectores);
signal(escMutex);
}
Nota: Las variables nLectores y nEscritores son globales ya que si fueran locales al empezar un hilo se inicializan a 0 una y otra vez.
Publicado por
jesusnoseq
en
11:36
0
comentarios
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas:
C,
concurrencia,
semaforos,
SO,
trabajo
Ruleta de la suerte en C
Otra de mis entradas del antiguo blog los programadores pelirrojos.
Bueno pues aquí tenéis un juego cutre en C que hice usando la librería de conio hace ya algún tiempo.
El juego consiste en hacer que los tres dibujos de las tres columnas que van pasando rápidamente coincidan, como en las maquinas tragaperras.
Cuado os lo descarguéis encontrareis el ejecutable, el código fuente (sin comentar ya que se entiende mas o menos bien) y las librerías necesarias para compilar el código fuente del juego.
AVISO PARA LUDOPATAS: no jueguen a esto que si no se envician y aquí no se gastan las perras.
Bueno pues aquí tenéis un juego cutre en C que hice usando la librería de conio hace ya algún tiempo.
El juego consiste en hacer que los tres dibujos de las tres columnas que van pasando rápidamente coincidan, como en las maquinas tragaperras.
Cuado os lo descarguéis encontrareis el ejecutable, el código fuente (sin comentar ya que se entiende mas o menos bien) y las librerías necesarias para compilar el código fuente del juego.
AVISO PARA LUDOPATAS: no jueguen a esto que si no se envician y aquí no se gastan las perras.
Publicado por
jesusnoseq
en
11:30
0
comentarios
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas:
C,
codigo fuente,
conio
Reloj analógico en java
Hace tiempo programé un pequeño reloj en java con sus 3 agujas y todo. Os lo dejo aquí por si tenéis curiosidad.
La entrada es originalmente de lpp antiguo blog donde publicaba mis chorradas.
Los que quieran descargarse el código-> aquí
Los que tengan dudas que comenten.
Quien sepa algo de java le animo a que mire el código y vea lo fácil que meter otra aguja para por ejemplo los meses.
La entrada es originalmente de lpp antiguo blog donde publicaba mis chorradas.
Los que quieran descargarse el código-> aquí
Los que tengan dudas que comenten.
Quien sepa algo de java le animo a que mire el código y vea lo fácil que meter otra aguja para por ejemplo los meses.
Publicado por
jesusnoseq
en
11:20
0
comentarios
Enviar por correo electrónicoEscribe un blogCompartir en XCompartir con FacebookCompartir en Pinterest
Etiquetas:
applet,
codigo fuente,
java,
reloj analógico
Suscribirse a:
Entradas (Atom)
