You are on page 1of 28

Sistema Operativo Linux.

Manejo de archivos y directorios en Linux.


El sistema de archivos de Linux est organizado en archivos y directorios. Un archivo es una coleccin de datos que se almacena en un medio fsico y a la cual se le asigna un nombre. Los archivos, a su vez, estn agrupados en conjuntos llamados directorios. Un directorio puede tener subdirectorios, formndose as una estructura jerrquica con la forma de un rbol invertido. El directorio inicial de esa jerarqua se denomina directorio raz y se simboliza con una barra de divisin (/). El sistema de archivos de un Sistema Linux tpico est formado por los siguientes directorios bajo el directorio raz:

/bin Contiene los programas ejecutables que son parte del sistema operativo Linux. Muchos comandos de Linux como cat, cp, ls, more y tar estn ubicados en este directorio. /boot Contienen el kernel (o ncleo) de Linux y otros archivos necesarios para el administrador de inicio LILO, que realiza la carga inicial del sistema operativo cuando la computadora se enciende. /dev Contienen todos los archivos de acceso a dispositivos. Linux trata cada dispositivo (terminales, discos, impresoras,etc) como si fuera un archivo especial. /etc Contiene archivos de configuracin del sistema y los programas de inicializacin. /home Contiene los directorios HOME de los usuarios. El directorio HOME el directorio inicial en el que se encuentra posicionado un usuario al ingresar al sistema, por lo que tambin se conoce como directorio de login o de conexin. /lib Contiene los archivos de biblioteca utilizados por las aplicaciones y utilidades del sistema, as tambin como las libreras pertenecientes a diferentes lenguajes de programacin.

