Tarea Del Profe Markos

  • Upload
    gdp-rmz

  • View
    58

  • Download
    0

Embed Size (px)

Citation preview

Prctico Introduccin 1. Cuales son las dos funciones principales de un Sistema Operativo?GESTIN DE RECURSOS: control de discos duros, y gestin deperifricos (teclado, ratn, etc...), asignacin de cantidades de memoria, etc... INTERFAZ DE USUARIO: nos referimos al modo que tiene el ordenador de presentar lainformacin al usuario.

2. Que es la multiprogramacion?Ejecucin de mltiples tareas compartiendo los recursos de una misma computadora. Se trata de una evolucin del procesamiento por lotes. Dentro de la multiprogramacin se encuentra el concepto de tiempo compartido, en donde cada usuario tiene acceso a una nica computadora a travs de terminales. La computadora central se simula ejecutar en simultneo las tareas de cada usuario.

3. Una de las razones por las que las Interfaces Graficas de Usuario (GUI) fueron adpotadas lentamente, fue por el costo del hardware necesario para soportarlas. 4. Cuanta RAM de video se necesita para una terminal modo texto de 80x25 (columnas, lineas)?La principal innovacin que aportaba el diseo de las tarjetas grficas VGA y MCGA es la generacin de seales RGB analgicas, en lugar de las RGB digitales que generaban las anteriores. Un monitor digital traduce a verdadero o falso cada una de las seales RGB (Red, Green, Blue en ingls) que le enva la tarjeta de vdeo, pero un monitor analgico traduce el voltaje de cada una de estas seales RGB en un amplio rango de intensidades que le permitir obtener mayor variedad de colores. Ambas tarjetas permiten visualizar 256 colores, gracias al conversor digital analgico de que disponen conocido como DAC (Digital to Analog Converter en ingls) que permite visualizar esos 256 colores entre un rango de 262.144 (256Kb) posibilidades. Obsrvese que 256Kb = 218 bits, por lo que son 18 bits para los tres valores de RGB, que son 6 bits por cada tonalidad RGB.

5. Cuanta para una pantalla grafica de 1024x768 con 24 bits de profundidad de color? La pantalla, bsicamente, es una malla de celdillas llamadas pixels que podemos iluminar individualmente, de ello se encarga un haz de electrones que va recorriendo puntualmente la pantalla empezando por arriba, de izquierda a derecha, pasando a la siguiente fila al llegar al extremo derecho. En los monitores de vdeo en color el haz consta de tres haces de electrones separados, cada uno de ellos controla uno de los tres colores primarios de vdeo (rojo, verde y azul). Cada pixel de la pantalla en color est fsicamente representado por una trada muy pequea de puntos luminiscentes rojo, verde y azul sobre el fsforo de la misma. Los tres haces de electrones alcanzan una mscara de tal forma que cada uno ilumina los puntos de un solo color primario, as la intensidad relativa del haz, segn barre cada trada determina el color y el brillo de los pixels. La principal innovacin que aportaba el diseo de las tarjetas grficas VGA y MCGA es la generacin de seales RGB analgicas, en lugar de las RGB digitales que generaban las anteriores. Un monitor digital traduce a verdadero o falso cada una de las seales RGB (Red, Green, Blue en ingls) que le enva la tarjeta de vdeo, pero un monitor analgico traduce el voltaje de cada una de estas seales RGB en un amplio rango de intensidades que le permitir obtener mayor variedad de colores. Ambas tarjetas permiten visualizar 256 colores, gracias al conversor digital analgico de que disponen conocido como DAC (Digital to Analog Converter en ingls) que permite visualizar esos 256 colores entre un rango de 262.144 (256Kb) posibilidades. Obsrvese que 256Kb = 218 bits, por lo que son 18 bits para los tres valores de RGB, que son 6 bits por cada tonalidad RGB. La memoria de la tarjeta de vdeo se encuentra incluida dentro de la memoria RAM (forma parte de sta) pero su acceso es mucho ms lenta que el resto de la memoria RAM. Por ejemplo, en un monitor en color y en modo texto podemos acceder al bfer de vdeo desde la direccin 0B800h:0000h

