S O Mandriva

34
MANDRIVA LINUX Una distribución de Linux Basada en Red Hat Walter Eduardo Charro Tipán El presente trabajo esta realizado para conocer más acerca del sistema operativo de Mandriva Linux su

Transcript of S O Mandriva

Mandriva Linux

Walter Eduardo Charro Tipán

El presente trabajo esta realizado para conocer más acerca del sistema operativo de Mandriva Linux su historia gestión de procesos, memoria, entrada/salida y sus tendencias

HISTORIA DE MANDRIVA LINUX

En 1998, la compañía francesa Mandrakesoft SA crea la distribución de Linux Mandrakelinux. No fue sino hasta 2005, después de adquirir la empresa brasileña Conectiva, que la empresa y el producto se denominará "Mandriva" y "Mandriva Linux.El creador de Mandrakelinux es Gael Duval, co-fundador y ex empleado de RedHat. La distribución se basa en Red Hat Desktop 5.1, por lo que la primera versión se enumeró 5.1. Era una versión de Linux para servidores y estaciones de trabajo diseñado para ser fácil de usar. Viene en versiones libres (descargable) y versiones de pago (cajas), incluida la documentación y apoyo.Las diferentes versiones cuentan con licencia libre y algunas versiones especiales cuentan con porciones de programas no licenciados según GPL, sino bajo otras licencias de uso.

Mandriva Linux es bastante popular (especialmente en Francia) porque, entre otras cosas, la facilidad de uso de sus herramientas de instalación y configuración, por lo que a menudo se lo recomienda para principiantes.La distribución es total o parcialmente compatible con hasta 73 idiomas y fue uno de los primeros en presentar una interfaz gráfica basada en la instalación de Perl y GTK plenamente internacionalizado, lo que explica su éxito en Rusia, entre otros.En cuanto a su País de origen, son: Francia, Brasil, Estados Unidos, aunque las dos más importantes son Francia y Brasil.

La edición 2006 salió en octubre de 2005 que ya venía integrada con las tecnologías de Conectiva y Lycoris; en esta versión se había decidido como parte de los cambiosFue hasta el lanzamiento de Mandriva Linux 2007, que, tanto la frecuencia de publicación de las otras distribuciones de Linux, así como las críticas, orillaron a la compañía a volver al ciclo de publicación de seis meses (abril y octubre)Todos estos factores provocaron la publicación de Mandriva 2007 Spring, versión aclamada por la comunidad Linux y considerada por muchos como un retorno del camino para ser nuevamente un actor principal en el mundo Linux.

En abril de 2008, se lanzó la versión 2008.1 "Spring", la cual tiene cambios importantes como:Mejoras a la interface de RPMDrake, nuevo control de contenidos para que los padres puedan supervisar las actividades de sus hijos en Internet, nuevo media center "Elisa", soporte de sincronización de teléfonos en GNOME y KDE, el framework "Codeina" para la instalación de los codecs requeridos, X.org 7.3, openoffice.org 2.4, Gnome 2.22, los controladores libres de las tarjetas gráficas de ATI y nVidia, el servidor de sonido PulseAudio, etc.

En octubre de 2008, se liberó la versión 2009.0, la cual entre sus cambios importantes se encuentran: el Kernel de Linux versión 2.6.27 con un mayor soporte de hardware, KDE que en su versión 4.1.2 se convirtió en el escritorio por defecto, la versión 3.5.10 de KDE quedó disponible en el DVD de la versión Free y Powerpack, pero dejando sólo al escritorio, sin incluir la mayoría de sus programas, los cuales se pueden descargar desde los repositorios de la distribución; incluye de igual forma, Gnome 2.24 el otro proyecto que por su importancia junto con KDE se les considera los principales escritorios de Linux, OpenOffice.org 3.0 con todas las mejoras inherentes a la versión de esta suite ofimática; Mozilla Firefox 3.0, y como novedad exclusiva a la distribución, se rediseñó el instalador de Mandriva aumentando su facilidad de uso, según su propia opinión.En abril de 2009, se liberó la versión 2009.1 "Spring" de Mandriva Linux, con el kernel actualizado 2.6.29.1 (no tomó la decisión de Canonical de incluir el 2.6.28) Incluye el entorno de escritorio KDE 4.2.2 considerado el primer KDE de la rama 4 para uso estable y del usuario final. Esta versión fue la última donde se encontraba en los repositorios KDE 3.5, que desaparece en la versión 2010; también incluye Gnome 2.26, LXDE, Firefox 3.0.8, X.org 1.6 y OpenOffice.org 3.0.1, basado en un fork de la misma llamado go-oo.org; además, incluye soporte opcional, pero sin embargo, completo del sistema de archivos Ext4 dejando a elección del usuario (generalmente usuarios medios-avanzados) el actualizar o no el sistema de archivos. Se incluyó speedboot, que mejora los tiempos de arranque aparentes de la distribución al poner en prioridad más alta, el inicio del servidor X, dejando que se carguen algunos servicios, después de la carga del servidor X.Como novedad adicional, se puede pasar el contenido de la variante One a un pendrive USB y bootear desde él.

GESTIÓN DE PROCESOS EN MANDRIVA LINUX

Ciclo de Vida de un Proceso en Linux. Conjunto de Estados En Linux, un proceso o tarea, está representado por una estructura de datos task_struct. Linux mantiene una task, que es un vector lineal de punteros a cada estructura task_struct definida en un instante dado. La estructura task_struct contiene información de varios tipos:

Estado. Representa el estado de ejecución de un proceso (en ejecución, interrumpible, no interrumpible, parado y zombie).

Información de planificación. Representa a la información necesaria para la planificación de procesos en Linux. Un proceso puede ser normal o en tiempo real y tiene una prioridad. Los procesos en tiempo real se planifican antes que los procesos normales y se utilizan prioridades relativas dentro de cada categoría. El tiempo en el que un proceso puede ejecutarse se controla mediante un contador.

Identificadores. Cada proceso tiene un único identificador de proceso, y tiene también identificadores de usuario y de grupo. Un identificador de grupo se utiliza para asignar privilegios de acceso a recursos de un grupo de usuarios.

