Sei sulla pagina 1di 91

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 OPERATIVOS Y LOS SISTEMAS DE


COMPUTADORAS
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
– Decidiendo a qué proceso se le asignan los recursos del CPU y por
cuánto tiempo
o Provee mecanismos para la sincronización y la comunicación entre los
procesos.
o 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 políticas de
planificación.
o Comienza la operación de los dispositivos.
o Permite la comunicación entre dispositivos.

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 Es importante recalcar que los componentes de un sistema operativo deben


interactuar armoniosamente unos con otros.
o 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
al administrador de memoria para que encuentre espacio en RAM, coloque el
programa y registre su localización en RAM.
o Una vez que el programa está en memoria, el administrador del procesador
determina la prioridad y los recursos que le corresponde.
o Mientras el programa ejecuta, los administradores manejan los recursos que
el proceso necesita.
o Cuando el programa termina de ejecutar, los administradores liberaran los
recursos.

1 2 3
Comando Si lee del
Señales Ad.dispositivos Ad.procesador disco
Teclado eléctricas

Hay que leerlo de disco


Encuentre espacio Ad.archivos
o si está ya en memoria
5 en RAM
Cargue el
programa
Ad.memoria 4
Determine
prioridad 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 Unidad de memoria


Celdas Celdas

Dirección Dirección
Zona
0 ROM
0
2.023

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

Encendido POST Carga BIOS Lectura


CMOS

Carga
SO Sector de arranque Carga
Partición activa 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 Operación
Iniciador ROM Test del hardware
Carga del cargador del S.O.
Cargador del S.O. Carga en memoria de componentes del S.O.
Inicialización 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 AÑO AUTOR GESTION DE ARQUITECTURA


PROCESOS
Atlas 50 -60 University of Lotes Monolítico
Manchester
The Universidad de Lotes Modular
Eindhoven
RC4000 Brinch Hansen de S.O. Completo Modular
Regenecentralen
Solo Brinch Hansen de Multiprogramado Modular
Regenecentralen
CTSS MIT Multiprogramado Monolítico
/
tiempo
compartido
Multics MIT Multiprogramado Modular
/
tiempo
compartido
Unix 1969 Ritchie/Thompson Multiprogramado Monolítico
/
tiempo
compartido
Sprite 1984 Lotes Monolítico
Merlin 1984 Multiprogramado Modular
Windows 1985 Microsoft Multiprogramado Modular
NT
Match 1986 Darpa Multiprogramado Monolítico
Amoeba 1994 Distribuido Microkernel
Windows 1995/98 Microsoft Multiprogramado Monolítico
95/98
Coyote 1996 Trinity College Distribuido Modular
Dublin
Exokernel Micro_kernel Monolítico
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

1.13.1 Sistemas en lote

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

1.13.4 Algunos sistemas operativos comerciales

 Windows. Distintos tipos:


– Para servidores: NT Server, 2000 Server, Server 2003, XP
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 Desventajas
 El concepto de máquina virtual  No permite compartición directa
provee protección total de los de los recursos
recursos del sistema ya que cada
máquina virtual está aislada de
las demás máquinas virtuales
 Una máquina virtual es una  El concepto de máquina virtual es
herramienta perfecta para el difícil de implementar debido al
desarrollo e investigación de esfuerzo requerido para proveer
sistemas operativos por ser que una copia exacta de la máquina
el desarrollo se hace en una
máquina virtual en vez de una
máquina física
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 5 Programas de usuario


Nivel 4 Almacenamientos intermedios de e/s
Nivel 3 Manejador de dispositivo de la consola del operador
Nivel 2 Manejo de la memoria
Nivel 1 Planificación del CPU
Nivel 0 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 LOS PROCESOS DESDE LA PERSPECTIVA DEL SISTEMA


OPERATIVO
2.8.1 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 Obtiene el control.
o Salva el estado del proceso interrumpido, generalmente en su
bloque de control de procesos.
o Analiza la interrupción.
o 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 Descripción
SVC Llamada al sistema operativo
Entrada / Salida Cambio de estado de un canal o dispositivo
Externa Evento externo al sistema
De Reinicio Reinicio del procesamiento
De Verificación de Programa Errores de procesos
De Verificación de Máquina 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 Descripción
Equidad 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 Ráfaga CPU


A 1
B 100
C 1
D 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 Tiempo Tiempo Tiempo de Turnaround Tiempo de
llegada de de Finalización Espera
Servicio Comienzo
A 0 1 0 1 1 0
B 1 100 1 101 100 0
C 2 1 101 102 100 101-2=99
D 3 100 102 202 199 102-3=99
Promedio 100 49.50
Fuente: Autor

