Historia

sábado, 16 de junio de 2012

Debate Tanenbaum–Torvalds

El debate Tanenbaum-Torvalds es un debate entre Andrew S. Tanenbaum y Linus Torvalds, en relación al kernel de Linux, y la arquitectura de núcleos en general. Tanenbaum comenzó el debate en 1992, en el grupo de discusión de Usenet: comp.os.minix, argumentando que los micronúcleos son superiores a los núcleos monolíticos, y por tanto, Linux era —incluso en 1992— obsoleto. Otros hackers notables, como David S. Miller y Theodore Ts'o se unieron al debate.
El debate se ha considerado en ocasiones como una guerra de flames.
Dicho tema fue retomado en 2006 luego de que Tanenbaum escribiera una noticia de primera página para Computer Magazine, títulada «¿Podemos hacer más seguros y confiables a los sistemas operativos?».  Si bien Tanenbaum ha mencionado que no escribió el artículo para renovar el debate acerca del diseño del kernel, la yuxtaposición del artículo y una copia archivada del debate de 1992, en el sitio de tecnología Slashdot, causaron que el tema se reavivara. Torvalds publicó una refutación a los argumentos de Tanenbaum, a través de un foro de discusión en línea, y muchos sitios de noticias tecnológicas comenzaron a reportar este asunto. Esto estimuló a Jonathan Shapiro a responder que la mayoría de los sistemas computacionales probados y seguros utilizan un enfoque basado en micronúcleos.

miércoles, 30 de mayo de 2012

Esperanza de vida de una memoria USB


Esperanza de vida de una memoria USB


Las memorias USB son ideales para almacenar archivos digitales y están sustituyendo paulatinamente a los CDs y DVDs como medio de almacenamiento preferido.
La ventaja de las memorias USB es que son portátiles, duraderas y tienen una increíble capacidad de almacenamiento (desde 64 MB hasta 256 GB, a fecha 2010). Además, son capaces de retener la memoria incluso después de apagadas. Pero, ¿las memorias duran para siempre? ¿Debe utilizarlas para almacenar documentos y archivos importantes? ¿Cuánto tiempo duran?
Si simplemente guardase datos en su memoria USB y la dejase en un sitio seguro durante 10 años, seguiría funcionando y sus datos permanecerían intactos.
Pero si continúa utilizándola con mucha frecuencia, sin duda se desgastará con el tiempo.

Las memorias USB tienen un número finito de ciclos de escritura/borrado
La esperanza de vida de una memoria USB se puede medir por el número de ciclos de escritura o borrado. Las memorias USB pueden soportar entre 10.000 a 100.000 ciclos de escritura/borrado, dependiendo de la tecnología de memoria que se utilice.
Cuando se alcanza el límite, una parte de la memoria puede dejar de funcionar correctamente, lo que puede llevar a que los datos se pierdan o resulten dañados.
Por supuesto, la vida útil de la memoria USB también puede terminar antes de lo previsto si abusa de ella o la somete a condiciones ambientales extremas. Además, si los componentes de la memoria son de baja calidad, las memorias pueden fallar mucho antes.
Tenga cuidado con marcas desconocidas ya que pueden utilizar componentes de baja calidad y economizar en los procesos de fabricación para abaratar el producto. Si está buscando memorias USB de alta calidad, busque proveedores que utilicen únicamente memorias de grado A y cuenten con fábricas con el certificado ISO-9001:2008.

¿Debería utilizar memorias USB para almacenar archivos importantes?
El mejor uso de las memorias USB es copiar y transferir archivo de un ordenador a otro. Si desea utilizarlas para almacenar archivos importantes como fotografías de familia y vídeos, es recomendable que realice copias de seguridad.

Mantenimiento de su memoria USB
Para prolongar la vida útil de su memoria USB y asegurarse de que funciona correctamente durante años, siga las siguientes precauciones:
  • Cuando no utilice la memoria USB, asegúrese de cubrirla con una tapa para evitar la acumulación de polvo y contaminantes en los contactos.
  • No exponga su memoria USB a condiciones adversas, como temperaturas o humedad extremas.
  • Nunca retire la memoria USB del puerto donde esté conectada mientras está en funcionamiento. Además, debe "Expulsar" la unidad (haga clic derecho sobre la unidad USB y seleccione "Expulsar") antes de retirarla de su ordenador.
  • No la deje conectada al ordenador durante un período prolongado de tiempo. Si no la usa, simplemente desconéctela del equipo.