Comunicación entre procesos. Linux soporta los mecanismo de IPC de UNIX Vínculos. Cada proceso incluye un vínculo con su proceso padre, vínculos con sus

hermanos (procesos con el mismo padre) y vínculos con todos sus hijos. Tiempos y temporizadores. Incluye el instante de creación del proceso y la cantidad de

tiempo del procesador consumido hasta el instante. Un proceso puede tener también asociados uno o más temporizadores de intervalo. Un proceso define un temporizador de intervalo mediante una llamada al sistema; cuando el tiempo termina se envía una señal al proceso. Un temporizador puede ser de un solo uso o periódico.

Sistema de archivos. Incluye punteros a cualquier archivo abierto por el proceso. Memoria virtual. Define la memoria virtual asignada al proceso. Contexto específico del procesador. La información de registros y pila que forma el

contexto del proceso (espacio de direccionamiento del proceso).

Los estados de ejecución de un proceso Linux son los siguientes: En Ejecución (TASK_RUNNING). El proceso es ejecutado por el procesador. Listo (TASK_RUNNING) . El proceso podría ser ejecutado, pero otro proceso se está

ejecutando en ese momento. Interumpible (TASK_INTERRUPTIBLE). Es un estado de bloqueo, en el cual el proceso

espera un suceso, como la terminación de una operación de entrada/salida, liberación de un recurso o una señal de otro proceso.

No interumpible (TASK_UNINTERRUPTIBLE). Es otro estado de bloqueo. La diferencia entre éste y el estado Interumpible es que en un estado No Interumpible, un proceso espera directamente en una condición de hardware y, por tanto, no acepta señales.

Parado (TASK_STOPPED). El proceso ha sido detenido por una intervención externa y sólo puede reanudarse por una acción positiva de otro proceso. Por eje mplo, un proceso puede estar en estado Parado durante la ejecución de un programa de depuración.

Zombie (TASK_ZOMBIE). El proceso ha terminado pero, por alguna razón, su estructura task debe permanecer aún en la tabla de procesos.

Tabla de Procesos.

Cada proceso se referencia por un descriptor (descriptor del proceso). Este descriptor contiene los atributos del proceso, así como la información que permite gestionarlo.

Tabla de Procesos en Linux.

En Linux, inicialmente, la Tabla de Procesos era un vector de tamaño fijo de task_strcut <linux/sched.h>, con lo que el número máximo de procesos estaba limitado. Actualmente, la Tabla de Procesos es realmente una lista doblemente enlazada mediante los punteros next_task y prev_task.

Estructura del descriptor de procesos en Linux (PCB = Process Control Block).

En Linux el PCB (Process Control Block) es una estructura denominada task_strcut en el archivo include/linux/sched.h. En ella aparece tipo de información sobre cada uno de los procesos. Muchas partes del sistema operativo hacen uso de esta estructura de datos, por lo que es necesario conocer los campos más importantes de task_struct.

volatile long state: Estado del proceso (activo o bloqueado). En la línea 76 de include/linux/sched.h están los posibles valores que puede tomar el estado.

unsigned long flags: Estado detallado del proceso, a nivel del kernel. long counter: Número de “ticks” (ciclos de reloj) que restan al proceso actual para que se

le acabe el quantum. long priority : Prioridad estática del proceso. A partir de este valor, el scheduler asigna el

valor de counter cada vez que se agota. struct task_struct *next_run, *prev_run: Punteros para implementar la lista de procesos

activos. El scheduler busca en esta lista cada vez que tiene que elegir un proceso nuevo para ejecutar. Cuando un proceso se suspenda, se extraerá inmediatamente de esta lista.

int exit_code, exit_signal: Contiene el valor de terminación de un proceso, en caso de que haya finalizado mediante la llamada al sistema exit(2). Si termina por una señal, contendrá el número de señal que lo mató.

int pid : Número identificador del proceso. Cada proceso tiene un PID distinto. struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_osptr: Punteros para acceder

a toda la familia de procesos: op(Original Parent), p(Parent), c(Youngest Child), ys(Youngest Sibling, hermano más joven), os(Oldest Sibling, hermano más viejo). Los inicia lizan las macros SET_LINKS y REMOVE_LINKS llamadas al crear un proceso (fork) y al destruirlo (exit, kill). unsigned long policy, rt_priority : Indican la política de planificación del proceso y la prioridad dentro de esa política.

long start_time: Instante de creación de este proceso. uid_t uid, euid, suid, fsuid: Usuario propietario de este proceso, tanto real (uid), como

efectivo (euid), y atributos más específicos. gid_t gid, egid, sgid, fsgid : Grupo propietario de este proceso, tanto real (gid), como

efectivo (egid), y atributos más específicos. unsigned long signal, blocked: signal es un mapa de bits con las señales pendientes de ser

enviadas a este proceso. Y blocked es otro mapa de bits con las señales que están temporalmente bloqueadas.

struct fs_struct *fs: Información relativa al sistema de archivos. Los campos de fs no están directamente dentro de task_struct para facilitar que varios procesos compartan la información que contienen. Esta funcionalidad la usan los threads a nivel del kernel (llamada al sistema clone(2)).

struct files_struct *files, struct mm_struct *mm, struct signal_struct *sig . Esto es reflejo de que los threads de ejecución pueden compartir también los archivos abiertos, su espacio de memoria y las señales. Contiene los siguientes campos:

o atomic_t count: Número de procesos que comparten esta estructura.o int umask : Mascara de creación de archivos. La llamada al sistema umask permite

consultar y modificar esta variable. La orden interna del shell umask permite modificarla desde la línea de órdenes. Cuando un proceso crea un archivo nuevo (open, creat), el kernel quitará los bits de permisos que estén activos en umask: permisos = permisos_creat ~umask.

o struct dentry * root: Inodo del directorio raíz de este proceso. Con la llamada al sistema chroot(2) se puede cambiar este atributo.

o struct dentry * pwd : (Process Working Directory) inodo del directorio de trabajo. chdir (2) es la llamada al sistema que permite modificarlo.

struct files_struct *files; Esta estructura contiene toda la información relativa a los archivos abiertos por el proceso. Algunos de sus campos son:

o int count: Número de procesos que comparten estos archivos abiertos.o int next_fd: Primer identificador libre.o fd_set close_on_exec: Conjunto bits que indica qué archivos se tienen que cerrar

cuando este proceso realice una operación exec(2). Ver la llamada al sistema fcntl(2).

o fd_set open_fds: Mapa de bits que indica los archivos que actualmente tiene abiertos este proceso.

o struct file *fd[NR_OPEN]: Vector de descriptores de archivos en uso.

Organización de la tabla de procesos en Linux (lista doblemente enlazada). Los descriptores de proceso los asigna dinámicamente el kernel llamando a una función

especial (kmalloc). El array task contiene punteros a estos descriptores. El array current_set contiene punteros a los descriptores de procesos en curso de ejecución en cada procesador.

La variable init_task contiene el descriptor del primer proceso creado en el arranque del sistema. Tras el arranque, este proceso sólo se ejecuta cuando ninguno más este listo para ejecución, y su descriptor sirve para recuperar el inicio de la Tabla de Procesos.

Los descriptores de procesos se organizan en forma de una lista doblemente enlazada, por los punteros next_task y prev_task . Los descriptores de procesos que estén listos para su ejecución o en curso de su ejecución se colocan en otra lista doblemente enlazada, mediante los campos next_run y prev_run.

Los campos p_optr, p_pptr, p_cptr, p_ysptr y p_osptr, se utilizan para gestionar las filiaciones entre procesos. Entendiéndose por filiación (relación familiar) la relación que existe entre los procesos dentro de la jerarquía de procesos.

Cuando un proceso se duplica, llamando a la primitiva fork:

o Los punteros “p_optr” y “p_pptr” del descriptor del proceso hijo, contienen la dirección del proceso padre.

o El puntero “p_osptr” del descriptor del proceso hijo toma el valor del puntero “p_cptr” del descriptor del proceso padre.

o El puntero “p_ysptr” del proceso hermano más reciente (referenciado por el puntero “p_cptr” del descriptor del proceso padre) contiene la dirección del descriptor del nuevo proceso hijo.

o El puntero “p_cptr” del descriptor del proceso padre contienen la dirección del descriptor del proceso hijo.

La gestión de la tabla de procesos (listas de descriptores de procesos) es llevada a cabo por el scheduler.

Scheduler de Linux

El scheduler es el elemento del kernel (subsistema de control de procesos) que decide qué proceso (listo para su ejecución en memoria principal) debe ser ejecutado por el procesador (CPU). El scheduler explora la lista de procesos “listos para ejecutarse en memoria” y utiliza varios criterios para elegir el proceso a ejecutar. Es decir, cuando hay más de un proceso “listo para ejecutarse”, el sistema operativo debe decidir cuál ejecutará primero, la parte del sistema operativo que toma esta decisión es el scheduler, y los algoritmos que utiliza se denominan algoritmos de planificación.

El scheduler tiene que elegir el proceso que más merece ejecutarse entre todos los procesos que se pueden ejecutar en el sistema.

GESTIÓN DE MEMORIA EN MANDRIVA LINUX

Linux comparte muchas de las características de los esquemas de gestión de memoria de otras implementaciones UNIX, pero tiene sus características propias y únicas, aunque hay que destacar que el esquema de gestión de memoria de Linux es bastante complejo.

En lo que respecta a memoria virtual, el direccionamiento de memoria virtual de Linux, hace uso de una estructura de tabla de páginas con tres niveles, formada por los siguientes tipos de tablas (cada tabla individual es del tamaño de una página): (1) Directorio de páginas un proceso activo tiene un solo directorio de páginas que es del tamaño de una página. Cada entrada en el directorio de páginas apunta a una página del directorio intermedio de páginas. Para un proceso activo, el directorio de páginas tiene que estar en la memoria principal; (2) Directorio intermedio de páginas este directorio puede ocupar varias páginas y cada entrada de este directorio apunta a una página de la tabla de páginas;

(3) Tabla de páginas esta tabla de páginas también puede ocupar varias páginas, y cada entrada de la tabla de página hace referencia a una tabla virtual del proceso.

Para utilizar esta estructura de la tabla de páginas a tres niveles, una dirección virtual en Linux se ve como un conjunto de cuatro campos. El campo más a la izquierda (más significativo) se utiliza como índice en el directorio de páginas. El siguiente campo sirve como índice en el directorio intermedio de páginas. El tercer campo sirve como índice en la tabla de páginas. Y el cuarto y último campo, indica el desplazamiento dentro de la página seleccionada de la memoria.

Reserva de Paginas: Para la asignación de páginas y aumentar la eficiencia de cargar y descargar páginas a y desde la memoria principal, Linux define un mecanismo para tratar bloques de páginas contiguos correspondientes a bloques de marcos de páginas contiguos. Pare este propósito, se utiliza el Buddy System. El kernel mantiene una lista de grupos de marcos de página contiguos de tamaño fijo; un grupo puede estar formado por 1, 2, 3, 8, 16 o 32 marcos de páginas. Como las páginas se asignan y liberan en la memoria principal, los grupos se dividen y se intercalan utilizando el algoritmo de los colegas (buddy algorithm).

Direccionamiento de Memoria en Linux

La memoria es uno de los recursos fundamentales para un proceso. El sistema operativo debe ofrecer la memoria a todos los procesos por igual de una forma sencilla y uniforme. Al mismo tiempo, el sistema operativo debe tratar con el hardware real para realizar dicha función, aprovechándolo al máximo. El direccionamiento es una parte importante de la gestión de memoria, puesto que influye mucho tanto en la visión de la misma por parte de un proceso, como en el aprovechamiento del hardware y el rendimiento del sistema.

Desde el punto de vista de la arquitectura, el sistema operativo suele tener asistencia del hardware para realizar la gestión memoria: (1) Memory Management Unit (MMU), unidad que realiza, en el i386, segmentación y paginación; (2) Bits reservados en selectores de segmento; (3) Bits reservados en descriptores de página; (4) Bits de protección. Sin embargo, el sistema operativo es libre de usar o no dichos recursos.

Espacios de Direcciones

Tres tipos de direcciones:1. Direcciones lógicas. Generadas por el proceso, cada dirección lógica consiste en un