42
SOLUCIÓN: 2
Tabla 9.
Titulo: Algoritmo FCFS con procesos ordenados por tiempo de servicio

Proceso Tiempo de Tiempo Tiempo Tiempo de Turnaround Tiempo de


llegada de de Finalización Espera
Servicio Comienzo
B 0 100 0 100 100 0
D 1 100 100 200 199 100-1=99
A 2 1 200 201 201- 200-
2=199 2=198
C 3 1 201 202 202- 201-
3=199 3=198
Promedio 174.25 123.50
Fuente: Autor

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 Ráfaga CPU


A 8
B 4
C 9
D 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 Tiempo Tiempo Tiempo de Turnaround Tiempo de
llegada de de Finalización Espera
Servicio Comienzo
A 0 8 0 8 8 0
B 1 4 8 12 12-1=11 8-1=7
C 2 9 17 26 26-2=24 17-2=15
D 3 5 12 17 17-3=14 12-3=9
Promedio 14.25 7.75
Fuente: Autor

Tabla 11.
Titulo: Algoritmo FCFS ejemplo 2
Proceso Tiempo de Tiempo Tiempo Tiempo de Turnaround Tiempo de
llegada de de Finalización Espera
Servicio Comienzo
A 0 8 0 8 8 0
B 1 4 8 12 12-1=11 8-1=7
C 2 9 12 21 21-2=19 12-2=10
D 3 5 21 26 26-3=23 21-3=18
Promedio 15.25 8.75
Fuente: Autor

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 Ráfaga CPU Prioridad


A 8 2
B 4 1
C 9 4
D 5 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 Priori Tiempo Tiempo de Tiempo de Turnaroun Tiempo de
de lleg. dad de Comienzo Finalizaci d Espera
Servicio ón
A 0 2 8 0 8 8 0
B 1 1 4 22 26 26-1=25 22-1=21
C 2 4 9 8 17 17-2=15 8-2= 6
D 3 2 5 17 22 22-3=19 17-3=14
Promedio 16.75 10.25
Fuente: Autor

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 Tiempo de Tiempo de


llegada servicio
P1 0 7
P2 2 4
P3 4 1
P4 5 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 Tiempo Priori Tiempo de Tiemp Tiempo Turna. Tiempo
o de lleg. dad Servicio de de Fin de Espera
Com.
P1 0 7 7 5 3 1 0 4c 0,11,1 2,13,15,1 16-0=16 16-7=9
3,15 6
P2 2 4 4 2 0 2c 2,5 4,7 7-2=5 5-4=1
P3 4 1 1 0 2c 4 5 5-4=1 1-1=0
P4 5 4 4 2 0 2c 7,9 9,11 11-5=6 6-4=2
Promedio 7 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 Tiempo de Tiempo de


llegada servicio
A 0 8
B 1 4
C 2 9
D 3 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 Tiempo Tiempo Tiempo de Turnaround Tiempo de
llegada de de Finalización Espera
Servicio Comienzo
A 0 8 0, 12, 21 3, 15, 23 23 15
B 1 4 3, 15 6, 16 16-1=15 11
C 2 9 6, 16, 23 9, 19, 26 26-2=24 15
D 3 5 9, 19 12,21 21-3=18 13
Promedio 20 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 700 K Partición 3


Partición 2 700 K
400 K
Partición 1
Partición 2
100 K
Sistema
Operativo 400 K

Partición 1
100 K
Sistema
Operativo
0
Figura 25: (a) Particiones fijas en Figura 25: (b) Particiones fijas en
memoria con una cola única de memoria con colas exclusivas para
entrada cada tamaño diferente de la partición
Fuente: Fuente:
http://www.elprisma.com/apuntes/ingenie http://www.elprisma.com/apuntes/ingenie
ria_de_sistemas/sistemasoperativosfunda ria_de_sistemas/sistemasoperativosfunda
mentos/default2.asp 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
Sistema
Operativo Lista de trabajos
2560K Procesos Memoria Tiempo

P1 600K 10
P2 1000K 5
P3 300K 20
P4 700K 8
P5 500K 15
2160K

2560K

56
Ejemplo de una división inicial de memoria y una lista de trabajos.

0 0 0 0 0
Sistema Sistema Sistema Sistema Sistema
operativo operativ operativ operativ operativ
400K 400K 400K 400K 400K
P5
P1 P1 P1 Hueco
900K
1000K 1000K 1000K 1000K Hueco
1000K