.

6. En 1980 el costo de la memoria era de u$s5/KB, ?Cuanto cuesta en la actualidad? Memoria Ram 1gb Ddr Pc2100 Pc2700 $200 Memoria Ram 3gb Ddr2 Pc2100 Pc2700 $300 Memoria Ram Ddr3 8gb Pc3-10600 1333mhz $950 Memoria Udimm Ddr2 667mhz 2gb Adata $450 7. Cuales de las siguientes instrucciones deberian permitirse en modo kernel? 1. Deshabilitar todas las interrupciones 2. Leer el Reloj de Tiempo Real (RTC) 3. Escribir el RTC 4. Cambiar el mapa de memoria 8. Un microprocesador tiene un pipeline de 4 etapas. Todas las etapa demoran 1nseg en procesar. ?LA ARQUITECTURA SEGMENTADA DEL 68HC11 Si revisamos detenidamente el repertorio de instrucciones del 68HC11 notaremos que cada Instruccin ejecuta una serie de pasos. En general, los pasos a seguir son los siguientes. 1. Traer de la memoria la instruccin que se desea ejecutar (a este paso se le conoce como Ciclo fetch bsqueda de la instruccin) 2. Decodificacin de la instruccin 3. Si la instruccin requiere leer un operando de la memoria, entonces se calcula la direccin Efectiva de ese operando y se lee el dato de la memoria 4. Si lo requiere la instruccin, se leen de los registros internos del microprocesador los operandos necesarios 5. Ejecucin, es decir, se realiza una operacin en la unidad de procesos aritmticos con los operandos ledos anteriormente 6. Se guardan los resultados de la operacin y se actualiza el registro de banderas

Observe que estos pasos son similares a los ejecutados en las cartas ASM para las instrucciones vistas en el captulo VI. La arquitectura segmentada del 68HC11 tambin ejecutar estos mismos pasos, pero agrupados en las siguientes cuatro etapas. 1. Etapa IF (traer la instruccin / instruction fetch). La instruccin a ejecutar es leda de la memoria de instrucciones 2. Etapa ID (decodificacin / instruction decode). Se decodifica la instruccin y se traen los operandos necesarios por la instruccin (tanto de memoria como de registros internos) 3. Etapa EX (ejecucin / execution). Se procesan los operandos en la UPA (unidad de procesos aritmticos) 4. Etapa WB (post-escritura / write back). Se guardan resultados

9. Cuantas intrucciones por segundo (IPS, KIPS, MIPS) puede ejecutar este micro?MIPS es el acrnimo de "millones de instrucciones por segundo". Es una forma de medir la potencia de los procesadores. Sin embargo, esta medida slo es til para comparar procesadores con el mismo juego de instrucciones y usando benchmarks que fueron compilados por el mismo compilador y con el mismo nivel de optimizacin. Esto es debido a que la misma tarea puede necesitar un nmero de instrucciones diferentes si los juegos de instrucciones tambin lo son; y por motivos similares en las otras dos situaciones descritas. En las comparativas, usualmente se representan los valores de pico, por lo que la medida no es del todo realista. La forma en que funciona lamemoria que usa el procesador tambin es un factor clave para la potencia de un procesador, algo que no suele considerarse en los clculos con MIPS. Debido a estos problemas, los investigadores han creado pruebas estandardizadas tales como SpecInt para medir el funcionamiento real, y las MIPS han cado en desuso. En el mundo de GNU/Linux se suelen referir a los MIPS como 'BogoMips'. El equivalente en la aritmtica de punto flotante de los MIPS es el flops. Muchos microprocesadores de 8 y 16 bits han sido medidos con KIPS (kiloinstrucciones por segundo), que equivale a 0'001 MIPS. El primer microprocesador de propsito general, el Intel 8080 ejecutaba 640 KIPS. El Intel 8086 (16 bits), el primer microprocesador usado en PC, 800 KIPS. El Pentium 4 llega aproximadamente a 1'700 MIPS. Los PC actuales realizan un mximo de 18.000 millones de operaciones lgicas por segundo. Si se ejecutan 6 instrucciones por ciclo y hay 3.000 millones de ciclos por segundo, se tienen 18.000 MIPS.