selector de segmento y un desplazamiento (offset) que denota la distancia del principio del segmento a la dirección actual.

2. Direcciones lineales (direcciones virtuales). Obtenidas tras aplicar una transformación a la dirección lógica por parte de la MMU. 32 bits se pueden utilizar para direccionar 4Gb (es decir 4294967296 direcciones físicas de memoria). Las direcciones lineales se representan normalmente en hexadecimal, su rango de valores va desde 0x00000000 hasta 0xffffffff.

3. Direcciones físicas. Referencian la memoria física. Se obtienen tras aplicar una transformación por parte de la MMU.

Las transformaciones y el formato de las direcciones dependen de la arquitectura. En Linux los espacios de direcciones lógico y lineal son idénticos.

Segmentación en Linux

Linux no aprovecha la segmentación del i386. Sin embargo, no puede desactivarla, la utiliza de una forma muy limitada. Se ha preferido la paginación sobre la segmentación porque: (1) La gestión de memoria es más simple cuando todos los procesos usan los mismos valores de segmentos, es decir, tienen las mismas direcciones lineales. (2) Un objetivo de Linux es la portabilidad, y muchos procesadores soportan la segmentación de forma muy limitada.

Paginación en Linux

Para tener en cuenta arquitecturas de 64 bits, la paginación en Linux tiene 3 niveles de tablas de páginas en lugar de 2.

Linux gestiona la memoria central y las tablas de páginas utilizadas para convertir las direcciones lineales (virtuales) en direcciones físicas. En realidad, la gestión de la memoria implementada por Linux considera que dispone de una tabla de páginas a tres niveles: (1) directorio global de tablas de páginas (page global dirertory) cuyas entradas contienen las direcciones de páginas que contienen tablas intermedias; (2) directorio intermedio de tablas de páginas (page middle directory) cuyas entradas contienen las direcciones de páginas que contienen tablas de páginas; (3) las tablas de páginas (page table) cuyas entradas contienen las direcciones de páginas de memoria que contienen el código o los datos utilizados por el kernel o los procesos de usuario.

Gestión de Memoria en Linux.

Hemos visto que Linux hace uso de las ventajas de la segmentación y de los circuitos de paginación de los procesadores i386 para traducir direcciones lógicas en direcciones físicas. Podemos también decir que alguna porción de RAM está permanentemente asignada al kernel y utilizada para almacenar el código del kernel y estructuras de datos estátic as del mismo. La restante parte de la RAM se denomina memoria dinámica, y ésta es un recurso muy valioso y necesitado no sólo por los procesos sino también por el propio kernel. De hecho el rendimiento global del sistema depende fuertemente de cómo de eficientemente se gestiona la memoria dinámica. Por tanto, todos los sistemas operativos multitarea actuales tratan de optimizar el uso de la memoria dinámica, asignándola sólo cuando es estrictamente necesario y liberándola tan pronto como sea posible. En esta sección describiremos: estructuras básicas del kernel para gestionar la memoria dinámica desde dos puntos de vista: asignación de memoria para el kernel y asignación de memoria para procesos, política de asignación de la memoria por parte del kernel, el gestor de faltas de página, etc.

Políticas de Asignación de Memoria

Se puede observar la asignación de memoria desde dos puntos de vista: peticiones por parte del kernel y por parte de procesos de usuario.

El kernel: (1) Es un componente de alta prioridad, si solicita memoria no tiene sentido retardar su asignación; (2) Confía en si mismo y se asume que no tiene errores de programación.Un proceso de usuario: (1) No tiene por qué usar el espacio solicitado inmediatamente, y por el principio de localidad seguramente no lo hará, además, se puede retardar la asignación de memoria real; (2) No es confiable, y el kernel debe estar listo para capturar todos los posibles errores de programación.

El kernel puede solicitar memoria de tres formas: (1) directamente al Buddy system, para asignaciones genéricas de grupos de marcos de página potencia de 2; (2) al Slab allocator, para objetos frecuentemente usados; y (2) utilizando vmalloc() para obtener un área de memoria empleando marcos de página no contiguos. Cuando los procesos solicitan memoria, no se les asigna realmente páginas, sino áreas de memoria. Se les da rangos de direcciones lineales válidos que se asignarán en el momento en que se vayan a usar.

El Buddy System (sistema de colegas)

El kernel debe establecer una estrategia robusta y eficiente para asignar grupos de marcos de páginas contiguos. Por ello, el objetivo principal del Buddy system es: Evitar la fragmentación externa. Éste es un fenómeno que se produce cuando existen frecuentes asignaciones y liberaciones de grupos de marcos de página contiguos de diferentes tamaños, pudiendo derivar en una situación en la que varios bloques pequeños de marcos de páginas libres están dispersos dentro de bloques de marcos de páginas asignados. Y como resultado puede convertirse en imposible el asignar un bloque grande de marcos de páginas contiguos, incluso si existen suficientes páginas libres para satisfacer la petición.

Para evitar la fragmentación externa existen dos posibilidades: (1) Utilizar la unidad de paginación para agrupar marcos de página dispersos en direcciones lineales contiguas. (2) Desarrollar un sistema que controle los marcos de página contiguos y evite en lo posible dividir un bloque libre grande para una asignación pequeña.

El Slab Allocator

El Buddy system asigna como mínimo una página. Sistema adecuado para asignaciones grandes de memoria Para asignaciones de pocos bytes, se desperdician grandes cantidades de memoria. Fragmentación interna, que es provocada por una mala combinación entre el tamaño de la memoria requerida y el tamaño del área de memoria asignada para satisfacer la solicitud. Es decir, éste es un fenómeno en el que se malgasta el área de memoria de una página cuando el tamaño de memoria es más pequeño que la página.

Memoria para Procesos

