UNIDAD I

INTRODUCCION Y TIPOS DE SISTEMAS OPERATIVOS
1.1 DEFINICIONES DE UN SISTEMA OPERATIVO

A continuación se analizaran algunas definiciones sobre lo que es un sistema operativo:  Los sistemas operativos son los programas de gestión del hardware de un sistema de computación electrónico, así como de establecimiento de su relación con el usuario. Es por tanto uno de los elementos software de bajo nivel más importante, y hace de puente entre el software, el hardware y el usuario.  Intermediario entre el usuario y los programas de aplicación y el hardware – Proporciona una capa de aislamiento – Determina la compatibilidad de los programas Las tareas principales – Facilitar el manejo del ordenador – Utilizar el hardware de forma eficiente Se ejecuta continuamente desde que arranca el ordenador  Un sistema operativo (S.O.) es el conjunto de programas responsable de la administración y coordinación de los recursos en un sistema de computadoras.

Un sistema de computadoras se compone de:  Hardware – CPU, memoria y dispositivos de entrada/salida (E/S)  Software – aplicaciones, herramientas de programación y programas utilitarios Los usuarios son personas, máquinas o programas que usan los servicios del sistema operativo.

Es el software que controla la computadora, sirve de interfaz hombre-máquina y administra los recursos de un sistema de cómputo hardware y software.

1

Lo importante es que el sistema operativo debe:  Proveer un mecanismo conveniente para que los usuarios ejecuten las aplicaciones y manejen el hardware, decidiendo quién y cómo se utilizan los recursos. Permitir la operación eficiente del sistema de computadoras, especialmente en sistemas multitareas y multiusuarios.

1.2

FUNCIONES DE UN SISTEMA OPERATIVO

Las tareas que desempeña un sistema operativo dependen en cierta medida del tipo de las características de cada ordenador. Así las funciones de un sistema operativo multitarea, en un gran ordenador, son diferentes de las de un ordenador personal. Sin embargo, existen ciertos puntos en común que permiten identificar de forma muy general las tareas principales de un sistema operativo en:  Proporcionar una interfaz de usuario, para que este último se pueda comunicar con la computadora  Administrar y controlar los dispositivos de hardware del computador  Administrar y mantener los sistemas de archivo de disco  Apoyar la ejecución de otros programas

Figura1: Funciones de un sistema operativo
Fuente: http://cert.inteco.es/extfrontinteco/img/Image/intecocert/Formacion/software/so.jpg

1.3

LOS SISTEMAS COMPUTADORAS

OPERATIVOS

Y

LOS

SISTEMAS

DE

La siguiente figura muestra la relación entre los sistemas operativos y el resto del sistema de computadoras:

2

Usuario 1

Usuario 2

Usuario n

Interfaz de Comandos o Aplicaciones (procesadores de palabras, hojas de cálculo, sistemas de bases de datos)

Sistema Operativo

Hardware Figura 2: Relación entre los sistemas operativos y el resto del sistema de computadoras
Fuente: http://www.fing.edu.uy/inco/cursos/sistoper/recursosTeoricos/SO-Teo-Introduccion.pdf

Los usuarios se comunican con el sistema operativo mediante la invocación de las aplicaciones o el uso de una interfaz de comandos:  Interfaz de la Línea de Comandos (CLI, Command-Line Interface) comandos, opciones y argumentos como texto  Interfaz Gráfica para Usuarios (GUI, Graphical User Interface) ventanas, íconos, menús y dispositivos apuntadores Las aplicaciones se comunican con el sistema operativo mediante:  Llamadas del sistema (system calls) – funciones que el sistema operativo provee para que las aplicaciones soliciten servicios  API(Application Programming Interface) - conjunto de funciones, procedimientos o clases que un sistema operativo o un lenguaje de programación provee para atender solicitudes de los programas El sistema operativo se comunica con el hardware mediante el uso de interrupciones (interrupts)  Una interrupción es una señal que un dispositivo de hardware envía al sistema operativo para indicar que éste necesita ser atendido

1.4

COMPONENTES DE UN SISTEMA OPERATIVO

De manera esquemática, un sistema operativo se compone de: a. Núcleo (Kernel): responsable de la gestión de memoria, de disco y de procesos. b. Shell (Intérprete de comandos): es el proceso encargado de traducir los comandos que los usuarios introducen, a instrucciones que el sistema operativo entiende.

3

c. Servicios (API: Aplication Program Interface): mediante estos servicios las aplicaciones pueden realizar peticiones al sistema operativo para acceder a los recursos hardware del sistema.

Figura 3: Componentes de un sistema operativo
Fuente: http://www.scribd.com/doc/98644/GUIA-DE-SISTEMA-OPERATIVO

1.4.1

Núcleo del sistema operativo (Kernel)

Es lo primero que se carga del sistema operativo al arrancar el ordenador. Reside permanentemente en memoria y atiende las llamadas al sistema. Tiene las siguientes funciones básicas: – Carga inicial (programa de arranque) – Administración de memoria – Administración del procesador – Administración de dispositivos – Administración de los archivos El administrador de la memoria (memory manager) está a cargo de la memoria principal (RAM). Responsabilidades del administrador de la memoria: o Preserva el espacio que ocupa el sistema operativo de forma tal que no pueda ser alterado accidental o intencionalmente. o Determina la localización en RAM de los programas que se ejecutan. o Asigna y/o libera espacio en memoria de acuerdo a solicitudes de los programas. o En los sistemas multiusuarios, monitorea las porciones de RAM asignadas a cada usuario. El administrador del procesador (processor manager) está a cargo de asignar el CPU a los programas que se ejecutan (los procesos). o Un programa es una entidad pasiva, es un conjunto de instrucciones. o Un proceso es una entidad activa que contiene una imagen del código, memoria asignada, atributos de seguridad y el estado del CPU (registros). o Un programa puede crear uno o más procesos cuando se ejecuta. Responsabilidades del administrador del procesador: o Monitorea el estado del CPU para determinar si el CPU está ejecutando un proceso o espera por una operación de lectura o escritura. o Planifica cómo se ejecutan los procesos por parte del CPU: – Decidiendo si se acepta o rechaza cada proceso

4

o o

Decidiendo a qué proceso se le asignan los recursos del CPU y por cuánto tiempo Provee mecanismos para la sincronización y la comunicación entre los procesos. Provee mecanismos para el manejo de procesos concurrentes. –

El administrador de los dispositivos (device manager) está a cargo de manejar dispositivos tales como teclado, mouse, pantalla, impresora y las unidades de disco. o Le esconde las peculiaridades de estos dispositivos al usuario. Responsabilidades del administrador de los dispositivos: o Asigna y libera recursos para los dispositivos mediante planificación. o Comienza la operación de los dispositivos. o Permite la comunicación entre dispositivos.

políticas

de

El administrador de los archivos (file manager) está a cargo de monitorear cada archivo en el sistema. o Provee una visión lógica y uniforme del almacenamiento de la información en la memoria secundaria. Responsabilidades del administrador de los archivos: o Provee mecanismos para crear y eliminar archivos. o Provee mecanismos para organizar archivos relacionados en directorios. o Controla el acceso y la modificación de los directorios y archivos. o Asigna y libera recursos para la utilización de los archivos. En la actualidad los sistemas operativos incluyen un componente conocido como el administrador de la red. El administrador de la red (network administrator) está a cargo de proveer mecanismos para que distintos usuarios utilicen y compartan los recursos de la red de forma controlada y segura. o o Es importante recalcar que los componentes de un sistema operativo deben interactuar armoniosamente unos con otros. Estos componentes no actúan aisladamente.

Ejemplo de orden en el arranque de un computador Como ejemplo, consideremos lo que ocurre cuando se quiere ejecutar un programa: o El administrador de dispositivos recibe e interpreta las señales eléctricas del teclado o el mouse y le envía un comando al administrador del procesador. o El administrador del procesador determina si el programa está ya en memoria o si hay que leerlo de disco. o Si hay que leer el programa de disco, el administrador del procesador le envía un comando al administrador de archivos para que éste determine su localización en disco. o El administrador de archivos le envía un comando al administrador de dispositivos para que cargue el programa y éste último le envía un comando

5

o o o

al administrador de memoria para que encuentre espacio en RAM, coloque el programa y registre su localización en RAM. Una vez que el programa está en memoria, el administrador del procesador determina la prioridad y los recursos que le corresponde. Mientras el programa ejecuta, los administradores manejan los recursos que el proceso necesita. Cuando el programa termina de ejecutar, los administradores liberaran los recursos.

1 Teclado Señales eléctricas Ad.dispositivos

2 Comando Ad.procesador Hay que leerlo de disco o si está ya en memoria Cargue el programa

3 Si lee del disco

5

Encuentre espacio en RAM

Ad.archivos

Ad.memoria

Determine prioridad

4 6

Figura 4: Orden de arranque en un computador
Fuente: Autor

1.4.2

Shell (Interprete de comandos)

Para que un usuario pueda dialogar directamente con el sistema operativo, se proporciona una interfaz de usuario básica para: – Cargar programas – Abortar programas – Introducir datos a los programas – Trabajar con archivos – Trabajar con redes Ejemplos de intérprete de comandos: – JCL en sistemas por lotes – COMMAND.COM en MS-DOS – Shell en UNIX a. Interprete de comandos del sistema operativo Windows Algunos sistemas operativos incluyen el intérprete de comandos en el kernel. Otros lo ejecutan como un programa especial que se ejecuta cuando se inicia un trabajo o cuando un usuario inicia sesión. La función principal del intérprete de comandos es obtener y ejecutar en el sistema, el comando especificado por el usuario. Uno de los métodos consiste en que el propio intérprete de comandos contiene el código que el comando tiene que ejecutar.

6

Figura 5: Interprete de comandos
Fuente: http://www.programasok.com/wp-content/uploads/2009/06/fileidentifier.jpg

En la actualidad, e inicialmente orientadas al gran público, son más utilizadas las GUI (Graphics User Interface) que el clásico interprete de comandos textual. Estas interfaces gráficas permiten al usuario dar órdenes y trabajar con el sistema operativo de manera sencilla, sin necesidad de un gran conocimiento de los comandos del sistema operativo. b. GUI del sistema operativo Windows XP

Figura 6: GUI del sistema operativo Windows XP
Fuente: http://upload.wikimedia.org/wikipedia/en/b/ba/Windows_XP.PNG

7

1.5

ARRANQUE DE LA COMPUTADORA

El arranque de una computadora actual tiene 2 fases: la fase de arranque hardware y la fase de arranque del sistema operativo. 1.5.1 Arranque hardware

Como se indico anteriormente la computadora solo es capaz de realizar actividades útiles si cuenta con un programa cargado en memoria principal. Puesto que la memoria de las computadoras es volátil, cuando se enciende la máquina no contiene ninguna información útil. Para resolver esta situación, las computadoras cuentan con un programa permanente grabado en una memoria no volátil denominada comúnmente BIOS en los PC. La BIOS realiza 3 funciones: 1. Hace una comprobación del sistema para detectar sus características y comprobar si todos los componentes funcionan correctamente. 2. Busca el dispositivo de almacenamiento secundario donde se encuentra el sistema operativo y carga en memoria el programa cargador de este. 3. Finalmente da paso a este programa bifurcando a la dirección de memoria donde está este cargado. El programa cargador del sistema operativo suele encontrarse en los primeros sectores del disco y tienen un tamaño prefijado por convenio. 1.5.2 Arranque software

El programa cargador tiene por misión traer a memoria principal algunos de los componentes del sistema operativo. Una vez cargados estos componentes se pasa a la fase de inicialización, que incluye las siguientes operaciones: • Comprobación del sistema • Se establecen las estructuras de información propias del sistema operativo como la tabla de procesos, las tablas de memoria y las de E/S. • Se crea un proceso de inicio o login por cada terminal definido en el sistema, así como una serie de procesos auxiliares y de demonios (o servicios).

1.6

¿CÓMO FUNCIONA EL ARRANQUE DE UN COMPUTADOR?

Al poner en funcionamiento el computador, los circuitos y la memoria toman valores determinados. Mediante una señal de RESET, los registros y los biestables se pueden poner en valores predeterminados, pero no sucede lo mismo con la memoria principal, que no contiene ninguna información válida, es decir, que no contiene ningún programa. Como sabemos, cualquier función que queramos que el computador lleve a cabo se tiene que hacer mediante el correspondiente programa de máquina. Por tanto, para llevar un programa del disco duro a la memoria se necesita un programa, que en este caso se denomina cargador.

8

Esta situación, en la que no se dispone de un programa en memoria principal y en la cual, por tanto, el computador no puede hacer nada, se resuelve de la siguiente forma: parte de la memoria principal se construye con pastillas del tipo ROM, como se puede apreciar en el siguiente esquema:

Unidad de memoria Celdas Dirección 0 2.023
Zona ROM

Unidad de memoria Celdas Dirección 0

1.046.526 Zona ROM 1.048.575 1.048.575

Figura 7: Conformación de la memoria principal
Fuente: http://www.iearobotics.com/proyectos/comunica/Comunica_archivos/imagen1.png

En estas pastillas se registran unos programas que están siempre disponibles, ya que las pastillas ROM conservan siempre todo su contenido. En general, la zona ROM ocupa las direcciones menores o las mayores. Cuando arrancamos el computador, la señal RESET carga la dirección de esta zona de memoria en el contador del programa, de forma que se empieza a ejecutar el programa almacenado en esta posición. Los programas que se suelen incluir en esta zona de memoria son los siguientes: a) Programa de test, que lleva a cabo una prueba del comportamiento del computador. b) Programa cargador, que puede cargar otros programas residentes en disco o en disquete. La memoria BIOS del PC es una memoria ROM que tiene varias funciones. Sirve para arrancar el PC, por lo que incluye un programa de test, que comprueba el funcionamiento del procesador y de la memoria principal, y un programa cargador, que carga programas desde disquete o disco duro. Además, tiene una serie de programas que llevan a cabo tareas de bajo nivel relacionadas con la entrada/salida.

1.7

PROCESO DE ARRANQUE DEL PC
POST Carga BIOS Lectura CMOS

Encendido

Carga SO

Sector de arranque Partición activa

Carga MBR

Figura 8: Proceso de arranque
Fuente: http://apuntesacademia.blogspot.com/2007_12_16_archive.html

9

1.8

BIOS: CONCEPTOS Y CONFIGURACION

Figura 9: La BIOS
Fuente: https://belenus.unirioja.es/~alortiz/imagenes/chip_bios.jpg

El BIOS (Basic Input Output System – Sistema Básico de Entrada Salida) es un programa que se encuentra grabado en un chip de la placa base, concretamente en una memoria de tipo ROM (Read-Only Memory). Este programa es el que se encarga de comprobar el hardware instalado en el sistema, ejecutar un test inicial de arranque, inicializar circuitos, manipular periféricos y dispositivos a bajo nivel y cargar el sistema de arranque que permite iniciar el sistema operativo. En resumen, es lo que permite que el ordenador arranque correctamente en primera instancia. Inicialmente era muy complicado modificar la información del BIOS en el ROM, pero hoy en día la mayoría de los BIOS están almacenados en una memoria flash capaz de ser reescrita, esto es lo que permite que se pueda actualizar. El BIOS se apoya en otra memoria, llamada CMOS porque se construye con esa tecnología, en ella carga y almacena los valores que necesita y que son susceptibles de ser modificados (cantidad de memoria instalada, numero de discos duros, fecha y hora, etc.). A pesar de que apaguemos el ordenador, los valores de la memoria de BIOS se mantienen intactos, ¿cómo es posible?, pues gracias a una pila que la alimenta. Puesto que el consumo es muy bajo y se recarga al encender el ordenador, la pila puede durar varios años. Cuando hay problemas con la pila, los valores de dicha memoria tienden a perderse, y es cuando pueden surgir problemas en el arranque del tipo: pérdida de fecha y hora, necesidad de reconfigurar dispositivos en cada arranque, y otros. En caso de problemas sustituir la pila es trivial, basta con comprar una de iguales características, retirar la vieja y colocar la nueva en su lugar. En condiciones normales no es necesario acceder al BIOS ya que al instalar un dispositivo, siempre que hayamos tenido la precaución de asegurarnos que es compatible o aceptable por nuestra placa base, éste es reconocido inmediatamente y configurado por BIOS para el arranque. No obstante, hay ocasiones en las que se hace necesario acceder a su configuración, veremos cómo hacerlo y algunos ejemplos.

10

1.9

ACCESO Y MANIPULACIÓN DEL BIOS:

Para acceder al programa de configuración del BIOS, generalmente llamado CMOS Setup, tendremos que hacerlo pulsando un botón durante el inicio del arranque del ordenador. Generalmente suele ser la tecla Supr aunque esto varía según los tipos de placa y en portátiles. Otras teclas empleadas son: F1, Esc, o incluso una combinación, para saberlo con exactitud bastará con una consulta al manual de su placa base o bien prestando atención a la primera pantalla del arranque, ya que suele figurar en la parte inferior un mensaje similar a este: ''Press DEL to enter Setup'' El aspecto general del BIOS dependerá de qué tipo en concreto tenga en su placa, las más comunes son: Award, Phoenix (se han unido) y AMI. Bastante similares pero no iguales. El programa del BIOS suele estar en un perfecto inglés y además aparecen términos que no son realmente sencillos, si no sabe lo que está tocando consulte el manual o a un especialista, de lo contrario se encontrará con problemas. Aunque tengan nombres diferentes, existen algunos apartados comunes a todos los tipos de BIOS. Una clasificación puede ser: 1. Configuración básica de parámetros - Standard CMOS Setup. 2. Opciones de BIOS - BIOS Features, Advanced Setup. 3. Configuración avanzada y chipset - Chipset features. 4. Password, periféricos, discos duros, etc. 5. Otras utilidades. Bajo el 1er punto se puede encontrar la configuración de la fecha y hora, los discos duros conectados (IDE) y la memoria detectada, entre otras cosas. En el punto 2º existen muchos parámetros modificables, suelen aparecer: caché, secuencia de arranque (Boot sequence), intercambio de disqueteras, etc. En el punto 3 podemos encontrar parámetros relativos a las características del chipset, memoria RAM, buses y controladores. Bajo el punto 4 hemos reunido una serie de opciones que suelen estar distribuidas, gracias a ellas podemos insertar una contraseña de acceso al programa del BIOS, modificar parámetros relativos a los periféricos integrados, control de la administración de energía, control de la frecuencia y el voltaje, etc. Y finalmente en el punto 5 reunimos las opciones que nos permiten guardar los cambios efectuados, descartarlos, cargar valores por defecto, etc. En la parte inferior de la interfaz del programa podremos ver el inventario de teclas necesarias para navegar entre las opciones y modificarlas, es importante leerlo y tenerlo en cuenta. Además es importante aclara que dependiendo del tipo de placa base o del modelo la presentación del setup puede variar.

11

Figura 10: Imagen de la interfaz más común de BIOS (Award y Phoenix)
Fuente: http://tpq70a.vtrbandaancha.net/imagenes/Blog005_Fig02.jpg

Modificaciones comunes: ejemplos. Existen una serie de parámetros que son susceptibles de ser modificados en algún momento, de hecho en la mayoría de foros de soporte técnico se plantean esas dudas. Vamos a explicar cuáles son y usarlos como ejemplo: 1.9.1 Secuencia de arranque:

Esto le indica al BIOS a qué unidad ha de ir para buscar el arranque del sistema operativo. La secuencia indica el orden de izquierda a derecha en que se buscará en las unidades. Antiguamente el orden solía marcar A C SCSI/otros lo cual indicaba que primero que debía mirar en la unidad A (disquetera) y posteriormente en C (disco duro principal), gracias a esto se podía arrancar el ordenador con un disco de arranque antes que el sistema operativo. Hoy en día esto ha cambiado en muchos casos, cuando se necesita arrancar desde un CD (instalación de sistemas operativos (Windows XP, Linux)) hay que modificar la secuencia de arranque (a menos que el sistema sea tan nuevo que ya venga de fábrica) para que inicialmente apunte a la unidad lectora de CD. Supongamos que la unidad tiene la letra D, el orden podría ser D A C o D C A, por ejemplo. La opción suele encontrarse en BIOS Features >> Boot Sequence para las BIOS Award. En algunos casos en vez de integrarse en una sola opción, esto se realiza en varias, suelen referirse al orden de arranque de dispositivos y se llaman: First Boot Device, Second Boot Device, Third Boot Device y Boot Other Device. Basta especificar en cada una cuál es el dispositivo que arrancará en ese orden (First = primero, Second = segundo, Third = tercero, Other = otro).

12

Figura 11: Secuencia de arranque
Fuente: http://tpq70a.vtrbandaancha.net/imagenes/Blog005_Fig06.jpg

1.9.2

¿Cómo se inicia en este caso un sistema operativo básico como el MS-DOS?

Veamos, en el caso anterior, como se iniciaría un sistema operativo como MSDOS. • Al realizar el primer FDISK al disco duro, se creará el MBR del disco, el cual es un programa que contiene a su vez los datos de las posiciones de inicio / final de cada partición y el tipo de partición. • Creamos ahora una partición primara. Al formatearla, el MS-DOS, crea el sector de boot de la partición. Es similar al programa anterior del MBR, excepto que este sector de boot tiene “dentro” el nombre de un fichero que cargará: el IO.SYS. Este nombre es ‘hardcoded’, es decir, codificado en el interior de este sector de boot. 1. Cuando encendemos el PC, la BIOS de la maquina lee el cilindro cero, cabeza cero, sector 1 del disco duro y lo carga en memoria. Es decir, acaba de leer el MBR. 2. Le cede control para que se ejecute. 3. Al ejecutarse, el programa ‘lee’ de sus datos internos cual es la partición activa. Una vez localizada lee el primer sector de dicha partición y lo carga en memoria. 4. Le cede control para que se ejecute. 5. En este momento, en memoria está el programa correspondiente al sector de boot de una partición formateada MS-DOS. Este programa es ligeramente diferente al del MBR. En su interior, tiene las instrucciones para localizar el archivo IO.SYS 6. Una vez localizado, lo carga en memoria.