10. La MMU normalmente compara la direccion virtual entrante con el Registro Limite, provocando una excepcion cuando la primera se excede. Un dise#o alternativo consiste en primero sumar la direccion virtual al Registro Base y despues comparar el resultado con la direccion fisica del Registro Limite. Son equivalentes estos metodos Son equivalentes en velocidad

11. Cuando un programa de usuario efectua un SysCall para leer o escribir un archivo en disco, este provee el archivo necesita, un puntero a un buffer de datos y la cantidad de datos. Entonces, el control pasa al SO, el que llama al driver apropiado. Supongamos que el driver le da la orden al disco y termina cuando llega una interrupcion. En caso de una lectura, obviamente el programa que llamo tiene que permanecer bloqueado (pues no hay datos). ?Es lo mismo para una escritura a disco?, es decir, ?Necesita bloquear el programa que pidio la escritura hasta que se complete la transferencia? 12. De condiciones de falla para cada uno de los SysCall que siguen: fork(), exec() y unlink(). Exec()= Retornan -1 si hay error. Si se ejecuta con xito no devuelve ningn valor dado que el cdigo de programa se sustituye por el del nuevo programa y se eliminan todas las variables del programa. fork()= fork causa la creacin de un nuevo proceso copia (casi exacta) del proceso padre. RETORNO si la llamada tiene xito retorna: al proceso hijo pid del hijo al proceso padre si fracasa devuelve -1 unlink()= Borra una entrada en la tabla de un directorio. pathname representa un fichero ya existente cuya entrada se quiere borrar. Si se elimina la ltima entrada existente en algn directorio que hace referencia a un inodo concreto el sistema elimina el fichero de ese i-nodo. RETORNO Retorna 0 si no hay error y -1 si hay algn error. 13. Puede la siguente llamada a sistema retornar en count un valor menor que nbytes? Explicar.

count = write(fd, buffer, nbytes)

14. Indique la diferencia escencial entre un dispositivo de caracteres y uno de bloques.Diferencia entre dispositivos modo bloque y modo caracter. Cada tipo de dispositivo en el sistema Linux se comunica con la aplicacin en una de las formas siguientes: carcter por carcter o como un conjunto de datos en un bloque de tamao predefinido. Las terminales, impresoras y mdems asncronos son dispositivos modo carcter. Cuando se usa el modo caracter se enva uno a la vez y hace eco en la otra terminal. Los manejadores (device drivers) de disco duro y la mayora de manejadores, usan el modo bloque, porque este es el camino ms rpido para enviar o recibir grandes cantidades de informacin. Los archivos de dispositivo (device files) son llamados dispositivos modo carcter o dispositivos modo bloque, basados en la forma de comunicacin. Cabe mencionar que los dispositivos que operan a modo carcter son distintos de los de modo bloque, en el aspecto de como el dispositivo maneja su bfer. Los dispositivos modo carcter hacen su propio bfer. Los dispositivos modo bloque, usualmente se comunican en bloques de 512 o 1024 bytes y el kernel se ocupa del bfer. Algunos perifricos necesitan usar archivos de dispositivo a modo bloque y carcter al mismo tiempo. Los manejadores de dispositivo manejan el modo carcter y el modo bloque a travs de dos diferentes archivos de dispositivo. El archivo de dispositivo que se usa depende de como la aplicacin quiera escribir o leer datos hacia el perifrico. El archivo de dispositivo tiene todos los detalles de si el perifrico opera a modo carcter o modo bloque. Una manera fcil de saber que tipo de modo utiliza un perifrico es obtener un listado largo del archivo de dispositivo. El listado se obtiene con el comando 'ls -l' que muestra los permisos, dueo, grupo, etc.. del archivo. Si el primer carcter es una b, indica que el perifrico opera en modo bloque y una c indica que el perifrico opera en modo carcter. Por ejemplo, para inspeccionar un dispositivo serial en el sistema: # ls -l /dev/cua0 crw-rw---- 1 root uucp 5, 64 Jul 17 1994 /dev/cua0 # Los archivos de dispositivos son usualmente nombrados indicando el tipo de dispositivo que son. La mayora de terminales, por ejemplo, tienen un archivo de dispositivo con el nombre ttyseguido por dos o ms letras o nmeros, tal como tty1, tty1A, o tty04. Las letras tty identifican al archivo como una