Como acabamos de ver, una de las funciones del kernel es obtener memoria dinámica de forma sencilla llamando a una variedad de funciones: get_free_pages() o pages_alloc() para obtener páginas del algoritmo del Buddy system; kmem_cache_alloc() o kmalloc() para utilizar el Slab allocator para objetos de propósito general o específico, y vmalloc() para obtener un área de memoria no contigua. En estos casos, si la petición puede realizarse satisfactoriamente, cada una de estas funciones devuelve una dirección del descriptor de página o una dirección lineal identificando el principio del área de memoria dinámica asignada. Cuando se asigna memoria a procesos en modo usuario, la situación es diferente: (1) Los procesos que demandan memoria dinámica se consideran no urgentes. Cuando se carga el archivo ejecutable de un proceso, es poco probable que el proceso direccionara todas las páginas de código en un futuro próximo. Equivalentemente, cuando un proceso llama a la función malloc() para obtener memoria dinámica adicional, esto no quiere decir que el proceso accederá pronto a toda la memoria adicional obtenida. Por tanto, como regla general, el kernel trata de aplazar la asignación de memoria dinámica a procesos en modo usuario. (2) Debido a que programas de usuario no pueden ser fiables, el kernel debe estar preparado para capturar todos los errores de direccionamiento provocados por un proceso en modo usuario.

El espacio de direcciones de un proceso son las direcciones lineales que el proceso puede utilizar. Cuando un proceso pide memoria dinámica, no se le dan marcos de página; se le da el derecho a usar un nuevo rango de direcciones lineales. La asignación de marcos de página se retarda todo lo posible. El kernel representa los intervalos de direcciones lineales mediante un recurso llamado regiones de memoria (caracterizadas por una dirección lineal inicial, una longitud y unos atributos): (1) Se modifica dinámicamente el espacio de direcciones de un proceso; (2) Una asignación de memoria implica una nueva región de memoria para el proceso. (3) Las regiones de memoria tienen tamaño múltiplo de 4 KBytes. (4) Puede haber intervalos de direcciones no usadas entre regiones.

Gestor de Faltas de Página

El gestor de faltas de página debe distinguir la causa de la falta: (1) Error de programación. (2) Referencias a páginas legítimas del espacio de direcciones del proceso pero no presentes: (2.1) Por Copy-on-Write. (2.2) Por swapping o intercambio (cuando el sistema necesita marcos de página libres, Linux puede volcar a disco parte de las páginas de datos de un proceso, luego cuando el proceso desea continuar su ejecución necesita volver a traer a memoria principal estas páginas). Para este caso existe la función, do_swap_page, que se llama para volver a cargar en memoria el contenido de una página situada en el espacio de swap. Si una operación swapin está asociada a la región de memoria que contiene la página, se llama. En caso contrario, se llama a la función swap_in. En ambos casos, la página asignada se inserta en el espacio de direccionamiento del proceso actual. (2.3) Porque no han sido asignadas todavía. (2.4) Expansión de pila. El gestor de falta de página es do_page_fault() el gestor compara la dirección lineal que causó el falta (cr2) con las regiones de memoria del proceso actual (current process) para determinar qué hacer, de acuerdo con el esquema que se muestra en la siguiente figura.

Intercambio (swapping) en Linux

Si un proceso necesita cargar una página de memoria virtual a memoria física y no hay ninguna página de memoria física libre, el sistema operativo tiene que crear espacio para la nueva página eliminando alguna otra página de memoria física. Si la página que se va a eliminar de memoria física provenía de un archivo imagen o de un archivo de datos sobre el que no se ha realizado ninguna escritura, entonces la página no necesita ser guardada. Tan sólo se tiene que desechar y si el proceso que la estaba utilizando la vuelve a necesitar simplemente se carga nuevamente desde el archivo imagen o de datos.

El algoritmo para la administración de memoria en Mandriva Linux es el LRU (Least Recently Used) de este algoritmo podemos argumentar lo siguiente: Este algoritmo difiere del de 'No usada recientemente' en el hecho de que aquel sólo se fija en el intervalo de tiempo desde que se pusieron en 0 los bits de referencia de las páginas, mientras que el algoritmo de 'Menos usada recientemente' intenta proveer un comportamiento casi óptimo mediante la observación de las páginas que menos fueron usadas recientemente. Este tipo de páginas, estadísticamente son las que tienen menor probabilidad de ser usadas nuevamente.Aunque este algoritmo provee un buen comportamiento en teoría, es caro de implementar, en cuanto a recursos consumidos. Hay varias implementaciones que intentan mantener bajo el costo y lograr un rendimiento considerable. Un método consiste en tener una lista enlazaday ordenada de todas las páginas en memoria. En el final de la lista está la página menos usada recientemente, y al principio la más usada recientemente. El costo alto de este método es porque cada vez que se referencia una página debe ser movida en la lista, algo que consume mucho tiempo. Otra forma, que requiere soporte de hardware, consiste en tener un contador que es incrementado en cada instrucción del CPU. Cada vez que una página es accedida, gana el número del contador en ese momento. Cuando una página debe ser retirada de memoria, simplemente hay que buscar cuál es la que tiene el menor número, que es la que fue usada hace más tiempo. En el presente no existen contadores tan grandes para permitir esto. Debido al alto costo del LRU, se proponen algoritmos similares, pero que permiten implementaciones menos costosas.La memoria física en Mandriva Linux está dividida en tres partes que son: HighMem, Normal y DMA para manejarlas con mayor facilidad.

GESTIÓN DE ENTRADA/SALIDA EN MANDRIVA LINUX

En términos generales, el sistema de E/S del núcleo de Linux es muy similar al de otras implementaciones de Unix. El núcleo de Linux asocia fichero especial con cada manejador de dispositivo de E/S, distinguiéndose entre dispositivos de bloques, de caracteres y de red.

Planificación de disco

El planificador de disco por defecto se le conoce con el nombre de ascensor de Linux, que es una variación del algoritmo de LOOK. En Linux, además del algoritmo del ascensor, se han incluido dos algoritmos adicionales:

El planificador de E/S basado en plazos y el planificador de E/S previsor.

El planificador de Ascensor

El planificador del ascensor mantiene una única cola con las peticiones de lectura y escritura en el disco, realizando operaciones de ordenamiento y agrupamiento sobre cola.

Planificador basado en plazos

No intenta servir peticiones en un plazo de tiempo determinado. Sino que simplemente deja insertar las peticiones en orden después de un plazo conveniente.

En el esquema del ascensor se manifiestan dos problemas. El primer problema es que se puede retrasar una petición de un bloque distante durante un tiempo considerable debido a que la cola se actualiza dinámicamente.