File System


File System



El file system de un sistema operativo determina la manera en que los archivos son nombrados y cómo y dónde ellos son colocados y almacenados en los dispositivos, como es un disco duro. Los sistemas operativos como Windows, Macintosh, UNIX y Linux todos emplean un file system que usa una estructura jerárquica. 


En los file system jerárquicos, los archivos son colocados en contenedores lógicos que son arreglados en una estructura de árbol upside-down. Los Archivos empiezan en la raíz del árbol. UNIX y Linux llaman al contenedor que reside en el primer nivel del árbol "directorio -directory". Contenedores dentro de cada directorio son llamados "subdirectorios". En los sistemas operativos de Windows y Macintosh usan el término "carpeta -folder" y "subcarpetas-subfoleder" para describir los directorios y subdirectorios. 


Los files system de un sistema operativo determina más de como los archivos y programas son lógicamente organizados. Los tipos de file system utilizados por las computadoras determinan si o no los archivos pueden ser asegurados de otros programas o usuarios. Los file system también definen como los datos son físicamente alojados y almacenados en los medio (como los discos duros). Algunos file system pueden utilizar más eficientemente los espacio en disco que otros. 


Un tipo de file system común es el llamado FAT -File Allocation Table, Tabla de Localización de Archivos. El file system FAT, se mantiene en el disco por el sistema operativo. La tabla contiene un mapa de dónde los archivos están almacenados en el disco. El FAT hace referencia a los clusters del disco, los cuales son las unidades básicas lógicas de almacenamiento en un disco. Un archivo dado puede ser almacenado en varios clusters, pero un cluster puede contener los datos de solamente un archivo. Estos clusters pueden o no estar uno enseguida del otro. 


Los sistemas operativos utilizan el FAT para encontrar todos los clusters del disco que es donde los archivos están almacenados. FAT16 y FAT32, son los file system más comunes. FAT16 fue creado para utilizar particiones grandes (hasta 4 GB). Aunque los discos grandes pueden ser formateados con FAT16, para hacerlo, hace un uso ineficiente del espacio en el disco, por que en FAT, las particiones grandes dan como resultado que los clusters sean de gran tamaño. Por ejemplo, con una partición de 512 MB, el tamaño de un cluster (que es la unidad de almacenamiento básica) es de 8 KB. Esto significa que si un archivo de únicamente 1 KB de tamaño, utilizará 8KB de espacio porque más de un archivo no pude ser almacenado en un cluster; los 7 KB extra son desperdiciados. Para resolver este problema, fue desarrollado el FAT32. Este file system de 32 bits usa tamaños más pequeños de clusters en discos grandes. Éste puede soportar particiones de tamaños de hasta 2 Terabytes (TB). 


Diferentes sistemas operativos utilizan diferentes file systems, y algunos sistemas operativos pueden usar más de un file system. Por ejemplo, aunque Windows 3.x puede usar únicamente file system de FAT16, Windows 2000 puede usar FAT16, FAT32 o NTFS. 


Sistema Operativo File System 


Win 95, 98 y ME 
FAT16 y FAT32 


XP
FAT32 y NTFS (New Technology File System) 


Linux
Ext2, JFS (Journaling File System) 


IBM OS/2
HPFS (High Performance File System) 


Los file systems determinan la convención de nombres de los archivos y el formato para especificar la ruta -path para localizar el archivo. Las reglas para nombrar los archivos varía dependiendo del file system e incluye varias los siguiente: 


El máximo número de caracteres permitidos por nombre para los archivos. 

La longitud máxima de la extensión de los archivos o sufijos 

Si permite o no espacio entre las palabras para el nombre de los archivos. 

Si permite el case sensitive (mayúsculas y minúsculas) en el nombre de los archivos. 

Cuales caracteres son permitidos o legales para el nombre de los archivos. 

El formato para especificar la ruta -path.




martes, 29 de mayo de 2012

Memoria Cache