13

7. Le cede el control para su ejecución….. y así comienza la carga de un MSDOS: el IO.SYS lee el fichero MSDOS.SYS, el cual es de parámetros en los sistemas operativos W95, W98, ME. Posteriormente y una vez ejecutadas las tareas básicas e instaladas las rutinas del sistema operativo, carga el interprete de comandos: el ‘command.com’ 8. Si nuestro sistema operativo fuese MS-DOS, aquí terminaría la carga. Si es W9X, busca el win.com para iniciar la carga de Windows. Lo anterior, no es válido para sistemas operativos basados en núcleo NT (NT 4, W2000 o XP). Pero es necesario entender lo anterior como punto de referencia, para poder entender posteriormente y tal y como veremos a continuación, la carga de uno de estos sistemas operativos y la posibilidad y funcionamiento del gestor de inicio de estos sistemas el cual soporta la posibilidad de arrancar hasta 10 sistemas operativos en la misma máquina. 1.9.3 Posibles problemas en este inicio básico

Recordemos que el MBR tiene un doble contenido: un programa y los datos de las particiones. Al arrancar el PC, y una vez que la BIOS ha comprobado nuestra maquina, lo carga en memoria y lo ejecuta. Es el primer programa que se ejecuta en la máquina al encenderla. Por tanto, es lo más simple para “colar” en su lugar un virus.

1.10 SECUENCIA DE ARRANQUE DE WINDOWS XP
• • • • La BIOS, carga el MBR del disco duro, el cual comienza su ejecución y determina cual es la partición activa. Carga en memoria el primer sector de la partición activa (sector de boot de la partición) y le cede control para su ejecución. El sector de boot, busca en el disco el programa NTLDR y lo carga en memoria cediéndole control para su ejecución. El programa NTLDR, busca el archivo boot.ini, y en función de su contenido, muestra un menú para que seleccionemos el sistema a cargar. – Si teníamos un MS-DOS, W9X o ME, previo, nos parecerá también en dicho menú la opción de su carga.  Si seleccionamos esta última opción buscará en el disco el archivo bootsect.dos, el cual es el antiguo sector de boot de la partición del sistema operativo previo. Lo carga en memoria y le cede control.  Este, a su vez, buscará en el disco el archivo IO.SYS correspondiente al MS-DOS, o W9X, lo cargará en memoria y le cederá control para iniciar ya el sistema operativo previo. – Si seleccionamos la entrada correspondiente a un NT / W2000 o XP, buscará en la propia línea del boot.ini, tal y como veremos a continuación, la partición de instalación del sistema operativo (de núcleo NT) y comenzará la carga real.

14

Tabla 1. Titulo: Resumen del arranque del computador Fase Iniciador ROM Cargador del S.O. Inicialización S.O. Operación Test del hardware Carga del cargador del S.O. Carga en memoria de componentes del S.O. Test del sistema de archivos Creación de estructuras de datos internas Arranque de procesos del sistema(demonios)

Funcionamiento normal
Fuente: http://www.scribd.com/doc/98644/GUIA-DE-SISTEMA-OPERATIVO

1.11 MBR (Master Boot Record)
El MBR (Master Boot Record) está ubicado en los primeros 512 bytes del disco rígido. Es el encargado de almacenar el cargador de arranque y la tabla de particiones. El cargador de arranque es un programa encargado de llevar el núcleo del sistema operativo a la memoria principal y cederle el control para éste se ejecute. Un disco duro puede tener hasta 4 particiones primarias. Si deseamos más particiones debemos sacrificar una partición primaria y crear una partición extendida, dentro de la cual se pueden crear, como máximo, 4 particiones lógicas. Aclaración: no se pueden guardar datos directamente en una partición extendida, sino que, los datos se guardan dentro de las particiones lógicas que ella alberga.

1.12 HISTORIA DE LOS SISTEMAS OPERATIVOS
La evolución de los sistemas operativos es paralela a la de las computadoras.  En los 1940s: – Primera generación de computadoras (tubos al vacío) – Las aplicaciones eran científicas, matemáticas y militares. – No había sistemas operativos ya que cada programa incluía las instrucciones para manejar los recursos necesarios. – Se programaba en lenguaje de máquina. – Las máquinas eran operadas por los programadores que reservaban tiempo de operación (se perdía tiempo). – El proceso de depuración era manual (el programador detenía el programa y examinaba el estado del CPU y RAM). – Los programas se diseñaban pensando en la utilización de recursos primero y la claridad del código después. En la primera mitad de los 1950s: – Surgen bibliotecas (libraries) con subrutinas y macros que le permitían a los programadores manejar más fácilmente dispositivos de entrada/salida.

15

Estas bibliotecas son la génesis de los sistemas operativos ya que se fueron haciendo más complejas y podían controlar la ejecución de varios trabajos en secuencia. En la segunda mitad de los 1950s: – Segunda generación de computadoras (transistores) – Comienzan a surgir las aplicaciones comerciales. – Surgen los primeros ensambladores (1954 por la IBM) – Surgen los compiladores y lenguajes de alto nivel, tales como FOTRAN (1954), ALGOL (1958) y COBOL (1959). – IBM comienza a desarrollar mainframes en masa. – General Motors, en 1956, crea lo que se considera el primer sistema operativo, el GM-NAA I/O System, un sistema operativo en lote. – Se contratan operadores que liberan de trabajo a los programadores. – Se comienza con la planificación de trabajos (job scheduling) que permite agrupar varios programas que tengan requisitos semejantes y decidir la forma más adecuada de ejecutarlos. – Ej.: Compilar varios programas en COBOL – Surgen los lenguajes de control de trabajos (JCL, Job Control Language) para crear libretos que indican los pasos necesarios para ejecutar un trabajo. – La diferencia en velocidad entre el CPU y los dispositivos E/S se redujo. – Se creó el concepto de bloques de récords (record blocks) que permite agrupar varios récords lógicos en uno físico y disminuir las operaciones E/S. – Se crean memorias intermedias (buffers) para aligerar las operaciones E/S. – También se desarrollan métodos de organización de archivos tales como el acceso indexado y el aleatorio. En los 1960s: – Tercera generación de computadoras (circuitos integrados) – Surgen las minicomputadoras. – La diferencia en velocidad entre el CPU y los dispositivos E/S es todavía un problema. – Para ayudar se crea la multiprogramación (multiprogramming) que permite que varios trabajos compartan la atención del CPU. – En la multiprogramación pasiva, el CPU cambia de un trabajo al próximo cuando el trabajo necesita esperar por un evento externo (normalmente una operación E/S). – En la multiprogramación activa, el sistema operativo le otorga a cada trabajo un pedazo de tiempo. Cuando expira el tiempo, se interrumpe el trabajo momentáneamente y se continúa con el próximo trabajo. – La multiprogramación requirió la optimización de métodos de planificación de trabajos (job scheduling) y de administración de la memoria. – La idea de otorgar pedazos de tiempo a los trabajos y de atender varios trabajos simultáneamente evolucionó hacia el time sharing (tiempo compartido) y las multitareas en los sistemas interactivos. En los 1970s: – Se modifican algunos sistemas operativos en lote para que apoyen el concepto de tiempo compartido y permitan interactividad con varios usuarios a la vez. – Surgen los primeros sistemas operativos puramente interactivos, tales como UNIX a principios de los 1970s. –

16

UNIX es multiusuarios y multitareas (multitasking). Se desarrolló la memoria virtual, lo cual permitía que el CPU atendiera más programas utilizando parte de la memoria secundaria como memoria primaria. – Se crean los primeros sistemas administradores de bases de datos. – A mediados de los 1970s surgen las primeras computadoras personales (Apple, Tandy/Radio Shack, Commodore). – En esta década se crean las primeras supercomputadoras. – Surgen lenguajes de alto nivel tales como Pascal y C. En los 1980s: – Disminuyen dramáticamente los costos de los componentes de las computadoras. – Las computadoras personales se vuelven más comunes. – Surgen lenguajes orientados a objetos tales como C++. – Mejora la infraestructura de comunicación de datos y surgen las redes de cobertura local (LAN, Local Area Network). – Surgen sistemas operativos y lenguajes de programación que apoyan el multiprocesamiento (tener más de un procesador). – Surgen los sistemas operativos de redes y sistemas distribuidos. – Sistemas distribuidos – el usuario trabaja con un grupo (cluster) de computadoras conectada en red como si fuera una sola. En los 1990s: – Se popularizan las computadoras personales debido a las aplicaciones y sistemas operativos con GUIs. – Surge el World Wide Web y las aplicaciones de multimedios. – Los sistemas operativos en las computadoras personales se crean pensando en la conectividad con redes. – La seguridad en los sistemas se convierte en una prioridad. En los 2000s: – Se crean sistemas operativos que apoyan procesadores con núcleos múltiples (multi-core processors). – Se desarrolla el concepto de virtualización que permite particionar una computadora en varias máquinas virtuales, cada una de ellas con su propio sistema operativo y aplicaciones. – Las aplicaciones multimedios que ejecutan en el Web se vuelven comunes. – Se habla de la tecnología ubicua (en todo lugar en todo momento) ya que dispositivos de uso común (celulares, PDAs, etc.) contienen computadoras que requieren sistemas operativos empotrados. – –

17

Tabla 2. Titulo: Evolución de los sistemas operativos S.O Atlas The RC4000 Solo CTSS AÑO 50 -60 AUTOR GESTION DE PROCESOS of Lotes ARQUITECTURA Monolítico Modular Modular Modular Monolítico

Multics

Unix

1969

Sprite Merlin Windows NT Match Amoeba Windows 95/98 Coyote Exokernel

1984 1984 1985

University Manchester Universidad de Lotes Eindhoven Brinch Hansen de S.O. Completo Regenecentralen Brinch Hansen de Multiprogramado Regenecentralen MIT Multiprogramado / tiempo compartido MIT Multiprogramado / tiempo compartido Ritchie/Thompson Multiprogramado / tiempo compartido Lotes Multiprogramado Microsoft Multiprogramado Multiprogramado Distribuido Multiprogramado College Distribuido Micro_kernel

Modular

Monolítico

Monolítico Modular Modular Monolítico Microkernel Monolítico Modular Monolítico

1986 Darpa 1994 1995/98 Microsoft 1996 Trinity Dublin

Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

Algunas tendencias en los sistemas operativos actuales son las siguientes: – El uso de hebras (threads). Una hebra es una porción de un proceso que puede ser ejecutada independientemente de las otras porciones. Un proceso puede crear varias hebras y éstas pueden ser ejecutadas por los núcleos de un CPU multi-core – La redefinición del kernel para que ocupe menos espacio en RAM. Originalmente, los sistemas operativos eran monolíticos y todos los componentes se cargaban a RAM. Actualmente, sólo el kernel permanece en RAM y éste carga los componentes que estime necesario – El diseño y programación orientada a objetos es usado para modularizar el sistema operativo y manejar su complejidad. Esto permite modificar piezas del sistema operativo sin afectar la integridad del resto del sistema

18

1.13 TIPOS DE SISTEMAS OPERATIVOS
  Los sistemas operativos se categorizan de acuerdo al tiempo de respuesta y a cómo los datos entran al sistema Los tipos principales de sistemas operativos son: – Sistemas en lote – Sistemas interactivos – Sistemas en tiempo real Sistemas en lote

1.13.1

Los sistemas en lote (batch systems) se encontraban en las mainframes originales  Estos sistemas obtenían los datos e instrucciones de tarjetas perforadas o cintas que definían trabajos – Un trabajo (job) es un conjunto de tareas que se ejecutan sin intervención humana  Los sistemas en lote se medían por su rendimiento – El rendimiento (throughput) es la cantidad de trabajos completados en una cantidad dada de tiempo (normalmente horas) 1.13.2 Sistemas interactivos

Los sistemas interactivos (interactive systems) son los más comunes actualmente y se encuentran en todo tipo de computadoras.  En estos sistemas los usuarios interactúan con el sistema operativo mediante interfaces de comandos  El tiempo de respuesta se mide en fracciones de segundos  Los sistemas interactivos permiten que varios usuarios y procesos compartan los recursos mediante la técnica de tiempo compartido (time sharing)  La mayoría de los sistemas interactivos son, por lo tanto, multiusuarios y multitareas (multitasking)  En los sistemas interactivos se pueden someter trabajos que se ejecutan en lote mediante el uso de libretos – Un libreto (script) es un archivo de texto que contiene un conjunto de comandos del sistema operativo 1.13.3 Sistemas de tiempo real

Los sistemas de tiempo real (real-time systems) son usados en ambientes especializados donde el tiempo de respuesta es crítico para la toma de decisiones.  Estos sistemas se encuentran en las computadoras de los transbordadores espaciales, en sistemas de control de tráfico aéreo, en equipo médico sofisticado, robots industriales, en sistemas distribución de electricidad y en sistemas de conmutación telefónica, entre otros  En los sistemas de tiempo real el tiempo de respuesta es crítico – 100% responsivo, 100% del tiempo  Estos sistemas están presentes en computadoras que poseen sensores que detectan eventos a los que se debe responder dentro de un plazo de tiempo definido (el deadline)  Hay dos tipos de sistemas de tiempo real:

19

Sistemas estrictos (hard real-time systems) – el sistema se cae si no se responde inmediatamente Por ejemplo, marcapasos, expulsión de bolsas de aire (air bags) en los autos, control de vuelo – Sistemas flexibles (soft real-time systems) – el sistema sufre una degradación en su desempeño si no se responde en el deadline pero no se cae: Por ejemplo, lavadoras, cámaras de vídeo Otros tipos de sistemas que también se reconocen son: – Los sistemas empotrados (embedded systems) se colocan en computadoras diseñadas para desempeñar unas pocas funciones definidas, comúnmente con restricciones de tiempo real  Es posible convertir un sistema operativo de propósito general en un sistema empotrado  Las computadoras y sistemas empotrados se colocan en productos a los cuales se les quiere añadir capacidades de procesamiento  Sistemas tales como los de los motores y frenos de automóviles, marcapasos y elevadores son sistemas empotrados que también son de tiempo real  Sistemas para equipos que tocan música, PDAs y consolas de juegos de vídeo son sistemas empotrados que no son de tiempo real – Los sistemas híbridos (hybrid systems) son una combinación de sistemas en lote e interactivos  Estos sistemas permiten interactividad con los usuarios pero ejecutan trabajos en lote cuando no hay muchos usuarios que atender  Se encuentran en mainframes modernos – Algunos sistemas operativos comerciales XP

1.13.4 

Windows. Distintos tipos: – Para servidores: NT Server, 2000 Server, Server 2003, profesional – Para clientes o domésticos: 2000, XP Home, Vista Home – Para equipos especiales (PDA’s, móviles, etc.): CE, Mobile UNIX. Distintas versiones y distribuciones: – Unix (SUN) – Linux (Gratis) – Aix (IBM)

1.14 SISTEMAS OPERATIVOS POR SERVICIOS
Una de las clasificaciones más difundidas de los sistemas operativos se resume en la siguiente figura:

20

Figura 12: Sistemas operativos por servicios
Fuente: http://www.dspace.espol.edu.ec/bitstream/123456789/1416/6/2757.pdf

1.15 PERSPECTIVAS DE UN SISTEMA OPERATIVO
A la hora de profundizar un poco más en este concepto de sistema operativo, se puede enfocar el sistema operativo de dos formas:  El sistema operativo como un manejador de recursos  El sistema operativo como una máquina ampliada

1.16 EL SISTEMA OPERATIVO COMO MANEJADOR DE RECURSOS
Cuando vemos el sistema operativo como un manejador de recursos, estamos pensando en las tareas y funcionalidad típica que ofrece. Como veremos en seguida, entre las funciones del sistema operativo está el gestionar los recursos del ordenador: la memoria, los ficheros, los puertos de entrada/salida, etc.

1.17 EL SISTEMA OPERATIVO COMO MÁQUINA AMPLIADA
La otra forma de ver un sistema operativo es como una máquina ampliada o máquina virtual. El sistema operativo hace de primera capa de software por encima del hardware. El resto del software obtiene las mismas funciones y de la misma forma, con independencia del hardware subyacente. Como ejemplo, no importa que la máquina sea un servidor Sun o HP, un PC Dell o Compaq. Si ejecutan, por ejemplo, el sistema operativo LINUX en alguna de sus distribuciones, el resto de programas ‘verán’ lo mismo como forma de interacción con los recursos, con independencia de cuál de las máquinas citadas esté ejecutando el LINUX. Es como si hubiésemos creado un hardware nuevo que se programa siempre igual.

21

Figura 13: Modelo de máquina virtual
Fuente: http://blogs.utpl.edu.ec/sistemasoperativos/files/2009/03/capitulo-ii_so1.pdf

1.17.1

Ventajas y desventajas de las máquinas virtuales Tabla 3. Titulo: Ventajas y desventajas de las máquinas virtuales

Ventajas El concepto de máquina virtual  provee protección total de los recursos del sistema ya que cada máquina virtual está aislada de las demás máquinas virtuales Una máquina virtual es una  herramienta perfecta para el desarrollo e investigación de sistemas operativos por ser que el desarrollo se hace en una máquina virtual en vez de una máquina física

Desventajas No permite compartición directa de los recursos

El concepto de máquina virtual es difícil de implementar debido al esfuerzo requerido para proveer una copia exacta de la máquina

Fuente: Autor

Beneficios.- El concepto de maquina virtual presenta varias ventajas. Observe que, en este tipo de entornos, existe una protección completa de los diversos recursos del sistema. Cada máquina virtual está completamente aislada de las demás, por lo que no existe problema de protección. Sin embargo no es posible la compartición directa de recursos. Se han implementado dos métodos para permitir dicho comportamiento. El primero es posible compartir un minidisco y por tanto compartir los archivos. En segundo lugar es posible definir una red de maquinas virtuales, pudiendo cada una de ellas enviar información a través de una red de comunicaciones virtuales.

22

1.18 EL SISTEMA OPERATIVO USADO CON EL LENGUAJE DE ÓRDENES
Básicamente podemos dividir a los usuarios de los servicios de los sistemas operativos en dos amplias clases: usuarios del lenguaje de órdenes y usuarios de las llamadas al sistema. Informalmente, los usuarios del lenguaje de órdenes son aquellos que obtienen los servicios del sistema operativo mediante órdenes, ya sean tecleadas en el terminal o insertadas en un archivo de procesamiento (llamados scripts o batch). Estos lenguajes de órdenes suelen ser específicos del sistema, aunque, en general, las funciones suelen ser parecidas en todos ellos. Algunas de las clases funcionales típicas de las órdenes del sistema operativo son: las relacionadas con la conexión y desconexión, con la activación y control de programas, con la gestión de archivos, las que muestran información de estado, las que permiten la comunicación entre los usuarios y las relacionadas con la gestión del sistema. Los usuarios de las llamadas al sistema invocan los servicios del sistema operativo mediante llamadas al sistema en tiempo de ejecución. Estos usuarios, conocidos como programadores de sistemas y aplicaciones, invocan a las llamadas al sistema desde sus programas. Además de proporcionar la mayoría de la funcionalidad accesible a los usuarios del lenguaje de órdenes, las llamadas al sistema suelen permitir un mayor control sobre las operaciones del sistema y un acceso más directo a las facilidades del hardware, especialmente a las de entrada/salida; por este motivo, las llamadas al sistema representan un superconjunto de las funciones accesibles a nivel de orden. Ejemplo: la orden dar formato a un disco – Esta orden es captada por el intérprete de órdenes (shell), que es un programa independiente del sistema operativo. – El intérprete se encarga de traducir o descomponer la orden en llamadas al sistema, de forma que se realicen las operaciones asociadas a la ejecución de la orden. – Una vez ejecutada la orden, el intérprete visualiza el indicador de petición de entrada (<<promt>>) a la espera de que el usuario proporcione una orden nueva.

1.19 DISEÑO E IMPLEMENTACIÓN DEL SISTEMA OPERATIVO
Los problemas a los que nos enfrentamos al diseñar e implementar un sistema operativo son: – Objetivos del diseño.- el primer problema es la definición concreta de los objetivos y especificaciones, este se puede dividir en dos grupos básicos: objetivos del usuario y objetivos del sistema. – Mecanismos y políticas.- Es importante separar las políticas de los mecanismos. Los mecanismos determinan como hacer algo; las políticas determinan que hacer. El temporizador en un mecanismo para asegurar la protección de la CPU, pero la decisión de cuáles deben ser los datos de temporización para un usuario concreto es una decisión de políticas. – Implementación.- Una vez que se ha diseñado un sistema operativo debe implementarse. Tradicionalmente los sistemas operativos tenían que

23

escribirse en lenguajes ensambladores. Sin embargo hoy se escriben en lenguajes de alto nivel como C o C++.

1.20 ESTRUCTURA DEL SISTEMA OPERATIVO
El sistema operativo se divide en capas, cada una construida sobre las capas inferiores • La capa más baja (capa 0) es el hardware • La capa más alta (capa N) es la interface con el usuario • Modularidad Las capas usan funciones y servicios de las capas inferiores.

Figura 14: Capas de un sistema operativo
Fuente: http://blogs.utpl.edu.ec/sistemasoperativos/files/2009/03/capitulo-ii_so1.pdf