Un problema incluso más serio es el de la distinción entre peticiones de lectura y de escritura.

Normalmente, una petición de escritura se realiza asincrónicamente. Es decir, una vez que un proceso solicita una petición de escritura, no necesita esperar hasta que realmente se lleve a cabo la petición.

En operaciones de lectura, el proceso, antes de continuar, debe esperar hasta que se entreguen los datos pedidos a la aplicación. Por tanto, un flujo de peticiones de escritura puede bloquear una petición de lectura durante un tiempo considerable y, con ello, bloquear también al proceso.

Para resolver estos problemas, se utiliza e, planificador de E/S basado en plazos usa tres colas.

Planificador de E/S Previsor

El planificador del ascensor original y el basado en plazos están diseñados para servir una nueva petición tan pronto como se completa la petición existente, manteniendo, por tanto, el disco lo más ocupado que sea posible.

Sin embargo esta política es contraproducente si hay numerosa peticiones de lectura síncronas. Normalmente, una aplicación esperara hasta que se complete una petición de lectura y estén los datos disponibles antes de realizar la siguiente petición. El pequeño retardo que hay entre que se reciben los datos de la última lectura y la solicitud de la siguiente lectura permite al planificador dedicarse a otra petición pendiente y servir esa petición

En Mandriva Linux el planificador previsor esta superpuesto sobre el planificador basado en plazos. Cuando se sirve una petición de lectura, el planificador previsor causa que el sistema de planificación se retrase. Durante este retardo, hay una oportunidad apreciable de que la aplicación que solicito la última petición de lectura genere otra petición de lectura en la misma región del disco

Caché de páginas de Mandriva LINUX

El núcleo mantiene una cache de páginas para lecturas y escrituras de los ficheros ordinarios del sistema de ficheros y para las páginas de memoria virtual y una cache de buffers independientes para la E/S de bloques.

Noop.

Es el planificador de Entrada/Salida más simple que existe. Funciona insertando todas las peticiones de Entrada/Salida dentro de una cola de procesamiento tipo FIFO (first in, first out, que se traduce como primero en entrar, primero en salir), e implementando fusión de peticiones.

Asume que la optimización del desempeño de Entrada/Salida será gestionado por otro nivel de la jerarquía de Entrada/Salida, como pudiera ser en el dispositivo de bloque o bien un HBA (Host Bus Adapter o adaptador de transporte del anfitrión) inteligente, como en el caso en los controladores RAID para SAS (Serial Attached SCSI) o bien un controlador conectado de manera externa, como ocurre con los SAN (Storage Area Network o Redes de Área de Almacenamiento).

Este planificador de Entrada/Salida es principalmente utilizado con unidades de estado sólido (SSD, Solid State Drives) basadas sobre memoria Flash, NAND o SDRAM y en dispositivos que carecen de dependencia a movimientos mecánicos, los cuales carecen de re-ordenamiento de peticiones múltiples de Entrada/Salida, donde se agrupan juntas las peticiones de Entrada/Salida que están físicamente cercanas, reduciendo el tiempo de petición y la variabilidad del tiempo de servicio de Entrada/Salida.

GESTIÓN DE ARCHIVOS EN MANDRIVA LINUX

Sistema de Archivos.

La estructura de archivos de Linux está pensada para facilitar la utilización de una gran cantidad de archivos. Utiliza una estructura jerárquica o de árbol que permite a cada usuario poseer un directorio principal con tantos subdirectorios como desee; LINUX también permite a los usuarios compartir archivos por medio de enlaces (links), que hacen aparecer los archivos en más de un directorio de usuario. Cada usuario es propietario de sus archivos y para ello cada fichero dispone de una serie de permisos. El propietario de un fichero puede permitir que otros usuarios compartan el uso de alguno de sus ficheros manipulando adecuadamente los permisos del fichero.

ESTRUCTURA DE ARCHIVOS. a. TIPOS DE ARCHIVOS. La base del sistema de archivos de Linux es obviamente, el archivo, que no es otra cosa que la estructura empleada por el sistema operativo para almacenar información en un dispositivo físico como un disco duro, un disquete, un CD-ROM, etc. Como es natural, un archivo puede contener cualquier tipo de información, desde una imagen en formato GIF o JPEG a un texto o una página web en formato HTML. El sistema de archivos es la estructura que permite que Linux maneje los archivos que contiene.

Linux sólo distingue tres tipos de archivos:

. Archivos o ficheros ordinarios, que son los mencionados anteriormente.

. Directorios (o carpetas). Es un archivo especial que agrupa otros ficheros de una forma estructurada. . Archivos especiales. Son la base sobre la que se asienta Linux, puesto que representa dispositivos conectados a un ordenador, como puede ser una impresora. De esta forma, introducir información

en ese archivo equivale a enviar información a la impresora. Para el usuario estos dispositivos tienen el mismo aspecto y uso que los archivos ordinarios.

b. ENLACES. El enlace es un tipo de archivo ordinario cuyo objetivo es crear un nuevo nombre para un archivo determinado. Una vez creado el enlace simbólico, éste permite acceder al fichero que enlaza de igual modo como si se accediese desde el archivo original. Los enlaces simbólicos son especialmente útiles cuando se quiere que un grupo de personas trabajen sobre un mismo fichero, puesto que permiten compartir el fichero,pero centralizan las modificaciones.

c. EL CAMINO O PATH. En cualquier sistema operativo moderno la estructura de archivos es jerárquica y depende de los directorios. En general, la estructura del sistema de archivos se asemeja a una estructura de árbol, estando compuesto cada nudo por un directorio o carpeta, que contiene otros directorios o archivos. En Linux, existe una única raíz llamada / de la que cuelgan todos los ficheros y directorios, y que es independiente de los dispositivos que estén conectados al ordenador.

El camino o path de un fichero o directorio es la secuencia de directorio que se ha de recorrer para acceder a un determinado fichero separados por /.

Existen dos formas del path o camino: . El camino absoluto que muestra toda la ruta a un fichero (por ejemplo, /home/luis/Carta.txt). . El path relativo a un determinado directorio (por ejemplo, si nos encontramos en el directorio /home, el path relativo al fichero Carta.txt es luis/Carta.txt).