La memoria caché (también memoria buffer) es una memoria rápida que permite reducir los tiempos de espera de las distintas informaciones almacenada en la RAM (Random Access Memory o Memoria de Acceso Aleatorio). En efecto, la memoria principal del ordenador es más lenta que la del procesador. Existen, sin embargo, tipos de memoria que son mucho más rápidos, pero que tienen un costo más elevado. La solución consiste entonces, en incluir este tipo de memoria local próxima al procesador y en almacenar en forma temporal la información principal que se procesará en él. Los últimos modelos de ordenadores poseen muchos niveles distintos de memoria caché:
  • La Memoria caché nivel 1 (denominada L1 Cache, por Level 1 Cache) se encuentra integrada directamente al procesador. Se subdivide en dos partes:
    • la primera parte es la caché de instrucción, que contiene instrucciones de la RAM que fueron decodificadas durante su paso por las canalizaciones.
    • la segunda parte es la caché de información, que contiene información de la RAM, así como información utilizada recientemente durante el funcionamiento del procesador.

El tiempo de espera para acceder a las memorias caché nivel 1 es muy breve; es similar al de los registros internos del procesador.
  • La memoria caché nivel 2 (denominada L2 Cache, por Level 2 Cache) se encuentra ubicada en la carcasa junto con el procesador (en el chip). La caché nivel 2 es un intermediario entre el procesador con su caché interna y la RAM. Se puede acceder más rápidamente que a la RAM, pero no tanto como a la caché nivel 1.
  • La memoria caché nivel 3 (denominada L3 Cache, por Level 3 Cache) se encuentra ubicada en la placa madre.

Todos estos niveles de caché reducen el tiempo de latencia de diversos tipos de memoria al procesar o transferir información. Mientras el procesador está en funcionamiento, el controlador de la caché nivel 1 puede interconectarse con el controlador de la caché nivel 2, con el fin de transferir información sin entorpecer el funcionamiento del procesador. También, la caché nivel 2 puede interconectarse con la RAM (caché nivel 3) para permitir la transferencia sin entorpecer el funcionamiento normal del procesador.

Tamaño ideal del cache


TAMANO DE CACHE

Aunque la caché sea de mayor velocidad que la RAM, si usamos una caché muy grande, el micro tardará un tiempo apreciable en encontrar el dato que necesita. Esto no sería muy importante si el dato estuviera allí, pero ¿y si no está? Entonces habrá perdido el tiempo, y tendrá que sumar ese tiempo perdido a lo que tarde en encontrarlo en la RAM.

Se puede afirmar que, para usos normales, a partir de 1 MB (1024 Kb) la caché resulta ineficaz, e incluso pudiera llegar a ralentizar el funcionamiento del ordenador.

jueves, 22 de marzo de 2012

Proceso daemon y zombie


Proceso Daemon
Un demonio, daemon o dæmon (de sus siglas en inglés Disk And Execution MONitor), es un tipo especial de proceso informático no interactivo, es decir, que se ejecuta en segundo plano en vez de ser controlado directamente por el usuario. Este tipo de programas se ejecutan de forma continua (infinita), vale decir, que aunque se intente cerrar o matar el proceso, este continuará en ejecución o se reiniciará automáticamente. Todo esto sin intervención de terceros y sin dependencia de consola alguna.

  • Características
Los demonios suelen tener las siguientes características:
§  No disponen de una "interfaz" directa con el usuario, ya sea gráfica o textual.
§  No hacen uso de la entradas y salidas estándar para comunicar errores o registrar su funcionamiento, sino que usan archivos del sistema en zonas especiales (/var/log/ en los UNIX más modernos) o utilizan otros demonios especializados en dicho registro como el syslogd.
Por ejemplo, una máquina que alberga un servidor web utilizará un demonio httpd (HTTP Daemon) para ofrecer el servicio y que los visitantes a dicha web puedan acceder. Otro ejemplo son los demonios "cronológicos" como cron, que realizan tareas programadas como mantenimiento del sistema en segundo plano.