terminal (tty es por teletype), y los nmeros o letras identifican una terminal especfica a la que es referida. Cuando se encuentran en el directorio llamado /dev, el nombre completo del archivo de dispositivo se convierte en /dev/tty01. El manejador del mouse conectado a su computadora se accesa a travs del manejador /dev/mouse. shell acta como un intermediario entre el sistema operativo y el usuario gracias a lneas de comando que este ltimo introduce.

15. Tome un *nix personal (Linux, OpenBSD, MINIX, Darwin, etc.) que pueda romper sin problemas. Escriba un shell script que intente crear un numero ilimitado de procesos hijos y observe lo que sucede. Nota: no intente esto en un laboratorio de acceso publico.

16. El comando strace da un registro (traza) de todas las SysCalls que llama el comando que le sigue. Obtenga las trazas de los siguientes comandos, tratando de identificar todos los SysCalls que producen (el comando man puede ayudar). 1. strace cat /etc/hosts 2. strace cat (CTRL-D puede ayudar a terminar) 3. strace echo 1 4. strace mozilla (busquese una silla comoda)

Prctico ProcesosProcesos e Hilos

1. Por que un hilo dejaria voluntariamente la CPU con un thread_yield si sabe que despues de esto puede que se quede sin CPU para siempre? 2. En un sistema con hilos, ?hay un solo stack por hilo o un stack por proceso cuando se usan hilos en espacio de usuario? ?Y si se usan hilos a nivel de kernel? 3. [Wol04] Para el siguiente programa decidir que valores se pueden imprimir.int a, *ptr_b; a = 0; ptr_b = malloc(sizeof(int)); *ptr_b = 0; if (fork()!=0) { a = 2; *ptr_b = 4; printf("%d %d\n", a, *ptr_b); } else { a = 5; *ptr_b = 7; printf("%d %d\n", a, *ptr_b); }

4. Pensar en el mismo codigo, solo que en vez de procesos tenemos hilos.Condiciones de Carrera

5. [Wol04] Dado el siguiente par de procesos que insertan datos en el spooler de impresion, donde cola es un espacio de memoria compartida y libre es una variable local a cada proceso.P0:. libre := cola->fin+1; cola->buffer[libre] := job4; cola->fin := libre; .

P1:. libre := cola->fin+1; cola->buffer[libre] := job5; cola->fin := libre; .

1. Dar una planificacion o escenario que produce la perdida de un trabajo. 2. Dar una planificacion o escenario que funciona correctamente. 3. ?Cuantas planificaciones existen para estas 3+3 lineas de codigo? ?Cuantas son correctas y cuantas producen problemas? (determine el %) 6. [Wol03] Se tienen 2 procesos P0 y P1, P0 con N acciones atomicas y P1 con M acciones atomicas. Calcular cuantos escenarios posibles de ejecucion se pueden dar en un entorno concurrente. 7. [Fin88, 8.1] Considere los procesos P0 y P1, con un valor inicial de x=0. ?Cuales son los valores finales de x?{ x=0 } P0: P1:

x:=x+1; x:=x+1;

8. Si ahora consideramos que x:=x+1 no es atomico a nivel de ensamblador y se compila en una secuencia de accesos a memoria y operaciones de la ALU, equivalentes al siguiente multiprograma. ?Cuales son los valores finales de x?{ x=0 }

P0:

P1:

A := x; A := x; A := A+1; A := A+1; x := A; x := A;

Regiones Criticas

9. [Wol04] Mostrar que agregando un re-testeo de lock=0 luego del busy waiting en metodo de la variable candado, no soluciona nada. 10. [Wol04] Mostrar que en alternancia estricta el proceso P0 puede impedir al P1 entrar a la CS aunque P0 este fuera de ella. 11. [Fin88, 8.3] Deshabilitar interrupciones no funciona para regiones criticas anidadas (una dentro de la otra). Reescribir Begin/EndRegion para arreglar este problema. 12. [Fin88, 8.4][Tan02, 2.51] Generalizar la alternancia estricta a 3 procesos. Generalizarla a n. 13. [Fin88, 8.10] Demostrar de manera rigurosa que el algoritmo de Peterson no adolece del problema de progreso de la alternancia estricta. 14. [Fin88, 8.11] {Dificil} Demostrar de manera rigurosa que el algoritmo de Peterson cumple con la propiedad de seguridad de la Region Critica (#proc_in_cs1). 15. [Wol04] ?Sigue cumpliendo con la propiedad de seguridad el algoritmo de Peterson si intercambiamos las 2 primeras asignaciones de su BeginRegion? Demostrar o dar contraejemplo. 16. [Fin88, 8.12] Implementar un spin lock con TestInc.atomic function TestInc(var lock: integer):integer; result:=lock; lock:=lock+1; return result;

17. [Wol04][Tan02, 2.22] Implementar un spin lock con Swap.atomic procedure Swap(var v,w: integer); tmp:=v; v:=w; w:=tmp;

Primitivas de sincronizacion

18. [Wol04] Dados 3 procesos P0, P1 y P2 que realizan las acciones A0, A1 y A2, poner P's y V's de semaforos antes y despues de las acciones para sincrinizarlos de manera tal que se ejecuten en secuencia A0,A1,A2. Especificar el/los valor/es inicial/es de el/los semaforo/s. 19. [Wol04] Implementar utilizando semaforos la Region Critica N-1, es decir dentro de la region critica puede haber a lo mas N-1 procesos. 20. [Tan02, 2.24] {Dificil} Implemente semaforos generales (el semaforo almacena valores arbitrarios) usando semaforos binarios (solo pueden valer 0 o 1). 21. [Fin88, 8.22] Implementar semaforos utilizando monitores. 22. [Tan02, 2.28] {Dificil} La sincronizacion en monitores usa variables de condicion y dos operaciones especiales, wait y signal. Una forma mas general de sincronizacion son las esperas por condiciones con autosealizacion, donde escribimos await CondicionBooleana para bloquear el proceso hasta que la condicion se cumpla. Por ejemplo el BeginWrite del problema de lectores y escritores se resume a escribir await nr=0nw=0 dentro del monitor Claramente este esquema es mas general y abstracto que los monitores de Hoare y Brinch-Hansen, pero no se usan. ?Por que? Ayuda: pensar en la implementacion. 23. [Tan02, 2.33] {Mediano} El problema de lectores y escritores puede ser formulado de varias formas respecto a cuando cada categoria de procesos puede empezar. De manera cuidadosa describa 3 variaciones distintas del problema, cada una favoreciendo (o desfavoreciendo) alguna categoria de procesos. Para cada variacion, especifique que sucede cuando un lector o escritor esta listo para acceder a la base de datos y que sucede cuando un proceso ha terminado de usar la base de datos. 24. [Tan02, 2.50] Tenemos un Bao Unisex donde puede haber de manera excluyente varones y mujeres. Mediante semaforos sincronice la entrada y la salida del bao por parte de varones y mujeres (EntraVaron, SaleVaron, EntraMujer, SaleMujer) de manera que se cumpla con el invariante nv=0 nm=0, es decir que no se mezclen. Este problema clasico de sincronizacion tambien se conoce con el nombre de problema del Puente de Una Via, y modela el acceso a un recurso que puede ser compartido por muchos procesos de un tipo o (excluyente) de otro.

El sistema de archivos /procLas funciones primarias del kernel de Linux son controlar el acceso a los dispositivos fsicos del ordenador y establecer cundo y cmo deben de tener lugar la interaccin entre estos dispositivos. Dentro del directorio /proc/, se puede encontrar una gran cantidad de informacin con detalles sobre el hardware del sistema y cualquier proceso que se est ejecutando actualmente. Adems, algunos de los archivos dentro del rbol de directorios /proc/ pueden ser manipulados por los usuarios y aplicaciones para comunicar al kernel cambios en la configuracin.

El sistema de archivos /procEl sistema de archivos /proc contiene un sistema de archivos imaginario o virtual. Este no existe fsicamente en disco, sino que el ncleo lo crea en memoria. Se utiliza para ofrecer informacin relacionada con el sistema (originalmente acerca de procesos, de aqu su nombre). Algunos de los archivos ms importantes se encuentran explicados mas abajo. El sistema de archivos /proc se encuentra descrito con ms detalle en la pgina de manual de proc. /proc/1 Un directorio con informacin acerca del proceso nmero 1. Cada proceso tiene un directorio debajo de /proc cuyo nombre es el nmero de identificacin del proceso (PID). /proc/cpuinfo Informacin acerca del procesador: su tipo, marca, modelo, rendimiento, etc. /proc/devices Lista de controladores de dispositivos configurados dentro del ncleo que est en ejecucin.

/proc/dma Muestra los canales DMA que estn siendo utilizados. /proc/filesystems Lista los sistemas de archivos que estn soportados por el kernel. /proc/interrupts Muestra la interrupciones que estn siendo utilizadas, y cuantas de cada tipo ha habido. /proc/ioports Informacin de los puertos de E/S que se estn utilizando en cada momento. /proc/kcore Es una imagen de la memoria fsica del sistema. Este archivo tiene exactamente el mismo tamao que la memoria fsica, pero no existe en memoria como el resto de los archivos bajo /proc, sino que se genera en el momento en que un programa accede a este. (Recuerde: a menos que copie este archivo en otro lugar, nada bajo /proc usa espacio en disco). /proc/kmsg Salida de los mensajes emitidos por el kernel. Estos tambin son redirigidos hacia syslog. /proc/ksyms Tabla de smbolos para el kernel. /proc/loadavg El nivel medio de carga del sistema; tres indicadores significativos sobre la carga de trabajo del sistema en cada momento. /proc/meminfo Informacin acerca de la utilizacin de la memoria fsica y del archivo de intercambio. /proc/modules Indica los mdulos del ncleo que han sido cargados hasta el momento.

/proc/net Informacin acerca del estado de los protocolos de red. /proc/self Un enlace simblico al directorio de proceso del programa que est observando a /proc. Cuando dos procesos observan a /proc, obtienen diferentes enlaces. Esto es principalmente una conveniencia para que sea fcil para los programas acceder a su directorio de procesos. /proc/stat Varias estadsticas acerca del sistema, tales como el nmero de fallos de pgina que han tenido lugar desde el arranque del sistema. /proc/uptime Indica el tiempo en segundos que el sistema lleva funcionando. /proc/version Indica la versin del ncleo Conviene aclarar que aunque los archivos anteriores tienden a ser archivos de texto fciles de leer, algunas veces pueden tener un formato que no sea fcil de interpretar. Por ello existen muchos comandos que solamente leen los archivos anteriores y les dan un formato distinto para que la informacin sea fcil de entender. Por ejemplo, el comando free, lee el archivo /proc/meminfo y convierte las cantidades dadas en bytes a kilobytes (adems de agregar un poco ms de informacin extra).

Tipo y modelo de CPU.#cat /proc/cpuinfo

Versin del kernel. $cat /proc/versin

Tiempo en das, horas, minutos y segundos que han transurrido desde que se inici el sistema operativo. $cat /proc/uptime

Cuanta memoria tiene y cuanta est disponible. #cat /proc/meminfo

Cuantos cambios de contexto han sucedido. Cuantos procesos se crearon desde que iniciel sistema. #cat /proc/stat

Tuberas en sistemas operativosEn informtica, una tubera (pipe o '|') consiste en una cadena de procesos conectados de forma tal que la salida de cada elemento de la cadena es la entrada del prximo. Es comn el uso de buffer de datos entre elementos consecutivos. Las tuberas (pipes) estn implementadas en forma muy eficiente en los sistemas operativos multitarea, iniciando todos los procesos al mismo tiempo, y atendiendo automticamente los requerimientos de lectura de datos para cada proceso cuando los datos son escritos por el proceso anterior. De esta manera el planificador de corto plazo va a dar el uso de la CPU a cada proceso a medida que pueda ejecutarse minimizando los tiempos muertos. Para mejorar el rendimiento, la mayora de los sistemas operativos implementan las tuberas usando buffers, lo que permite al proceso proveedor generar ms datos que lo que el proceso consumidor puede atender inmediatamente.

Buffer de datosUn buffer (o bfer) en informtica es un espacio de memoria, en el que se almacenan datos para evitar que el programa o recurso que los requiere, ya sea hardware o software, se quede sin datos durante una transferencia. Normalmente los datos se almacenan en un buffer mientras son transferidos desde un dispositivo de entrada (como un ratn) o justo antes de enviarlos a un dispositivo de salida (como unosaltavoces). Tambin puede utilizarse para transferir datos entre procesos, de una forma parecida a los bufferes utilizados en telecomunicaciones. Un ejemplo de esto ltimo ocurre en una comunicacin telefnica, en la que al realizar una llamada esta se almacena, se disminuye su calidad y el numero de bytes a ser transferidos, y luego se envian estos datos modificados al receptor. Pueden ser implementados por software o hardware, aunque la gran mayora son del primer tipo. Normalmente se usan cuando la frecuencias de transferencia de datos es distinta a la de procesado, dependiendo de las limitaciones del sistema, o tambin cuando la frecuencia es variable, como en la recepcin de vdeo online (streaming). stas diferencias temporales de transmisin son normalmente ajustadas mediante la implementacin de un algoritmo con cola (o estructura de tipo FIFO) en memoria, para as escribir datos en la cola a una frecuencia y leerlos a otra. Esto ocurre en el envo de datos de un procesador a una impresora para que los imprima, la velocidad de impresin de la fotocopiadora en comparacin a la del procesador es muy lenta, debido a esto la impresora tendr que tener una cola FIFO(software), para ir acumulando los trabajos que todava no se han podido imprimir. Los buffers se pueden usar en cualquier sistema digital, no solo en informticos, como en reproductores de msica y vdeo . Se puede ejemplificar la funcin de un buffer utilizando sta metfora: Un buffer es como tener dinero en el banco (buffer), un trabajo (entrada) y unos gastos fijos (salida). Si tienes un trabajo inestable, mientras tengas ciertos ahorros, puedes mantener tus gastos fijos sin problemas, e ir ingresando dinero cuando puedas segn vas trabajando. Si los ahorros son pequeos, en seguida que no tengas trabajo, no vas a poder acometer los gastos fijos. De la misma forma si escuchas msica en Internet y tu programa de audio usa un buffer pequeo, en cuanto que haya alguna interrupcin en la descarga (porque las descargas nunca tienen una velocidad constante), notars cortes de sonido, ya que faltar informacin.