Además, todos los directorios contienen dos directorios especiales:

.El directorio actual, representado por el punto (.).

.El directorio padre representado por dos puntos (..).

d. ESTRUCTURA DEL SISTEMA DE ARCHVOS EN MANDRIVA LINUX. La estructura de archivos del sistema operativo Mandriva Linux suele organizarse conforme a una convención, en donde generalmente se encuentra los siguientes archivos y directorios:

/ (root) El directorio raíz, que se encuentra en todos las estructuras de archivos de linux.

/bin Recibe su nombre de la abreviación de “binarios” o ejecutables. Es donde residen la mayor parte de los programas ejecutables del sistema. Por ejemplo los ejecutables de las órdenes ls, cd, cp y mv están en este directorio. Es decir, cuando se usa la orden cd se está ejecutando el programa /bin/cd.

/dev Todos los archivos que representan dispositivos se almacenan en este directorio.

/dev/console Es la consola principal del sistema.

/dev/fd Todos los ficheros que comienzan con fd se refieren a diferentes configuraciones y unidades de disco flexible.

/dev/ hd Discos duros con interfaz IDE./dev/ttyS, / dev/cua A través de estos ficheros se accede a los puertos serie/dev/sd Discos duros con interfaz SCSI./dev/lp Ficheros de acceso a los puertos paralelo./dev/null Dispositivo nulo, cualquier dato enviado a este dispositivo se pierde./dev/tty Consolas virtuales, el sistema simula la conexión a varios terminales. Al

pulsar la combinación de teclas Alt+Tecla_de_función se puede conmutar entre los diferentes terminales.

/etc Aquí se almacenan archivos varios. El más útil es el archivo PASSWD, que es una lista de todos los usuarios que tienen permiso para utilizar el sistema. Además de este archivo, aquí se encuentran comandos usados por el supervisor, archivos de configuración, archivos de configuración de discos, archivos de inicialización, listas válidas de usuarios, grupos, ethernet, hosts, a donde mandar mensajes críticos, etc.. Solamente el superusuario (root) puede modificar ficheros de este directorio.

/home Contiene el directorio “home” de los usuarios. Así, por ejemplo, /home/juan es el directorio del usuario “juan”. Naturalmente, en un sistema recién instalado este directorio estará vacío.

/lib Contiene las librerías de compartidas. Los nombres de los ficheros indican la versión, el tipo de objeto que es y a qué lenguaje o utilidad pertenecen. Por ejemplo, libc.so.4.3.2. es una librería de C (libc), se trata de una librería compartida (so shared object) y pertenece a la versión 4.3.2.

/lost+found Aquí se va la información y los procesos que se estaban ejecutando cuando el sistema se cae.

/mnt Directorio para poder montar sistemas de ficheros Linux.

/proc Al acceder a este directorio, se consigue obtener información de los procesos que se ejecutan en el sistema.

/root Directorio raíz de superusuario.

/sbin Contiene programas para la administración del sistema, que son únicamente accesibles al superusuario. Aquí residen los comandos para montar y desmontar los sistemas de archivos, apagar el sistema y utilidades para configurar la red y los dispositivos.

/tmp Contiene ficheros temporales, resultado de la necesidad que tienen muchos programas del sistema de general información temporal y posteriormente guardarla en dichos ficheros.

/usr Es uno de los directorios más importantes del sistema puesto que contiene los programas de uso común para todos los usuarios. Su estructura suele ser similar a la siguiente.

/tmp Aquí se guardan los archivos temporales que crean los programas que son ejecutados.

TENDENCIAS DE MANDRIVA LINUX

Mandriva anuncia CloudPulse, la solución basada en la nube para la gestión de infraestructura

CloudPulse es la evolución de SaaS de Mandriva Pulse. Esta solución ofrece las mismas ventajas de Pulse sin las limitaciones materiales y recursos involucrados en el mantenimiento de una solución completa.

Mandriva CloudPulse permite a las empresas de todos los tamaños realizar inventarios, despliegues, datos y copias de seguridad de la configuración de su infraestructura TI, sin la sobrecarga que se produce por la propiedad de una solución de infraestructura de gestión tradicional. CloudPulse está disponible en varios planes de precios que están específicamente dirigidas a las estructuras de pequeñas y medianas empresas.

Esta nueva solución marca el inicio de Mandriva en la nube. Mandriva cree que la computación en la nube debe poner la privacidad de los datos de los clientes y la propiedad en primer lugar. Los datos recogidos a través de CloudPulse se encuentra en servidores ubicados en Francia y no se transfieren a terceros

Nace OpenMandriva, la fundación que liderará el futuro

de Mandriva Linux

Tras recorrer una cuesta abajo que duró demasiado, la compañía

francesa Mandriva, en un último intento por salvar el proyecto accedió

a devolver el control del mismo al a comunidad. Lo primero era definir a

la fundación independiente que velaría por ese proyecto: se llamará

OpenMandriva.

OpenMandriva se encargará de liderar el desarrollo de la

distribución GNU/Linux sucesora de Mandriva Linux, cuyo nombre

aún no está decidido. Como en el caso de OpenMandriva, eso lo decidirá

la comunidad mediante votación.

FOROS DE MANDRIVA LINUX

http://mandriva.foroactivo.com/c1-zona-de-mandrivahttp://blogdrake.net/

Comentario y Conclusiones:

Mi comentario sobre la gestión de procesos y memoria del sistema operativo Mandriva Linux es un poco más complicado ya que este tiene más estados y a su vez también tienen algunos tipos propios del sistema, también me parece interesante Scheduler de Linux que es el que se encarga de indicar al sistema operativo cual es el proceso que está listo para ejecutarse.Acerca de la gestión de memoria lo que más me intereso es el direccionamiento de memoria virtual de Linux que hace uso de una estructura de tabla de páginas con tres

niveles, además el Buddy system que es una estrategia utilizada por el kernel para asignar grupos de marcos de páginas contiguos y así evitar la fragmentación externa.