/lost+found Directorio para archivos recuperados por el proceso de reparacin del sistema de archivos, que se ejecuta luego de una cada del sistema y asegura su integridad luego de que el equipo haya sido apagado de manera inapropiada. /mnt Es un directorio vaco que se usa normalmente para montar dispositivos como disquetes y particiones temporales de disco. /proc Contiene archivos con informacin sobre el estado de ejecucin del sistema operativo y de los procesos. /root Es el directorio HOME para el usuario root (administrador del sistema). /sbin Contienen archivos ejecutables que son comandos que se usan normalmente para la administracin del sistema. /tmp Directorio temporal que puede usar cualquier usuario como directorio transitorio. /usr Contiene archivos de programa, de datos y de libreras asociados con las actividades de los usuarios. /var Contiene archivos temporales y de trabajo generados por programas del sistema. A diferencia de /tmp, los usuarios comunes no tienen permiso para utilizar los subdirectorios que contiene directamente, sino que deben hacerlo a travs de aplicaciones y utilidades del sistema. Permisos de archivos en Linux. En cualquier sistema multiusuario, es preciso que existan mtodos que impidan a un usuario no autorizado copiar, borrar, modificar algn archivo sobre el cual no tiene permiso. En Linux las medidas de proteccin se basan en que cada archivo tiene un propietario (usualmente el que cre el archivo). Adems, los usuarios pertenecientes a uno o ms grupos, los cuales son asignados por el Administrador dependiendo de la tarea que realiza cada usuario; cuando un usuario crea un archivo, el mismo le pertenece tambin a alguno de los grupos del usuario que lo cre. As, un archivo en Linux le pertenece a un usuario y a un grupo, cada uno de los cuales tendr ciertos privilegios de acceso al archivo. Adicionalmente, es posible especificar que derechos tendrn los otros usuarios, es decir, aquellos que no son el propietario del archivo ni pertenecen al grupo dueo del archivo. En cada categora de permisos (usuario, grupo y otros) se distinguen tres tipos de accesos: lectura (Read), escritura (Write y ejecucin (eXecute), cuyos significados varan segn se apliquen a un archivo o a un directorio. En el caso de los archivos, el permiso R (lectura) habilita a quien lo posea a ver el contenido del archivo, mientras que el permiso w (escritura) le permite cambiar el contenido. El permiso X (ejecucin) se aplica a los programas y habilita su ejecucin. Para los directorios, el permiso R permite listar el contendio del mismo (es decir, leer el directorio, mientras que el permite borrar o crear nuevos archivos en su interior (es decir, modificar o escribir el directorio). El permiso X da permiso de paso, es decir, la posibilidad de transformar el directorio en cuestin en el directorio actual.

Manejo de procesos en Linux.


En Linux cada proceso o demonio ejecutndose tiene un determinado nmero llamado PID (Identificador del proceso). Este identificador es nico. Podemos terminar programas no usados deteniendo sus procesos. Para realizar la gestin de procesos necesitamos identificar cierta informacin del proceso como su propietario, en que terminal esta corriendo y que comando esta ejecutando ese proceso. Un programa ejecutable es ledo del disco por el kernel y es cargado en memoria para ejecutarse, convirtindose en un proceso. En un proceso no slo hay una copia del programa, sino adems el kernel le aade informacin adicional para poder manejarlo. Un proceso se compone de tres bloques: segmento de texto, segmento de datos y pila. UNIX/Linux es un sistema multiproceso que permite la ejecucin de varios procesos de forma simultnea. Requiere de otro programa llamado Planificador o scheduler que permite gestionar que proceso entra a ejecutarse en cada instante en la CPU, ya que est en un recurso limitado. Todo proceso nace cuando algn otro proceso ejecuta la llamada al sistema clone. Una de las muchas formas de llamar a clone es a travs de la funcin fork. Clone crea un duplicado idntico del proceso que la ha llamado. Nuestro nuevo proceso no ver el espacio de direcciones del proceso padre, ni viceversa. Con mucha frecuencia, despus del clone el proceso llama a exec para lanzar un programa nuevo. La llamada a exec carga un programa en el espacio de direcciones del proceso y le pasa el control, perdindose el proceso llamante. Si un proceso quiere lanzar un programa sin desaparecer, lo que hace es llamar a clone y que el hijo llame a exec (servicios).

1. Ejecutndose en modo usuario: tiene el control del proceso mientras dura el quanto o no realice una llamada al sistema. 2. Ejecutndose en modo kernel: cuando el proceso realiza una llamada al sistema, el proceso cambia de estado y pasa ejecutar cdigo de rea al kernel. Cuando termina: Termina la tarea interrupcin (iret) vuelve a la siguiente instruccin que la llam. Se termina el quanto se hace un cambio de contexto, pasando el siguiente proceso a modo usuario. Si carece de algn recurso, queda en estado dormido. Si termina con exit, queda en estado zombi. 3. Planificado en memoria: tiene reservado los recursos de sistema que necesite. El proceso no se esta ejecutando, esta en cola de listo para ejecutarse esperando a que el planificador de tareas (scheduler) se lo permita. 4. Dormido en memoria: El proceso esta durmiendo cargado en memoria, ya que esta esperando que se complete una operacin (E/S, tiempo de espera (timer), espera de recibir un evento o mensaje). 5. Planificado en swap: esta en memoria secundaria, listo para ejecutarse, pero intercambiador (proceso 0 o swapper) debe cargar el proceso en memoria antes de que el planificador pueda ordenar que pase a ejecutarse. 6. Dormido en swap: El proceso esta durmiendo y el intercambiador ha descargado el proceso hacia una memoria secundaria para dejar espacio en la memoria principal donde poder cargar

otros procesos. 7. El proceso esta volviendo del modo superusuario al modo usuario, pero el planificador se apropia del proceso y hace un cambio de contexto, pasando otro proceso a ejecutarse en modo usuario. 8. El proceso acaba de ser creado (con folk) y est en un estado de transicin; el proceso existe, pero ni est preparado para ejecutarse, ni durmiendo. Este proceso es el inicial para todos los procesos, excepto el proceso 0. 9. El proceso ejecuta la llamada exit y pasa al estado zombi. El proceso libera todos los recursos pero mantiene la entrada en la tabla de procesos. No termina de morir, esperando la notificacin por parte del padre, de que ha recogido el registro que contiene el cdigo de salida y su estado. Es un estado temporal. En caso de que el proceso padre muera antes de que finalice el hijo, ser el proceso init quien asuma su paternidad.

Manejo de memoria en Linux.


La memoria virtual hace ms cosas aparte de ampliar la memoria del ordenador. El subsistema de gestin de memoria ofrece: Espacio de direcciones grande El sistema operativo hace que el sistema parezca tener una gran cantidad de memoria. La memoria virtual puede ser muchas veces mayor que la memoria fsica del sistema, Proteccin Cada proceso del sistema tiene su propio espacio de direcciones virtuales. Este espacio de direcciones est completamente aislado de otros procesos, de forma que un proceso no puede interferir con otro. Tambin, el mecanismo de memoria virtual ofrecido por el hardware permite proteger determinadas reas de memoria contra operaciones de escritura. Esto protege el cdigo y los datos de ser sobre-escritos por aplicaciones perversas. Proyeccin de Memoria (Memory Mapping) La proyeccin de memoria se utiliza para asignar un fichero sobre el espacio de direcciones de un proceso. En la proyeccin de memoria, el contenido del fichero se ``engancha'' directamente sobre el espacio de direcciones virtual del proceso. Asignacin Equitativa de Memoria Fsica El subsistema de gestin de memoria permite que cada proceso del sistema se ejecute con una cantidad de memoria justa de toda la memoria fsica disponible, de forma que todos los procesos dispongan de los recursos que necesitan. Memoria virtual compartida Aunque la memoria virtual permite que cada proceso tenga un espacio de memoria separado (virtual), hay veces que es necesario que varios procesos compartan memoria. Por ejemplo pueden haber varios procesos del sistema ejecutando el interprete de ordenes bash. En lugar de tener varias copias del bash, una en cada memoria virtual de cada proceso, es mejor slo tener una sola copia en memoria fsica y que todos los procesos que ejecuten bash la compartan. Las bibliotecas dinmicas son otro ejemplo tpico de cdigo ejecutable compartido por varios procesos.

Por otra parte, la memoria compartida se puede utilizar como un mecanismo de comunicacin entre procesos (Inter Process Communication IPC), donde dos o ms procesos intercambian informacin va memoria comn a todos ellos. Linux ofrece el sistema de comunicacin entre procesos de memoria compartida de Unix System V. Modelo Abstracto de Memoria Virtual Antes de considerar los mtodos que Linux utiliza para implementar la memoria virtual, es interesante estudiar un modelo abstracto que no est plagado de pequeos detalles de implementacin. Conforme el procesador va ejecutando un programa lee instrucciones de la memoria y las decodifica. Durante la decodificacin de la instruccin puede necesitar cargar o guardar el contenido de una posicin de memoria. El procesador ejecuta la instruccin y pasa a la siguiente instruccin del programa. De esta forma el procesador est siempre accediendo a memoria tanto para leer instrucciones como para cargar o guardar datos. En un sistema con memoria virtual, todas estas direcciones son direcciones virtuales y no direcciones fsicas. Estas direcciones virtuales son convertidas en direcciones fsicas por el procesador utilizando para ello informacin guardada en un conjunto de tablas mantenidas por el sistema operativo. Para hacer la traduccin ms fcil, tanto la memoria virtual como la fsica estn divididas en trozos de un tamao manejable llamados pginas. Estas pginas son todas del mismo tamao, en principio no necesitaran serlo pero de no serlo la administracin del sistema se complicara muchsimo. Linux en un sistema Alpha AXP utiliza pginas de 8 Kbytes, y en un sistema Intel x86 utiliza pginas de 4 Kbytes. Cada una de estas pginas tiene asociado un nico nmero; el nmero de marco de pgina (PFN). En este modelo de paginacin, una direccin virtual est compuesta de dos partes: un desplazamiento y un nmero de pgina virtual. Si el tamao de pgina es de 4Kbytes, los bits 11:0 de la direccin de memoria virtual contienen el desplazamiento y los restantes bits desde el bit 12 son el nmero de marco de pgina virtual. Cada vez que el procesador encuentra una direccin virtual ha de extraer el desplazamiento y el nmero de marco de pgina. El procesador tiene que traducir el nmero de marco de la pgina virtual a la fsica y luego acceder a la posicin correcta dentro de la pgina fsica. Para hacer todo esto, el procesador utiliza la tabla de pginas. Para traducir una direccin virtual a una fsica, el procesador tiene que extraer de la direccin virtual el nmero de marco de pgina y el desplazamiento dentro de la pgina virtual. Si hacemos que el tamao de pgina sea potencia de 2, entonces esta operacin se puede hacer fcilmente mediante una mscara y un desplazamiento. El procesador utiliza el nmero de marco de pgina virtual como ndice a la tabla de pginas del proceso para obtener la entrada de la tabla de pgina correspondiente. Si la entrada en la tabla de pginas de ese ndice es valida, el procesador coge el nmero de marco de pgina fsico de esta entrada. Si por el contrario la entrada no es valida, entonces el proceso ha accedido a una rea de memoria virtual que no existe. En este caso, el procesador no puede resolver la direccin y deber pasar el control al sistema operativo para que ste solucione el problema. La forma en la que el procesador informa al sistema operativo que un proceso concreto ha intentado realizar un acceso a una direccin virtual que no se ha podido traducir, es especfico del procesador. Independientemente del mecanismo empleado por el procesador, a esto se le conoce como fallo de pgina y el sistema operativo es informado de la direccin virtual que lo ha producido y la razn por la que se produjo. Suponiendo que sta sea una entrada valida en la tabla de pginas, el procesador toma el nmero de

marco de pgina fsico y lo multiplica por el tamao pgina para obtener la direccin base de la pgina fsica en memoria. Finalmente, el procesador le suma el desplazamiento a la instruccin o dato que necesita, y sta es la direccin fsica con la que accede a memoria. Siguiendo en el ejemplo anterior, el nmero de marco de pgina virtual 1 del proceso Y est asociado al nmero de marco de pgina fsico 4 que comienza en la direccin 0x8000 (4 x 0x2000). Sumndole el desplazamiento de 0x194 nos da una direccin fsica de 0x8194. Asignando direcciones virtuales a direcciones fsicas de esta forma, la memoria virtual se puede asociar sobre las pginas fsicas en cualquier orden. Paginacin por Demanda Puesto que hay mucha menos memoria fsica que memoria virtual, el sistema operativo ha de tener especial cuidado de no hacer un mal uso de la memoria fsica. Una forma de conservar memoria fsica es cargar solo las pginas que estn siendo utilizadas por un programa. Por ejemplo, un programa de bases de datos puede ser ejecutado para realizar una consulta a una base de datos. En este caso no es necesario cargar en memoria toda la base de datos, sino solo aquellos registros que que son examinados. Si la consulta consiste en realizar una bsqueda, entonces no tiene sentido cargar el fragmento de programa que se ocupa de aadir nuevos registros. Esta tcnica de slo cargar pginas virtuales en memoria conforme son accedidas es conocida como paginacin por demanda. Cuando un proceso intenta acceder a una direccin virtual que no est en esos momentos en memoria, el procesador no puede encontrar la entrada en la tabla de pginas de la pgina virtual referenciada. Si direccin virtual que ha fallado es invalida, significa que el proceso ha intentado acceder a una direccin que no debera. Puede ser que la aplicacin haya hecho algo errneo, por ejemplo escribir en una posicin aleatoria de memoria. En este caso, el sistema operativo ha de terminarlo, protegiendo as a otros procesos de este ``perverso'' proceso. Si la direccin virtual que ha producido el fallo era valida pero la pgina que referencia no est en memoria en ese momento, el sistema operativo tiene que traer la pgina apropiada a memoria desde el disco. Los accesos a disco requieren mucho tiempo, en trminos relativos, y por tanto el proceso tiene que esperar cierto tiempo hasta que la pgina se haya ledo. Si hay otros procesos que pueden ejecutarse entonces el sistema operativo elegir alguno de estos para ejecutar. La pgina pedida se escribe en una pgina fsica libre y se aade una entrada a la tabla de pginas del proceso para esta pgina. El proceso en entonces puesto otra vez en ejecucin justo en la instruccin donde se produjo el fallo de pgina. Esta vez s que se realizar con xito el acceso a la direccin de memoria virtual, el procesador puede hacer la traduccin de direccin virtual a fsica y el proceso continua normalmente. Linux utiliza la paginacin por demanda para cargar imgenes ejecutables en la memoria virtual de un proceso. Siempre que se ejecuta un proceso, se abre el fichero que la contiene y su contenido se asocia en la memoria virtual del proceso. Esto se hace modificando las estructuras de datos que describen el mapa de memoria del proceso y se conoce como asociacin de memoria. Sin embargo, solo la primera parte de la imagen se copia realmente en memoria fsica. El resto de la imagen se deja en disco. Conforme se va ejecutando, se generan fallos de pgina y Linux utiliza el mapa de memoria del proceso para determinar qu partes de la imagen ha de traer a memoria para ser ejecutadas. Intercambio (swapping) Si un proceso necesita cargar una pgina de memoria virtual a memoria fsica y no hay ninguna pgina de memoria fsica libre, el sistema operativo tiene que crear espacio para la nueva pgina eliminando alguna otra pgina de memoria fsica.

Si la pgina que se va a eliminar de memoria fsica provena de una fichero imagen o de un fichero de datos sobre el que no se ha realizado ninguna escritura, entonces la pgina no necesita ser guardada. Tan slo se tiene que desechar y si el proceso que la estaba utilizando la vuelve a necesitar simplemente se carga nuevamente desde el fichero imagen o de datos. Por otra parte, si la pgina haba sido modificada, el sistema operativo debe preservar su contenido para que pueda volver a ser accedido. Este tipo de pgina se conoce como pgina sucia (dirty page) y para poderla eliminar de memoria se ha de guardar en un fichero especial llamado fichero de intercambio (swap file). El tiempo de acceso al fichero de intercambio es muy grande en relacin a la velocidad del procesador y la memoria fsica y el sistema operativo tiene que conjugar la necesidad de escribir pginas al disco con la necesidad de retenerlas en memoria para ser usadas posteriormente. Si el algoritmo utilizado para decidir qu pginas se descartan o se envan a disco (el algoritmo de intercambio) no es eficiente, entonces se produce una situacin llamada hiper-paginacin (thrashing). En este estado, las pginas son continuamente copiadas a disco y luego ledas, con lo que el sistema operativo est demasiado ocupado para hacer trabajo til. Linux utiliza la tcnica de paginacin por antigedad (LRU Last Redently Used) para escoger de forma equitativa y justa las pginas a ser intercambiadas o descartadas del sistema. Este esquema implica que cada pgina del sistema ha de tener una antigedad que ha de actualizarse conforme la pgina es accedida. Cuanto ms se accede a una pgina ms joven es; por el contrario cuanto menos se utiliza ms vieja e inutil. Las pginas viejas son las mejoras candidatas para ser intercambiadas. Memoria virtual compartida Gracias a los mecanismos de memoria virtual se puede coseguir fcilmente que varios procesos compartan memoria. Todos los accesos a memoria se realizan a travs de las tablas de pginas y cada proceso tiene su propia tabla de pginas. Para que dos procesos compartan una misma pgina de memoria fsica, el nmero de marco de est pgina ha de aparecer en las dos tablas de pgina. Modos de direccionamiento fsico y virtual No tiene mucho sentido que el propio sistema operativo se ejecute sobre memoria virtual. Sera una verdadera pesadilla que el sistema operativo tuviera que mantener tablas de pgina para l mismo. La mayora de los procesadores de propsito general ofrecen la posibilidad del modo de direccionamiento fsico junto con direccionamiento virtual. El modo de direccionamiento fsico no necesita las tablas de pginas y el procesador no intenta realizar ningn tipo de traduccines en este modo. El ncleo de Linux est preparado para funcionar sobre un espacio de direccionamiento fsico. El procesador Alpha AXP no tiene un modo especial de direccionamiento fsico. Lo que hace es dividir el espacio de memoria en varias reas y designa a dos de ellas como direcciones fsicas. A este espacio de direcciones del ncleo se le conoce como espacio de direcciones KSEG y contiene todas las direcciones a partir de la 0xfffffc0000000000. Para poder ejecutar cdigo enlazado en KSEG (por definicin, el cdigo del ncleo) o acceder a datos de esta zona, el cdigo debe ejecutarse en modo ncleo. El ncleo de Linux en Alpha est enlazado para ejecutarse a partir de la direccin0xfffffc0000310000. Control de acceso Las entradas de la tabla de pginas tambin contienen informacin relativa al control de acceso. Puesto que el procesador tiene que utilizar la informacin de la tabla de pginas para traducir las direcciones virtuales a direcciones fsicas, puede fcilmente utilizar la informacin de control de acceso para

comprobar que el proceso no est accediendo a memoria de forma apropiada. Hay muchas razones por las que se puede querer restringir el acceso a determinadas reas de memoria. Hay memoria, como la que contiene el ejecutable, que es claramente memoria de slo lectura; el sistema operativo no ha de dejar que el proceso escriba sobre su propio cdigo de programa. Por el contrario, pginas de memoria que contengan datos han de poder ser ledas y escritas, pero un intento de ejecutar algo de estas pginas ha fallar. La mayora de los procesadores tienen al menos dos modos de operacin: modo ncleo y modo usuario. No es deseable que un proceso ejecute cdigo del ncleo, o que acceda a datos del ncleo excepto cuando el procesador est funcionando en modo ncleo. Caches Si implementramos un sistema utilizando el modelo terico que acabamos de describir, obviamente funcionaria, pero no sera particularmente eficiente. Tanto los diseadores de sistemas operativos como los de procesadores, se esfuerzan al mximo para obtener el mayor rendimiento posible del sistema. Adems de hacer los procesadores, la memoria y otros dispositivos ms rpidos la mejor forma de obtener un buen rendimiento consiste en mantener en memorias caches la informacin que se utiliza muy a menudo. Linux emplea unas cuantas caches para la gestin de la memoria: Buffer Cache Contiene buffers de datos que son utilizados por los manejadores de dispositivos de bloques. Estos buffers son de tamao fijo (por ejemplo 512 bytes) y contienen bloques de informacin que ha sido bien leda de un dispositivo de bloques o que ha de ser escrita. Un dispositivo de bloques es un dispositivo sobre el que slo se pueden realizar operaciones de lectura o escritura de bloques de tamao fijo. Todos los discos duros son dispositivos de bloque. El cache buffer est indexado va el identificador de dispositivo y el nmero de bloque deseado, ndice que es utilizado para una rpida localizacin del bloque. Los dispositivos de bloque son exclusivamente accedidos a travs del buffer cache. Si un dato (bloque) se puede encontrar en el buffer cache, entonces no es necesario leerlo del dispositivo de bloques fsico, por el disco duro, y por tanto el acceso es mucho ms rpido. Cache de Pginas Este se utiliza para acelerar el acceso a imgenes y datos en disco. Se utiliza para guardar el contenido lgico de un fichero de pgina en pgina y se accede va el fichero y el desplazamiento dentro del fichero. Conforme las pginas se leen en memoria, se almacenan en la page cache. Cache de Intercambio Solo las pginas que han sido modificadas (dirty) son guardadas en el fichero de intercambio. Mientras no vuelvan a ser modificadas despus de haber sido guardadas en el fichero de swap, la prxima vez que necesiten ser descartadas (swap out) no ser necesario copiarlas al fichero de intercambio pues ya estn all. Simplemente se las elimina. En un sistema con mucho trasiego de pginas, esto evita muchas operaciones de disco innecesarias y costosas. Caches Hardware Es una cache normalmente implementada en el propio procesador; la cache de entradas de tabla de pgina. En este caso, el procesador no necesita siempre leer la tabla de pginas directamente, sino que guarda en esta cache las traducciones de las pginas conforme las va necesitando. Estos son los Translation Look-aside Buffers (TLB) que contienen copias de las entradas de la tabla de

pginas de uno o ms procesos del sistema. Cuando se hace la referencia a una direccin virtual, el procesador intenta encontrar en el TLB la entrada para hacer la traduccin a memoria fsica. Si la encuentra, directamente realiza la traduccin y lleva a cabo la operacin. Si el procesador no puede encontrar la TPE buscada, entonces tiene que pedir ayuda al sistema operativo. Esto lo hace enviando una seal al sistema operativo indicando que se ha producido un fallo de TLB 3. Un mecanismo especfico al sistema se utiliza para enviar esta excepcin al cdigo del sistema operativo que puede arreglar la situacin. El sistema operativo genera una nueva entrada de TLB para la direccin que se estaba traduciendo. Cuando la excepcin termina, el procesador hace un nuevo intento de traducir la direccin virtual. Esta vez tendr xito puesto que ahora ya hay una entrada en la TLB para esa direccin. El inconveniente de utilizar memorias cache, tanto hardware como de otro tipo, es que para evitar esfuerzos Linux tiene que utilizar ms tiempo y espacio para mantenerlas y, si se corrompe su contenido, el sistema dejar de funcionar. Tablas de Pginas en Linux Linux supone que hay tres niveles de tablas de pginas. Cada nivel de tablas contiene el nmero de marco de pgina del siguiente nivel en la tabla de pginas. Cada plataforma sobre la que funciona Linux tiene que proporcionar las macros que permitan al ncleo atravesar las tablas de pgina de cada proceso. De esta forma, el ncleo no necesita conocer el formato de las entradas de la tabla de pginas ni cmo stas se organizan. Esto es tan til que Linux utiliza el mismo cdigo de gestin de tablas de pginas en un procesador Alpha, que tiene tres niveles de tablas de pginas, que en un Intel x86, que slo tiene dos niveles de tablas. Asignacin y liberacin de pginas Se producen muchas peticiones de pginas fsicas. Por ejemplo, cuando una imagen se carga a memoria, el sistema operativo necesita asignar pginas. stas sern liberadas cuando la imagen concluya su ejecucin y se descargue. Otro uso de pginas fsicas es para contener estructuras de datos especficas tales como las propias tablas de pginas. Los programas y las estructuras de datos relacionados con la asignacin y liberacin de pginas son quizs los ms crticos para obtener un subsistema de memoria virtual eficiente. Todas las pginas fsicas del sistema estn descritas por la estructura mem_map que es una lista de estructuras del tipo mem_map_t, la cual es inicializada al arrancar del sistema. Cada mem_map_t describe una sola pgina fsica. Los campos ms importantes son (en lo relativo a la gestin de memoria): count Contador del nmero de usuarios de esta pgina. El valor del contador es mayor que uno cuando la pgina es compartida por varios procesos. age Este campo describe la antigedad de la pgina, y se utiliza para decidir si la pgina es una buena candidata para ser descartada o enviada a disco. map_nr Nmero de marco de pgina fsica que describe esta estructura mem_map_t.

El vector free_area es utilizado por el cdigo de asignacin de pginas para encontrar pginas libres. Todo el esquema de gestin de buffers est soportado por este mecanismo y desde el punto de vista del cdigo, el tamao de las pginas y los mecanismos de paginacin fsica utilizados por el procesador son irrelevantes. Cada elemento de free_area contiene informacin sobre bloques de pginas. El primer elemento del vector describe pginas simples, el siguiente bloques de 2 pginas, el siguiente bloques de 4 pginas y as creciendo en potencias de 2. El elemento list se utiliza como cabeza de una cola que contiene punteros a la estructura page del vector mem_map. Los bloques de pginas libres se encolan aqu. map es un puntero a un mapa de bits que mantiene un registro de los grupos de pginas de este tamao. El bit N del mapa de bits est a uno si el ene-avo bloque de pginas est libre. Asignacin de pginas Linux utiliza el algoritmos Buddy5 para asignar y liberar eficientemente bloques de pginas. El cdigo de asignacin intenta asignar un bloque de una o ms pginas fsicas. Las pginas se asignan en bloques de tamao potencia de 2. Esto quiere decir que puede asignar bloques de 1, 2, 4, etc pginas. Mientras haya suficientes pginas libres en el sistema para satisfacer esta peticin (nr_free_pages >min_free_pages) el cdigo de asignacin buscar en el free_area bloques de pginas del tamao pedido. As, elemento del free_area tiene un mapa de bloques de pginas asignados y libres para ese tamao de bloque. Por ejemplo, el elemento 2 del vector tiene un mapa de memoria que describe los bloques de 4 pginas libres y asignados. El algoritmo de asignacin busca primero entre los bloques de pginas de igual tamao que el pedido. Luego sigue la lista de pginas libres que est encolada en el elemento list de la estructura de datosfree_area. Si no encuentra ningn bloque de pginas del tamao pedido libre, entonces busca en los siguientes (los cuales son del doble del tamao pedido). Este proceso continua hasta que bien todos los elementos de free_area han sido examinados o bien se he encontrado un bloque de pginas libres. Si el bloque de pginas encontrado es mayor que el pedido, entonces se trocea hasta conseguir un bloque del tamao deseado. Puesto que el nmero de pginas de cada bloque es potencia de 2, simplemente dividiendo el bloque en dos tenemos dos bloques con un tamao de bloque inmediatamente inferior. Los bloques libres se insertan en la cola apropiada y el bloque de pginas asignado se devuelve al que realiz la llamada. Liberacin de pginas Asignar bloques de pginas tiende a fragmentar la memoria al dividir los bloques grandes para conseguir bloques ms pequeos. El cdigo de liberacin de pginas re-combina pginas en bloques de mayor tamao siempre que es posible. De hecho, el tamao de bloque de pgina es importante pues facilita la recombinacin en bloques grandes. Siempre que se libera un bloque de pginas, se comprueba si est libre el bloque adyacente de igual tamao. Si es as, se combina con el bloque de pginas recin liberado para formar un bloque nuevo de tamao doble. Cada vez que dos bloques de pginas se recombinan en uno mayor, el algoritmo de liberacin intenta volver a recombinarlo en otro an mayor. De esta forma, los bloques de pginas libres son tan grandes como la utilizacin de la memoria permita. Proyeccin de Memoria (Memory Mapping) Cuando se ejecuta programa, el contenido del fichero imagen se ha de copiar al espacio de memoria virtual del proceso. Lo mismo sucede con cualquier biblioteca compartida que el proceso necesite. El

fichero ejecutable realmente no se lleva a memoria fsica, sino que solamente se enlaza en la memoria virtual del proceso. Luego, conforme partes del programa son referenciadas por la ejecucin de la aplicacin, la imagen es llevada a memoria fsica desde la imagen del ejecutable. Este tipo de enlazado de una imagen sobre el espacio de direcciones virtuales de un proceso se conoce como "proyeccin de memoria". La memoria virtual de cada proceso est representado por la estructura de datos mm_struct. sta contiene informacin sobre la imagen que actualmente se est ejecutando (por ejemplo bash) as como punteros a unas cuantas estructuras vm_area_struct. Cada estructura de datos vm_area_struct describe el inicio y fin de un rea de memoria virtual, los permisos del proceso sobre esta memoria y el conjunto de operaciones para gestionar la. Estas operaciones son el conjunto de rutinas que Linux tiene que utilizar para manipular esta rea de memoria virtual. Por ejemplo, una de las operaciones de memoria virtual lleva a cabo las acciones necesarias cuando el proceso ha intentado acceder a la memoria virtual pero encuentra (debido a un fallo de pgina) que la memoria no est realmente en memoria fsica. Esta es la operacin nopage. La operacin nopage se emplea cuando Linux pide pginas de un fichero ejecutable a memoria. Cuando una imagen ejecutable se proyecta sobre las direcciones virtuales de un proceso se generan un conjunto de estructuras de datos vm_area_struct. Cada estructura de stas representa una parte de la imagen del ejecutable; el cdigo ejecutable, datos inicializados (variables), datos no inicializados y dems. Linux tiene unas cuantas operaciones de memoria virtual estndar, y cuando se crean las estructuras de datos vm_area_struct, el conjunto de operaciones correcto se asocia con sta. Paginacin por Demanda Una vez una imagen ejecutable ha sido proyectada sobre la memoria virtual de un proceso, ste puede comenzar su ejecucin. Puesto que solo el principio de la imagen ha sido realmente copiado en memoria fsica, rpidamente el programa acceder a una rea de memoria virtual que todava no ha sido llevada a memoria fsica. Cuando un proceso accede a una direccin virtual que no tiene una entrada valida en la tabla de pginas, el procesador informar sobre el fallo de pgina a Linux. El fallo de de pgina indica la direccin virtual donde se produjo el fallo de pgina y el tipo de acceso que lo caus. Linux debe encontrar la vm_area_struct que representa el rea de memoria donde sucedi el fallo de pgina. Puesto que la bsqueda por las estructuras de datos vm_area_struct es crtica para la gestin eficiente de los fallos de pginas, stas estn organizadas juntas en un estructura de rbol AVL (Adelson-Velskii and Landis). Si no hay ninguna estructura vm_area_struct para la direccin virtual que produjo el fallo de pgina entonces el proceso ha accedido a una direccin de memoria virtual ilegal. Linux enviar al proceso la seal SIGSEGV, y si el proceso no ha instalado un manejador de seales para esta seal entonces morir. Lo siguiente que hace Linux es comprobar el tipo de fallo de pgina producido y los tipos de acceso permitidos para el rea de memoria virtual en cuestin. Si el proceso ha intentado acceder a la memoria de forma ilegal, por ejemplo intentando escribir sobre una rea de la que slo tena permisos de lectura, tambin se seala un error de memoria. Ahora que Linux ha determinado que el fallo de pgina es legal, tiene que tratarlo. Linux ha de diferenciar entre pginas que estn en un fichero de intercambio y aquellas que son parte de una imagen ejecutable localizadas en algn lugar del disco. Esto lo hace utilizando la entrada en la tabla de pginas de la pgina que caus el fallo. Si la entrada de la tabla de pginas es invalida pero no est vaca, el fallo de pgina se debe a que la

pgina est en esos momentos en un fichero de intercambio. Estas entradas se identifican en el Alpha AXP porque no tienen el bit de valido activado pero tienen un valor distinto de cero en el campo PFN. En este caso, el campo PFN contiene informacin sobre dnde se encuentra la pgina: fichero de intercambio y posicin dentro de ste. Cmo se gestionan las pginas en un fichero de intercambio se describir ms adelante en este mismo captulo. No todas las estructuras vm_area_struct tienen un conjunto de operaciones de memoria virtual e incluso stas pueden no tener la operacin nopage. Esto es debido a que por defecto Linux gestiona los accesos asignando una pgina de memoria fsica nueva y creando para sta la correspondiente entrada en la tabla de pginas. Si no hay operacin de nopage para esta rea de memoria virtual, Linux har esto ltimo. La operacin genrica de nopage de Linux se utiliza para proyectar imgenes ejecutables y utiliza la cache de pginas para traer la pgina imagen requerida a memoria fsica. Cuando la pgina necesitada es cargada en memoria fsica, las tablas de pginas del proceso son actualizadas. Puede ser necesario realizar determinadas acciones especificas del hardware para actualizar estas entradas, en particular si el procesador utilizar buffers cache TLB (Translatin Lookaside Buffer). Ahora que el problema con la pgina que produjo el fallo ha sido resuelto, se puede olvidar el percance y el proceso puede continuar su ejecucin en la instruccin que produjo el fallo de pgina. La Cache de Pginas de Linux El cometido de la cache de pginas en Linux es el de acelerar el acceso a los fichero de disco. Las lecturas sobre los ficheros proyectados en memoria se realizan pgina a pgina y estas pginas se guardan en la cache de pginas. Siempre que se lee en una pgina de un fichero proyectado en memoria, por ejemplo cuando se necesita traer a memoria una pgina desde un fichero de intercambio, la pgina se lee a travs de la cache de pginas. Si la pgina est presente en la cache, se devuelve un puntero a la estructura de datos mem_map_t a la rutina de tratamiento de fallos de pgina. En caso contrario, la pgina se ha de traer a memoria desde el sistema de ficheros que contiene la imagen. Linux asigna una pgina fsica y lee la pgina desde el fichero del disco. Si es posible, Linux comenzar una lectura de la siguiente pgina del fichero. Con esta pgina de adelanto se consigue que si el proceso est accediendo las paginas de forma secuencial, la siguiente pgina est lista y esperando en memoria la peticin del proceso. Con el tiempo, la cache de pginas va creciendo conforme las imgenes se leen y ejecutan. Las pginas han de ser eliminadas de la cache cuando dejan de utilizarse, por ejemplo cuando una imagen ya no es utilizada por ningn proceso. Conforme Linux utiliza memoria puede comenzar a escasear las pginas de memoria fsica. En esta situacin Linux reducir el tamao de la cache de pginas. Intercambiando y Liberando Pginas Cuando queda poca memoria fsica, el subsistema de gestin de memoria de Linux tiene que intentar liberar pginas fsicas. Este trabajo es realizado por el demonio de intercambio del ncleo ( kswapd). El demonio de intercambio del ncleo es un tipo especial de proceso, un hilo de ejecucin del ncleo (kernel thread). Los hilos del ncleo son procesos que no tienen memoria virtual, en lugar de ello, se ejecutan en modo ncleo en el espacio de memoria fsica. Su misin es la de garantizar que haya suficientes pginas libres en el sistema para mantener al sistema de gestin de memoria funcionando eficientemente.

El demonio de intercambio (kswapd) es puesto en marcha por el proceso init del ncleo durante el arranque de Linux y se queda esperando al temporizador del swap del ncleo a que lo despierte de forma peridica. Cada vez que expira el temporizador, el demonio de intercambio comprueba que el nmero de pginas libres no sea demasiado bajo. Utiliza dos variables, free_pages_high y free_pages_lowpara decidir si ha de liberar algunas pginas. Mientras el nmero de pginas libres del sistema se mantenga por encima de free_pages_high, el demonio de intercambio no hace nada; se duerme hasta que vuelva a despertarlo el temporizador. Linux no quiere enviar a disco de intercambio demasiadas pginas a la vez, por lo que en nr_async_pages lleva la cuenta de cuantas pginas estn en ese momento siendo copiadas al fichero de intercambio. nr_async_pages es incrementado cada vez que se encola una pgina para ser escrita en el fichero de intercambio, y decrementado cuando ha concluido la escritura. Los valores defree_pages_low y free_pages_high se asignan al arrancar el sistema en funcin del nmero de pginas de memoria fsica del sistema. Si hay suficientes pginas libres, el demonio de intercambio se vuelve a dormir hasta que el temporizador vuelva a expirar otra vez, en caso contrario,el demonio intenta de tres formas distintas reducir el nmero de pginas fsicas ocupadas: Reduciendo el tamao de la cache de pginas y el buffer cache Enviando a disco pginas compartidas, Enviando a disco o descartando pginas. Si el nmero de pginas libres ha cado por debajo de free_pages_low, el demonio de intercambio intentar liberar 6 pginas antes de su prxima ejecucin. En caso contrario, intentar liberar 3 pginas. Los mtodos anteriores se intentan uno tras otro de hasta que se consiguen liberar suficientes pginas. Luego el demonio de intercambio se suspende hasta que el temporizador vuelva a expirar. El demonio recuerda cul fue el ltimo mtodo que emple para liberar pginas, y la prxima vez que se ejecuta lo vuelve a intentar con el mismo mtodo que tuvo xito. Tras haber liberado suficientes pginas, el demonio se duerme hasta que el temporizador lo vuelva a despertar. Si el nmero de pginas libres haba cado por debajo de free_pages_low, el demonio de intercambio slo dormir la mitad de su tiempo normal. Slo volver a dormir el tiempo normal cuando consiga que el nmero de pginas libres est por encima de free_pages_low. Reduciendo el tamao de la Cache de Pginas y el Buffer Cache Las pginas de la cache de pginas y del buffer cache son buenos candidatos a ser liberados en el vector free_area . La Cache de Pginas, que contiene pginas de ficheros proyectados a memoria, puede contener pginas innecesarias que estn saturando el sistema de memoria. Igualmente, el Buffer Cache que contiene buffers ledos desde o escritos a dispositivos fsicos, tambin puede contener buffers innecesarios. Cuando comienza a escasear las pginas de memoria fsica, liberar pginas de estas caches es relativamente sencillo pues no se necesita escribir sobre dispositivos fsicos (a diferencia de cuando se intercambian pginas fuera de memoria). Descartando estas pginas no tiene demasiados efectos laterales negativos, excepto reducir un poco la velocidad de acceso de los ficheros proyectados en memoria. Se han de descartar las pginas de estas caches de forma justa para asegurar que todos los procesos se degradan equitativamente. Cada vez que el demonio de intercambio intenta reducir el tamao de estas caches examina un bloque de pginas del vector de pginas mem_map para ver si se puede liberar alguna de memoria fsica. La cantidad de pginas examinadas es mayor si el demonio de intercambio est haciendo muchos intercambios; esto es, si el nmero de pginas libres ha cado peligrosamente. los bloques de pginas

son examinados de forma cclica, se examina un bloque de pginas en cada intento de reduccin del mapa de memoria. Este esquema se conoce como el algoritmo del reloj (clock algorthim), al igual que la manecilla de de minutos de un reloj de pulsera, todo el vector de mem_map es examinado poco a poco. Cada pgina que se examina, se comprueba si est en alguna de las dos caches. Es importante destacar que las pginas compartidas no son consideradas en este momento para ser descartadas, y que una pgina no puede estar en las dos caches al mismo tiempo. Si la pgina candidato no est en ninguna de las dos tablas, entonces se pasa a examinar la siguiente pgina del vector mem_map. Las pginas se guardan en el buffer cache (o mejor dicho, los buffers con las pginas son guardados) para hacer que la asignacin de liberacin sea ms eficiente. El cdigo de reduccin del mapa de memoria intenta liberar los buffers contenidos en la pgina que se est examinando. Si se consigue liberar todos los buffers, entonces las pginas que los contenan tambin son liberadas. Si la pgina considerada est en la cache de pginas, se elimina de esta cache y se libera. Cuando se ha liberado suficientes pginas en un intento, el demonio de intercambio del ncleo se suspende hasta que llegue el siguiente instante de activacin peridico. Si no ha sido capaz de liberar suficientes pginas entonces el demonio pasa a intentar liberar paginas compartidas. Intercambio de Pginas compartidas (System V Shared Memory Pages) El esquema de comparticin de memoria de System V es un mecanismo de de comunicacin entre procesos que permite que dos procesos compartan un espacio de memoria virtual para intercambiarse informacin entre ellos. Por ahora es suficiente con decir que cada rea de memoria compartida System V est descrita por una estructura de datos shmid_ds. Esta contiene un puntero a una lista de estructuras vm_area_struct, una por cada proceso que comparte esta rea de memoria virtual. Cadavm_area_struct de memoria compartida System V estn enlazadas una lista mediante los punteros vm_next_shared y vm_prev_shared. Cada estructura shmid_ds tambin contiene una lista de entradas de tabla de pgina, cada una de las cuales describe la pgina fsica sobre la que esta asociada una pgina de memoria virtual compartida. El demonio de intercambio del ncleo tambin utiliza el algoritmo del reloj para intercambiar las pginas compartidas System V. . Cada vez que se ejecuta, recuerda cul fue la ltima pgina de memoria virtual compartida que intercambi. Para lo cual utiliza dos ndices, el primero es un ndice al conjunto de estructuras shmid_ds, el segundo apunta a la lista de entradas de tablas de pginas de esta rea de memoria compartida System V. De esta forma se asegura que todas las reas de memoria compartida tienen la misma probabilidad de ser intercambiadas. Puesto que el nmero de marco de pgina fsico de cada pgina virtual compartida aparece en las tablas de pginas de todos los procesos que comparten el rea, el demonio de intercambio ha de modificar todas estas tablas de pginas para indicar que la pgina ya no se encuentra en memoria, sino que ahora est en un fichero de intercambio. Para cada pgina de memoria compartida que se intercambia, el demonio de intercambio busca la entrada de la tabla de pginas en cada proceso que la utiliza (siguiendo un puntero por cada estructura vm_area_struct). Si la entrada de la tabla de pginas de este proceso es valida, entonces la convierte en invalida, se marca como intercambiada y luego decrementa el contador de nmero de referencias (de la pgina compartida). El formato de la entrada de la tabla de pginas de una pgina compartida System V que ha sido intercambiada contiene un ndice a la estructura shmid_ds y un ndice a la entrada de la tabla de pginas de est memoria compartida. Si el contador de referencias de una pgina tiene el valor cero despus de haber modificado todas las tablas de pginas de pginas de los procesos la comparten, entonces sta puede ser intercambiada a disco.La

entrada de la tabla de pginas apuntada desde la estructura shmid_ds de esta rea de memoria compartida se substituye por una entrada de tabla de pgina previamente intercambiada. Una entrada de pgina que ha sido intercambiada es invalida, pero contiene un ndice al conjunto de ficheros de intercambio abiertos y el desplazamiento dentro de ese fichero que indica donde se encuentra la pgina. Esta informacin ser utilizada cuando se tenga que volver a traer a memoria fsica. Intercambiando y Descartando Pginas El demonio de swap revisa de uno en uno cada proceso del sistema para ver si es un buen candidato para intercambiar algunas de sus pginas. Buenos candidatos son procesos que pueden ser intercambiados (algunos procesos no pueden) y que tienen una o ms pginas que pueden ser enviadas al disco o descartadas de memoria. Las pginas son enviadas al disco slo si los datos que contienen no pueden ser recuperados de otra forma. Una gran cantidad del contenido de una imagen ejecutable viene de la imagen del fichero y puede ser fcilmente re-ledo desde el mismo fichero. Por ejemplo, las instrucciones ejecutables de una imagen nunca se modifican por el propio proceso y por tanto nunca son enviadas al fichero de intercambio. Estas pginas sencillamente se pueden descartar; cuando vuelven a reverenciarse por el proceso, stas se traen otra vez a memoria desde la imagen ejecutable del fichero. Una vez se a localizado un proceso candidato para enviar a disco algunas de sus pginas, el demonio de intercambio examina todas sus regiones de memoria virtual buscando reas no estn compartidas ni bloqueadas. Linux no intercambiar a disco todas las pginas posibles del proceso que ha sido elegido; slo quitar un pequeo nmero de pginas. Las pginas bloqueadas en memoria no se pueden intercambiar ni descartar. El algoritmo de intercambio de Linux emplea la antigedad de las pginas. Cada pgina tiene un contador (localizado en la estructura de datos mem_map_tt) que da al demonio de intercambio una cierta idea de si vale la pena o no intercambiar un pgina. Las pginas envejecen cuando no son utilizadas y rejuvenecen cuando son accedidas; el demonio de intercambio slo enva a disco pginas viejas. La accin por defecto cuando se asigna una pgina por primera vez es darle un valor inicial de antigedad de 3. Cada vez que se accede, el valor de antigedad se incrementa en 3 hasta un mximo de 20. Cada vez que el demonio intercambio se ejecuta, envejece las pginas decrementando su valor en 1. Estas acciones por defecto se pueden cambiar y por esta razn (y otra informacin relacionada con el intercambio) se guarda en la estructura de datos swap_control. Si una pgina es vieja (age = 0), el demonio de intercambio la procesar. Pginas sucias ( Dirty) son pginas que se pueden intercambiar. Linux utiliza un bit especfico de la arquitectura del PTE para describir pginas de esta forma. Sin embargo, no todas las pginas sucias son necesariamente copiadas al fichero de intercambio. Cada regin de memoria virtual de cada proceso puede tener su propia operacin de intercambio (apuntada por el puntero vm_ops en la estructura vm_area_struct). En caso contrario, el demonio de intercambio buscar una pgina libre en el fichero de intercambio y escribir sobre sta la pgina de memoria elegida. La entrada en la tabla de pginas se reemplaza por una que est marcada como invalida pero que contiene informacin de donde est la pgina en el fichero de intercambio. Linux utiliza el campo PFN de la tabla de pginas para guardar el desplazamiento dentro del fichero de intercambio donde est la pgina ms una ndice al fichero de intercambio (pues pueden haber varios). Cualquiera que sea el mtodo utilizado, la pgina fsica original se ha liberado y se ha devuelto a la free_area. Pginas limpias (o mejor dicho no sucias) se pueden descartar e insertar en la estructura free_area para ser reutilizada.

Si se han descartado o intercambiado suficientes pginas, el demonio de intercambio se vuelve a suspender. La prxima vez que se despierte considerar al siguiente proceso del sistema. De esta forma el demonio de intercambio mordisquea las pginas de cada proceso hasta que el sistema est otra vez equilibrado. Esto es mucho ms equitativo que enviar todo un proceso a disco. La cache de Intercambio Cuando se tiene que intercambiar pginas a disco, Linux intenta evitar escribirlas. Hay veces que una pgina est a en un fichero de intercambio y en memoria fsica. Esto sucede cuando una pgina que fue intercambiada a disco ha sido nuevamente leda a memoria principal cuando un proceso la ha necesitado. Mientras la pgina que est en memoria no sea modificada por el proceso, la pgina que est en disco es valida. Linux utiliza la cache de intercambio para gestionar estas pginas. La cache de intercambio es una lista de entradas de tabla de pginas, una por cada pgina fsica del sistema. Si una entrada en la cache de intercambio es distinta de cero, entonces representa una pgina que est en el fichero de intercambio que no ha sido modificado. Si la pgina se modifica posteriormente (un proceso escribe sobre ella), su entrada se borra de la cache de intercambio. Cuando Linux necesita enviar una pgina fsica a un fichero de intercambio consulta la cache de intercambio, si hay una entrada valida para est pgina, entonces no es necesario copiar la pgina al fichero de intercambio. Pues la pgina de memoria no ha sido modificada desde la ltima vez que se ley del fichero de intercambio. Las entradas en la cache de intercambio son entradas de la tabla de pginas de pginas que estn en algn fichero de intercambio. Estn marcadas como invalidas pero contienen informacin que permiten a Linux encontrar el fichero de intercambio y el pgina correcta dentro del fichero de intercambio. Cargando Pginas de Intercambio Una pgina que ha sido volcada a un fichero de intercambio puede necesitarse despus si el proceso accede a alguna de las pginas que han sido salvadas, por ejemplo cuando una aplicacin escribe sobre una zona de memoria virtual que est en un fichero de intercambio. Cuando pasa esto se produce un fallo de pgina. La rutina de manejo de los fallos de pgina de Linux sabe que este fallo de pgina se debe una pgina intercambiada gracias a la entrada en su tabla de pginas. La entrada est marcada como invalida pero el campo PFN es distinto de cero. El procesador no sabe como traducir de direccin virtual a fsica y por tanto pasa el control al sistema operativo indicndole cul fue la pgina que produjo el fallo y la razn del fallo. El formato de esta informacin y cmo el procesador pasa el control al sistema operativo es especfico del procesador. La rutina especfica de gestin de fallos de pgina ha de buscar en la estructura vm_area_struct el rea de memoria que contiene la direccin de memoria que ha producido el fallo. Esto lo realiza buscando en las estructuras vm_area_struct de este proceso. Esta bsqueda ha de realizarse muy rpidamente para no degradar las prestaciones del sistema, para lo cual, las estructuras de datos vm_area_struct estn organizadas de forma que la bsqueda requiera el menor tiempo posible. Una vez se han realizado las acciones especficas dependientes del procesador y se ha encontrado que la pgina virtual que produjo el fallo perteneca a un rea de memoria valida, el resto del procesamiento de fallo de pgina es genrico y aplicable a todos los procesadores sobre los que se ejecuta Linux. El cdigo genrico de gestin de fallos de pgina busca la entrada de la tabla de pginas de la direccin que fall. Si encuentra que la pgina est intercambiada, Linux tiene que traer a memoria fsica la pgina. El formato de la tabla de pginas es dependiente del procesador pero todos los procesadores

marcan estas pginas como invalidas y ponen en la tabla de pginas la informacin necesaria para localizarlas en el fichero de intercambio. Linux necesita esta informacin para volver a traerlas a memoria fsica. En este punto, Linux sabe cual es la direccin virtual que fallo y tiene una entrada en la tabla de pginas que contiene informacin a cerca de dnde fue intercambiada. La estructura vm_area_structpuede contener un puntero a una rutina que puede traer cualquier pgina de memoria virtual nuevamente a memoria fsica. Esta es la operacin swapin. Si hay una operacin swapin para este rea de memoria virtual, Linux la utilizar. Este es de hecho cmo las pginas compartidas System V son gestionadas, pues requieren una gestin especial ya que el formato de las pginas intercambiadas compartidas es un poco distinto respecto las pginas no compartidas. Asigna una pgina libre y lee la pgina de disco a memoria desde el fichero de intercambio. Si el acceso que causo el fallo de pgina no fue un acceso de escritura entonces la pgina se mantiene en el fichero de intercambio. Su entrada en la tabla de pginas no se marca como modificable (writable). Si se escribe sobre la pgina, se producir otro fallo de pgina y, en este momento, la pgina se marca como sucia y su entrada se elimina del fichero de intercambio. Si no se escribe sobre la pgina y se vuelve a necesitar liberar la pgina, Linux puede evitar tener que escribir la pgina al fichero de intercambio pues la pgina ya est en ste. Si el acceso que produjo el fallo de pgina de una pgina localizada en el fichero de intercambio fue una operacin de escritura, la pagina se elimina del fichero de intercambio y su entrada en la tabla de pgina se marca como sucia y modificable (writable).

Sistema Operativo Mac OS.


Manejo de archivos y directorios en Mac OS.
La mayora de los sistemas operativos tienen sistemas de archivos. Se usan para almacenar datos de manera segura. Estn compuestos por particiones, archivos y directorios, y opcionalmente tambin de archivos de enlace (accesos directos en Windows). Los sistemas de archivos se deben montar, aunque esto lo hace automticamente el sistema operativo al iniciar la sesin. Algunos SO de red permiten montar los sistemas de archivos de otras computadoras en directorios comunes. Entre las estructuras que puede tener tenemos: estructura arbrea, grafo acclico y grafo general. La estructura arbrea es la ms sencilla de implementar. Internamente el disco est dividido en bloques fsicos (por ej: 512 bytes) y bloques lgicos o clusters (por ej: 4KB). Es bueno que los clusters sean mltiplo del tamao de los bloques fsicos, por razones de eficiencia. En la estructura de un sistema de archivos tenemos que considerar que, al igual que con la memoria principal, siempre se produce algo de fragmentacin, que puede ser interna (dentro de cada cluster o bloque) o externa (entre archivos). Cada nodo de la estructura se llama archivo o directorio, y tiene un nombre lgico que est directamente relacionado con una posicin fsica dentro del disco. Es responsabilidad de este sistema recuperar los datos dado un nombre de archivo y su ruta de acceso. Esto lo hace usando tablas o punteros. Sistema de archivos en Mac OS X: Mac OS X es actualmente capaz de arrancar y usar como particin primaria un volumen formateado segn diferentes sistemas de archivo, como HFS+, UFS, ISO, NFS o UDF. Adems de estos, con Mac

OS X se puede montar y trabajar con volmenes en otros formatos, como UFS, FAT, SMB o AFP. Se proporciona un sistema llamado VFS (Virtual File System), que permite crear extensiones del kernel para soportar nuevos sistemas de ficheros, por lo que en realidad cualquier sistema de archivo puede ser manejado con el kernel de Mac OS X. A continuacin se analizara el sistema nativo creado especialmente para Mac OS X, HFS Plus. Hierarchical File System Plus (HFS Plus) Es un sistema de archivos desarrollado por Apple Inc. para el sistema operativo Mac OS X. Tiene como objeto sustituir al HFS original y pasar a ser el sistema de archivos primario para este sistema operativo. Durante su fase de desarrollo, fue conocido con el nombre de Sequoia. Los objetivos bsicos que se buscaron en el diseo de HFS Plus fueron: Uso eficiente del disco; Utilizacin de nombres internacionales, utilizando el juego de caracteres Unicode; Posibilidad de nombres largos, de hasta 255 caracteres UTF-16; Posibilidad de almacenar datos extra junto con cada fichero (metadata) de una forma flexible y estndar. Manejo de discos grandes, pudiendo direccionar 232 bloques en cada volumen (en comparacin con 216 en HFS); Posibilidad de arranque en sistemas no basados en Mac OS. El explorador de archivos es una pieza esencial ya que nos permite acceder a cualquier parte del disco duro a travs del sistema de archivos comnmente estructurado de carpetas. El sistema operativo Mac OS X ejecuta una aplicacin llamada Finder que es la responsable de la gestin total de los archivos de usuario y genera un uso ms eficiente del sistema de ficheros , discos, red y el lanzamiento de otras aplicaciones. En Mac os x el Finder incorpora un cuadro de bsqueda rpida localizado en la esquina superior derecha, una barra de ruta o direccin y una barra lateral desde donde se puede acceder rpidamente a lugares comunes del equipo. Las principales partes de un sistema de archivos HFS+ se describen a continuacin en el mismo orden en que aparecen en la figura Bloques de arranque: Ocupan los sectores 0 y 1, y son parte fundamental para el arranque del sistema. Cabecera del volumen: Guarda en el sector 2 ciertos datos generales sobre el volumen, como el numero de bloques que contiene, la fecha de creacin o la localizacin del resto de partes del volumen. Fichero de reservas: Lleva el control de los bloques libres y asignados. Esta parte tiene un tamao variable, y no tiene por que estar almacenada de forma contigua en el disco. El control se lleva a travs de un mapa de bits de bloques. Fichero de desborde de extensin: Contiene informacin sobre los bloques que tiene cada fichero en el volumen. Un fichero solo aparecer en esta seccin si ocupa ms de 8 bloques, ya que en el fichero de reservas se pueden direccionar hasta 8 bloques de cada fichero. El resto de bloques de cada fichero se debe direccionar en esta seccin. Los bloques errneos tambin se guardan en esta seccin.

Fichero de catlogo: Contiene informacin sobre los ficheros y directorios que contiene el volumen completo. Fichero de atributos: Contiene informacin sobre los atributos (por ejemplo, permisos de lectura y escritura) de cada elemento del sistema de archivos. Estos elementos pueden ser tanto ficheros como directorios. Fichero de arranque: Similar a los bloques de arranque, pero diseado especialmente para aquellos sistemas operativos que no ofrezcan soporte nativo para HFS+. Cabecera alternativa del volumen : Almacena en el penltimo sector del disco la misma informacin que la cabecera del volumen. Esta seccin esta diseada para que sea utilizada por las utilidades de disco de Apple Inc. Ultimo sector: Est reservado para uso de la empresa Apple Inc., que lo utiliza durante el proceso de fabricacin del ordenador. Estructura de Archivos en mac os x HFS+ se utiliza en el ltimo MAC OS X sin lmite en el tamao de archivo. La organizacin de archivos suele ser por asignacin jerrquica. En forma de rbol invertido. Un disco duro puede estar dividido en particiones. Como mnimo debe tener una particin y esta deber estar activa. Particiones: -Primaria. Puede haber un mximo de cuatro particiones primarias en cada disco duro. o Cada una de ellas pueden contener sistema operativo propio. o Ha de haber una particin primaria activa que ser la que contenga el sistema operativo que arranque en ese momento el ordenador - Extendida. Es un tipo de particin que permite tener indefinidas unidades lgicas. Se cre para saltarse el lmite de las cuatro particiones primarias. - Lgica. Particin que slo puede existir en las particiones extendida. No pueden contener un sistema operativo si lo contienen se debe instalar un gestor de arranque para que el ordenador cargue ese sistema operativo. Slo habr una particin extendida. Dentro de ella podr haber indefinidas particiones lgicas. En Mac OS X casi todos los ficheros que contienen cdigo ejecutable, como las aplicaciones, bibliotecas y mdulos del ncleo se realizan en forma de ficheros en formato macho. El formato macho no es un programa desarrollado originalmente por Apple. Fue desarrollado por Open Source Foundation para su sistema operativo OSF/1 y luego adaptado por Apple para la arquitectura x86 en el marco del proyecto OpenStep. El formato de ficheros macho y la especificacin ABI (Application Binary Interface) describen la manera en que el ncleo debe cargar y lanzar el fichero ejecutable en Mac Os. A grandes rasgos, macho se puede dividir en tres partes: ttulo, instrucciones de carga y segmentos, que pueden constar de varias secciones. El ttulo y las instrucciones de carga describe las principales caractersticas del fichero, mientras que el segmento de datos contiene un conjunto de bytes a los cuales se remiten las instrucciones de carga. Ttulo. Los primeros cuatro bytes del ttulo determinan el as llamado magic number, que identifica el fichero como de 32 o 64 bytes. Adems, permiten al procesador determinar el orden de los bytes. El ttulo define la arquitectura para la cual se ha compilado el fichero. Esto permite al ncleo garantizar el lanzamiento de los ficheros slo en aquella plataforma para la que fueron compilados. A veces, el

fichero binario puede contener cdigo para ms de una arquitectura. Este formato se conoce como Universal Binaries. En este caso el fichero empieza por un ttulo fat. Instrucciones de carga. El campo de instrucciones de carga contiene una lista de instrucciones que comunican al ncleo de qu manera debe cargar los diferentes segmentos del fichero. Estas instrucciones describen cmo cada segmento est alineado en la memoria, qu derechos de acceso tiene y dnde est ubicado en la memoria. Segmentos y secciones. El fichero ejecutable macho suele tener 5 segmentos: __PAGEZERO. Ubicado en la direccin virtual cero, no tiene ninguna proteccin. Este segmento no tiene ningn campo en el fichero en el disco. __TEXT. Contiene datos con acceso slo de lectura y ejecucin. __DATA. Contiene datos con acceso de escritura. Esta seccin est marcada como copy-on-write. __OBJC. Contiene datos usados por el medio de ejecucin Ojective-C. __LINKEDIT. Contiene datos que se usan para establecer relaciones dinmicas. Los segmento __TEXT y __DATA contienen cero o ms secciones. Cada seccin contiene un determinado tipo de datos, por ejemplo: el cdigo usado, las constantes, lneas de texto, etc. As, el cdigo ejecutable y no ejecutable se guardan en un segmento separado.

Manejo de procesos en Mac OS.


El ncleo (Darwin) de Mac OS X est basado en los ncleos de los sistemas operativos Mach y FreeBSD, pero tambin incluyen parte de MKLinux, NetBSD, OpenBSD y otras tecnologas de Mach. Mac OS X admite las llamadas del sistema de Mach y BSD como el ncleo de OS X est basado tanto en Mach como en FreeBSD, xnu contiene dos tablas de llamadas del sistema, de Mach y BSD y admite los API de los sistemas BSD y Mach.

El kernel de Mac OS X por parte de Mach 3,0, un sistema originalmente basado en una estructura de microkernel. Sin embargo, el uso que se he hace de este sistema en Mac OS X no es como microkernel, sino que ha sido adaptado a las necesidades de Mac OS X. En este caso concreto, Mach est enlazado con el resto de componentes del sistema, de forma que todo ello pertenece a un nico espacio de direcciones. Este diseo est motivado por razones de eficiencia, ya que una llamada directa entre mdulo directamente enlazados es ms rpida que una llamada a procedimiento remoto (RPC) o el envo de un mensaje. En cualquier caso, el kernel de Mac OS X sigue manteniendo un alto grado de modularidad ofreciendo ms flexibilidad y sencillez que un kernel puramente monoltico. Dentro del kernel, por tanto, lo que aporta Mach es: Una API que ofrece canales de comunicacin para aplicaciones de usuario. Soporte para paralelismo, hilos y multiprocesamiento simtrico. Una plataforma flexible de planificacin de procesos, incluyendo su uso para tiempo real. Un juego completo de primitivas de comunicacin entre procesos, como mensajes, llamadas a procedimientos remotos, sincronizacin y notificacin. El control y la distribucin de trabajos en el sistema se hacen en base a la informacin proporcionada por el usuario a travs de una interfase de comunicacin entre el usuario y el sistema operativo. Esta informacin es necesaria, para que el usuario pueda expresar al sistema lo que desea hacer, indicando los requerimientos de recursos, de tal forma que el sistema puedas optimizar su rendimiento, claro esta que la comunicacin entre el usuario y el sistema no es unidireccional, sino, que debe existir una interfaz complementaria para que el sistema pueda comunicarse con el usuario. El Mac OS es un sistema operativo multiusuario y multitarea con una capacidad para administrar simultneamente informacin de 32 bits, se considera de multitarea preventivo dado que cuenta con un programador (tambin llamado planificador) el cual, segn los criterios de prioridad, asigna el tiempo de los equipos entre varios procesos que lo solicitan. La planificacin del procesador consiste en mantener una serie de estructuras de informacin que permiten identificar las caractersticas de cada trabajo, as como los recursos que tiene asignados. Un trabajo puede estar en varios estados (procesamiento, listo para ejecutar y en espera). Mach 3.0 permite el uso de varios procesadores trabajando en paralelo, su trabajo es dotar al procesador y la memoria de la capacidad de abstraccin del resto de los componentes del equipo. Se encargar de gestionar los tiempos de trabajo del procesador, as como de facilitar la proteccin de memoria entre las distintas aplicaciones que se estn ejecutando en un momento dentro del ordenador. Todo ello sin olvidar la gestin de todos los mecanismos de entrada y salida de que dispongamos para una tarea en ejecucin. Distribucin de trabajos Tareas e hilos Mac Os X define el concepto de hilo tal y como lo hace POSIX, siguiendo este mismo estndar para su manejo. Un hilo es, por tanto, es un punto de control de la ejecucin de un proceso, que tiene acceso a todos los recursos del proceso y que se puede ejecutar en paralelo (si la maquina lo soporta) con otros hilos (estn o no dentro del mismo proceso). Un proceso (o tarea, como se le denomina en Mach) se define como un conjunto de recursos. Estos recursos, como veremos posteriormente, pueden ser referenciados a travs de los puertos, con la excepcin del espacio de direccionamiento. Una tarea debe contener uno o ms hilos.

En Mach, una tarea no tiene capacidad de ejecucin, sino que son los hilos que contiene los que realmente se ejecutan basndose en los recursos de la tarea. Una tarea es, por tanto, una entidad bastante pesada, ya que contiene todos los recursos que los hilos contenidos van a necesitar. Por contra, un hilo es una entidad sumamente ligera, ya que slo contiene cierta cantidad de informacin relativa al estado de la ejecucin, delegando en la tarea todos los aspectos relativos a los recursos. Planificacin La planificacin en el kernel de Mac OS X esta basada en cuatro listas de ejecucin, cada una de ellas con diferente prioridad. Un hilo puede migrar de un nivel de prioridad a otro en funcin de sus requerimientos, dependiendo de la poltica en concreto que se utilice en el sistema. En general, es posible manejar estas prioridades mediante los procedimientos definidos en el estndar de llamadas POSIX. Los procesos parecen efectuarse simultneamente Puertos En Mach, un puerto (port) es el punto de acceso a un recurso, entendiendo este como un servicio prestado a una aplicacin o hilo. Cada objeto o recurso puede tener varios tipos de puerto, entre ellos el puerto de nombre (name port) y el puerto de control (control port ). Un hilo que haga una referencia a un puerto de nombre slo podr ver ciertas caractersticas del recurso y obtener ciertos servicios no privilegiados. Sin embargo, un hilo que pueda referenciar el puerto de control ser capaz de manipular completamente este recurso. Asociado con los puertos existe el concepto de derechos de puertos (port rights). Cada hilo posee unos derechos de puertos que le dan acceso a un nmero limitado de recursos y a un nivel de manipulacin sobre estos. Estos derechos de puertos se pueden traspasar de unos hilos a otros, siempre y cuando se tengan los permisos adecuados para ello. El sistema de seguridad de Mach se basa precisamente en el manejo de los derechos de puertos. Comunicacin entre procesos Al igual que en cualquier sistema operativo moderno, en Mach se definen algunos mtodos de comunicacin entre los diferentes procesos que se ejecutan en el sistema. Los canales de comunicacin entre procesos estn regidos por puertos, que tienen unos derechos asociados. Los canales de comunicacin que estn definidos en el kernel de Mac OS X son: Colas de mensajes Semforos Notificaciones Cerrojos Llamadas a procedimientos remotos La forma de utilizar estos mtodos de comunicacin viene definida por una API (Application Programmer Interface), librera de funciones que ofrecen servicios de creacin, control, manejo y destruccin de los elementos IPC comentados. Colas de mensajes Las colas de mensajes eran, originalmente, el nico canal de comunicacin nter proceso definido en el kernel Mach. Las colas estn definidas de forma que slo un proceso tiene privilegios sobre el puerto de lectura, mientras que varios procesos pueden tener privilegios sobre el puerto de escritura en la cola.

Como en otros sistemas operativos, la comunicacin entre procesos se lleva a cabo mediante escrituras en la cola y posteriores lecturas por parte de otro proceso. Cada mensaje puede contener informacin de diferentes tipos: Datos de aplicacin generados por el proceso escritor; Una copia de la informacin en un rango determinado de memoria; Derechos sobre puertos; Atributos especficos del kernel, como la identificacin del emisor. Es destacable que, si bien slo una tarea (forma en que se denominan los procesos en Mach) tiene acceso de lectura a una cola de mensajes, cualquier hilo de ejecucin dentro de ella puede estar intentando leer un mensaje. En ese caso, la implementacin hace que slo un hilo puede leer un determinado hilo. Semforos En Mach, los semforos tienen tres posibles operaciones: Wait: Hace que el proceso espere en el semforo hasta que el contador sea mayor que cero. Esta operacin se suele hacer cuando se va a entrar, por ejemplo, en una seccin crtica. Post: Incrementa el contador del programa, haciendo que se desbloquee algn proceso que estuviese bloqueado en el semforo. Post all: Hace que se desbloqueen todos los procesos que estaban bloqueados en el semforo. Evidentemente, si el semforo es binario, no existe diferencia prctica entre la llamada a post y la llamada a post all. Notificaciones Los objetos de notificacin son similares a los semforos en el sentido de que soportan las operaciones post y wait. La diferencia estriba en que las notificaciones contienen adems un campo de estado. El campo es de longitud y formato fijos, definidos en la creacin del objeto. En cada operacin post se actualiza el contenido del campo de estado. En cada objeto slo existe un campo de estado, por lo que ste se sobrescribe en cada operacin post. Las notificaciones constituyen una forma algo ms avanzada de comunicacin que los semforos, porque permiten el paso de datos adicionales en el campo de estado. Cerrojos Un cerrojo es un objeto que proporciona acceso exclusivo a una regin crtica, es decir, es esencialmente un semforo binario. Durante la seccin crtica o transaccin -definida como un bloque de operaciones que se deben ejecutar de forma atmica, el hilo o tarea cierra el cerrojo. Al salir de la transaccin, el cerrojo es abierto de nuevo. Llamadas a procedimientos remotos En Mach existen objetos -llamados objetos RPC (Remote Procedure Calls)- diseados para hacer posible y optimizar las llamadas a procedimientos remotos. En el momento de creacin de un objeto RPC, se definen los formatos para los argumentos. Cuando se hace la llamada (operacin send sobre el objeto RPC), se crea un mensaje en el formato

ya definido y se pone en la cola del objeto. Este mensaje se pasa al servidor. Cuando el servidor retorna de la transaccin, entonces la respuesta se le enva al emisor que hizo la llamada. El kernel Mach trata de optimizar el proceso haciendo que el servidor se ejecute utilizando los recursos del cliente. Esta tcnica se denomina migracin de hilo. Mecanismos de control El Mac OS controla los diferentes procesos de la computadora por medio de la interpretacin de el lenguaje de comandos que le permiten al usuario comunicarse, adems, de las herramientas adecuadas para que pueda realizar sus tareas informticas y le evita asumir los complicados procesos necesarios para llevar a cabo dichas tareas. En las plataformas de derivados de Unix, el intrprete Tcl/Tk a menudo se instala de manera predeterminada. Si este no es el caso, normalmente es necesario instalar los paquetes correspondientes a la distribucin o sino utilizar el cdigo fuente de Tcl (lenguaje de herramientas de comando) y compilarlo para luego proceder con su instalacin. Por otra parte, la ejecucin de un cdigo Tcl se realiza escribiendo en el intrprete de comandos o consola: tclsh archivo.tcl

Manejo de Memoria en Mac OS X.


La parte del sistema operativo que administra la memoria se llama administrador de memoria y su labor consiste en llevar un registro de las partes de memoria que se estn utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando stas la necesiten y liberndola cuando terminen, as como administrar el intercambio entre la memoria principal y el disco en los casos en los que la memoria principal no le pueda dar capacidad a todos los procesos que tienen necesidad de ella. Los sistemas de administracin de memoria se pueden clasificar en dos tipos: los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecucin y los que no. Los requerimientos para un correcto manejo de memoria son: transparencia: la asignacin que hace el sistema operativo de la memoria a cada proceso debe ser transparente para el usuario. Proteccin: se debe asegurar que no haya una sobre escritura de memoria. Segmentos mltiples: los segmentos de un proceso deben aparecer lgicamente contiguos. Cdigo compartido: se debe mantener una sola imagen de cada proceso. Mac OS X gestiona la memoria segn las necesidades de los programas que se tengan abiertos, pudiendo utilizar casi toda la disponible si hace falta. El sistema deja siempre algo para los programas abiertos pero asigna sobre la marcha la necesaria al programa que est trabajando. Si se abre la terminal y teclas top se pueden ver todos los procesos en marcha y la memoria RAM y uso del procesador que tiene cada uno. Objetivos del sistema de gestin de memoria: la memoria es uno de los principales recursos de la computadora, la cual debe de administrarse con mucho cuidado. Aunque actualmente la mayora de los sistemas de cmputo cuentan con una alta capacidad de memoria, de igual manera las aplicaciones actuales tienen tambin altos requerimientos de memoria, lo que sigue generando escasez de memoria en los sistemas multitarea y/o multiusuario. Esquema de memoria en asignacin continua: un esquema simple de gestin de memoria consiste en asignar a cada proceso una zona continua de memoria para que en ella resida su mapa de memoria, (donde cada regin es una zona contigua que se caracteriza por la direccin

dentro del mapa del proceso donde comienza y por su tamao, adems tendr asociados una serie de propiedades y caractersticas), de los esquemas de asignacin contigua Mac OS aplica un sistema de asignacin dinmica donde cada aplicacin pide memoria al sistema segn la va necesitando y la libera cuando no la necesita, lo que optimiza su aprovechamiento, en un Mac OS se asignar una nica direccin de memoria por cada proceso que se este ejecutando. Tcnica de intercambio: esta tcnica se basa en usar un disco o parte de un disco (dispositivo de swap) como respaldo de la memoria principal cuando no caben en memoria todos los procesos activos, se elije un proceso residente y se copia en swap su imagen en memoria. El criterio de seleccin puede tener en cuenta aspectos tales como la prioridad del proceso,el tamao de su mapa de memoria, el tiempo que lleva ejecutando y principalmente, su estado. Mediante la Administracin de memoria con intercambio en Mac OS X, existe traslado entre memoria y disco, durante tiempo de ejecucin de un proceso, no necesariamente debe permanecer en memoria y la cantidad de procesos son superiores a la capacidad de cpu y memoria, esto, dado que tiene como prioridad dar cabida a la ejecucin de ms aplicaciones de las que pueden residir simultneamente en la memoria del sistema. Memoria virtual: la tcnica de memoria virtual se ocupa de la transferencia de informacin entre la memoria principal y la secundaria. La memoria secundaria esta normalmente soportada en un disco (o particin) la memoria virtual se implementa sobre un esquema de paginacin, a este dispositivo se le denomina dispositivo de paginacin. La memoria virtual permite a Mac OS X usar virtualmente ms memoria adems de la RAM que tenga utilizando espacio en el disco duro para complementar la RAM. No obstante, los discos duros son mucho ms lentos que la RAM, por lo que Mac OS X distribuye la informacin automticamente entre el espacio en disco y la RAM para obtener el mejor rendimiento posible. Paginacin: como su nombre lo indica, la unidad bsica de este tipo de esquema es la pgina. Consiste en que el sistema operativo divide la memoria en unidades de tamao fijo, llamados marcos. Los procesos son divididos en pginas de igual tamao que los marcos. Al proceso de intercambiar pginas, segmentos o programas completos entre memoria principal y disco se le conoce como intercambio o swapping, sobrecarga (overhead), por pginas muy pequeas. Fragmentacin al interior de una pgina. La pgina corresponde con una zona de memoria contigua de un determinado tamao. Por motivo de eficiencia en la traduccion este tamao debe ser potencia de 2 (un tamao de pagina de 4 KB es un valor bastante tpico). El mapa de memoria de cada proceso se considera dividido en pginas a su vez, la memoria principal del sistema se considera dividida en zonas del mismo tamao que se denominan marcos de pginas. Un marco de pgina contendr en un determinado instante una pgina de memoria de un proceso. La estructura de datos que relaciona cada pgina con el marco donde est almacenada es la tabla de pginas. Mac OS X se encarga de definir la correspondencia entre pginas y marcos mediante la tabla de pginas, y el hardware es el encargado de aplicarla. En Mac OS X hay lo que se conoce como las "Entradas y salidas de paginacin" que se refiere a la cantidad de informacin que se mueve entre la RAM y el disco duro. Este nmero representa la cantidad de datos acumulados que Mac OS X ha movido entre la RAM y el espacio en disco. Las salidas de paginacin se producen cuando el Mac tiene que escribir informacin de la RAM en el disco duro (porque la RAM ya est llena). Aadir ms RAM puede reducir las salidas de paginacin. La gestin de memoria/archivo de paginacin es mucho ms eficiente en Mac OS X dado resulta un sistema operativo ms liviano que otros. Hiperpaginacin: un proceso esta hiperpaginado si emplea ms tiempo paginado, es decir, produciendo fallos de pgina y cargando las pginas en memoria; que ejecutndose propiamente tal.

El corazn de una computadora lo constituye la UPC. Esta unidad se encarga de procesar los datos y las instrucciones para conseguir el fin deseado por una aplicacin. Ahora bien, esta unidad no servira de nada sin otros dispositivos que almacenaran los datos y que permitieran interactuar con los usuarios y los programadores de las computadoras. Los primeros son bsicamente dispositivos de almacenamiento secundario (discos) y terciarios (cintas y sistemas de archivo). Los segundos son los llamados dispositivos perifricos de interfaz de usuario, porque generalmente estn fuera de la computadora y se conectan a ella mediante cables y son los teclados, ratones y cmaras entre otros. Componentes de un sistema de E/S: dispositivos : o por bloques (alto rendimiento) o por caracteres. control adores controlador de DMA buses puertos de E/S saludo Hay 3 maneras fundamentales para interactuar con un dispositivo de E/S: E/S programada : La CPU enva las ordenes al controlador una por una, y est ocupada con esta E/S hasta que termina. Este mecanismo es tedioso e impide a la CPU ocuparse del procesamiento. Al ser la E/S mucho ms lenta que esta, se gastan muchos ciclos sin hacer nada, esperando respuesta. Interrupciones : Es mucho ms flexible y mejora mucho el rendimiento. La CPU enva la orden al controlador, y sigue ejecutando su trabajo. Cuando el controlador ya tiene respuesta genera una interrupcin, que obliga a la CPU a detener su trabajo, salvar la posicin por la que iba su ejecucin, atender la interrupcin de acuerdo al cdigo que se le pase, y continuar con el trabajo que estaba haciendo. Es ms eficiente pero sigue generando algo de sobrecarga. No enmascarable : no se pueden desactivar. Enmascarable : son menos crticas que las anteriores. Permiten su desactivacin. o acceso directo a memoria (DMA): es el mejor de todos. La CPU escribe las ordenes de E/S en el controlador de DMA, y luego se desentiende del problema. Este controlador se encarga de comunicarse con el controlador de dispositivo indicado y comienza a hacer la transferencia memoria <<< >>> dispositivo. Cuando se termina, el controlador de DMA interrumpa a la CPU para informarle que los datos ya se transmitieron o ya estn disponibles en memoria principal. Nos damos cuenta que esta tcnica es ptima en aprovechamiento de recursos, ya que no obliga a la CPU a esperar innecesariamente. Niveles de software de E/S Aplicaciones de usuario >>> Rutinas del sistema operativo >>> Drivers (controladores de software) >>> Manejadores de interrupciones >>> Controladores de dispositivos >>> Dispositivos Cache Buffer: El buffer-cach mantiene copias de bloques de disco individuales. Las entradas del cach estn identificadas por el dispositivo y nmero de bloque. Cada buffer se refiere a cualquier bloque en el disco y consiste de una cabecera y un rea de memoria igual al tamao del bloque del dispositivo. Para minimizar la sobrecarga, los buffer se mantienen en una de varias listas enlazadas: sin usar (unused), libres (free), no modificadas (clean), modificadas (dirty), bloqueadas (locked), etc. Tcnica de Buffer y cach

Ya sabemos que la E/S es lenta. Para amortiguar esto Mac OS X usa un almacenamiento de soporte, que son los buffer y la cache, que evita al procesador solicitar byte por byte, y en vez de ello se leen muchos datos con una sola solicitud . Los buffers se usan tanto para lectura y escritura de disco, para impresora, monitor, para placa de red, etc. SU misin es agilizar la transferencia emitiendo una sola peticin e interrupcin para un conjunto de datos. Los tipos de buffers son: buffer sencillo buffer doble circular La funcin de la cach en Mac OS X es similar a la de los buffers, pero est implementada con circuitos de muy alta velocidad y tienen algunas ventajas tecnolgicas como la bsqueda por asociacin (que busca en muchas entradas al mismo tiempo). Lo que la resulta ser muy til para mejorar el rendimiento es poner partes del sistema de archivos en la cach, y cualesquier otros datos que usemos con frecuencia en una Mac. Tcnica de cola de caracteres Los dispositivos de caracteres como los terminales, impresoras, tarjeta de red, modems, etc., no almacenan informacin en bloques de tamao fijo. Gestionan flujos de caracteres de forma lineal y sin ningn tipo de estructura de bloques. Un teclado es un buen ejemplo de estos dispositivos. Esta conectado a una UART (Universal Asynchronous Receiver/Transmiter) que recibe un carcter del teclado cada vez que se pulsa una tecla. No es posible leer un bloque de teclas de un solo golpe o buscar dentro del dispositivo por ninguna unidad. Un terminal por lnea serie tambin es un dispositivo de caracteres. Su controlador se limita a enviar al perifrico el flujo de caracteres que debe presentar en la pantalla y as escribir del mismo los caracteres tecleados por el usuario.

You might also like