P2 Hueco Asignar P4 Termina P4 Asignar P4


Termina
P2 P4 P1 P5

1700K 1700K 1700K


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

(a) (b) (c) (d) (e)


Figura 26: Multiprogramación con particiones variables
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 0
Sistema Sistema
operativ operativ
400K 400K
P5 P5

900K 900K
100k
1000K
Compactación P4
P4

1600K
1700K P3
300k 1900K
2000K
P3 660k
2300K
260k
2560K (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 B C D E
0 8 16 24

1111100
10 1 1 1 1 1 1
1100111
11 1 1 1 1 0 0
0

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 B C D E

0 8 16 24

P 0 5 H 5 3 P 8 6 P 14 4

H 18 2 P 20 6 P 26 3 H 29 3
x
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 de direcciones mediante una memoria
asociativa

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 Desventajas
 Es posible comenzar a ejecutar un  El costo de hardware y software
programa, cargando solo una se incrementa (si la tabla de
parte del mismo en memoria, y el paginas es grande), por la nueva
resto se cargara bajo la solicitud 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
 No es necesario que las paginas  Se deben reservar áreas de
estén contiguas en memoria, por memoria para las PMT de los
lo que no se necesitan procesos procesos. Al no ser fija el tamaño
de compactación cuando existen de estas, se crea un problema
marcos de paginas libres semejante al de los programas
dispersos en la memoria (como asignar un tamaño óptimo
sin desperdicio de memoria, u
"ovearhead" del procesador)
 Es fácil controlar todas las  Aparece el problema de
páginas, ya que tienen el mismo fragmentación interna

69
tamaño
 El mecanismo de traducción de  Al implementar completamente
direcciones (DAT) permite en hardware, resulta
separar los conceptos de espacio problemática cuando la tabla de
de direcciones y espacios de páginas debe ser grande
memoria. Todo el mecanismo es
transparente al usuario
 Se libera al programador de la  La velocidad de acceso a memoria
restricción de programar para un principal es relativamente baja,
tamaño físico de memoria, con lo dado que cada referencia a
que se aumenta su productividad. memoria involucra 2 accesos
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
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 Página más


reciente
F E D C B A 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 Página más


reciente
F E D C B A antigua

El bit se cambia a 0 y se actualiza el tiempo de Página seleccionada para


llegada de la página reemplazo con bit 1
Página más Página más
reciente A F E D C 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

E
E
D D
C C
B
A 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
Segmento Segmento Segmento Segmento 0 (4K)
0 (4K) 0 (4K) 0 (4K) 0 (4K)
(a) (b) (c) (d) (e)
Segmento
Segmento Segmento Segmento Segmento
1 (8K) 7 (5K)
7 (5K) 7 (5K) 7 (5K)
Segmento
Hueco
Hueco 2 (5K)
(3K) Hueco
(3K) (3K)
Segmento Segmento Segmento Segmento
2 (5K) 2 (5K) Segmento 2 (5K) 6 (4K)
2 (5K) Segmento
Segmento 6 (4K) Segmento
Segmento Segmento 5 (4K)
3 (8K)
3 (8K) 3 (8K) Hueco
(4K)
Segmento Hueco
Segmento 5 (4K) Segmento
4 (7K) Segmento 5 (4K) (10K)
4 (7K) Hueco Hueco
(3K) (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 WINDOWS: COMO GESTIONA LA


MEMORIA
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.

3.17.4 Estado de las páginas

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-cups-
python/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 VISION FUNCIONAL DEL SISTEMA DE ARCHIVOS


4.6.1 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 X11R6 oscar cdrom


log dict chan floppy
nis include nacho stick
... lib ...
local progs
man mp3
sbin docs
share
src
... ...

Figura 48: Representación de un directorio


Fuente: http://www.softlibre.salta.org.ar/slw/HTML/suse/verzeichnisse_baum.png

4.7 OPERACIONES GENÉRICAS SOBRE ARCHIVOS


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

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

4.8 SISTEMAS DE ARCHIVOS


Los sistemas de archivos organizan los datos en los discos duros,
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 Tamaño cluster FAT16


128 MB 2 KB
256 MG 4 KB
512 MB 8 KB
1G 16 KB
2G 32 KB
8 GB Not supported
16 GB Not supported
32 GB Not supported

88
Tamaño de la Partición Tamaño cluster FAT32
<256 MB 512 bytes
260 MB a 8 GB 4 KB
8 GB a 16 GB 8 KB
16 GB a 32 GB 16 KB
>32 GB 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.

Eltamañ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