Proceso Zombie
En sistemas operativos Unix, un proceso zombie o "defunct" (difunto) es un proceso que ha completado su ejecución pero aún tiene una entrada en la tabla de procesos, permitiendo al proceso que lo ha creado leer el estado de su salida. Metafóricamente, el proceso hijo ha muerto pero su "alma" aún no ha sido recogida.
Cuando un proceso acaba, toda su memoria y recursos asociados a él se desreferencian, para que puedan ser usados por otros procesos. De todas formas, la entrada del proceso en la tabla de procesos aún permanece. Al padre se le envía una señal SIGCHLD indicando que el proceso ha muerto; el manejador para esta señal será típicamente ejecutar la llamada al sistema wait, que lee el estado de salida y borra al zombie. El ID del proceso zombie y la entrada en la tabla de procesos pueden volver a usarse.

LLamadas al sistema


Llamadas al sistema para procesos


Llamada fork()
fork() esta función crea un proceso nuevo o “proceso hijo” que es exactamente igual que el “proceso padre”. Si fork() se ejecuta con éxito devuelve:
·         Al padre: el PID del proceso hijo creado.
·         Al hijo: el valor 0.
pid_t fork();


Llamadas exec()
  • Son similares en todas las versiones de Unix.
  • Carga de un fichero el código a ejecutar. Se utiliza para , después de ejecutar un fork() cargar un nuevo código para el proceso hijo.

Llamada getpid()
  • Devuelve el pid del proceso que lo llama. En caso de error devuelve -1.
  • Esta llamada devuelve en el estandar Posix un pid_t
pid_t getpid();


Llamada getppid()
  • Devuelve el pid del proceso padre al que lo llama. En caso de error devuelve -1.
  • La definición de esta función en estandar Posix es
pid_t getppid();


Llamada exit()
  • Termina la ejecución de un proceso. Existe también en Unix BSD y System V.
  • La definición es del tipo:
void exit (int status);
status: estado de terminación del proceso. Se usa para que el proceso padre conozca la forma en que finaliza un hijo. Puede ser cualquier tipo de entero, pero se suelen usar las macros:

EXIT_FAILURE
EXIT_SUCCESS
  • exit() cierra ficheros, vacía bufferes,...


Llamada wait()
  • Permite a un proceso sincronizarse con la finalización de un proceso hijo.
pid_t wait (int *status);



Llamadas al sistema para señales


SIGNAL(señal, &funcion) 

Esta llamada se utiliza para indicar que se está preparado  para recibir algún tipo de
señal y suministrar la dirección del  procedimiento manejador de la señal.
Después del SIGNAL, si se recibe una señal por ejemplo SIGINT  (pulsar la tecla DEL),
se efectúa:
     1) El estado del proceso se guarda en su propia pila.
     2) Se ejecuta el manejador de la señal.
int señal;
int (*función)(); función a realizar cuando se recibe una señal


SIGRETURN (&contexto)   

Es llamado por el manejador que atiende la señal cuando termina.   
Recupera el estado del proceso interrumpido desde la pila y lo continúa.       


SIGACTION (sig, *act, *oact) 

Es una nueva versión de signal, examina, pone o modifica los atributos de una señal.
Sig es un entero que indica la señal.
*act es una estructura que contiene los atributos y manejador de la señal
*oact es la estructura que recibe los atributos antes de la llamada


KILL 

La llamada kill, permite enviar señales entre  procesos que tienen el mismo uid
(identificador de usuario) la  forma es: kill (pid, sig)
       pid -> identificador del proceso
  sig -> tipo de señal
                     
sig = 9 es la señal SIGKILL, que mata cualquier proceso, aún  en modo tanda, esta
señal no puede ser ignorada.


ALARM (segundos) 

 Esta llamada se utiliza para interrumpir un proceso al cabo  de un cierto tiempo, su
parámetro especifica el tiempo en  segundos, después del cual el núcleo envía la señal
SIGALRM al proceso.
Un proceso solo puede tener una alarma pendiente, para  resetear una alarma, basta
hacer una llamada de alarma con  parámetro cero.


PAUSE (segundos) 

Esta llamada le dice al S.O. que suspenda al proceso, hasta  que se reciba una señal.


SIGPROCMASK(how, &set, &old)

Esta señal permite bloquear un conjunto de señales mediante una mascara de bits que
le envía al núcleo del sistema.


SIGPENDING(SET) 

Obtiene el conjunto de señales bloqueadas.


SIGSUSPEND(sigmask)

Permite a un proceso establecer atómicamente el mapa de bits de las señales
bloqueadas y suspenderse a sí mismo.