Tabla 4. Titulo: Estructura de capas del sistema operativo Nivel Nivel Nivel Nivel Nivel Nivel 5 4 3 2 1 0 Programas de usuario Almacenamientos intermedios de e/s Manejador de dispositivo de la consola del operador Manejo de la memoria Planificación del CPU Hardware

Fuente: http://blogs.utpl.edu.ec/sistemasoperativos/files/2009/03/capitulo-ii_so1.pdf

24

UNIDAD II
PROCESOS Y MULTITAREA
2.1 INTRODUCCIÓN A LOS PROCESOS

El concepto central de cualquier sistema operativo es el de proceso: una abstracción de un programa en ejecución también llamada tarea. El usuario pide ejecutar programas o segmentos de programas al computador para ejecución, solicitando de esta manera acceso al procesador y recursos del computador. Mientras que esto es más palpable en computadores grandes y medianos, también puede hallarse en computadores pequeños. Si el computador fuera a ejecutar un programa a la vez hasta su terminación, el resto de los programas tendrían que aguardar ociosamente. Para finalizar todos los programas en un tiempo razonable, el sistema operativo debe organizar las operaciones sobre el hardware de una manera eficiente. Todas las computadoras modernas pueden realizar varias tareas al mismo tiempo. En estos sistemas de multiprogramación la CPU debe cambiar de un programa a otro, ejecutando cada uno en decenas o cientos de milisegundos. Pero en cualquier instante de tiempo la CPU puede estar ejecutando solo un programa.

2.2

PROCESOS

Todo el software ejecutable en la computadora, que con frecuencia incluye al sistema operativo, se organiza en varios procesos secuenciales. Un proceso es básicamente un programa ejecutante donde intervienen los valores corrientes del contador de programa, registros y variables. No hay un acuerdo universal sobre una definición de proceso, pero sí algunas definiciones aceptadas  Un programa que se está ejecutando.  Una actividad asincrónica.  El emplazamiento del control de un procedimiento que está siendo ejecutado.  Aquello que se manifiesta por la existencia en el sistema operativo de un bloque de control de proceso.  Aquella entidad a la cual son asignados los procesadores.

25

 La unidad despachable.

2.3

RELACIONES ENTRE PROCESOS

Existen dos relaciones fundamentales entre los procesos concurrentes: – Competencia – Cooperación La cooperación es habitual entre los procesos creados como resultado de una división explícita en tareas. Los procesos cooperativos intercambian datos y señales de sincronización necesarias para orquestar su progreso colectivo. Los procesos cooperativos comparten típicamente algunos recursos y atributos, además de interactuar unos con otros. Con frecuencia se agrupan en lo que se denomina una familia de procesos. Aunque dentro de una familia son posibles relaciones complejas, la más frecuentemente soportada por los sistemas operativos es la relación padre-hijo. Los procesos hijos heredan generalmente los atributos de sus padres en el momento de la creación del proceso, y también pueden heredar o compartir recursos con sus padres y hermanos.

2.4

LOS PROCESOS DESDE LA PERSPECTIVA DEL PROGRAMADOR DE SISTEMAS

Los programadores de sistemas tienen que tratar frecuentemente con procesos de forma explícita. El sistema operativo, o en ocasiones un lenguaje de implementación de sistemas, les proporciona facilidades para definir los confines de un proceso, sus atributos, la naturaleza de su residencia en memoria, etc.

2.5

EJEMPLO DE MULTITAREA

Supongamos un sistema simplificado de adquisición de datos. Se supone que supervisa continuamente un cierto proceso físico, para registrar su comportamiento, y para identificar e informar sobre cambios significativos a un operador, o quizás a un robot, el cual puede efectuar alguna acción adicional. Esos cambios pueden ser ciertas desviaciones estadísticamente significativas de valores medidos de las variables del proceso con respecto a rangos esperados o deseables. Desde la perspectiva del programador del sistema, el programa en cuestión debe recoger los datos de entrada desde un sensor externo, digamos, por medio de un conversor A/D, debe archivarlo en disco, efectuar alguna operación estadística para identificar cambios significativos con respecto a la muestra anterior e informar de ellos mediante, digamos, su impresión o el envío de un mensaje a un robot que lo espera. Supongamos que esta secuencia de actividades se efectúa repetidamente durante el tiempo de vida del sistema. Aunque la descripción está bastante simplificada, este ejemplo tipifica la naturaleza de las operaciones que aparecen en los sistemas de adquisición de datos.

26

Dado que, al parecer, las actividades listadas requieren procesamiento secuencial, el método más sencillo es escribir un único programa para llevarlas a cabo una tras otra. Programa una_tarea; ... begin while true do begin recoger_ad; guardar_d; calcular_e; imprimir_i; end end.

2.6

SINCRONIZACIÓN ENTRE PROCESOS

Veamos el siguiente programa: Program/module multitarea; … Process recoger; Begin While true do Begin Esperar_señal_de(guardar, calcular); Recoger_ad; Enviar_señal_a(guardar, calcular) End; End Process guardar; Begin While true do Begin Esperar_señal_de(recoger);} Guardar_d; Enviar_señal_a(recoger) End; End; Process calcular; Begin While true do Begin Esperar_señal_de(recoger, imprimir); calcular_e; Enviar_señal_a(recoger, imprimir) End End Process Imprimir; Begin While true do Begin

27

Esperar_señal_de(calcular); Imprimir_I; Enviar_señal_a(calcular) End; End; {proceso padre} Begin Inicializar_entorno; Enviar_señal_a(recoger, calcular);{para la primera pasada} initiate recoger, guardar, calcular, imprimir end{multitarea} Process Imprimir; Begin While true do Begin Esperar_señal_de(calcular); Imprimir_I; Enviar_señal_a(calcular) End End; Aquí se presenta el concepto de envío y recepción de señales. Su objetivo es proporcionar la sincronización necesaria para forzar el cumplimiento de las relaciones de precedencia indicadas dentro de nuestro conjunto de procesos cooperativos. Las señales son uno de los mecanismos de sincronización entre procesos que, como grupo, se encuentran entre los servicios más importantes proporcionados por los sistemas operativos multitarea. Supongamos un proceso que espera uno ó más señales de suspendido por el sistema operativo, es decir, no es elegible para ejecución hasta que le lleguen todas las señales requeridas. Se supone que una señal llega después de ser enviada por otro proceso. El envío de una señal no ocasiona la suspensión del proceso emisor. Una observación importante es que con el problema dividido en cuatro procesos, cada proceso ejecuta su propio flujo secuencial de instrucciones, más o menos independiente. La multiplexación es llevada a cabo por el sistema operativo de modo en gran medida transparente a los propios procesos concurrentes. Un proceso individual no tiene modo de conocer el estado o el progreso de cualquier otro proceso, a menos que sea específicamente informado de ello por una señal. El programador de sistemas controla este aspecto de la sincronización entre procesos definiendo la identidad y el significado de las señales intercambiadas entre los procesos cooperativos. El proceso padre, al cual el sistema operativo transfiere control cuando se arranca el sistema, también está a cargo de la inicialización del entorno y de la activación de los cuatro procesos hijos. En otras palabras, el proceso padre crea el entorno en tiempo de ejecución para la ejecución de la aplicación. La inicialización de un proceso implica crearlo y hacerlo conocido al sistema operativo.

28

La sincronización entre procesos concurrentes cooperativos es esencial para preservar las relaciones de precedencia y para evitar los problemas de temporización relacionados con la concurrencia. Los procesos cooperativos deben sincronizarse unos con otros cuando va a utilizar recursos compartidos, tales como estructuras de datos comunes o dispositivos físicos. Los sistemas operativos multitarea e incluso algunos lenguajes de programación proporcionan una colección de primitivas de sincronización entre procesos. Hay tres formas esenciales de interacción explícita entre procesos: – Sincronización entre procesos: Un conjunto de protocolos y mecanismos utilizados para preservar la integridad y consistencia del sistema cuando varios procesos concurrentes comparten recursos que son reutilizables en serie. Un recurso reutilizable en serie solo puede ser utilizado por un proceso cada vez. Su estado, y posiblemente su operación, pueden resultar corrompidos si son manipulados concurrentemente y sin sincronización por más de un proceso. Ejemplo: variables compartidas para lectura/escritura y dispositivos tales como las impresoras. – Señalización entre procesos: El intercambio de señales de temporización entre procesos utilizado para coordinar su progreso colectivo. – Comunicación entre procesos: Los procesos cooperativos concurrentes deben comunicarse con propósitos tales como intercambiar datos, transmitir información sobre los progresos respectivos y acumular resultados colectivos. Una memoria compartida, accesible a todos los participantes, proporciona un medio sencillo y habitual de comunicación entre procesos. Para evitar errores de temporización, los procesos concurrentes deben sincronizar sus accesos a la memoria compartida. Necesidad de sincronización entre procesos El uso de variables compartidas es una forma sencilla y habitual de comunicación entre procesos cooperativos. Cuando un conjunto de procesos tiene acceso a un espacio común de direcciones, puede utilizar variables compartidas para una serie de cometidos, por ejemplo, indicadores de señalización y para acumulación de resultados colectivos. Ejemplo: Consideremos dos procesos cooperativos que pueden existir en un gestor de terminal. Supongamos que los procesos TECLADO y PANTALLA tienen a su cargo aceptar entradas del teclado y visualizarlas en pantalla respectivamente. Supongamos que los dos procesos comparten un buffer común en el cual se almacenan los caracteres de entrada para ser visualizados y para algún otro procesamiento subsiguiente. El proceso teclado responde a las interrupciones de teclado, recibe la entrada y la coloca en el buffer. El proceso PANTALLA hace el eco de los caracteres que hay en el buffer mostrándolos en la pantalla. Supongamos también que cada proceso mantiene un puntero privado para marcar su posición actual de trabajo en el búfer, y que se utiliza la variable compartida ECO para llevar la cuenta del número actual de caracteres en espera de visualización. TECLADO incrementa la variable ECO cada vez que se introduce un carácter ... eco:=eco + 1

29

... y PANTALLA decrementa ECO cada vez que visualiza un carácter: eco:=eco - 1 Las situaciones en las que dos o más procesos leen o escriben en ciertos datos compartidos y el resultado final depende de quién ejecuta qué y en qué momento, reciben el nombre de condiciones de competencia

2.7

ESTADOS DE UN PROCESO

Un proceso puede variar entre 5 distintos estados: New: cuando el proceso está siendo creado. Running: cuando el proceso se está ejecutando. Waiting: cuando el proceso está esperando que se cumpla algún otro evento. Ready: cuando el proceso esta pronto para ejecutar, esperando por la CPU. Terminated: cuando el proceso está terminado. Debido a ello se puede establecer una “Lista de Listos” para los procesos “listos” y una “Lista de Bloqueados” para los “bloqueados”. La “Lista de Listos” se mantiene en orden prioritario y la “Lista de Bloqueados” está desordenada, ya que los procesos se desbloquean en el orden en que tienen lugar los eventos que están esperando. Al admitirse un trabajo en el sistema se crea un proceso equivalente y es insertado en la última parte de la “Lista de Listos”. La asignación de la CPU al primer proceso de la “Lista de Listos” se denomina “Despacho”, que es ejecutado por una entidad del sistema operativo llamada “Despachador”. El “Bloqueo” es la única transición de estado iniciada por el propio proceso del usuario, puesto que las otras transiciones son iniciadas por entidades ajenas al proceso.

Figura 15: Transiciones entre los distintos estados de un proceso
Fuente: www.monografias.com/trabajos6/mono/mono.shtml

Es importante observar que en un momento determinado solo un proceso puede encontrarse en ejecución, aunque varios procesos pueden estar listos o en espera.

30

Se puede observar que hay cuatro transiciones posibles entre los distintos estados. Las transiciones 1 y 4 las lleva a cabo el planificador de procesos, que forma parte del sistema operativo, sin intervención alguna de los procesos. La transición 1 puede suceder cuando el planificador encuentra al procesador ocioso, o bien porque considera que el proceso que se encuentra en ejecución ha dispuesto del procesador durante un tiempo suficiente, con lo cual realizará previamente la transición 4 para posteriormente llevar a cabo la transición 1. La transición 2 ocurre cuando un proceso descubre que no puede continuar debido a que demanda algún recurso de E/S, o bien que el sistema operativo lo bloquea momentáneamente. Cuando el proceso en estado de espera ha finalizado el evento externo que estaba esperando, o bien que el sistema lo desbloquea, se producirá la transición 3, pasando el proceso nuevamente a estado de listo.

2.8
2.8.1

LOS PROCESOS OPERATIVO

DESDE

LA

PERSPECTIVA

DEL

SISTEMA

PBC (Process Control Block)

La manifestación de un proceso en un sistema operativo es un “Bloque de Control de Proceso” (PCB) con información que incluye: • Estado actual del proceso. • Identificación única del proceso. • Prioridad del proceso. • Apuntadores para localizar la memoria del proceso. • Apuntadores para asignar recursos. • Área para preservar registros. Cuando el sistema operativo cambia la atención de la CPU entre los procesos, utiliza las áreas de preservación del PCB para mantener la información que necesita para reiniciar el proceso cuando consiga de nuevo la CPU. Los sistemas que administran los procesos deben poder crear, destruir, suspender, reanudar, cambiar la prioridad, bloquear, despertar y despachar un proceso. La “creación” de un proceso significa: • Dar nombre al proceso. • Insertar un proceso en la lista del sistema de procesos conocidos. • Determinar la prioridad inicial del proceso. • Crear el bloque de control del proceso. • Asignar los recursos iniciales del proceso. Un proceso puede “crear un nuevo proceso”, en cuyo caso el proceso creador se denomina “proceso padre” y el proceso creado “proceso hijo” y se obtiene una “estructura jerárquica de procesos”. La “destrucción” de un proceso implica: • Borrarlo del sistema. • Devolver sus recursos al sistema. • Purgarlo de todas las listas o tablas del sistema. • Borrar su bloque de control de procesos. Un proceso “suspendido” no puede proseguir hasta que otro proceso lo reanude.

31

Reanudar (reactivar) un proceso implica reiniciarlo en el punto donde fue suspendido. La “destrucción” de un proceso puede o no significar la destrucción de los procesos hijos, según el sistema operativo. Generalmente se denomina “Tabla de Procesos” al conjunto de información de control sobre los distintos procesos.

2.9

PROCESAMIENTO DE INTERRUPCIONES

Una “interrupción” es un evento que altera la secuencia en que el procesador ejecuta las instrucciones; es un hecho generado por el hardware del computador.

Cuando ocurre una interrupción, el sistema operativo:
o o o o Obtiene el control. Salva el estado del proceso interrumpido, generalmente en su bloque de control de procesos. Analiza la interrupción. Transfiere el control a la rutina apropiada para la manipulación de la interrupción.

Una interrupción puede ser iniciada por un proceso en estado de ejecución o por un evento que puede o no estar relacionado con un proceso en ejecución. Generalmente las interrupciones se pueden clasificar por tipos según el siguiente detalle: Tabla 5. Titulo: Tipos de interrupciones Interrupción SVC Entrada / Salida Externa De Reinicio De Verificación de Programa De Verificación de Máquina Descripción Llamada al sistema operativo Cambio de estado de un canal o dispositivo Evento externo al sistema Reinicio del procesamiento Errores de procesos Errores de hardware

Fuente: http://www.zator.com/Hardware/H2_4.htm

2.10 ESTADOS DEL SISTEMA Y LISTAS DE PROCESOS
Un estado de un proceso es sólo un componente del estado global del sistema que incluye a todos los procesos y recursos. Para controlar la evolución de todos los procesos, el sistema operativo mantiene listas de PBCs clasificadas por el estado actual de los procesos aceptados. En general, existirá una lista con los PBCs de todos los procesos en situación de preparado y una lista con todos los PBCs en situación de suspendido. Mediante estas listas el sistema operativo forma colecciones de procesos en estados análogos y serán examinadas por las rutinas de asignación de recursos del sistema operativo.

32

Ejemplo: El planificador buscará el siguiente proceso a ejecutar en la lista de los PBCs de procesos preparados. El rendimiento del sistema operativo puede mejorar ordenando y actualizando estas listas de la manera más conveniente para las rutinas del sistema operativo que operan con ellas. Las transiciones de estado de un proceso quedarán reflejadas en el cambio de su PBCs de una lista a otra.

2.11 CONMUTACIÓN DE PROCESOS
Una transición entre dos procesos residentes en memoria en un sistema multitarea se denomina conmutación de procesos o conmutación de tareas. Las principales operaciones implicadas en una conmutación de procesos están resumidas en la siguiente figura:

Figura 16: Esquema de conmutación de recursos
Fuente: http://www.mundointernet.es/IMG/pdf/ponencia50.pdf