Me parece muy interesante la forma como gestiona la Entrada/Salida Mandriva Linux ya que este lo hace a través de un Planificador de Disco conocido mejor en el ambiente Linux como Ascensor de Linux el cual mantiene la lista de peticiones ordenadas por el número de bloque además se maneja mediante dos algoritmos, el primero (planificador basado en plazos) no intenta servir peticiones en un plazo de tiempo determinado. Sino que simplemente deja insertar las peticiones en orden después de un plazo conveniente.

El segundo (planificador e/s previsor) espera hasta que se complete una petición de lectura y estén los datos disponibles antes de realizar la siguiente petición. El retardo que hay entre que se reciben los datos de la última lectura y la solicitud de la siguiente lectura permite al planificador dedicarse a otra petición pendiente y servir esa petición.

Con este pequeño resumen se puede apreciar que la forma de administrar la Entrada/Salida ha ido mejorando notablemente de esta forma se pueden gestionar los dispositivos de una manera más rápida y fácil.

En cuanto a la gestión de archivos se la hace muy parecida a Windows cabe resaltar que aquí existe una única raíz y que además Mandriva Linux di distingue los caracteres entre mayúsculas y minúsculas lo cual nos facilita un poco más la creación de ficheros, también la forma para buscar un directorio se la hace mediante un /. que la diferencia de Windows.

Las tendencias de Mandriva no han sido muy desarrolladas ya que la empresa en estos últimos meses se encontró en una eta muy difícil económicamente la cual la llevo casi a la banca rota de ahí que nace OpenMandriva que es la que se encargara de ahora en adelante del desarrollo de la distribución.

Conclusiones:

Como conclusiones tenemos:

1. El nombre de este Sistema Operativo se produjo después que el comic de Mandrake el mago demando a la corporación a cargo de la distribución de ahí que luego se lo cambio a Mandriva de la unión de las corporaciones Mandrake y Conectiva.

2. Que la tabla de procesos de Mandriva Linux inicialmente era un vector de tamaño fijo pero fue modificado por su limitada capacidad de procesos actualmente es una lista doblemente enlazada.

3. Los descriptores de proceso los asigna dinámicamente el kernel llamando a una función especial, la gestión de la tabla de procesos (listas de descriptores de procesos) es llevada a cabo por el scheduler.

4. El scheduler explora la lista de procesos “listos para ejecutarse en memoria” y utiliza varios criterios para elegir el proceso a ejecutar, tiene que elegir el proceso que más merece ejecutarse entre todos los procesos que se pueden ejecutar en el sistema.

5. Existen 3 tipos de direcciones: Direcciones lógicas, Direcciones lineales, Direcciones físicas. Las transformaciones y el formato de las direcciones dependen de la arquitectura. En Linux los espacios de direcciones lógico y lineal son idénticos.

6. Se puede observar la asignación de memoria desde dos puntos de vista: peticiones por parte del kernel y por parte de procesos de usuario.

7. El gestor de faltas de página debe distinguir la causa de la falta entre:o Error de programación. o Referencias a páginas legítimas del espacio de direcciones del proceso pero no

presentes8. Cuando se añade una nueva petición a la cola del ascensor, se consideran en este orden

las siguientes cuatro operaciones:o -Si existe una petición pendiente en la cola o -Si hay una petición en la cola que es suficientemente antigua, o - si hay una posición adecuadao -si no hay una posición adecuadao

9. Cada nueva petición se incluye en la cola ordenada del ascensor, esa misma petición se sitúa al final de la cola FIFO de lectura en el caso de una petición de lectura o de una cola FIFO de escritura.

10. El planificador de plazos extrae peticiones de la cola ordenada. Cuando se completa una petición, se elimina de la cabeza de la cola ordenada y también de la cola FIFO correspondiente.

11. Las páginas modificadas se escriben en el disco en dos situaciones:o - cuando la cantidad de memoria libre llega a ser menoro -cuando las paginas modificadas envejecen

12. Todos los archivos de Mandriva Linux tienen un nombre, el cual debe cumplir algunas reglas:

o Un nombre de archivo puede tener entre 1 y 255 caracteres. o Se puede utilizar cualquier carácter excepto la barra inclinada / y no es

recomendable emplear los caracteres con significado especial en Linux para emplear ficheros con estos caracteres o espacios, hay que introducir el nombre del fichero entre comillas.

o Se pueden utilizar números exclusivamente si así se desea. Las letras mayúsculas y minúsculas se consideran diferentes y, por tanto, no es lo mismo carta.txt que Carta.txt o carta.Txt

13. El gestor de archivos o explorador de archivos predeterminado en Mandriva Linux 2011 es Dolphin en el entorno de escritorio de KDE desde la versión 4.0.

14. El gestor de paquetes de Mandriva Linux 2011 predeterminado es el RPM Package Manager el cual permite actualizar, descargar, instalar y solicitar programas además Mandriva está desarrollando su propio Gestor de paquetes Mandriva Package Manager (MPM) el cual puede ser instalado desde los repositorios.

Web grafía:

http://angievanezzamandriva.blogspot.com/2012/06/historia-en-1998-la-compania-francesa.html

http://www.google.com.ec/url?sa=t&rct=j&q=gestion+de+procesos+en+linux&source=web&cd=2&cad=rja&ved=0CCQQFjAB&url=http%3A%2F%2Fwww.ual.es%2F~acorral%2FDSO%2FTema_2.pdf&ei=RXyOUI6ZJ62u0AG-uICoBw&usg=AFQjCNG7OTYrthdxLSLbX3LUVEvQoTsJQg

http://www.google.com.ec/url?sa=t&rct=j&q=gestion+de+memorias+en+linux&source=web&cd=1&cad=rja&ved=0CB4QFjAA&url=http%3A%2F%2Fwww.ual.es%2F~acorral%2FDSO%2FTema_3.pdf&ei=z32OUMifCtC80AGHtoC4AQ&usg=AFQjCNFJ18t9J6cHGtkcVNdCdmBPtBZ9Dg

http://www.alcancelibre.org/staticpages/index.php/planificadores-entrada-salida-linux

http://www.revistacloudcomputing.com/2012/11/mandriva-anuncia-cloudpulse-la-solucion-basada-en-la-nube-para-la-gestion-de-infraestructura/

Bibliografía:Sistemas Operativos Quinta Edición – William StallingsPdf Unidad 1 Sistema Operativo Linux