La figura se interpreta de la siguiente manera: • Estamos en modo usuario con un proceso Px ejecutándose. Ocurre un suceso. • Pasamos a modo supervisor (ejecutamos sistema operativo). o Guarda el estado del proceso interrumpido en su PBC correspondiente o Actualiza el estado de Px (en función del suceso que haya tenido lugar, el estado será uno u otro) y los datos de planificación (Algunos sistemas operativos tienen ciertas consideraciones para re-calcular estos datos de planificación para un proceso. Por ejemplo, restar prioridad a procesos largos. o Atendemos al suceso dependiendo de cada caso (no incluimos esta operación en lo que consideramos proceso de conmutación) o Planificamos cuál va a ser el siguiente proceso a ejecutar (que podría ser mismo de inicio). o Una vez elegido el nuevo proceso a ejecutar, llamémosle Py, hay que restaurar su estado hardware y recuperamos sus atributos gracias a su PBC. • Una vez elegido el nuevo proceso, realizamos un cambio de modo.

33

La conmutación de procesos es una operación considerablemente más compleja y costosa que la conmutación del contexto de interrupción y puede ser bastante complicada en sistemas operativos grandes que disponen de un mantenimiento preciso de recursos y de sofisticados esquemas de planificación. Dada su complejidad y su relativamente alta frecuencia de ocurrencia, la implementación de la conmutación de procesos puede afectar significativamente al rendimiento de un sistema operativo de multiprogramación. Es especialmente importante en sistemas donde el tiempo es un factor crítico tales como los sistemas en tiempo real. La eficiencia de la conmutación de procesos puede ser mejorada con ayuda del hardware y una estructura de software especial conocida como hebra o hilo. Un esquema hardware habitualmente empleado para acelerar la conmutación de procesos es disponer de múltiples conjuntos estructuralmente idénticos de registros del procesador. Un conjunto para el sistema operativo y otro para los procesos de usuario. Un bit dedicado en la única copia de la palabra del estado del procesador indica el estado actual de operación supervisor o usuario y el conjunto de registros activos. Este método reduce el gasto software por conmutación de modo y la mayor parte del proceso de almacenamiento del estado hardware a la ejecución de unas pocas instrucciones de manipulación de bits. Si se dispone de más de dos conjuntos de registros, se pueden aplicar ahorros similares a los procesos de usuario hasta alcanzar el número de conjuntos de registros disponibles

2.12 PROCESOS Y HEBRAS
En los sistemas operativos tradicionales, el concepto de proceso incluye como característica:  Unidad a la que se le asigna recursos: espacio de direcciones, canales de entrada/salida, canales de comunicaciones, ficheros, etc. Los procesos son entidades que son relativamente costosas de crear y manipular por parte del sistema operativo. En cambio, las hebras comparten los recursos de los procesos y su manipulación es mucho menos costosa que la de éstos. La principal ventaja de tener varias hebras de ejecución es permitir la ejecución concurrente de actividades relacionadas dentro de un proceso. Como las hebras de un proceso comparten el mismo espacio de direcciones, no existe ningún tipo de protección por parte del sistema operativo ante el hecho de que una hebra pueda leer o escribir en la pila de otra. Sin embargo, esta protección no debería de ser necesaria, ya que mientras que los procesos pueden pertenecer a varios usuarios, las hebras de un proceso pertenecen a un mismo usuario, por lo que se asume que estará diseñado para colaborar, no para competir. Esto no significa que exista la necesidad de proporcionar mecanismos para que las hebras de un proceso se puedan sincronizar. La programación de procesos multihebra se ajusta a la programación concurrente sobre sistemas que comparten memoria, por lo que suelen usar semáforos o monitores para

34

sincronización, aunque también existen sistemas que incorporan primitivas de paso de mensajes.

Figura 17: THREADS y procesos
Fuente: http://www.ac.uma.es/~sromero/so/Capitulo4.pdf

2.13 PLANIFICACIÓN DE PROCESOS
En un sistema multiprogramado, múltiples procesos son mantenidos en memoria principal. Multiprogramación surgió con la idea de tener algún proceso ejecutándose en todo momento con la finalidad de maximizar el uso del CPU. Tiempo Compartido fue concebido con la idea de conmutar o cambiar continuamente el CPU entre procesos de forma tal que los usuarios puedan interactuar con sus programas mientras están corriendo. Con multiprogramación, un proceso ejecuta hasta que debe esperar por algún evento. En un sistema simple sin multiprogramación el CPU estaría ocioso. Cuando un proceso entra al sistema es colocado en una cola de trabajos. Una vez que el proceso se encuentra en memoria principal y está listo para ejecutar, este es colocado en la cola de procesos listos (ready). Cuando al proceso se le asigna el CPU, ejecuta por un tiempo y eventualmente el proceso terminará, o será interrumpido o esperará por la ocurrencia de algún evento. Con frecuencia nos encontraremos con situaciones en las que dos o más procesos son ejecutables desde el punto de vista lógico. En estos casos el sistema de operación debe decidir cuál de ellos debe ejecutarse primero. La parte del sistema de operación que lleva a cabo esta decisión se llama Planificador y el algoritmo que se utiliza se conoce como Algoritmo de Planificación. Con la planificación de procesos se busca: • Garantizar que cada proceso obtenga una proporción justa de tiempo de CPU. • Mantener ocupado el CPU. • Minimizar el tiempo de respuesta de los procesos interactivos. • Maximizar el número de tareas procesadas por hora.

35

2.14 TIPOS DE PLANIFICACIÓN
La clave de la multiprogramación está en la planificación. De hecho, son cuatro las clases de planificación que pueden entrar en juego normalmente:  Planificación a largo plazo: Decisión de añadir procesos a la reserva de procesos a ejecutar.  Planificación a medio plazo: Decisión de añadir procesos al conjunto de procesos que se encuentran parcial o completamente en memoria.  Planificación a corto plazo: Decisión sobre qué proceso disponible será ejecutado en el procesador.  Planificación de E/S: Decisión sobre qué solicitud de E/S pendiente será tratada por un dispositivo de E/S disponible. El nombre de largo, medio y corto plazo hace referencia a la frecuencia relativa con la que son ejecutadas dichas funciones. 2.14.1 Planificación a largo plazo

Esta planificación determina cuáles son los programas admitidos en el sistema. De este modo se controla el grado de multiprogramación. Una vez admitido el programa se convierte en proceso y es añadido a la cola del planificador a corto plazo. La decisión de cuándo crear un nuevo proceso viene dada, en general, por el grado de multiprogramación. Cuantos más procesos se crean, menor será el porcentaje de tiempo en el que cada proceso puede ejecutar simultáneamente. Con lo cual el planificador a largo plazo puede limitar el grado de multiprogramación para ofrecer un buen servicio al conjunto de procesos activos. La decisión de cuál va a ser el siguiente proceso a admitir puede basarse en un simple algoritmo primero en llegar primero en ser servido (FCFS) o bien se puede elaborar una política más elaborada, en función del sistema. Por ejemplo, el planificador puede intentar mantener una combinación de procesos con mayor carga de procesador y con mayor carga de E/S. 2.14.2 Planificación a medio plazo

Algunos sistemas operativos, como los de tiempo compartido, pueden presentar un nivel intermedio adicional de planificación. La idea clave de un planificador a medio plazo es que en ocasiones puede interesar eliminar procesos de la memoria y reducir de este modo el grado de multiprogramación. Posteriormente se volverá a introducir el proceso en memoria y continuar con su ejecución. Se le suele denominar comúnmente intercambio (swapping). En la figura se muestra dicho planificador a medio plazo. Los intercambios de procesos pueden ser necesarios para mejorar la mezcla de procesos.

36

Figura 18: Planificación y transiciones de estado de los procesos
Fuente: http://blogs.utpl.edu.ec/sistemasoperativos/files/2009/04/proceso4-300x151.jpg

2.14.3

Planificación a corto plazo (planificación del procesador)

Como hemos mencionado anteriormente, la planificación es una función fundamental de los sistemas operativos. Casi todos los recursos de una computadora se planifican antes de usarse. Por supuesto, el procesador es uno de los principales recursos de la computadora, de modo que su planificación es parte medular en el diseño de los sistemas operativos. La ejecución de un proceso consiste en un ciclo de ejecución del procesador y una espera de E/S, y los procesos se alternan entre estos dos estados. La ejecución del proceso se inicia con una ráfaga de procesador y a ésta le sigue una ráfaga de E/S, le sigue una ráfaga de procesador y una más de E/S, etc. Finalmente la última ráfaga de procesador terminará con una solicitud al sistema para que concluya la ejecución del proceso. La duración de estas ráfagas de procesador y de E/S va a determinar el tipo de carga al sistema que proporciona cada proceso. Así por ejemplo un programa limitado por E/S, tendrá muchas ráfagas cortas de procesador, mientras que un programa limitado por el procesador tendrá pocas ráfagas de larga duración de procesador. La distribución de estos procesos puede ser muy importante al seleccionar un algoritmo de planificación de corto plazo. Siempre que el procesador quede inactivo, el sistema operativo debe seleccionar para su ejecución uno de los procesos de la cola de procesos listos. El proceso de selección es realizado por el planificador a corto plazo. El planificador selecciona uno de los procesos en memoria que están listos y se lo asigna al procesador. La cola de procesos listos puede ser implementada de formas diferentes. Sin embargo, conceptualmente todos los procesos de la cola de procesos listos están en fila esperando la oportunidad de ejecutarse en el procesador.

37

2.15 NIVELES DE PLANIFICACIÓN DEL PROCESADOR
Se consideran tres niveles importantes de planificación, los que se detallan a continuación. 2.15.1 Planificación de alto nivel:

También se denomina planificación de trabajos. Determina a qué trabajos se les va a permitir competir activamente por los recursos del sistema, lo cual se denomina planificación de admisión. 2.15.2 Planificación de nivel intermedio: Determina a qué procesos se les puede permitir competir por la CPU. Responde a fluctuaciones a corto plazo en la carga del sistema y efectúa “suspensiones” y “activaciones” (“reanudaciones”) de procesos. Debe ayudar a alcanzar ciertas metas en el rendimiento total del sistema. 2.15.3 Planificación de bajo nivel: Determina a qué proceso listo se le asigna la CPU cuando esta queda disponible y asigna la CPU al mismo, es decir que “despacha” la CPU al proceso. La efectúa el despachador del sistema operativo, el que opera muchas veces por segundo y reside siempre en el almacenamiento primario.

Figura 19: Niveles de planificación
Fuente: http://blogs.utpl.edu.ec/sistemasoperativos/files/2009/04/image21.gif

2.16 OBJETIVOS DE LA PLANIFICACIÓN
Los objetivos de la planificación del procesador son los siguientes e involucran a los conceptos detallados seguidamente. • Ser justa:

38

– Todos los procesos son tratados de igual manera. – Ningún proceso es postergado indefinidamente. • Maximizar la capacidad de ejecución: – Maximizar el número de procesos servidos por unidad de tiempo. • Maximizar el número de usuarios interactivos que reciban unos tiempos de respuesta aceptables: – En un máximo de unos segundos. • Ser predecible: – Un trabajo dado debe ejecutarse aproximadamente en la misma cantidad de tiempo independientemente de la carga del sistema. • Minimizar la sobrecarga: – No suele considerarse un objetivo muy importante. • Equilibrar el uso de recursos: – Favorecer a los procesos que utilizarán recursos infrautilizados. • Equilibrar respuesta y utilización: – La mejor manera de garantizar buenos tiempos de respuesta es disponer de los recursos suficientes cuando se necesitan, pero la utilización total de recursos podrá ser pobre. • Evitar la postergación indefinida: – Se utiliza la estrategia del “envejecimiento”. – Mientras un proceso espera por un recurso su prioridad debe aumentar, así la prioridad llegará a ser tan alta que el proceso recibirá el recurso esperado. • Asegurar la prioridad: – Los mecanismos de planificación deben favorecer a los procesos con prioridades más altas. • Dar preferencia a los procesos que mantienen recursos claves: – Un proceso de baja prioridad podría mantener un recurso clave, que puede ser requerido por un proceso de más alta prioridad. – Si el recurso es no apropiativo, el mecanismo de planificación debe otorgar al proceso un tratamiento mejor del que le correspondería normalmente, puesto que es necesario liberar rápidamente el recurso clave. • Dar mejor tratamiento a los procesos que muestren un “comportamiento deseable”: – Un ejemplo de comportamiento deseable es una tasa baja de paginación. • Degradarse suavemente con cargas pesadas: – Un mecanismo de planificación no debe colapsar con el peso de una exigente carga del sistema. – Se debe evitar una carga excesiva mediante las siguientes acciones: o No permitiendo que se creen nuevos procesos cuando la carga ya es pesada. o Dando servicio a la carga más pesada al proporcionar un nivel moderadamente reducido de servicio a todos los procesos. Muchas de estas metas se encuentran en conflicto entre sí, por lo que la planificación se convierte en un problema complejo.

2.17 PLANIFICACIÓN APROPIATIVA VERSUS NO APROPIATIVA
Las disciplinas de planificación pueden ser Apropiativas o No Apropiativas.

39

Tabla 6. Titulo: Planificación Apropiativa Versus No Apropiativa Disciplina Descripción “Apropiativa” Una vez que se le ha otorgado la CPU a un proceso, le puede ser retirada “No Una vez que se le ha otorgado la CPU a un proceso, no le puede Apropiativa” ser retirada
Fuente: http://wwwdi.ujaen.es/~lina/TemasSO/PLANIFICACIONDEPROCESOS/2y3Obj.,Crit.yTiposdePlanific acion.htm

Las principales características de la planificación apropiativa son las siguientes: – Es útil cuando los procesos de alta prioridad requieren atención rápida. – Es importante para garantizar buenos tiempos de respuesta en sistemas interactivos de tiempo compartido. – Tiene su costo en recursos, ya que el intercambio de contexto implica sobrecarga y además requiere mantener muchos procesos en el almacenamiento principal, en espera de la CPU, lo que también implica sobrecarga. Las principales características de la planificación no apropiativa son las siguientes: – Significa que los trabajos “largos” hacen esperar a los trabajos “cortos”. – Logra más equidad en el tratamiento de los procesos. – Logra hacer más predecibles los tiempos de respuesta puesto que los trabajos nuevos de prioridad alta no pueden desplazar a los trabajos en espera. El diseño de un mecanismo apropiativo hace necesario considerar las arbitrariedades de casi cualquier esquema de prioridades, en razón de que muchas veces las propias prioridades no son asignadas de forma significativa. El mecanismo debería ser sencillo pero efectivo y significativo.

2.18 ALGORITMOS DE PLANIFICACIÓN
Cuando más de un proceso es ejecutable desde el punto de vista lógico, el sistema operativo debe decidir cuál de ellos debe ejecutarse en primer término. El planificador es la porción del sistema operativo que decide y el algoritmo de planificación es el utilizado. Los principales “criterios” respecto de un buen algoritmo de planificación son la equidad, la eficacia, el tiempo de respuesta, el tiempo de regreso y el rendimiento.

40

Tabla 7. Titulo: Criterios de un buen algoritmo de planificación Criterio Equidad Descripción Garantizar que cada proceso obtiene su proporción justa de la CPU Eficacia Mantener ocupada la CPU el ciento por ciento del tiempo Tiempo de Minimizar el tiempo de respuesta para los usuarios respuesta interactivos Tiempo de Minimizar el tiempo que deben esperar los usuarios por regreso lotes (batch) para obtener sus resultados Rendimiento Maximizar el número de tareas procesadas por hora
Fuente: Autor

Criterios orientados al usuario: – Tiempo de retorno: Es el intervalo de tiempo desde que el proceso se ofrece hasta el momento que termina, es decir, la suma de los periodos de tiempo transcurridos esperando entrar en memoria, esperando en la cola de procesos listos, ejecutándose en el procesador y efectuando alguna solicitud de E/S. En resumen, es el tiempo que tarda en ejecutarse un proceso. – Tiempo de respuesta: Es el tiempo transcurrido desde la presentación de una solicitud hasta que se produce la primera respuesta. Este criterio es la cantidad de tiempo para comenzar a responder, pero no el tiempo necesario para mostrar esa respuesta. Este tiempo es independiente del dispositivo de salida, mientras que el tiempo de retorno depende del dispositivo de salida. Criterios orientados al sistema: – Tiempo de espera: Es la cantidad de tiempo que un proceso espera en la cola de procesos listos. – Tiempo de retorno normalizado: Es la razón entre el tiempo de retorno y el tiempo de servicio. Este valor indica el retardo relativo que ha experimentado un proceso. Este valor es más interesante que el tiempo de retardo, ya que es un valor que es independiente a la duración del proceso. – Utilización del procesador: Es el porcentaje de tiempo que el procesador está ocupado. – Productividad: Es una medida del número de procesos que se completan por unidad de tiempo. 2.18.1 First-Come, First Served (FCFS)

Este algoritmo también llamado FCFS (First-Come, First-served), es el algoritmo más sencillo de implementar. Con este esquema, el proceso que primero solicita el procesador es el primero al que se le asigna. Esta política se implementa muy fácilmente con una cola FIFO. Cuando un proceso entra en la cola de procesos listos su PCB se enlaza con el proceso que está al final de la cola. Cuando el procesador está libre se asigna el proceso colocado al inicio de la cola de procesos listos, esto es, se selecciona el proceso más antiguo de la cola.

41

Este algoritmo de planificación es no apropiativo. Una vez que se ha asignado el procesador a un proceso, éste lo conserva hasta que desee liberarlo, ya sea por terminación o bien porque solicita un recurso de E/S. Este algoritmo es especialmente problemático en los sistemas de tiempo compartido, donde es importante que cada usuario reciba una porción del procesador a intervalos regulares. El tiempo promedio de espera es bastante largo en este algoritmo. FCFS tiene un mejor rendimiento en cómputo global con procesos largos que con procesos cortos, ya que si por ejemplo un proceso corto llega siempre después de un proceso largo, el tiempo de retorno normalizado para dicho proceso corto será considerablemente mayor que el del proceso largo. Otro problema que presenta este algoritmo, es que tiende a favorecer a los procesos con carga de procesador frente a los procesos con carga de E/S, ya que cuando un proceso con carga de procesador se está ejecutando, todos los procesos con carga de E/S deben esperar (si han finalizado la correspondiente ráfaga de E/S) la siguiente ráfaga de procesador, mientras que los dispositivos de E/S estarán ociosos. Así pues, FCFS puede dar como resultado un uso ineficiente tanto del procesador como de los dispositivos de E/S. Ejemplo:  En un cierto instante se tiene los siguientes procesos, cuyo orden de llegada es el indicado: Trabajo A B C D Ráfaga CPU 1 100 1 100

Indicar los valores de:  Tiempo de espera y tiempo de retorno de cada trabajo, tiempo medio de espera y retorno, cuando la planificación se realiza mediante el algoritmo FCFS. SOLUCIÓN: 1 Tabla 8. Titulo: Algoritmo FCFS ejemplo 1
Proceso Tiempo de llegada Tiempo de Servicio Tiempo de Comienzo Tiempo de Finalización Turnaround Tiempo de Espera

A 0 B 1 C 2 D 3 Promedio

1 100 1 100

0 1 101 102

1 101 102 202
Fuente: Autor

1 100 100 199 100

0 0 101-2=99 102-3=99 49.50

42

SOLUCIÓN: 2 Tabla 9. Titulo: Algoritmo FCFS con procesos ordenados por tiempo de servicio
Proceso Tiempo de llegada Tiempo de Servicio Tiempo de Comienzo Tiempo de Finalización Turnaround Tiempo de Espera

B D A C

0 1 2 3

100 100 1 1

0 100 200 201

100 200 201 202

Promedio
Fuente: Autor

100 199 2012=199 2023=199 174.25

0 100-1=99 2002=198 2013=198 123.50

El tiempo promedio de espera bajo una política FCFS generalmente no es mínimo y puede variar sustancialmente si hay mucha diferencia entre las duraciones de ciclo de los procesos. En el segundo ejemplo, se presenta un efecto convoy donde los procesos esperan a que un proceso grande deje el CPU. 2.18.2 Shortest-Job-First (SJF) "Primero el trabajo más corto"

Este algoritmo selecciona al proceso con el próximo tiempo de ejecución más corto. Un proceso corto saltará a la cabeza de la cola. La ejecución de un proceso consiste en ciclos de ejecución de CPU y ciclos de espera por E/S. El algoritmo selecciona aquel proceso cuyo próximo ciclo de ejecución de CPU sea menor. El problema está en conocer dichos valores, pero podemos predecirlos usando la información de los ciclos anteriores ejecutados. Se puede comprobar que el algoritmo SJF es óptimo, ya que ofrece el mínimo tiempo promedio de espera para un conjunto de procesos dado. La comprobación muestra que poniendo un proceso breve antes de uno largo se reduce el tiempo de espera del proceso corto más de lo que aumenta el tiempo de espera del proceso largo, por lo tanto se reduce el tiempo de espera promedio. Ejemplo:  En un cierto instante se tiene los siguientes procesos, cuyo orden de llegada es el indicado: Trabajo A B C D Ráfaga CPU 8 4 9 5

Indicar los valores de:

43

Tiempo de espera y tiempo de retorno de cada trabajo, tiempo medio de espera y retorno, cuando la planificación se realiza mediante los algoritmos SJF y FCFS.

SOLUCIÓN: 1 Tabla 10. Titulo: Algoritmo SJF
Proceso Tiempo de llegada Tiempo de Servicio Tiempo de Comienzo Tiempo de Finalización Turnaround Tiempo de Espera

A 0 B 1 C 2 D 3 Promedio

8 4 9 5

0 8 17 12

8 12 26 17
Fuente: Autor

8 12-1=11 26-2=24 17-3=14 14.25

0 8-1=7 17-2=15 12-3=9 7.75

Tabla 11. Titulo: Algoritmo FCFS ejemplo 2
Proceso Tiempo de llegada Tiempo de Servicio Tiempo de Comienzo Tiempo de Finalización Turnaround Tiempo de Espera

A 0 B 1 C 2 D 3 Promedio

8 4 9 5

0 8 12 21

8 12 21 26
Fuente: Autor

8 12-1=11 21-2=19 26-3=23 15.25

0 8-1=7 12-2=10 21-3=18 8.75

El problema real de este algoritmo es conocer o, por lo menos estimar el tiempo de ejecución para cada proceso. Para procesos por lotes, el sistema puede solicitar al usuario que estime el valor de ejecución de dicho proceso y de esta forma podérselo pasar al sistema operativo, sin embargo en la planificación a corto plazo esta política no se puede emplear ya que no se sabe a priori la duración de un proceso, a no ser que podamos predecir la duración de cada proceso mediante técnicas estadísticas. 2.18.3 SRT (Shortest Remaining Time) "Primero el menor tiempo restante"

La política de menor tiempo restante, también llamada SRT (Shortest Remaining Time) es una versión apropiativa del SJF, en la que el planificador siempre elige al proceso que le queda menos tiempo esperado de ejecución. La idea es la siguiente, cuando un proceso es añadido a la cola de listos, puede quedarle un tiempo esperado de ejecución menor que al proceso que está ejecutándose en ese momento en el procesador, por consiguiente el planificador puede apropiarse del procesador para desalojar al proceso en ejecución y asignárselo al nuevo proceso, que tendrá un menor tiempo restante de ejecución. Al igual que el algoritmo SJF, el planificador debe disponer de una estimación de tiempo para cada proceso con el fin de poder llevar a cabo la función de seleccionar el

44

siguiente proceso, existiendo igualmente que en el SJF peligro de inanición para los procesos largos. Ambos algoritmos, el SJF y el SRT, no presentan un sesgo favorable a los procesos largos como ocurre con el FCFS y tampoco se generan interrupciones adicionales como en el Round-Robin, por el contrario se deben llevar una cuenta de los tiempos de servicio transcurridos con el fin de que la función estadística estime de la forma más veraz los tiempos de ejecución para cada proceso. El algoritmo SRT produce unos tiempos de retorno mejores que el SJF, ya que los trabajos cortos reciben atención inmediata y preferente a los procesos largos. 2.18.4 Prioridad

En muchos sistemas, los procesos tienen prioridades asignadas, y el planificador escogerá aquel proceso con mayor prioridad. Cuando un proceso debe ser seleccionado, el planificador por prioridades seleccionará aquel proceso que tenga mayor prioridad. Si hay más de un proceso entonces se deberá seguir alguna política de selección. Un problema que presenta un esquema de planificación por prioridades puro es que los procesos con la prioridad más baja pueden sufrir de inanición o bloqueo indefinido. Un proceso que está listo para correr pero espera porque siempre hay procesos con prioridad más alta. Para evitar este problema, se puede ir incrementando gradualmente la prioridad de los procesos (envejecimiento). SJF es un caso especial de planificación por prioridad, donde la prioridad es el inverso del valor estimado del próximo ciclo de CPU (a menor ciclo, mayor prioridad). Ejemplo:  Sea la siguiente descripción de carga: Trabajo A B C D Ráfaga CPU 8 4 9 5 Prioridad 2 1 4 2

Suponer el orden de llegada el indicado.
 Calcular tiempo de espera y tiempo de retorno de cada trabajo, tiempo medio de espera y retorno, cuando la planificación se realiza mediante el algoritmo de prioridades y del tipo no apropiativo.

45

SOLUCIÓN: Tabla 12. Titulo: Algoritmo por Prioridades
Proceso Tiempo de lleg. Priori dad Tiempo de Servicio Tiempo de Comienzo Tiempo de Finalizaci ón Turnaroun d Tiempo de Espera

A 0 B 1 C 2 D 3 Promedio

2 1 4 2

8 4 9 5

0 22 8 17
Fuente: Autor

8 26 17 22

8 26-1=25 17-2=15 22-3=19 16.75

0 22-1=21 8-2= 6 17-3=14 10.25

Este algoritmo puede ser apropiativo y no apropiativo. En el caso de apropiativo, cuando un proceso llega a la cola de procesos listos, su prioridad es comparada con la prioridad del proceso que está corriendo. Si la prioridad del nuevo proceso es mayor, entonces se atiende al nuevo proceso. 2.18.5 Algoritmo SRTF

El algoritmo SRT, Shortest Remaining Time o Primero el menor tiempo restante, es la versión expulsiva del algoritmo SJF conocido como “trabajo más corto primero” que maneja los trabajos con base en la duración de su ciclo del CPU. Se diferencia del SJF en que si un nuevo proceso pasa a listo se activa el dispatcher para ver si es más corto que lo que queda por ejecutar del proceso en ejecución. Si es así el proceso en ejecución pasa a listo y su tiempo de estimación se decrementa con el tiempo que ha estado ejecutándose. Este algoritmo tiene mayor ventaja del SJF ya que es óptimo para las ráfagas que llegan indistintamente ya que prefiere los procesos cortos y tiene la opción de suspender el que se está ejecutando para dar paso al nuevo. Uso del quantum En este caso se usa un Quantum, que es un tiempo determinado en el que pasa un proceso por el CPU que no puede ser modificado por el usuario. Ejemplo:  En un cierto instante se tiene los siguientes procesos: Proceso P1 P2 P3 P4 Tiempo de llegada 0 2 4 5 Tiempo de servicio 7 4 1 4

Indicar los valores de:  Tiempo de espera y tiempo de retorno de cada trabajo, tiempo medio de espera y retorno, cuando la planificación se realiza mediante el algoritmo SRTF con un quantum de 2.

46

SOLUCIÓN: Tabla 13. Titulo: Algoritmo SRTF Ejemplo: quantum =2;
Proces o Tiempo de lleg. Priori dad Tiempo de Servicio Tiemp de Com. Tiempo de Fin Turna. Tiempo de Espera

P1

0

7 4 1 4

7 4 1 4

5 3 1 0 4c 2 0 0 2 0 2c 2c 2c

P2 2 P3 4 P4 5 Promedio

0,11,1 3,15 2,5 4 7,9

2,13,15,1 6 4,7 5 9,11

16-0=16 7-2=5 5-4=1 11-5=6 7

16-7=9 5-4=1 1-1=0 6-4=2 3

Fuente: Autor

NOTA: cuando termina una corrida se vuelve a buscar desde arriba los más cortos excepto los que ya terminaron 2.18.6 Round Robin "Turno rotatorio"

Una manera rápida de reducir la penalización que los procesos cortos sufren con FCFS es usar expropiación basada en un reloj. Una interrupción de reloj es generada a intervalos periódicos. Cuando ocurre la interrupción, el proceso en ejecución es colocado en la cola de procesos listos y el próximo trabajo es seleccionado basado en el esquema FCFS. A cada proceso se le da un trozo de tiempo. La principal decisión de diseño que surge con Round Robin es el tamaño del trozo o quantum. Si el quantum es muy corto, entonces los procesos se moverán a través del sistema rápidamente. Por otro lado, hay un cierto overhead o desperdicio de tiempo envuelto con el manejo de la interrupción de reloj y las funciones de planificación y despacho. Por lo tanto quanta muy pequeños deberían evitarse. Una alternativa es usar un quantum de tiempo que sea un poco más grande que el tiempo promedio requerido para una interacción típica. Round Robin es particularmente efectivo para sistemas generales de tiempo compartido. Se implementa con una cola FIFO de procesos. Nuevos procesos son agregados al final de la cola, y toma el proceso que se encuentra en la cabeza de la cola. Actualiza el timer para que interrumpa después del quantum de tiempo. Si tenemos n procesos en la cola de listos y el quantum es de q unidades de tiempo, entonces cada proceso recibe 1/n tiempos de procesador en trozos de q unidades de tiempo como máximo, y además ningún proceso debe esperar más de (n-1) x q unidades de tiempo antes de recibir su siguiente quantum. El desempeño de este algoritmo dependerá del tamaño del quantum. Si el quantum es infinito entonces degenera en FCFS. Si el quantum es muy pequeño entonces Round Robin es llamado compartición de CPU y en teoría pareciera que cada proceso tiene su propio procesador corriendo a 1/n la velocidad del procesador real. Bajo este esquema es importante considerar el efecto del cambio de contexto.

47

Ejemplo:  En un cierto instante se tiene los siguientes procesos: Proceso A B C D Tiempo de llegada 0 1 2 3 Tiempo de servicio 8 4 9 5

Indicar los valores de:  Tiempo de espera y tiempo de retorno de cada trabajo, tiempo medio de espera y retorno, cuando la planificación se realiza mediante el algoritmo Round Robin con un quantum de 3. SOLUCIÓN: Tabla 14. Titulo: Algoritmo Round Robin
Proceso Tiempo de llegada Tiempo de Servicio Tiempo de Comienzo Tiempo de Finalización Turnaround Tiempo de Espera

A 0 B 1 C 2 D 3 Promedio

8 4 9 5

0, 3, 6, 9,

12, 21 15 16, 23 19

3, 15, 23 6, 16 9, 19, 26 12,21

23 16-1=15 26-2=24 21-3=18 20

15 11 15 13 13

Fuente: Autor

2.19 PLANIFICACIÓN DE COLAS MÚLTIPLES
Los algoritmos vistos hasta este momento forman parte de un conjunto de políticas de planificación en las que el denominador común es que tienen una sola cola de procesos listos, esto es, planificadores monocola, pero se han creado otra clase de algoritmos de planificación para aquellas situaciones donde los procesos se pueden clasificar fácilmente en distintos grupos; por ejemplo diferenciar aquellos procesos que se ejecutan en primer plano (llamados procesos interactivos) de los que se ejecutan en segundo plano (los procesos por lotes). Estos dos tipos de procesos tienen requisitos de tiempos de respuesta diferentes, por lo que presentarán distintas necesidades de planificación, así como cada grupo de procesos tendrá unas prioridades sobre el otro grupo. Un algoritmo de planificación de colas múltiples divide la cola de procesos listos en diversas colas (ver figura). Los procesos se podrán asignar de forma permanente a una de las colas de planificación, o bien podrán cambiar de cola de planificación, todo dependerá del algoritmo que se esté empleando. Así como cada cola tendrá su propio algoritmo de planificación.

48

Figura 20: Planificación de colas múltiples
Fuente: http://www3.uji.es/~redondo/so/capitulo2_IS11.pdf

2.20 PLANIFICACIÓN CON MÚLTIPLES COLAS
Debe existir una planificación entre las colas, la cual generalmente es una planificación apropiativa de prioridad fija, esto es, podrá existir una jerarquía de prioridades entre las colas de procesos listos del planificador. Nosotros veremos dos tipos de planificación de múltiples colas, planificación de colas múltiples con realimentación y la planificación de colas múltiples por prioridad. 2.20.1 Planificación de colas múltiples con realimentación

La planificación de colas múltiples con realimentación (ver figura) permite a un proceso moverse de una cola a otra de procesos listos. La forma de llevar a cabo dicha planificación es la siguiente; en principio es una planificación apropiativa y se emplea un mecanismo dinámico de prioridades. Cuando un proceso entra por primera vez en el sistema se sitúa en la primera cola de procesos listos, cuando vuelva el proceso a la cola de listos después de su primera ejecución retornará a la segunda cola de procesos listos. La idea es que después de cada ejecución al proceso se le degradará a un nivel inmediatamente inferior de prioridad. De esta forma un proceso corto terminará rápidamente, sin descender demasiado en la jerarquía de colas de listos. Los procesos largos serán gradualmente llevados hacia colas inferiores. Cuando un proceso llega a la cola de menor prioridad, ya no podrá seguir descendiendo, con lo que dicho proceso volverá a la misma cola de procesos listos repetidamente hasta completar su ejecución. El planificador seleccionará siempre un proceso que se encuentre en una cola de mayor prioridad, con lo que se le asigna a cada cola de listos una prioridad, y cada nuevo proceso que entra al sistema se le asignará la cola de mayor prioridad. Esta política favorece a los procesos nuevos, ya que entran siempre los primeros antes de cualquier otro proceso que se encuentre en otra cola, también favorece a los procesos cortos, que no les da tiempo a que dichos procesos se degraden mucho en la jerarquía de las colas de procesos listos.

49

Dentro de cada cola se podrá usar cualquier planificador monocola de los definidos anteriormente, con lo que se flexibiliza aún más este algoritmo de planificación. Un problema que presenta este algoritmo, es que los procesos largos pueden sufrir de inanición si llegan regularmente nuevos procesos al sistema. Para compensar este problema se puede limitar el tiempo de espera en una cola de menor prioridad. El remedio consiste en permitir que un proceso que se encuentre en una cola de menor prioridad pueda promocionar a una cola de mayor prioridad, si ha consumido cierta cantidad de tiempo en espera de servicio.

Figura 21: Planificación con realimentación
Fuente: http://www3.uji.es/~redondo/so/capitulo2_IS11.pdf

Por lo general, un planificador de colas múltiples con realimentación se define con los siguientes parámetros:  El número de colas.  El algoritmo de planificación para cada cola.  El método utilizado para determinar cuándo promover un proceso a una cola de mayor prioridad.  El método utilizado para determinar cuándo degradar un proceso a una cola de menor prioridad. Este algoritmo de planificación se puede configurar para ajustarse a un sistema específico que se esté diseñando, pero tiene como inconveniente que es complejo realizar un diseño a medida. 2.20.2 Planificación de colas múltiples con prioridades

Mediante este algoritmo de planificación (ver figura) se le asigna a cada proceso una prioridad que deberá coincidir con alguna de las prioridades asignadas a las colas de procesos listos. Cuando un proceso entre en el sistema se dirigirá a la cola que le corresponda, no pudiendo cambiar de cola de procesos listos mientras esté en el sistema, al contrario que la planificación con realimentación. El planificador seleccionará el proceso que tenga mayor prioridad, esto es, el proceso que se encuentre en la cola de mayor prioridad, y dentro de cada cola se seleccionará el proceso de acuerdo a la política de planificación específica a dicha cola. Un problema que presentan estos algoritmos de planificación es que los procesos de prioridad más baja pueden sufrir de inanición. Este problema ocurre, como

50

era de esperar, si hay un flujo continuo de procesos listos de alta prioridad. Para superar este problema, se puede pensar en diseñar un método que pueda cambiar la prioridad del proceso en función de su edad, esto es, aumentar la prioridad por envejecimiento.

Figura 22: Planificación por prioridades
Fuente: http://www3.uji.es/~redondo/so/capitulo2_IS11.pdf

51

UNIDAD III
GESTIÓN DE MEMORIA: ASIGNACIÓN CONTINUA Y ASIGNACIÓN NO CONTINUA: PAGINACIÓN Y MEMORIA VIRTUAL
3.1 PANORAMA GENERAL

Un vistazo al material que se va a cubrir en esta sección se muestra en la figura siguiente. Es una gráfica en donde se especifican, en términos generales, los conceptos más importantes en cuanto a las técnicas empleadas en el manejo de memoria.

Figura 23: Panorama del manejo de memoria
Fuente: http://www.elprisma.com/apuntes/ingenieria_de_sistemas/sistemasoperativosfundamentos/defaul t2.asp

La memoria es uno de los principales recursos de la computadora, la cual debe de administrarse con mucho cuidado. Aunque actualmente la mayoría de los sistemas de cómputo cuentan con una alta capacidad de memoria, de igual manera las aplicaciones actuales tienen también altos requerimientos de memoria, lo que sigue generando escasez de memoria en los sistemas multitarea y/o multiusuario. 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 estén utilizando y aquellas que no, con el fin de asignar espacio en memoria a los procesos cuando éstos la necesiten y liberándola cuando terminen, así como administrar el intercambio entre la memoria principal y el

52

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 administración de memoria se pueden clasificar en dos tipos: los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución y los que no. El propósito principal de una computadora es el de ejecutar programas, estos programas, junto con la información que accesan deben de estar en la memoria principal (al menos parcialmente) durante la ejecución. Para optimizar el uso del CPU y de la memoria, el sistema operativo debe de tener varios procesos a la vez en la memoria principal, para lo cual dispone de varias opciones de administración tanto del procesador como de la memoria. La selección de uno de ellos depende principalmente del diseño del hardware para el sistema. A continuación se observarán los puntos correspondientes a la administración de la memoria.

3.2

MEMORIA REAL

La memoria real o principal es en donde son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos. Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el acceso a la información contenida en ella es de más rápido acceso. Solo la memoria cache es más rápida que la principal, pero su costo es a su vez mayor.

3.3

MANEJO DE MEMORIA EN SISTEMAS MONOUSUARIO SIN INTERCAMBIO

Cuando solo se tiene un proceso que ocupe la memoria a la vez, el esquema de la administración de la memoria es el más sencillo que hay. Sin embargo, éste método ya no tiene aplicación en la actualidad, ya que era visto en las computadoras con sistemas operativos de un solo usuario y una sola tarea. El usuario introducía su disco a la computadora (por lo general, la máquina no contaba con disco duro) y ejecutaba su aplicación, la cual acaparaba toda la máquina. Este esquema es aún muy frecuente principalmente en sistemas monousuario y monotarea, como son las computadoras personales con DOS. Bajo este esquema, la memoria real es tomada para almacenar el programa que se esté ejecutando en un momento dado, con la visible desventaja de que si se está limitado a la cantidad de RAM disponible únicamente. La organización física bajo este esquema es muy simple: El sistema operativo se ubica en las localidades superiores o inferiores de la memoria, seguido por algunos manejadores de dispositivos (‘drivers’). Esto deja un espacio contiguo de memoria disponible que es tomado por los programas del usuario, dejando generalmente la ubicación de la pila (‘stack') al último, con el objetivo de que ésta pueda crecer hasta el máximo posible. Como es obvio, bajo estos esquemas no se requieren algoritmos sofisticados para asignar la memoria a los diferentes procesos, ya que éstos son ejecutados secuencialmente conforme van terminando.

53

Figura 24: Organización simple de memoria
Fuente: http://www.elprisma.com/apuntes/ingenieria_de_sistemas/sistemasoperativosfundamentos/default 2.asp

3.4

MULTIPROGRAMACIÓN EN MEMORIA REAL

En los 60's, las empresas e instituciones que habían invertido grandes sumas en la compra de equipo de cómputo se dieron cuenta rápidamente que los sistemas en lote invertían una gran cantidad de tiempo en operaciones de entrada y salida, donde la intervención de la unidad central de procesamiento era prácticamente nula, y se comenzaron a preguntar cómo hacer que se mantuviera más tiempo ocupada. Fue así como nació el concepto de multiprogramación, el cual consiste en la idea de poner en la memoria física más de un proceso al mismo tiempo, de manera que si el que se está ejecutando en este momento entraba en un periodo de entrada / salida, se podía tomar otro proceso para que usara la unidad central de procesamiento. De esta forma, la memoria física se dividía en secciones de tamaño suficiente para contener a varios programas. De esta manera, si un sistema gastaba en promedio 60% de su tiempo en entrada / salida por proceso, se podía aprovechar más el CPU. Anterior a esto, el CPU se mantenía ese mismo porcentaje ocioso; con la nueva técnica, el tiempo promedio ocioso disminuye de la siguiente forma. Llámese al tiempo promedio que el CPU está ocupado `grado de multiprogramación'. Si el sistema tuviese un solo proceso siempre, y éste gastara 60% en entrada / salida, el grado de multiprogramación sería 1 - 60% = 40% = 0.4. Con dos procesos, para que el CPU esté ocioso se necesita que ambos procesos necesiten estar haciendo entrada / salida, es decir, suponiendo que son independientes, la probabilidad de que ambos estén en entrada / salida es el producto de sus probabilidades, es decir, 0.6x0.6 = 0.36. Ahora, el grado de multiprogramación es 1 - (probabilidad de que ambos procesos estén haciendo entrada / salida) = 1 - 0.36 = 0.64. Como se ve, el sistema mejora su uso de CPU en un 24% al aumentar de uno a dos procesos. Para tres procesos el grado de multiprogramación es 1 - (0.6) 3 = 0.784, es decir, el sistema está ocupado el 78.4% del tiempo. La fórmula del grado de multiprogramación, aunque es muy idealista, pudo servir de guía para planear un posible crecimiento con la compra de memoria real, es decir, para obtener el punto en que la adición de procesos a RAM ya no incrementa el uso de CPU.

54

3.5

MULTIPROGRAMACIÓN CON PARTICIONES FIJAS

Para poder implementar la multiprogramación, se puede hacer uso de particiones fijas o variables en la memoria. En el caso de las particiones fijas, la memoria se puede organizar dividiéndose en diversas partes, las cuales pueden variar en tamaño. Esta partición la puede hacer el usuario en forma manual, al iniciar una sesión con la máquina. Una vez implementada la partición, hay dos maneras de asignar los procesos a ella. La primera es mediante el uso de una cola única (figura a) que asigna los procesos a los espacios disponibles de la memoria conforme se vayan desocupando. El tamaño del hueco de memoria disponible es usado para localizar en la cola el primer proceso que quepa en él. Otra forma de asignación es buscar en la cola el proceso de tamaño mayor que se ajuste al hueco, sin embargo hay que tomar en cuenta que tal método discrimina a los procesos más pequeños. Dicho problema podría tener solución si se asigna una partición pequeña en la memoria al momento de hacer la partición inicial, el cual sería exclusivo para procesos pequeños.
Partición 3 Partición 2 Partición 1 Sistema Operativo 700 K 400 K Partición 2 100 K 400 K Partición 1 100 K Sistema Operativo 0 Figura 25: (a) Particiones fijas en memoria con una cola única de entrada
Fuente: http://www.elprisma.com/apuntes/ingenie ria_de_sistemas/sistemasoperativosfunda mentos/default2.asp

Partición 3

700 K

Figura 25: (b) Particiones fijas en memoria con colas exclusivas para cada tamaño diferente de la partición
Fuente: http://www.elprisma.com/apuntes/ingenie ria_de_sistemas/sistemasoperativosfunda mentos/default2.asp

Esta idea nos lleva a la implementación de otro método para particiones fijas, que es el uso de diferentes colas independientes (figura b) exclusivas para cierto rango en el tamaño de los procesos. De esta manera al llegar un proceso, éste sería asignado a la cola de tamaño más pequeño que la pueda aceptar. La desventaja en esta organización es que si una de las colas tiene una larga lista de procesos en espera, mientras otra cola está vacía, el sector de memoria asignado para ese tamaño de procesos estaría desperdiciándose.

3.6

MULTIPROGRAMACIÓN CON PARTICIONES VARIABLES

Este esquema fue originalmente usado por el sistema operativo IBM OS/360 (llamado MFT), el cual ya no está en uso.

55

El sistema operativo lleva una tabla indicando cuáles partes de la memoria están disponibles y cuáles están ocupadas. Inicialmente, toda la memoria está disponible para los procesos de usuario y es considerado como un gran bloque o hueco único de memoria. Cuando llega un proceso que necesita memoria, buscamos un hueco lo suficientemente grande para el proceso. Si encontramos uno, se asigna únicamente el espacio requerido, manteniendo el resto disponible para futuros procesos que requieran de espacio. Consideremos el ejemplo de la figura a continuación, en donde se cuenta un espacio reservado para el sistema operativo en la memoria baja de 400K y un espacio disponible para procesos de usuario de 2160K, siendo un total de memoria del sistema de 2560K. Dada la secuencia de procesos de la figura y usando un algoritmo de First Come – First Served (FCFS) se puede asignar de inmediato memoria a los procesos P1, P2 y P3, creando el mapa de memoria de la figura a en el cual queda un hueco de 260K que ya no puede ser utilizado por el siguiente proceso dado que no es suficiente para abarcarlo.

0 2560K Sistema Operativo Procesos P1 P2 P3 P4 P5 2160K 2560K Lista de trabajos Memoria Tiempo 600K 1000K 300K 700K 500K 10 5 20 8 15

56

Ejemplo de una división inicial de memoria y una lista de trabajos.
0
Sistema
operativo

0
Sistema operativ

0
Sistema operativ

0
Sistema operativ

0
Sistema operativ

400K

400K

400K

400K

400K

P1
1000K

P1 1000K 1000K Hueco
Asignar P4

P1 1000K P4
Termina P1

Hueco 900K 1000K P4
Asignar P5

P5
Hueco

P2

Termina P2

P4

1700K
2000K

1700K Hueco P3 2000K 2300K Hueco Hueco 2560K Hueco P3

1700K 2000K 2300K Hueco 2560K Hueco P3

2000K P3 P3 2300K
Hueco

2000K 2300K Hueco 2560K

2300K

2560K

2560K

(a)

(b) (c) (d) Figura 26: Multiprogramación con particiones variables

(e)

Fuente: http://www.elprisma.com/apuntes/ingenieria_de_sistemas/sistemasoperativosfundamentos/default 2.asp

3.6.1

Ejemplo de asignación de procesos en la memoria principal

Usando un proceso de asignación Round-Robin con un quantum de 1 unidad de tiempo, el proceso P2 terminaría en la unidad de tiempo 14, liberando esa cantidad de memoria, como se muestra en la figura (b). Entonces el sistema operativo checa la lista de trabajos y asigna el siguiente proceso que quepa en el espacio de memoria liberado. El proceso P4 produce el mapa de memoria que se muestra en la figura (c). El proceso P1 terminará en la unidad de tiempo 28 para producir el mapa de la figura (d) y entonces se asigna el proceso P5 generando el mapa de la figura (e). Cuando a un proceso se le asigna un espacio y es cargado a la memoria principal, puede entonces competir para el uso del CPU.

3.7

COMPACTACIÓN DE MEMORIA

Cuando un proceso llega y necesita memoria, el sistema operativo busca en la tabla de huecos alguno lo suficientemente grande para el proceso. Si el hueco es muy grande, lo parte en dos. Una parte es asignada al proceso y la otra se identifica como hueco. Cuando el proceso termina y la memoria es liberada, el espacio es identificado como un hueco más en la tabla y si el nuevo hueco es adyacente con otro, ambos huecos se unen formando un solo hueco más grande. En ese momento se debe de checar si no existen procesos a los que este nuevo hueco pueda darles cabida.

57

0
Sistema operativ

0
Sistema operativ

400K

400K

P5 900K 1000K
100k Compactación

P5 900K P4

P4 1600K 1700K 2000K 2300K 260k 2560K 300k P3 1900K 660k P3

(a)

2560K

(b)

Figura 27: Ejemplo de compactación
Fuente: http://www.elprisma.com/apuntes/ingenieria_de_sistemas/sistemasoperativosfundamentos/default 2.asp

3.7.1

Ejemplo de compactación de huecos no adyacentes

En la figura se muestra como se modifica el mapa de la memoria después de compactar huecos no adyacentes generados después de intercambios realizados en el ejemplo anterior.

3.8

ASIGNACIÓN DINÁMICA

El proceso de compactación del punto anterior es una instancia particular del problema de asignación de memoria dinámica, el cual es el cómo satisfacer una necesidad de tamaño n con una lista de huecos libres. Existen muchas soluciones para el problema. El conjunto de huecos es analizado para determinar cuál hueco es el más indicado para asignarse. Las estrategias más comunes para asignar algún hueco de la tabla son: - Primer ajuste: Consiste en asignar el primer hueco con capacidad suficiente. La búsqueda puede iniciar ya sea al inicio o al final del conjunto de huecos o en donde terminó la última búsqueda. La búsqueda termina al encontrar un hueco lo suficientemente grande. - Mejor ajuste: Busca asignar el espacio más pequeño de los espacios con capacidad suficiente. La búsqueda se debe de realizar en toda la tabla, a menos que la tabla esté ordenada por tamaño. Esta estrategia produce el menor desperdicio de memoria posible. - Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en toda la tabla de huecos a menos que esté organizada por tamaño. Esta estrategia produce los huecos de sobra más grandes, los cuales pudieran ser de más uso si llegan procesos de tamaño mediano que quepan en ellos. Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del

58

almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en términos de uso de espacio, pero por lo general el primer ajuste es más rápido. 3.8.1 Administración de la memoria con mapas de bits

Este tipo de administración divide la memoria en unidades de asignación, las cuales pueden ser tan pequeñas como unas cuantas palabras o tan grandes como varios kilobytes. A cada unidad de asignación le corresponde un bit en el mapa de bits, el cual toma el valor de 0 si la unidad está libre y 1 si está ocupada (o viceversa). La figura muestra una parte de la memoria y su correspondiente mapa de bits.
A 0 1111100 1111111 0 1100111 1111100 1 0 8 B C 16 D 24 E

Figura 28: Administración de la memoria con mapas de bits
Fuente: http://www.elprisma.com/apuntes/ingenieria_de_sistemas/sistemasoperativosfundamentos/default 2.asp

Ejemplo de un mapa de bits para la administración de la memoria Un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una cantidad fija de memoria, puesto que el tamaño del mapa sólo depende del tamaño de la memoria y el tamaño de la unidad de asignación. 3.8.2 Administración de la memoria con listas ligadas

Otra forma de mantener un registro de la memoria es mediante una lista ligada de los segmentos de memoria asignados o libres, en donde un segmento puede ser un proceso o un hueco entre dos procesos. La memoria de la figura (a) está mostrada como una lista ligada de segmentos en la figura (b). Cada entrada de la lista especifica un hueco (H) o un proceso (P), la dirección donde comienza, su longitud y un apuntador a la siguiente entrada.
A 0 P 0 5 8 H 5 3 B C 16 P 8 6 D 24 P 14 4 E

H

18

2

P

20

6

P

26

3

H x

29

3

Figura 29: Administración de la memoria con listas ligadas
Fuente: http://www.elprisma.com/apuntes/ingenieria_de_sistemas/sistemasoperativosfundamentos/default 2.asp

59

Ejemplo de listas ligadas En este ejemplo, la lista de segmentos está ordenada por direcciones, lo que da la ventaja de que al terminar o intercambiar un proceso, la actualización de la lista es directa. 3.8.3 Asignación del hueco de intercambio

En algunos sistemas, cuando el proceso se encuentra en la memoria, no hay un hueco en el disco asignado a él. Cuando deba intercambiarse, se deberá asignar un hueco para él en el área de intercambio del disco. Los algoritmos para la administración del hueco de intercambio son los mismos que se utilizan para la administración de la memoria principal. En otros sistemas, al caerse un proceso, se le asigna un hueco de intercambio en el disco. Cuando el proceso sea intercambiado, siempre pasará al hueco asignado, en vez de ir a otro lugar cada vez. Cuando el proceso concluya, se libera el hueco de intercambio. La única diferencia es que el hueco en disco necesario para un proceso debe representarse como un número entero de bloques del disco. Por ejemplo, un proceso de 13.5 K debe utilizar 14K (usando bloques de 1K).

3.9

FRAGMENTACIÓN

La fragmentación es la memoria que queda desperdiciada al usar los métodos de gestión de memoria que se vieron en los métodos anteriores. Tanto el primer ajuste, como el mejor y el peor producen fragmentación externa. La fragmentación es generada cuando durante el reemplazo de procesos quedan huecos entre dos o más procesos de manera no contigua y cada hueco no es capaz de soportar ningún proceso de la lista de espera. Tal vez en conjunto si sea espacio suficiente, pero se requeriría de un proceso de defragmentación de memoria o compactación para lograrlo. Esta fragmentación se denomina fragmentación externa. Existe otro tipo de fragmentación conocida como fragmentación interna, la cual es generada cuando se reserva más memoria de la que el proceso va realmente a usar. Sin embargo a diferencia de la externa, estos huecos no se pueden compactar para ser utilizados. Se debe de esperar a la finalización del proceso para que se libere el bloque completo de la memoria.

3.10 LOS OVERLAYS
Una vez que surgió la multiprogramación, los usuarios comenzaron a explorar la forma de ejecutar grandes cantidades de código en áreas de memoria muy pequeñas, auxiliados por algunas llamadas al sistema operativo. Es así como nacen los `overlays'. Esta técnica consiste en que el programador divide lógicamente un programa muy grande en secciones que puedan almacenarse en las particiones de RAM. Al final de cada sección del programa (o en otros lugares necesarios) el programador insertaba una o varias llamadas al sistema con el fin de descargar la sección presente de RAM y cargar otra, que en ese momento residía en disco

60

duro u otro medio de almacenamiento secundario. Aunque esta técnica era eficaz (porque resolvía el problema) no era eficiente (ya que no lo resolvía de la mejor manera). Esta solución requería que el programador tuviera un conocimiento muy profundo del equipo de cómputo y de las llamadas al sistema operativo. Otra desventaja era la portabilidad de un sistema a otro: las llamadas cambiaban, los tamaños de particiones también. Resumiendo, con esta técnica se podían ejecutar programas más grandes que las particiones de RAM, donde la división del código corría a cuenta del programador y el control a cuenta del sistema operativo.

3.11 MULTIPROGRAMACIÓN EN MEMORIA VIRTUAL
La necesidad cada vez más imperiosa de ejecutar programas grandes y el crecimiento en poder de las unidades centrales de procesamiento empujaron a los diseñadores de los sistemas operativos a implantar un mecanismo para ejecutar automáticamente programas más grandes que la memoria real disponible, esto es, de ofrecer `memoria virtual'. La memoria virtual se llama así porque el programador ve una cantidad de memoria mucho mayor que la real, y en realidad se trata de la suma de la memoria de almacenamiento primario y una cantidad determinada de almacenamiento secundario. El sistema operativo, en su módulo de manejo de memoria, se encarga de intercambiar programas enteros, segmentos o páginas entre la memoria real y el medio de almacenamiento secundario. Si lo que se intercambia son procesos enteros, se habla entonces de multiprogramación en memoria real, pero si lo que se intercambian son segmentos o páginas, se puede hablar de multiprogramación con memoria virtual. La memoria virtual se apoya en varias técnicas interesantes para lograr su objetivo. Una de las teorías más fuertes es la del `conjunto de trabajo', la cual se refiere a que un programa o proceso no está usando todo su espacio de direcciones en todo momento, sino que existen un conjunto de localidades activas que conforman el `conjunto de trabajo'. Si se logra que las páginas o segmentos que contienen al conjunto de trabajo estén siempre en RAM, entonces el programa se desempeñará muy bien. Otro factor importante es si los programas exhiben un fenómeno llamado `localidad', lo cual quiere decir que algunos programas tienden a usar mucho las instrucciones que están cercanas a la localidad de la instrucción que se está ejecutando actualmente.

3.12 PAGINACIÓN
Es una técnica de manejo de memoria, en la cual el espacio de memoria se divide en secciones físicas de igual tamaño, denominadas marcos de página. Los programas se dividen en unidades lógicas, denominadas páginas, que tienen el mismo tamaño que los marcos de páginas. De esta forma, se puede cargar una página de información en cualquier marco de página. Las páginas sirven como unidad de almacenamiento de información y de transferencia entre memoria principal y memoria auxiliar o secundaria.

61

Los mecanismos de paginación permiten la correspondencia correcta entre las direcciones virtuales (dadas por los programas) y las direcciones reales de la memoria que se reserven. Para tener el control de las páginas, debe mantenerse una tabla en memoria que se denomina tabla de Mapas de Pagina (PMT) para cada uno de los procesos. Al utilizar la memoria virtual, las direcciones no pasan en forma directa al bus de memoria, sino que van a una unidad administradora de la memoria (MMU Memory Management Unit). Estas direcciones generadas por los programas se llaman direcciones virtuales y conforman el hueco de direcciones virtuales. Este hueco se divide en unidades llamadas páginas. Las unidades correspondientes en la memoria física se llaman marcos para página o frames. Las páginas y los frames tienen siempre el mismo tamaño. 3.12.1 Tablas de páginas

El número de página virtual se divide en un número de página virtual (los bits superiores) y un ajuste (los bits inferiores). El número de página virtual se utiliza como un índice en la tabla de páginas para encontrar la entrada de esa página virtual. El número de marco (si existe) se determina a partir de la tabla de páginas. El número de marco se asocia al extremo superior del ajuste y reemplaza al número de página virtual para formar una dirección física que se puede enviar a la memoria. La finalidad de la tabla de páginas es asociar las páginas virtuales con los marcos. En términos matemáticos, la tabla de páginas es una función, cuyo argumento es el número de página virtual y como resultado el número del marco físico. Mediante el resultado de esta función, se puede reemplazar el campo de la página virtual de una dirección virtual por un campo de marco, lo que produce una dirección en la memoria física. Sin embargo hay que enfrentar dos aspectos fundamentales: 1. La tabla de páginas puede ser demasiado grande. 2. La asociación debe ser rápida. El primer punto proviene del hecho de que las computadoras modernas utilizan direcciones virtuales de al menos 32 bits. Por ejemplo, si el tamaño de página es de 4K, un hueco de direcciones de 32 bits tiene un millón de páginas; en el caso de un hueco de direcciones de 64 bits, se tendría más información de la que uno quisiera contemplar. El segundo punto es consecuencia del hecho de que la asociación virtual - física debe hacerse en cada referencia a la memoria. Una instrucción común tiene una palabra de instrucción y también un operando de memoria. Por ello, es necesario remitirse una, dos o más veces en la tabla de páginas cada vez que se ejecute una instrucción. 3.12.2  Diseños de tablas de páginas

Vector de registros rápidos en hardware: consiste en una entrada por página virtual. Al iniciar el proceso se carga la tabla de páginas del proceso en estos registros durante la asociación no hay que acceder a memoria.

62

Desventaja: – Costosa en recursos si la tabla de páginas es grande (1 registro por página) – Costosa en tiempo – En el cambio de contexto habría que cargar la tabla de páginas  Tabla de páginas en memoria: en hardware sólo se necesita un registro que apunte al inicio de la tabla de páginas el cambio de contexto: modifica un registro. Desventaja: – Hay que hacer una o más referencias a memoria por cada instrucción para acceder a la tabla de páginas  Tablas de páginas de varios niveles: No todo el espacio de direcciones virtuales es utilizado por todos los procesos. Memoria asociativa: consiste en adoptar una técnica diferente para acceder a las páginas activas. Esta técnica representa el tener que incorporar a la máquina una memoria asociativa, en un pequeño conjunto de registros de dirección de página (PARs, del inglés page address registers), cada uno de los cuales contiene el número de página de una página activa. Los PARs presentan la propiedad de poderse buscar en ellos de forma simultánea el número de página asociado a una dirección de programa en particular. Por ejemplo, la dirección de programa 3243 se divide en el número de página 3 y el número de palabra 243 (el tamaño de la página sea 1000). El número de página se compara entonces de forma simultánea con el contenido de todos los PARs, y se encuentra que coincide con el valor del PAR 5. Ello indica que la página 3 ocupa en la actualidad la página física número 5, de forma que la dirección buscada será la 5243. Ventaja: – Reduce el tiempo empleado en la transformación de direcciones en un orden de magnitud con respecto al caso en el que se guardaba la tabla de páginas sobre memoria principal.

Figura 30: Traducción de direcciones de memoria
Fuente: http://danielguzmanrobles5c.blogspot.com/2009_08_01_archive.html

63

3.12.3

Transformación asociativa

de

direcciones

mediante

una

memoria

Con el fin de que se pueda hacer referencia a todas las páginas activas a través de un PAR, hay que disponer de tantos como marcos haya en la memoria. En este caso, el marco al que hará referencia cada PAR, no vendrá implícito por la situación de éste, sino que deberá incluirse como un campo adicional en el mismo PAR. El hardware de direccionamiento de la memoria lleva a cabo, entonces, la operación de transformación de direcciones. Como antes, sólo se requiere la intervención del software en el caso de que haya que sustituir una página. Se cargan cíclicamente en la memoria asociativa las direcciones de las páginas a las que se ha hecho referencia con más frecuencia recientemente. Este algoritmo, más bien primitivo, es, de hecho, bastante eficaz. El porcentaje de veces que se encuentra un número de página entre los registros asociativos está relacionado claramente con el número de registros asociativos. Con 8 o 16 registros asociativos, puede obtenerse un porcentaje del 80 al 90%. Un porcentaje del 80% significa que el 80% de las veces encontramos el número de página deseado entre los registros asociativos. Si explorar los registros asociativos lleva 50 nanosegundos, y 750 nanosegundos acceder a memoria, entonces un acceso a memoria "mapeada" lleva 800 nanosegundos cuando el número de página se encuentra en los registros asociativos. Si no conseguimos encontrar el número de página (50 ns), entonces tenemos que acceder a la memoria en primer lugar para buscar el número de marco en la tabla de páginas (750 ns) y entonces acceder a la palabra deseada en memoria (750 ns), dando en total 1550 nanosegundos. Para encontrar el tiempo efectivo de acceso a memoria, tenemos que ponderar cada caso con su probabilidad: Tiempo efectivo de acceso a memoria = 0,80 x 800 + 0,20 x 1550 = 950 ns En este ejemplo, sufrimos un 26,6% de retardo en el tiempo de acceso a memoria (de 750 a 950 nanosegundos). 3.12.4  Estructura de una tabla de páginas

Paginación jerárquica: Rompe el espacio de direccionamiento lógico en múltiples tablas de página.

Figura 31: Paginación jerárquica
Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

64

Tabla hash de página: El espacio de direcciones comunes es mayor a 32 bits. El número de página virtual se usa como llave de una tabla de página hash. Esta tabla de página contiene una lista con los elementos asociados al mismo registro. El número de página virtual es comparado en esta lista buscando una coincidencia, si se encuentra, el marco de página es extraído.

Figura 32: Tabla hash de página
Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

Página Invertida: Disminuye el desperdicio de memoria y aumenta el tiempo de búsqueda. Usa la tabla hash para reducir tiempo de búsqueda.

Figura 33: Página invertida
Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

65

3.12.5

Uso del TLB en las tablas de páginas

Cada referencia a memoria virtual puede causar dos accesos a memoria física:  Una consulta en la tabla de páginas  Una para buscar el dato Para superar el problema se coloca una cache de alta velocidad para entradas de tablas de página llamada TLB - Translation Lookaside Buffer. Este buffer contiene las entradas de tablas de página que han sido usadas más recientemente, además funciona igual que una memoria cache

Figura 34: Uso del TLB en las tablas de páginas
Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

3.12.6

Traducción de direcciones

La dirección generada por la CPU se divide en:  Número de página (p): utilizado como índice en la tabla de páginas que contiene la dirección base de cada página en la memoria física.  Offset de la página (d): combinado con la dirección base define la dirección física que será enviada a la unidad de memoria.

Figura 35: Traducción de direcciones
Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

66

3.12.7

Estructura de una entrada de tabla de páginas

La estructura general de una tabla de páginas consta de lo siguiente:  Número de marco de página  Bit presente/ausente; si el bit es 1 la entrada es válida y puede usarse, si es 0 significa que la página virtual de la entrada no está en memoria, esto causaría un fallo de página.  Bit de Protección; indica que tipos de accesos están permitidos. Si el bit es 0 permite leer y escribir; y si es 1 permite únicamente leer.  Bit Modificada y Solicitada llevan el control del uso de la página. El bit modificado refleja el estado de la página, y el bit solicitado se enciende cada vez que se hace referencia a una página; ya sea para leer o escribir.  El ultimo bit permite inhabilitar el uso de caché con la pagina. Importante en el caso de páginas que corresponda a registros de dispositivos, no a memoria. No poner caché Modificada Presente/Ausente Numero de marco de pagina

Solicitada Protección Figura 36: Estructura de una entrada de tabla de páginas
Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

3.12.8

Funcionamiento de memoria paginada

Cada vez que la CPU genere una dirección de memoria ésta es transformada por una unidad hardware, de forma que en el bus del sistema se introduce la dirección física correspondiente. Es importante observar que la paginación es en sí misma una forma de reubicación dinámica. Cada dirección lógica es transformada en alguna dirección física por el hardware de paginación. Observe también que si el tamaño de página es una potencia de dos, el hardware no precisa realizar ninguna división, simplemente sabe que los últimos n bits, si el tamaño de página es de 2n, representan el desplazamiento, y los primeros bits la página. Cada proceso debe tener su propia tabla de páginas, y su dirección de comienzo en la memoria principal forma parte de la porción del PCB utilizada para realizar un cambio de proceso. Como el número de marcos (cantidad de memoria real) asignados a un proceso será normalmente menor que el número de páginas que éste utiliza, es muy posible que una dirección del programa haga referencia a una página que no se encuentre en aquel momento en la memoria principal. En este caso el elemento correspondiente de la tabla de páginas estará vacío, provocando el hardware una interrupción de "fallo de página" si se intenta acceder a ella. Esta interrupción provoca que el control pase al software (al sistema operativo), para que éste inicie la transferencia de la página que falta desde la memoria secundaria a la memoria principal, y actualice de acuerdo con ello la tabla de páginas. El proceso en ejecución se hará no listo hasta que se haya completado esta transferencia. La posición de las páginas en la memoria secundaria puede guardarse en una tabla separada o en la misma tabla de páginas. En este último caso, es necesario un "bit de presencia" en cada

67

elemento de la tabla de páginas, para indicar si la página se encuentra presente o no en la memoria principal, y si el campo de direcciones debe interpretarse como una dirección de marco, o bien como una dirección de la memoria secundaria. La elección de la página que habrá que sacar es el resultado de un algoritmo de reemplazo de página. Ejercicio de aplicación En este ejemplo es de 4KB de páginas y marcos, con un espacio de direcciones virtuales de 64K y 32KB de memoria física, tenemos 16 páginas virtuales y ocho marcos de página. Cuando el programa trata de tener acceso a la dirección 0, por ejemplo, con la intrusión la dirección virtual 0 envía a la MMU. Esta ve que tal dirección virtual está en la pagina 0(0 a 4095, que según su correspondencia es el marco de pagina 2(8192 a 12287). Así, la MMU; lo único que ve es una solicitud de leer o escribir a la dirección 8192, y lo hace. Por lo tanto, la MMU ha establecido la correspondencia total de todas las direcciones entre 0 y 4095 con las direcciones físicas 8192 a12287.

De forma similar la instrucción

Figura 37: Ejemplo de aplicación
Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

68

3.12.9

Páginas compartidas

Esto es particularmente importante en un entorno de tiempo compartido. Consideremos un sistema que soporta 40 usuarios, cada uno de los cuales ejecuta un editor de textos. Si el editor de textos consta de 30K de código y 5K de espacio para datos, necesitaríamos 1400K para permitir a los 40 usuarios. No obstante, si el programa es reentrante, podría compartirse. Aquí vemos un editor de tres páginas que es compartido por tres procesos. Cada proceso tiene su propia página de datos. El código reentrante (también llamado código puro) es un código no automodificable. Si el código es reentrante, entonces nunca cambia durante la ejecución. Así, dos o más procesos pueden ejecutar el mismo código al mismo tiempo. Cada proceso, para su ejecución, tiene su PCB y su memoria para mantener los datos. Por supuesto, los datos de todos esos procesos diferentes varían para cada uno de ellos. Características El espacio de direcciones lógico de un proceso puede ser no contiguo. Se divide la memoria física en bloques de tamaño fijo llamados marcos (frames). Se divide la memoria en bloques de tamaño llamados páginas. Se mantiene información en los marcos libres. Para correr un programa de n paginas de tamaño, se necesitan encontrara n marcos y cargar el programa. Se establece una tabla de páginas para trasladar las direcciones lógicas a físicas. Se produce fragmentación interna. La memoria asociativa permite acelerar la traducción. Comparte programas de uso corriente. Tabla 15. Titulo: Ventajas y desventajas de las máquinas virtuales Ventajas Es posible comenzar a ejecutar un  programa, cargando solo una parte del mismo en memoria, y el resto se cargara bajo la solicitud Desventajas El costo de hardware y software se incrementa (si la tabla de paginas es grande), por la nueva información que debe manejarse y el mecanismo de traducción de direcciones necesario. Se consume mucho más recursos de memoria, tiempo en el CPU para su implantación Se deben reservar áreas de memoria para las PMT de los procesos. Al no ser fija el tamaño de estas, se crea un problema semejante al de los programas (como asignar un tamaño óptimo sin desperdicio de memoria, u "ovearhead" del procesador) Aparece el problema de fragmentación interna

       

No es necesario que las paginas  estén contiguas en memoria, por lo que no se necesitan procesos de compactación cuando existen marcos de paginas libres dispersos en la memoria

Es fácil controlar todas las  páginas, ya que tienen el mismo

69

 

tamaño El mecanismo de traducción de  direcciones (DAT) permite separar los conceptos de espacio de direcciones y espacios de memoria. Todo el mecanismo es transparente al usuario Se libera al programador de la  restricción de programar para un tamaño físico de memoria, con lo que se aumenta su productividad. Se puede programar en función de una memoria mucho más grande a la existente Al no necesitarse cargar un programa completo en memoria para su ejecución, se puede amentar el número de programas multiprogramándose Se elimina el problema de fragmentación externa Cuando la tabla se implementa completamente en hardware, se obtiene una alta velocidad de acceso a memoria Permite la posibilidad de compartir programas de uso corriente Cuando la tabla se implementa en memoria principal, la tabla de páginas puede crecer según se requiera

Al implementar completamente en hardware, resulta problemática cuando la tabla de páginas debe ser grande

La velocidad de acceso a memoria principal es relativamente baja, dado que cada referencia a memoria involucra 2 accesos

Fuente: Autor

3.12.10 Algoritmos de reemplazo de páginas Con el uso del método de paginación se puede llegar a saturar la memoria si se incrementa demasiado el nivel de multiprogramación. Por ejemplo, si se corren seis procesos, cada uno con un tamaño de diez páginas de las cuales en realidad sólo utiliza cinco, se tiene un mayor uso del CPU y con marcos de sobra. Pero pudiera suceder que cada uno de esos procesos quiera usar las diez páginas resultando en una necesidad de 60 marcos, cuando solo hay 40 disponibles. Esto provoca sobre-asignación y mientras un proceso de usuario se está ejecutando, ocurre un fallo de página. El hardware se bloquea con el sistema operativo, el cual checa en sus tablas internas y se da cuenta que es un fallo de página y no un acceso ilegal de memoria. El sistema operativo determina si la página está residiendo en disco, pero también determina que no hay marcos de memoria disponibles en la lista de marcos libres. Al ocurrir el fallo de página, el sistema operativo debe elegir una página para retirarla de la memoria y usar el espacio para la página que se necesita para

70

desbloquear el sistema y que el hardware pueda seguir trabajando. Si la página por eliminar de la memoria fue modificada, se debe volver a escribir al disco para mantener la información actualizada; de lo contrario, si la página no fue modificada no es necesario rescribir la información a disco y la página que se carga simplemente se escribe sobre la página a borrar en memoria. La figura 38 muestra gráficamente un intercambio de páginas entre la memoria principal y el disco (memoria secundaria).

Página a eliminar Marco elegido para intercambio de Página a cargar

Memoria Principal

Memoria Secundaria

Figura 38: Intercambio de páginas
Fuente: http://so.fciencias.unam.mx/presentaciones/ch8.pdf

Se elimina de la memoria principal una página que no esté en uso y se reemplaza por una página de la cual el sistema operativo tiene necesidad de uso. 3.12.11 Algoritmo aleatorio Este algoritmo consiste simplemente en reemplazar aleatoriamente cualquier página de la memoria principal, sin hacer ningún esfuerzo de predicción. Es el algoritmo más sencillo dado que no requiere tener ninguna información, sin embargo, por no hacer uso de dicha información sobre el comportamiento del proceso, no puede lograr un buen desempeño. 3.12.12 Algoritmo de reemplazo de páginas óptimo Este algoritmo debe de tener el menor índice de fallos de página de todos los algoritmos. En teoría, este algoritmo debe de reemplazar la página que no va a ser usada por el periodo más largo de tiempo. Desafortunadamente, el algoritmo de reemplazo óptimo es fácil en teoría, pero prácticamente imposible de implementar, dado que requiere conocer a futuro las necesidades del sistema. Tal algoritmo existe y ha sido llamado OPT o MIN, pero se usa únicamente para estudios de comparaciones. Por ejemplo, puede resultar muy útil saber que aunque algún nuevo algoritmo no sea óptimo, está entre el 12.3% del óptimo y entre el 4.7% en promedio.

71

3.12.13 Algoritmo de reemplazo de páginas según el uso no tan reciente Este algoritmo hace uso de los dos bits de estado que están asociados a cada página. Estos bits son: R, el cual se activa cuando se hace referencia (lectura / escritura) a la página asociada; y M, que se activa cuando la página asociada es modificada (escritura). Estos bits deben de ser actualizado cada vez que se haga referencia a la memoria, por esto es de suma importancia que sean activados por el hardware. Una vez activado el bit, permanece en ese estado hasta que el sistema operativo, mediante software, modifica su estado. Estos bits pueden ser utilizados para desarrollar un algoritmo de reemplazo que cuando inicie el proceso, el sistema operativo asigne un valor de 0 a ambos bits en todas las páginas. En cada interrupción de reloj, limpie el bit R para distinguir cuáles páginas tuvieron referencia y cuáles no. Cuando ocurre un fallo de página, el sistema operativo revisa ambos bits en todas las páginas y las clasifica de la siguiente manera: Clase 0: La página no ha sido referenciada, ni modificada. Clase 1: La página no ha sido referenciada, pero ha sido modificada. Clase 2: La página ha sido referenciada, pero no ha sido modificada. Clase 3: La página ha sido referenciada y también modificada. Una vez obtenida la clasificación, elimina una página de manera aleatoria de la primera clase no vacía con el número más pequeño. Esto porque para el algoritmo es mejor eliminar una página modificada sin referencias en al menos un intervalo de reloj, que una página en blanco de uso frecuente. A pesar de que este algoritmo no es el óptimo, es fácil de implementar y de comprender y con mucha frecuencia es el más adecuado. 3.12.14 Algoritmo de reemplazo “primero en entrar, primero en salir” (FIFO) El algoritmo más sencillo para reemplazo de páginas es el FIFO (First In – First Out). Este algoritmo asocia a cada página el momento en que ésta fue traída a memoria. Cuando una página debe ser reemplazada se selecciona a la más antigua. No es estrictamente necesario registrar el momento de entrada de la página a memoria, sino que se puede crear una cola en la que se van agregando las páginas conforme van llegando a la memoria. Cuando se debe eliminar una página, se selecciona la que está al frente de la lista (o sea, la más antigua de la lista). Cuando llega una página nueva, se inserta en la parte trasera de la cola. En la figura se representa el funcionamiento de éste algoritmo.
Página más reciente

F

E

D

C

B

A

Página más antigua

Figura 39: Reemplazo de páginas FIFO
Fuente: http://sisinfo.itc.mx/ITC-APIRGG/Materias/Mat4/Imagenes-Unid1/SO-IIU1_Fig1.gif

72

3.12.15 Reemplazo de páginas mediante el algoritmo FIFO Al igual que el algoritmo aleatorio, este algoritmo es fácil de comprender y de programar. Sin embargo, su desempeño no siempre es del todo bueno. La página reemplazada puede ser un módulo de inicialización que fue usado hace mucho tiempo y ya no se tiene necesidad de él. Por otro lado, puede contener una variable de uso muy frecuente que fue inicializada de manera temprana y está en uso constante. 3.12.16 Algoritmo de reemplazo de páginas de la segunda oportunidad Este algoritmo es una modificación del FIFO. El algoritmo hace uso del bit de referencia de la página. Cuando una página ha sido seleccionada para reemplazo, se revisa el bit de referencia. Si tiene valor de 0, se procede a reemplazar la página. Si por el contrario, el bit de referencia es 1 se le da a la página una segunda oportunidad.
Página más reciente Página más antigua

F

E

D

C

B

A

Página más reciente

El bit se cambia a 0 y se actualiza el tiempo de llegada de la página

A

F

E

D

C

Página seleccionada para reemplazo con bit 1 Página más B antigua

Figura 40: Reemplazo de páginas de la segunda oportunidad
Fuente: http://sisinfo.itc.mx/ITC-APIRGG/Materias/Mat4/Imagenes-Unid1/SO-IIU1_Fig1.gif

3.12.17 Algoritmo de la segunda oportunidad Cuando esto sucede, se le cambia el bit de referencia a 0 y se actualiza su tiempo de llegada al tiempo actual para que la página sea colocada al final de la cola. De esta manera, la página espera todo un ciclo completo de páginas para ser entonces reemplazada. Si la página tiene un uso muy frecuente, el bit de referencia se mantendría constantemente en 1 y la página no sería reemplazada. En la figura anterior se puede apreciar el funcionamiento del algoritmo. 3.12.18 Algoritmo de reemplazo de páginas del reloj Modificando el algoritmo de la segunda oportunidad (que a su vez es una modificación de FIFO) obtenemos el algoritmo aumentado de la segunda oportunidad o algoritmo del reloj. Usamos la misma clasificación vista en el algoritmo de uso no tan reciente. Este algoritmo organiza las páginas en una lista circular como se muestra en la figura y se usa un apuntador (o manecilla) que señala a la página más antigua.

73

Figura 41: Reemplazo de páginas del reloj
Fuente: http://wwwdi.ujaen.es/~lina/TemasSO/MEMORIAVIRTUAL/Image19.gif

3.12.19 Algoritmo de reloj Cuando se presenta un fallo de página, el algoritmo revisa la página a la que está apuntando la manecilla. Si el bit de referencia es 0, la página es reemplazada con la nueva y la manecilla avanza una posición. Si el bit es 1, entonces se limpia (cambia a 0) y la manecilla avanza a la siguiente página y así sucesivamente hasta encontrar una con bit 0. 3.12.20 Algoritmo de reemplazo de páginas “la de menor uso reciente” (LRU) Este algoritmo es una buena aproximación al óptimo y se basa en la observación de que las páginas de uso frecuente en las últimas instrucciones se utilizan con cierta probabilidad en las siguientes. De la misma manera, es probable que las páginas que no hayan sido utilizadas durante mucho tiempo permanezcan sin uso por bastante tiempo. Implementando el algoritmo con esta base, al ocurrir un fallo de página, se elimina la página que no haya sido utilizada durante el tiempo más grande. De ahí su denominación: menor uso reciente (LRU - Least Recent Use). A diferencia de los algoritmos anteriores, el LRU tiene un mejor rendimiento en cuanto al tiempo de aprovechamiento del CPU y del uso de la memoria. Sin embargo, el problema con este algoritmo es que su implementación es muy cara, ya que requiere de una asistencia considerable de hardware. Otro problema es el de determinar un orden para los marcos definido por el tiempo de menor uso. Para éste último hay dos posibles implementaciones: Contadores: En el caso más sencillo, se asocia cada entrada tabla-página un campo de tiempo-de-uso y se le agrega al CPU un reloj lógico o contador. Este reloj es incrementado en cada referencia de memoria. Siempre que se hace referencia a una página, el contenido del registro del reloj es copiado al campo de tiempo-de-uso en la tabla de páginas para esa página. De esta forma, siempre se dispone del “tiempo” de la última referencia a cada página. La página que se reemplaza es la del menor valor de tiempo. Este esquema requiere de una búsqueda en toda la tabla de páginas para encontrar la página LRU, y una escritura en memoria al campo de tiempo-de-uso en la tabla de páginas por cada acceso a memoria. Los tiempos también se deben de mantener cuando las tablas de páginas son alteradas (debido a organización del CPU). Se debe considerar la posibilidad de sobrecarga en el reloj.

74

Pilas: Otra aproximación para implementar el reemplazo LRU es la de tener una pila con los números de páginas. Siempre que se hace referencia a una página, se quita de la pila y se pone en la parte superior. De esta manera, la parte superior de la pila es la página de uso más reciente y la de abajo es la LRU, tal como se muestra en la figura

A E E D C B A D C B

Figura 42: Uso de pilas en el algoritmo LRU
Fuente: http://wwwdi.ujaen.es/~lina/TemasSO/MEMORIAVIRTUAL/Image19.gif

3.13 SEGMENTACIÓN
Otra opción para el manejo de la memoria es usar una forma de liberar al programador de la tarea del control de las tablas en expansión y contracción, de la misma forma que la memoria virtual elimina la preocupación por organizar el programa en una serie de proyectos. Esto se puede lograr dotando a la máquina de varios espacios independientes de direcciones llamados segmentos. Cada segmento tiene una serie lineal de direcciones, desde 0 hasta cierto máximo. La longitud de cada segmento puede variar de 0 hasta un máximo permitido. Los distintos segmentos pueden tener y de hecho tienen por lo general, longitudes distintas. Además, la longitud de un segmento puede variar durante la ejecución. La longitud de un segmento de la pila puede crecer si algo entra a la pila y decrecer si algo sale de ella. Puesto que cada segmento constituye un espacio independiente de direcciones, los distintos segmentos pueden crecer o reducirse en forma independiente sin afectar a los demás. En la figura siguiente podemos ver una lista de comparación entre la paginación y la segmentación. La segmentación también facilita el uso de procedimientos o datos compartidos entre varios procesos. Un ejemplo común son las bibliotecas compartidas (Shared DLL’s). Es frecuente que las estaciones de trabajo modernas que ejecutan sistemas avanzados, con ventanas, tengan bibliotecas gráficas de tamaño muy grande que se compilan casi en todos los programas. En un sistema segmentado, la biblioteca gráfica se puede colocar en un segmento y compartirse entre varios procesos, sin necesidad de tenerla en el espacio de direcciones de cada proceso. Aunque también es posible tener bibliotecas compartidas sin los sistemas con paginación pura, es mucho más complejo. De hecho, estos sistemas simulan la segmentación.

75

Segmentación pura La implantación de la segmentación difiere del caso de la paginación en un sentido esencial: las páginas tienen un tamaño fijo y los segmentos no. La figura Desarrollo de fragmentación externa y su corrección mediante compactación, muestra un ejemplo de memoria física que contiene al principio 5 segmentos. Consideremos que el segmento 1 se elimina y su lugar se ocupa por el segmento 7, que es menor. El área que queda entre el segmento 7 y el 2 es un hueco. Luego, el segmento 4 se reemplaza por el segmento 5 y el segmento 3 es reemplazado por el segmento 6. Después de que el sistema esté en ejecución durante cierto tiempo, la memoria quedará dividida en varios bloques, algunos con segmentos y otros con huecos.

3.14 COMPARACIÓN DE PAGINACIÓN Y SEGMENTACIÓN
Este fenómeno de fragmentación externa o checkboarding, desperdicia la memoria correspondiente a los huecos, pero es fácilmente corregido mediante el uso de la compactación. De esta forma los huecos son unificados, generando así un hueco de tamaño suficiente para albergar algún otro segmento más.
Segmento 0 (4K) Segmento 0 (4K) Segmento 0 (4K) Segmento 0 (4K) Segmento 0 (4K)

(a)

Segmento 1 (8K)

(b)
Segmento 7 (5K) Hueco (3K)

(c)
Segmento 7 (5K) Hueco (3K) Segmento 2 (5K) Segmento 3 (8K) Segmento 5 (4K)

(d)
Segmento 7 (5K) Hueco (3K) Segmento 2 (5K) Segmento 6 (4K) Hueco (4K) Segmento 5 (4K) Hueco (3K)

(e) Segmento
7 (5K) Segmento 2 (5K) Segmento 6 (4K) Segmento 5 (4K)

Segmento 2 (5K)

Segmento 2 (5K) Segmento 3 (8K)

Segmento 3 (8K)

Segmento 4 (7K)

Segmento 4 (7K)

Hueco (10K)

Hueco (3K)

Figura 43: Desarrollo de fragmentación externa y su corrección mediante compactación
Fuente: http://www.elprisma.com/apuntes/ingenieria_de_sistemas/sistemasoperativosfundamentos/default 2.asp

3.15 SISTEMAS COMBINADOS
La paginación y la segmentación puras son métodos de manejo de memoria bastante efectivos, aunque la mayoría de los sistemas operativos modernos implantan esquemas combinados, es decir, combinan la paginación y la segmentación. La idea de combinar estos esquemas se debe a que de esta forma se aprovechan los conceptos de la división lógica de los programas (segmentos) con la granularidad de las páginas. De esta forma, un proceso estará repartido en la memoria real en pequeñas unidades (páginas) cuya liga son los segmentos. También es factible así el compartir segmentos a medida que las partes

76

necesitadas de los mismos se van referenciando (páginas). Para comprender este esquema, nuevamente se verá cómo se traduce una dirección virtual en una localidad de memoria real. Para la paginación y segmentación puras se puede decir que el direccionamiento es `bidimensional' porque se necesitan dos valores para hallar la dirección real. Para el caso combinado, se puede decir que se tiene un direccionamiento `tridimensional'. En la figura 44 se muestran las partes relevantes para lograr la traducción de direcciones. El sistema debe contar con una tabla de procesos (TP). Por cada renglón de esa tabla se tiene un número de proceso y una dirección a una tabla de segmentos. Es decir, cada proceso tiene una tabla de segmentos. Cuando un proceso hace alguna referencia a memoria, se consulta TP para encontrar la tabla de segmentos de ese proceso. En cada tabla de segmentos de proceso (TSP) se tienen los números de los segmentos que componen a ese proceso. Por cada segmento se tiene una dirección a una tabla de páginas. Cada tabla de páginas tiene las direcciones de las páginas que componen a un solo segmento. Por ejemplo, el segmento `A' puede estar formado por las páginas reales `a','b','c','p' y `x'. El segmento `B' puede estar compuesto de las páginas `f','g','j','w' y `z'.

Figura 44: Traducción en la segmentación-paginación
Fuente: http://www.elprisma.com/apuntes/ingenieria_de_sistemas/sistemasoperativosfundamentos/default 2.asp

77

Ahora, en este esquema pueden haber dos tipos de fallos: por fallo de página y por fallo de segmento. Cuando se hace referencia a una dirección y el segmento que la contiene no está en RAM (aunque sea parcialmente), se provoca un fallo por falta de segmento y lo que se hace es traerlo del medio de almacenamiento secundario y crearle una tabla de páginas. Una vez cargado el segmento se necesita localizar la página correspondiente, pero ésta no existe en RAM, por lo cual se provoca un fallo de página y se carga de disco y finalmente se puede ya traer la dirección deseada por medio del desplazamiento de la dirección virtual. La eficiencia de la traducción de direcciones tanto en paginación pura, segmentación pura y esquemas combinados se mejora usando memorias asociativas para las tablas de páginas y segmentos, así como memorias cache para guardar los mapeos más solicitados. Otro aspecto importante es la estrategia para cargar páginas (o segmentos) a la memoria RAM. Se usan más comúnmente dos estrategias: cargado de páginas por demanda y cargado de páginas anticipada. La estrategia de cargado por demanda consiste en que las páginas solamente son llevadas a RAM si fueron solicitadas, es decir, si se hizo referencia a una dirección que cae dentro de ellas. La carga anticipada consiste en tratar de adivinar qué páginas serán solicitadas en el futuro inmediato y cargarlas de antemano, para que cuando se pidan ya no ocurran fallos de página. Ese `adivinar' puede ser que se aproveche el fenómeno de localidad y que las páginas que se cargan por anticipado sean aquellas que contienen direcciones contiguas a la dirección que se acaba de referenciar. De hecho, el sistema operativo VMS usa un esquema combinado para cargar páginas: cuando se hace referencia a una dirección cuya página no está en RAM, se provoca un fallo de página y se carga esa página junto con algunas páginas adyacentes. En este caso la página solicitada se cargó por demanda y las adyacentes se cargaron por anticipación.

3.16 GESTIÓN DE MEMORIA VIRTUAL EN WINDOWS Y LINUX
3.16.1 Sistema operativo Linux: como gestiona la memoria virtual

El tamaño combinado del programa, datos y pila puede exceder la cantidad de memoria física disponible. El sistema operativo guarda aquellas partes del programa concurrentemente en memoria central y el resto en disco. Cuando un programa espera que se le cargue en memoria central de disco otra parte del mismo, la CPU se puede asignar a otro proceso. El sistema operativo gestiona niveles de memoria principal y memoria secundaria: • Transferencia de bloques entre ambos niveles(basada en paginación) • De memoria secundaria a principal: por demanda • De memoria principal a secundaria: por expulsión Esto conlleva unos beneficios: aumenta el grado de multiprogramación, y permite ejecutar programas que no quepan en memoria principal

78

3.16.2

Gestión de memoria en sistemas basados en Linux

Los sistemas basados en Unix comparten multitud de aspectos con los basados en Linux, aunque ciertos puntos sustanciales son diferentes, y por ello a continuación se hace una diferenciación. Hay que destacar no obstante que el sistema de gestión de memoria en Linux sigue siendo muy complejo. Respecto a memoria virtual, Linux hace uso de una estructura de tabla de páginas con tres niveles. Para utilizarlas, las direcciones virtuales en Linux se ven como un conjunto de 4 campos. Para tratar de aumentar la eficiencia al cargar y descargar páginas desde o hacia la memoria, se ha definido un mecanismo particular. Sin entrar en demasiados detalles técnicos, basta indicar que se utiliza el Sistema de colegas, en el cual las páginas son agrupadas en marcos de tamaño fijo. Para reemplazar páginas, se utiliza el algoritmo del reloj, en el cual las páginas tienen asignada una especie de variable de edad. Cuando es necesario reemplazar una página, aquellas que no han sido referenciadas en bastante tiempo son las mejores candidatas. 3.16.3 Direccionamiento de memoria

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. Desde el punto de vista de la arquitectura, el sistema operativo suele tener asistencia del hardware para realizar la gestión de memoria: por ejemplo, en sistemas i386, se dispone de una unidad especializada para ello, la Memory Management Unit.(MMU) Existen los tres tipos de direcciones inicialmente comentados, las lógicas, las lineales y las 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. En los procesadores de la arquitectura i386, el paso de dirección lógica a lineal se denomina segmentación, y de lineal a física paginación. Si deshabilitamos la paginación, la dirección física es igual a la lineal. 3.16.4 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 la gestión de memoria es más simple, y uno de los objetivos de Linux es la portabilidad: muchos procesadores soportan malamente la segmentación, así que la independencia de la plataforma se vería mermada en Linux

79

Figura 45: Modelo de paginación de Linux
Fuente: http://www.neo-tech.es/wp/doc/presentacion-erc.pdf

Linux gestiona la memoria central y las tablas de páginas utilizadas para convertir las direcciones lineales (virtuales) en direcciones físicas. Implementa una gestión de la memoria ampliamente independiente de la plataforma sobre la que se ejecuta. Este modelo no siempre se corresponde con el de la plataforma sobre el cual se ejecuta (ejemplo, el anteriormente visto procesador i386). Es tan sumamente extenso el modelo de paginación en Linux que se hace imposible de abordar. No obstante, podemos consultar en el archivo fuente mm/memory.c la gestión de las tablas de página (las encargadas de realizar la traducción entre dos tipos de direcciones). Las funciones dependientes de la arquitectura se definen en asm/potable.h

3.17 SISTEMA OPERATIVO MEMORIA

WINDOWS:

COMO

GESTIONA

LA

Memoria en Win32 Cuando un proceso se ejecuta, el sistema establece un espacio de direcciones virtuales propio de 32 bits, que permite habilitar un espacio de hasta 4 gigabytes de memoria. Éste está formado por la suma de la memoria RAM instalada, más la memoria virtual asignada. Windows es un sistema multiproceso, ya que permite la ejecución de varios procesos a la vez. Por norma general, no todos los procesos caben en memoria a la vez, ya sea porque existan muchos procesos, como que el tamaño de éstos sea demasiado grande. Cuando esto sucede, Windows alterna la permanencia de éstos en memoria sacando unos y poniendo otros para que todos puedan ejecutarse. Utiliza la memoria virtual asignada a cada proceso para guardar los datos cada vez que se saca de la memoria. A éste cambio entre memoria física y memoria virtual se le conoce como Swapping. Para aumentar la velocidad, el cambio no se realiza byte a byte, sino página a página. Cuyo tamaño en Windows es de 4 KB. De ahí que toda la memoria virtual y física esté paginada. Memoria virtual en forma de páginas, y memoria física en forma de marcos de página.

80

3.17.1

Espacios de direcciones virtuales

Una dirección virtual no es una dirección física que apunte a una posición de la memoria principal, sino una dirección utilizada por el sistema para acceder a una determinada página de la tabla de páginas de un proceso. Utilizando posteriormente diferentes algoritmos para traducir esa dirección virtual, el sistema puede acceder a la memoria física donde está contenida la información del proceso. Esto permite que no podamos acceder a las posiciones de otros procesos porque no es posible hacer referencia a dichas posiciones. Cuando un proceso es movido de la memoria física a la memoria virtual para dejar a otro que haga sus operaciones, el sistema se encarga de modificar la tabla de páginas del proceso afectado ya sea para quitar referencias a memoria (cuando sacamos un proceso de ella), o para asignar nuevas direcciones (introduce el proceso en memoria). De ahí que sea imposible acceder a la memoria de otro proceso. 3.17.2 Estructura de la memoria

La estructura de la memoria en Windows es en forma de árbol, en el cual se definen claramente 3 partes: • Directorio de páginas (Page Directory): Cada proceso en ejecución, dispone de un solo directorio de páginas. Se trata de una tabla con 1024 entradas que almacena los punteros a las tablas de página. • Tabla de páginas (Page Table): Cada tabla de página es a su vez otra tabla que contiene otras 1024 entradas que ya apuntan a las propias páginas. • Página (Page Frame): Cada página es un bloque de 4 KB donde se almacenan los datos de cada proceso. Un esquema quedaría así:

Figura 46: Estructura de la memoria
Fuente: http://www.neo-tech.es/wp/doc/presentacion-erc.pdf

Más sencillo representarlo como una tabla de n filas (de 0 a 4.xxx.xxx.xxx) que representan páginas.

81

Tabla 16. Titulo: Rangos de páginas

Fuente: http://www.neo-tech.es/wp/doc/presentacion-erc.pdf

3.17.3
• • •

Página: Nº de la página

Rango de direcciones virtuales: Rango de direcciones virtuales que componen la página. Va desde la dirección X hasta la dirección X + 4096 (4 KB). Rango de direcciones físicas: donde está almacenada la página. Puede estar en memoria RAM o en memoria virtual. Almacenado en... :indica donde está almacenada la página. Estado de las páginas

3.17.4

Las páginas pueden estar en uno de los siguientes estados: • Libre: Una página libre no puede ser accedida por ningún proceso, pero sí puede ser reservada o encargada. • Reservada: Una página reservada es un bloque del espacio de dirección virtual que ha sido fijada para usos futuros. No se puede acceder a una página reservada, ni tiene datos almacenados. Simplemente bloquea el rango y no permite que sea asignado por otras funciones de asignación. • Encargada: Aquella que ya ha sido asignada a un espacio físico, ya sea en memoria física o en memoria virtual. No podemos saber donde está almacenada la página, pues de eso se encarga el sistema y puede que esté constantemente cambiándola de posición, pero lo que sí se sabe es que cuando la necesitemos, ahí lo tendremos

82

UNIDAD IV
GESTIÓN DE ARCHIVOS Y DIRECTORIOS SISTEMA DE ARCHIVOS
4.1 SISTEMAS DE GESTIÓN DE ARCHIVOS

Un sistema de gestión de archivos es aquel sistema software que provee servicios a los usuarios y aplicaciones en el uso de archivos. El único camino que tiene el usuario o la aplicación tiene para acceder a los archivos es a través de un sistema de gestión de archivos. Esto revela para el usuario o programador la necesidad de desarrollar software de propósito especial para cada aplicación y provee al sistema un medio de controlar su ventaja más importante. Estos son los objetivos de un sistema de gestión de archivos: 1. Cumplir con las necesidades de gestión de datos y con los requisitos del usuario, que incluye el almacenamiento de, datos y la capacidad de ejecutar las operaciones en la lista precedente. 2. Garantizar, en la medida de lo posible, que el dato en el archivo es válido. 3. Optimizar el rendimiento, ambos desde el punto de vista del sistema en términos de productividad global, y como punto de vista del usuario en tiempos de respuesta. 4. Para proveer soporte de E/S para una variedad de tipos de dispositivos de almacenamiento. 5. Para minimizar o eliminar la posibilidad de pérdida o destrucción de datos. 6. Para proveer un conjunto estándar de rutinas de E/S. 7. Para proveer soporte de E/S para múltiples usuarios, en caso de sistemas multiusuarios

4.2

SOLUCIÓN AL ALMACENAMIENTO DE LA INFORMACIÓN
La solución es el almacenamiento de la información en discos y otros medios externos en unidades llamadas archivos: – Los archivos deben ser persistentes, es decir que no deben verse afectados por la creación o terminación de un proceso – Los archivos son una colección de datos con nombre – Pueden ser manipulados como una unidad por operaciones como: open, close, create, destroy, copy, rename, list – Los elementos de datos individuales dentro del archivo pueden ser manipulados por operaciones como: read, write, update, insert, delete

83

El “Sistema de Archivos” es la parte del sistema de administración del almacenamiento responsable, principalmente, de la administración de los archivos del almacenamiento secundario Es la parte del sistema operativo responsable de permitir “compartir controladamente” la información de los archivos

4.3
• • •

OPERACIONES QUE PUEDEN REALIZAR LOS USUARIOS EN LOS ARCHIVOS
Los usuarios deben poder crear, modificar y borrar archivos Se deben poder compartir los archivos de una manera cuidadosamente controlada El mecanismo encargado de compartir los archivos debe proporcionar varios tipos de acceso controlado: – Ej.: “Acceso de Lectura”, “Acceso de Escritura”, “Acceso de Ejecución”, varias combinaciones de estos, etc. Se debe poder estructurar los archivos de la manera más apropiada a cada aplicación. Los usuarios deben poder ordenar la transferencia de información entre archivos Se deben proporcionar posibilidades de “respaldo” y “recuperación” para prevenirse contra: – La pérdida accidental de información – La destrucción maliciosa de información Se debe poder referenciar a los archivos mediante “Nombres Simbólicos”, brindando “Independencia de Dispositivos”. En ambientes sensibles, el sistema de archivos debe proporcionar posibilidades de “Cifrado” y “Descifrado” El sistema de archivos debe brindar una interface favorable al usuario: • Debe suministrar una “visión lógica” de los datos y de las funciones que serán ejecutadas, en vez de una “visión física”. • El usuario no debe tener que preocuparse por: – Los dispositivos particulares – Dónde serán almacenados los datos – El formato de los datos en los dispositivos – Los medios físicos de la transferencia de datos hacia y desde los dispositivos

4.4
• •

MANEJO DE ARCHIVOS
Un “Archivo” es un conjunto de registros relacionados El “Sistema de Archivos” es un componente importante de un sistema operativo y suele contener: – “Métodos de acceso” relacionados con la manera de acceder a los datos almacenados en archivos – “Administración de archivos” referida a la provisión de mecanismos para que los archivos sean almacenados, referenciados, compartidos y asegurados – “Administración del almacenamiento auxiliar” para la asignación de espacio a los archivos en los dispositivos de almacenamiento secundario

84

“Integridad del archivo” para garantizar la integridad de la información del archivo El sistema de archivos está relacionado especialmente con la administración del espacio de almacenamiento secundario, fundamentalmente con el almacenamiento de disco. Una forma de organización de un sistema de archivos puede ser la siguiente: – Se utiliza una “raíz ” para indicar en qué parte del disco comienza el “directorio raíz ” – El “directorio raíz ” apunta a los “directorios de usuarios” – Un “directorio de usuario” contiene una entrada para cada uno de los archivos del usuario – Cada entrada de archivo apunta al lugar del disco donde está almacenado el archivo referenciado Los nombres de archivos solo necesitan ser únicos dentro de un directorio de usuario dado. El nombre del sistema para un archivo dado debe ser único para el sistema de archivos. En sistemas de archivo “jerárquicos” el nombre del sistema para un archivo suele estar formado como el “nombre de la trayectoria” del directorio raíz al archivo –

Figura 47: Un árbol arbitrario por usuario
Fuente: http://www.ibiblio.org/pub/linux/docs/LuCaS/Tutoriales/doc-openldap-samba-cupspython/html/imagenes/openldap-LDAP_directory_tree_traditional_naming.png

4.4.1 • • •

Características para el usuario

Almacenamiento permanente de información. No desaparecen aunque se apague el computador Conjunto de información estructurada de forma lógica según criterios de aplicación Nombres lógicos y estructurados

85

• • •

No están ligados al ciclo de vida de una aplicación particular Abstraen los dispositivos de almacenamiento físico Se acceden a través de llamadas al sistema operativo o de bibliotecas de utilidades

4.5
• • • • • • •

ATRIBUTOS DEL ARCHIVO

Nombre: la única información en formato legible por una persona Identificación única del archivo y del usuario: descriptor interno del archivo, dueño y grupo del archivo Tipo de archivo: necesario en sistemas que proporciona distintos formatos de archivos Tamaño del archivo: número de bytes en el archivo, máximo tamaño posible, etc. Protección: control de accesos y de las operaciones sobre archivos Información temporal: de creación, de acceso, de modificación, etc. Información de control: archivo oculto, de sistema, normal o directorio, etc.

4.6
4.6.1

VISION FUNCIONAL DEL SISTEMA DE ARCHIVOS
Visión funcional: servicios

 Servicio de nombrado  Identifica un archivo dentro de algún tipo de organización lógica (por ejemplo jerárquica)  Tipo del archivo, que permite saber qué tipo de información contiene  Servicios de almacenamiento  Seguridad, protección y cifrado. Necesario en sistemas multiusuario  Archivos compartidos por varios usuarios  Tratamiento especial según el tipo de archivo (FIFOS, enlaces, dispositivos)  Servicios de directorio  Organización lógica (por ejemplo directorios jerárquicos)  Publicidad de la información 4.6.2 Visión funcional: organización lógica

 En la vida real, las carpetas (archivos) en una oficina se agrupan siguiendo algún criterio establecido por el usuario formando grupos. A estos grupos se les asigna un nombre distinguirlos de otros grupos y para facilitar su localización  Los sistemas de archivos permiten agrupar varios archivos en directorios  Cada directorio tiene un nombre lógico asignado por el usuario  Inicialmente un archivo pertenece a un directorio, aunque sería interesante que un mismo archivo pudiera pertenecer a la vez a varios directorios

86

4.6.3

Visión funcional: directorios

 Directorio único u organización a un solo nivel:  Todos los archivos están almacenados en un solo directorio  Es la estructura más simple y fácil de soportar y entender  No permite clasificar la información de ninguna manera  Si el sistema es multiusuario pueden existir problemas para nombrar los archivos, aunque el espacio de nombres sea muy grande  Directorio por cada usuario u organización a dos niveles:  Se asigna un directorio a cada usuario o a cada tipo de archivo  Existe un directorio de directorios por encima (Directorio maestro)  Existen operaciones para actualizar el Directorio maestro  Las operaciones sobre directorios se reducen al del usuario  Existen problemas para cooperar entre usuarios  Estructura jerárquica en árbol:  Es el caso de UNIX  No hay diferencia entre el directorio raíz y cualquier otro a otro nivel  Para referirse a un archivo completo es necesario saber su nombre y el nombre de todos los directorios, desde la raíz hasta el que lo contiene (camino absoluto), o bien desde el directorio actual (camino relativo)  UNIX puede trabajar con cualquier jerarquía de directorios, pero existe una estandarizada
/

bin

boot

var

etc

usr

lib

home

proc

sbin

mnt

dev

spool log nis ...

X11R6 dict include lib local man sbin share src ...

oscar chan nacho progs mp3 docs

cdrom floppy stick ...

...

Figura 48: Representación de un directorio
Fuente: http://www.softlibre.salta.org.ar/slw/HTML/suse/verzeichnisse_baum.png

4.7
o o o o

OPERACIONES GENÉRICAS SOBRE ARCHIVOS

creat: crea un archivo con un nombre y protección y devuelve un descriptor delete: borra el archivo con un nombre open: abre un archivo con nombre para una(s) operación(es) y devuelve un descriptor close: cierra un archivo abierto con un descriptor

87

o o o o

read: lee datos de un archivo abierto, usando su descriptor, a un almacén en memoria write: escribe datos a un archivo abierto, usando su descriptor, desde un almacén en memoria lseek: mueve el apuntador a relativo_a+ desplazamiento ioctl: permite manipular los atributos de un archivo

4.8

SISTEMAS DE ARCHIVOS
discos duros,

Los sistemas de archivos organizan los datos en los distribuyéndolos en áreas físicas que son fácilmente accesibles. Estos son los principales sistemas de archivos: FAT - HPFS - Sistemas de archivos UNIX - NTFS 4.8.1 FAT

Tabla de asignación de archivos FAT es el sistema más simple conocido por la mayoría de usuarios, también conocido por FAT16 y es el sistema de archivos original presentado con MS-DOS en 1.980. FAT obtiene su nombre porque almacena los detalles de archivos y directorios en una tabla de asignación de archivos (file allocation table FAT) al principio de cada partición. Cada cluster tiene una entrada en la FAT que indica al sistema qué archivos y carpetas hay almacenados. Para los archivos que ocupan más de un cluster, la FAT contiene toda la información para poder reconstruir dicho archivo desde su cadena de cluster y cargarlo en memoria. Debido a la posibilidad de que un archivo pueda ocupar más de un cluster, se produce una rápida y gran fragmentación del disco. El tamaño de los clusters viene determinado por el tamaño de las particiones, de ahí que en discos duros de gran capacidad se desperdicia mucho espacio. Tabla 17. Titulo: Tamaños de Cluster en FAT16 y FAT32 Tamaño de la Partición 128 MB 256 MG 512 MB 1G 2G 8 GB 16 GB 32 GB Tamaño cluster FAT16 2 KB 4 KB 8 KB 16 KB 32 KB Not supported Not supported Not supported

88

Tamaño de la Partición <256 MB 260 MB a 8 GB 8 GB a 16 GB 16 GB a 32 GB >32 GB

Tamaño cluster FAT32 512 bytes 4 KB 8 KB 16 KB 32 KB

Fuente: http://www.webtaller.com/maletin/articulos/sistemas-archivos-seguridad-datos.php

En FAT el nombre de archivo está limitado a 8+3 caracteres, no fue hasta la aparición de Windows 95 con su sistema de archivos FAT ampliado (V-FAT) que desapareció ésta limitación. FAT32 es una versión mejorada que permite crear particiones superiores a 2 GB (hasta 2 terabytes) y es más eficiente en el almacenamiento de archivos. Debido a que FAT32 utiliza cluster más pequeños que FAT16, a igual tamaño de partición, FAT32 aprovecha mejor el espacio del disco duro. 4.8.2 HPFS

HPFS o sistemas de archivos de alto rendimiento se encuentran principalmente en los ordenadores tipo OS/2 aunque su desarrollo original fue hecho por Microsoft. Este sistema de archivos es mucho más seguro, estable y fiable que los FAT. Estos acceden a los datos del disco duro a través de un búfer de alta velocidad (caché) y es capaz de soportar varias particiones activas al mismo tiempo. En HPFS los nombres de archivo pueden contener hasta 25 4.8.3 SISTEMAS DE ARCHIVOS UNIX

El sistema de archivos UNIX es totalmente diferente de los que estamos viendo, solo es posible acceder a los datos UNIX con otros sistemas de archivos UNIX o con programas adicionales especiales (NFS-Server) o servidor de sistema de archivos de red. Estos sistemas no tienen limitación en la longitud de los nombres de archivos, no dividen el disco duro en bloques como el sistema FAT y son muy estables. 4.8.4 NTFS

El sistema de archivos NTFS ya es conocido por los usuarios de Windows NT y es el sistema de archivos nativo de Windows XP y en él vamos a detenernos dada la importancia e interés en nuestro nuevo sistema operativo. Con este sistema abandonamos definitivamente las FAT ya que pese a sus mejoras (V-FAT y FAT32) apenas si cumple los requisitos de un sistema de archivos profesional que pueda ser utilizado en servidores.

89

Recordemos que los sistemas de archivos para sistemas operativos multiusuarios y servidor precisan de derechos de acceso avanzados tanto para usuarios individuales como avanzados. Además NTFS permite particiones de disco mayores que las FAT (4 GB), siendo fundamental para el uso de servidores, y es compatible con los métodos RAID (1 a 5) que aumentan la velocidad de acceso y sirven para las copias de datos mediante los discos duros espejo. NTFS distingue mayúsculas de minúsculas en los nombres largos de archivos y directorios permitiendo además el uso de caracteres especiales como los acentos (estándar UNICODE) Las particiones NTFS son fácilmente recuperables ante un fallo del sistema al contrario de lo que ocurre con las FAT y además son menos propensas a la fragmentación. La velocidad de un sistema NTFS es muy apreciable si es utilizado con controladores SCSI de 32 bits, ya que es capaz gracias a su acceso asíncrono a los datos de desplazar los procesos de lectura y escritura a las colas de espera.

Figura 49: Arquitectura NTFS
Fuente: http://keppanet.netfirms.com/keppanet/opersyst/ntfsinfo/arctectu.gif

CÓMO ORGANIZA NTFS LOS DATOS NTFS no utiliza bloques fijos como lo hace FAT (solamente un bloque lo es y éste contiene parámetros BIOS establecidos por el hardware) el resto de archivos pueden estar en cualquier parte del disco duro, es esto lo que determina que la partición NTFS sea más segura ante posibles fallos del sistema. Físicamente NTFS también divide el disco duro en clusters.

90

El tamaño del cluster lo establece NTFS automáticamente en función del tamaño de la partición aunque también puede ser configurado manualmente por el usuario en el momento del formato. En la organización de archivos NTFS juega un papel fundamental la tabla principal de archivos (MTF), ésta tabla contiene para cada archivo un registro (registro MTF) que contiene a su vez los atributos de archivo y los datos sobre qué partes del archivo se pueden encontrar en según qué clusters del disco duro. Existe una copia de seguridad de la MFT que en caso de error del disco duro puede utilizarse para su reconstrucción y tanto la MTF como su copia pueden encontrarse en cualquier lugar del disco duro ya que son tratados como lo que son, archivos NTFS completamente normales. El tamaño del registro MFT es de 2 KB y está compuesto de: Encabezado (que contiene datos internos del sistema de archivos) Nombre e información del archivo y sus atributos. Referencia a los sectores donde se encuentran ubicadas las distintas partes del archivo. - Atributos de seguridad avanzados del sistema de archivos NTFS. En NTFS los directorios son tratados como archivos al igual que en la mayoría de sistemas de archivos solo que en NTFS contienen otro atributo, por lo tanto también existe un registro en la MFT del directorio que es guardado como un índice compuesto por el nombre de los archivos y los subdirectorios y un número único de archivos o directorios. Si el índice ocupa menos de 1.44 KB se sitúa directamente en la MFT, para archivos de índices mayores se guardan como si fueran archivos y directorios grandes de modo que en el registro MFT original sólo hay referencias a otros registros MFT que son los que en realidad contienen los datos. Es decir, para cada directorio tenemos un árbol de donde cuelgan los archivos y directorios que contienen. A esto se le denomina árbol binario y permite que el acceso a los datos sea mucho más rápido, recordemos que en la FAT para buscar un archivo primeramente debe examinar por completo la tabla y además no están ordenados.

91

Sign up to vote on this title
UsefulNot useful