Sunteți pe pagina 1din 79

Instituto Universitario Politécnico Santiago Mariño

Extensión Maturín
Ingeniería de Sistemas

SISTEMAS OPERATIVOS II

Docentes: Alumnos:

Ing. Carlos Ramos Víctor Rincones C. I. 25.978.316

Maturín, 16 de mayo de 2016


INDICE

UNIDAD I: Conceptos Básicos de Sistemas Operativos………………………….7

1.1 Definición………………………………………………………………………………8

1.2 Propósitos de un Sistema Operativo………………………………………………8

1.3 Recursos Administrados por el Sistema Operativo……………………………10

1.4 Máquina Extendida…………………………………………………………………13

1.5 Máquina Jerárquica…………………………………………………………………13

1.6 Tipos de Sistemas Operativos……………………………………………………13

UNIDAD II: Arquitectura del Computador………………………………………….17

2.1 Definición de la Arquitectura del Computador……………………………………18

2.2 Subsistemas de la Arquitectura del Computador………………………………18

2.2.1 CPU…………………………………………………………………………………19

2.2.1.1 Registros…………………………………….…………………………………20

2.2.1.2 Datos……………………………………………………………………………22

2.2.1.3 Instrucciones………………………..…………………………………………22

2.2.2 Memoria…………………………………………………………………………….23

2.2.3 Canales o Buses………………………………………………………………….24

2.2.4 Periféricos………………………………………………………………………….25

2.3 Direccionamiento…………………………………………………………………….26

2.4 Interrupciones………………………………………………………………………28

2.5 PSW…………………………………………………………………………………30
2.6 Manejo de Tiempos en Computadoras……………………………………………31

2.6.1 Relojes……………………………………………………………………………32

2.6.2 Temporizadores…………………………………………………………………32

UNIDAD III: Administración de Memoria…………………………………………33

3.1 Definición de Administración de Memoria………………………………………34

3.2 Jerarquía de Memoria……………………………………………………………....34

3.2.1 Memoria Principal…………………………………………………………………35

3.2.2 Memoria Cache……………………….………………………………………….36

3.2.3 Almacenamiento Secundario……………….……………………………………36

3.2.4 Almacenamiento Terciario………………………………………………………37

3.2.5 Almacenamiento Fuera de Línea……………………………………………….37

3.2.6 Almacenamiento de Red……………………………………………………….38

3.3 Asignación de Memoria…………………………………………………………….38

3.4 Fragmentación…………………………………………………………………….…38

3.5 Técnicas de Gestión de Memoria…………………………………………………39

3.6 Relocalización………………………………………………………………………..40

3.7 Memoria Virtual………………………………………………………………………40

3.8 Tabla de Páginas……………………………………………………………………41

3.9 Page Fault……………………………………………………………………………41

3.10 Algoritmos de Reemplazo de Página…………………………………………....42

3.10.1 Algoritmo FIFO…………………………………………………………………42


3.10.2 Algoritmo Óptimo………………………………………………………………43

3.10.3 Algoritmo LRU…………………………………………………………………...44

3.10.4 Algoritmo de Segunda Oportunidad …………………………………………45

3.10.5 Algoritmo NRU…………………………………………………………………45

3.10.6 Algoritmo LFU……………………………………………………………………46

3.10.7 Aging………………………………………………………………………………47

3.10.8 Algoritmo MFU………………………………………………………………….48

3.11 Overlays……………………………………………………………………………49

3.12 Swapping………………………………….………………………………………49

3.13 Carga Dinámica……………………………………………………..……………49

3.14 Enlace Dinámico…………………………………………………………………50

UNIDAD IV: Administración de CPU………………………………………………51

4.1 Definición de CPU…………………………………………………………………52

4.2 ¿Por qué hablamos de Planificación de CPU?.................................................53

4.3 Transición entre Estados de Procesos…………………………………………...53

4.3.1 Estado de un Proceso……………………………………………………………53

4.4 ¿Qué es el Planificador?.........................................................................……55

4.5 Dispatcher……………………………………………………………………………55

4.6 PSW (PCB)…………………………………………………………………………55

4.7 Cambio de Contexto………………………………………………………………..57

4.7.1 ¿Cómo funciona el Cambio de Contexto?.....................................................57


4.7.2 Implicaciones de que el Cambio de Contexto sea lento……………………...58

4.8 Planificación Apropiativa……………………………………………………………58

4.9 Planificación No Apropiativa………………………………………………………58

4.10 Algoritmos de Planificación de un solo Proceso………………………………58

4.10.1 First Come, First Served (FCFS)………………………………………………58

4.10.2 Shortest Job First (SJF)…………………………………………………………59

4.10.3 Prioridad…………………………………………………………………………61

4.10.4 Round Robin……………………………………………………………………..62

4.10.5 Planificación mediante colas multinivel………………………………………63

4.11 Starvation…………………………………………………………………………64

4.12 Algoritmos de Planificación de Múltiples Procesos……………………………64

4.12.1 Planificación en Pandilla………………………………………………………64

4.12.2 Asignación en Procesador Dedicado…………………………………………64

4.12.3 Planificación Dinámica…………………………………………………………..64

UNIDAD V: Administración de Dispositivos………………………………………65

5.1 Dispositivos de Entrada y Salida…………………………………………………66

5.2 Canales…………………………………………………………………………...…66

5.3 Unidad de Control…………………………………………………….……………67

5.4 Controlador de Tráfico de E/S……………………………………………………67

5.5 Asignación de los Dispositivos a los Procesos………………………………….67

5.6 Spooling………………………………………………………………………………68
5.7 Dispositivos Virtuales……………………………………………………………….69

5.8 Buffers………………………………………………………………………………69

UNIDAD VI: Administración de Información………………………………………70

6.1 Archivo…………………………....………………………………………………...71

6.2 Sistema de Archivo……………………………………………………….…………71

6.3 Manejo de Datos……………………………………………………………………71

6.4 Directorios……………………………………………………………………………72

6.4.1 Operaciones a realizar con el Directorio.……………..………………………72

6.4.2 Estructura de Directorios…………………………………………………………73

6.5 Archivos Simbólicos………………………………………………………………..74

6.6 Verificación de Control de Acceso…………………………………………………74

6.7 Organización de Archivos…………………………………………………………76

6.7.1 Criterios para escoger una organización de archivos…………………………78

6.8 Métodos de Acceso…………………………………………………………………78

6.9 Estrategias de Allocation……………………………………………………………79


UNIDAD I: CONCEPTOS BÁSICOS DE SISTEMAS OPERATIVOS

En esta unidad se tocarán aspectos básicos relacionados a los sistemas


operativos, como su definición y propósito. Así como también se definirán los
recursos administrados por el mismo, como lo son la memoria, procesador, los
periféricos y la información. Por otra parte, también se hablará sobre los conceptos
maquina jerárquica y extendida, y de los distintos tipos de sistemas operativos.
Particularmente se establecerán distintos puntos de vista sobre su clasificación
presentados por diferentes autores.

7
1.1 Definición de Sistema Operativo:

Es un sistema tipo software que controla la computadora y administra los


servicios y sus funciones como así también la ejecución de otros programas
compatibles con éste. Permite controlar las asignaciones de memoria, ordenar las
solicitudes al sistema, controlar los dispositivos de entrada y salida, facilitar la
conexión a redes y el manejo de archivos. Unos ejemplos de familias de sistemas
operativos son: Windows, Unix, Linux, DOS, Mac OS, etc. Un sistema operativo
permite interactuar no solo con el hardware de computadoras sino también con
teléfonos celulares, PDAs, etc. y ejecutar programas compatibles en éstos.

William Stallings conceptualiza al Sistema Operativo como “programa que


controla la ejecución de aplicaciones y programas y que actúa como interfaz entre
las aplicaciones y el hardware del computador.”

De la misma manera según Silberchatz, el Sistema Operativo se considera


como “un programa que administra el hardware de una computadora. También
proporciona las bases para los programas de aplicación y actúa como
intermediario entre el usuario y el hardware de la computadora.”

1.2 Propósitos de un Sistema Operativo

Según William Stallings se presentan tres propósitos principales de los Sistemas


Operativos:

- Facilidad de uso. Un sistema operativo facilita el uso de un computador.

En la figura 1.1 la manera en la que el sistema operativo actúa como un


puente entre los distintos programas que residen en él, para permitirle al
usuario ejecutar distintas actividades de manera sencilla sin tener que
preocuparse o sin tener que interactuar directamente con el hardware de la
computadora, tarea que volvería más complejo el uso de una computadora.

8
Figura 1.1 – Fuente: Silberchatz, Fundamentos de los Sistemas Operativos

- Eficiencia. Un sistema operativo permite que los recursos de un sistema de


computación se puedan utilizar de una manera eficiente.

En la figura 1.2 observamos un esquema donde se encuentra el CPU con


todos sus compontes, la memoria principal y el módulo de E/S. En éste
esquema se visualiza cómo están interconectados todos los elementos. En
la memoria principal se contienen las instrucciones que son enviadas al
CPU para ser ejecutadas utilizando los canales de conexión, denominados
buses del sistema, para luego presentarle algún resultado al usuario
utilizando el módulo de entrada/salida.

9
Figura 1.1 – Fuente: Sistemas Operativos, William Stallings

- Capacidad para evolucionar. Un sistema operativo se debe construir de tal


forma que se puedan desarrollar, probar e introducir nuevas funciones en el
sistema sin interferir con su servicio.

1.3 Recursos Administrados por un Sistema Operativo:

 Procesadores: es el hardware dentro de una computadora u otros


dispositivos programables, que interpreta las instrucciones de un programa

10
informático mediante la realización de las operaciones básicas aritméticas,
lógicas y de entrada/salida del sistema.
El recurso más importante en el sistema de computación es el
procesador central. Sin acceso al CPU los programas no pueden
ejecutarse. La estrategia más simple para asignar este recurso sería
asignarlo a un trabajo de usuario hasta que finalice. Esta estrategia es
usada en muchos computadores. Sin embargo la mayoría de los programas
gastan más de la mitad de su tiempo esperando que terminen operaciones
de Entrada/Salida. Esto nos lleva a tratar de compartir el tiempo del CPU
entre varios usuarios, lo cual implica un mecanismo más complejo que nos
permita utilizar eficientemente el tiempo del procesador y explotar el
paralelismo existente con las operaciones de Entrada/Salida.

 Memoria: es donde se almacenan temporalmente tanto los datos como los


programas que la unidad central de procesamiento (CPU) está procesando
o va a procesar en un determinado momento. Por su función, la MP debe
ser inseparable del microprocesador o CPU, con quien se comunica a
través del bus de datos y el bus de direcciones. El ancho del bus determina
la capacidad que posea el microprocesador para el direccionamiento de
direcciones en memoria.Esta clase de memoria es volátil, es decir que
cuando se corta la energía eléctrica, se borra toda la información que
estuviera almacenada en ella.

Un segundo recurso que es escaso en la mayoría de los


computadores es la memoria principal. Un programa se puede ejecutar
solamente si tiene asignada la memoria física que necesita, ya que el
procesador accede a las instrucciones y los datos que se encuentran en
esa memoria física. Si el sistema operativo soporta la ejecución simultánea
de varios trabajos entonces la memoria está compartida entre esos varios
trabajos. En estos casos el S.O. debe asignar eficientemente la memoria a
esos trabajos, evitando desperdicios.

11
 Periféricos: Se considera periférico al conjunto de dispositivos que sin
pertenecer al núcleo fundamental de la computadora, formado por la unidad
central de procesamiento (CPU) y la memoria central, permitan realizar
operaciones de entrada/salida (E/S) complementarias al proceso de datos
que realiza la CPU.

La mayoría de los dispositivos periféricos se asignan a un solo


usuario, no se comparten entre varios usuarios. Esta situación puede ser
muy ineficiente en el caso de algunos dispositivos tales como la impresora,
si el trabajo al que fuese asignado este dispositivo tuviese un tiempo largo
de ejecución. Por otra parte, los dispositivos de acceso directo son
compartidos entre los usuarios a través del sistema de archivos y pueden
ocurrir demoras derivadas del uso compartido que pudieran ser intolerables
en un momento dado.
En la figura 1.3 podemos claramente observar como cada dispositivo tiene
su controlador específico lo cual permite al sistema operativo la
administración de las distintas funcionalidades de cada periférico,
permitiendo una interacción fluida entre el CPU, RAM y dispositivos de E/S.

Figura 1.3 componentes de una computadora moderna – Fuente:


Fundamentos de los Sistemas Operativos, Silberchatz

12
 Información: La información es un conjunto organizado de datos
procesados, que constituyen un mensaje que cambia el estado de
conocimiento del sujeto o sistema que recibe dicho mensaje.

1.4 Concepto Máquina Extendida: es el sistema operativo que funciona sobre el


hardware como intérprete de órdenes programadas que le permiten controlar y
administrar de forma autónoma y dinámica, y a la vez presenta una interfaz de
usuario que se comunica y le permite al usuario interactuar con el hardware.

1.5 Concepto Máquina Jerárquica: es división jerárquica en los sistemas


operativos, el primero de los cuales fue denominado THE (Technische
Hogeschool, Eindhoven), de Dijkstra, que se utilizó con fines diáticos. Se puede
pensar también en esto sistemas como si fueran multicapa. La principal ventaja
del enfoque de capas es la modularidad. Las capas se escogen de modo que cada
una utilice sólo funciones y servicios de capas de los niveles inferiores. Una capa
no necesita saber cómo se han implementado dichas operaciones; sólo necesita
saber qué hacen.

1.6 Tipos de Sistemas Operativos:

Jesús Camazón clasifica los sistemas operativos atendiendo a varios criterios


como son: el número de usuarios, el número de procesos, el número de
procesadores y el sistema informático o el tipo de dispositivo utilizado:

El número de usuarios:

- Sistemas Operativos Monousuario: Un único usuario utiliza el sistema


operativo al mismo tiempo.

- Sistemas Operativos Multiusuario: varios usuarios acceden al sistema


operativo y utilizan los recursos del ordenador simultáneamente, ya sea por
medio de terminales locales o remotos.

13
El número de procesos o tareas:

- Sistemas Operativos Monotarea o Monoprogramación: solamente se puede


ejecutar un proceso a la vez.
- Sistemas Operativos Multitarea o Multiprogramación: varios procesos se
ejecutan a la vez.

El número de procesadores:

- Sistemas Operativos Monoprocesador: sólo hay un procesador en el


ordenador.

- Sistemas Operativos Multiprocesador: hay varios procesadores en el


ordenador

El sistema informático o el tipo de dispositivo utilizado:

- Sistemas Operativos para supercomputadoras y computadoras centrales


(Mainframes): estos sistemas están orientados al procesamiento por lotes
(procesamiento de trabajos sin que actúe un usuario), a transacciones
(muchas peticiones de poco tamaño) y en tiempo compartido (varios
usuarios ejecutando trabajos al mismo tiempo.

- Sistemas Operativos para servidores: se encargan de dar servicios a través


de la red.

- Sistemas Operativos para ordenadores personales: los sistemas operativos


que se utilizan para este tipo de ordenadores tienen que dar buen soporte
al usuario para realizar tareas básicas.

- Sistemas Operativos para dispositivos de bolsillo: los sistemas operativos


para este tipo de dispositivos cada vez son más sofisticados debido a que
continuamente incorporan nuevas funcionalidades.

14
- Sistemas Operativos para dispositivos integrados: también se conocen
como sistemas embebidos o incrustados. Estos dispositivos se encuentran
integrados en televisiones, coches, móviles, etc.

- Sistemas Operativos para Tarjetas Inteligentes: este tipo de dispositivos


permite la ejecución de cierta lógica programada. Algunas tarjetas sólo
contienen una memoria no volátil, en cambio otras tienen CPU y memoria
volátil (RAM). Sirven como medio de identificación, control de acceso, firma
digital, sistema de pago, etc.

Silberchatz presenta la siguiente clasificación de Sistemas Operativos:

Por su administración de tareas:

- Monotarea: Solamente permite ejecutar un proceso (aparte de los procesos


del propio S.O) en un momento dado. Una vez que empieza a ejecutar un
proceso, continuará haciéndolo hasta su finalización y/o interrupción. Por
ejemplo cuando la computadora está imprimiendo un documento, no puede
iniciar otro proceso ni responder a nuevas instrucciones hasta que se
termine la impresión.
- Multitarea: Es capaz de ejecutar varios procesos al mismo tiempo. Este tipo
de S.O normalmente asigna los recursos disponibles (CPU, memoria,
periféricos) de forma alternada a los procesos que los solicitan, de manera
que el usuario percibe que todos funcionan a la vez, de forma concurrente.

Por su administración de usuarios

- Monousuario: Sólo permite ejecutar los programas de un usuario al mismo


tiempo. Estos tipos de sistemas son muy simples, porque todos los
dispositivos de entrada, salida y control dependen de la tarea que se está
utilizando, esto quiere decir, que las instrucciones que se dan, son
procesadas de inmediato; ya que existe un solo usuario. Y están orientados
principalmente por los microcomputadores.

15
- Multiusuario: Permite que varios usuarios ejecuten simultáneamente sus
programas, accediendo a la vez a los recursos de la computadora.
Normalmente estos sistemas operativos utilizan métodos de protección de
datos, de manera que un programa no pueda usar o cambiar los datos de
otro usuario. Es todo lo contrario a monousuario Este tipo de sistemas se
emplean especialmente en redes. En otras palabras consiste en el
fraccionamiento del tiempo (timesharing).

Por su manejo de recursos:

- Centralizado: Permite usar los recursos de una sola computadora. podemos


encontrar  este tipo  de sistemas operativos  en un entorno  de empresa ,
 en el cual  puede  haber un soporte  multiusuario , las empresas  en
especial  las antiguas  utilizan  una  mainframe  potente  para dar capacidad
 de computo  a muchas terminales  o también  se puede encontrar
 empresas  con abundantes  minicomputadores  para los empleados  que
las necesiten  en sus actividades . uno  de los primeros  modelos  de
ordenadores  interconectados  fue el centralizado  donde todo  el
procesamiento de la organización  se lleva  acabo  en una sola
 computadora  normalmente  un mainframe  y los usuarios  empleaban
 sencillos  ordenadores  personales.

- Distribuido: Permite utilizar los recursos (memoria, CPU, disco,


periféricos...) de más de una computadora al mismo tiempo. Permiten
distribuir trabajos, tareas o procesos, entre un conjunto de procesadores.
Puede ser que este conjunto de procesadores esté en un equipo o en
diferentes, en este caso es trasparente para el usuario. Existen dos
esquemas básicos de éstos. Un sistema fuertemente acoplado esa es aquel
que comparte la memoria y un reloj global, cuyos tiempos de acceso son
similares para todos los procesadores. En un sistema débilmente acoplado
los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta
con su memoria local.

16
UNIDAD II: Arquitectura del Computador

En esta unidad se hablará sobre la arquitectura del computador, principalmente su


definición buscando establecer una diferencia entre el diseño del computador, la
organización y la arquitectura. Por otro lado, se definirán los subsistemas que
componen a la arquitectura del computador, como lo son los canales o buses,
memoria, procesador, y los periféricos. Se busca profundizar un poco en los
aspectos que contiene cada uno de estos subsistemas, por ejemplo, se hablará de
los registros, instrucciones y datos cuando se haga alusión al procesador, y los
tipos de memoria existentes cuando se hable del subsistema de memoria.

Finalmente, se profundizará en aspectos que afectan a los procesos como lo son


las interrupciones, el PSW, direccionamiento y el manejo de tiempo en el
computador.

17
2.1 Arquitectura del Computador

La arquitectura de la computadora se ocupa de la estructura y comportamiento de


la computadora desde el punto de vista del usuario. Incluye los formatos de
información, el conjunto de instrucciones y las técnicas para direccionamiento de
memoria.

El diseño de la computadora se ocupa del diseño del hardware de la computadora.


Una vez que se formulan las especificaciones de la computadora, es tarea del
diseñador desarrollar el hardware para el sistema. El diseño de la computadora se
ocupa de la determinación de qué hardware debe usarse y cómo deben
conectarse las partes.

La organización de la computadora se refiere a la manera en que los componentes


operan y la forma en que se conectan para formar el sistema de la computadora.
Se supone que los diversos componentes están en su lugar y la tarea es investigar
la estructura organizacional para verificar que las partes de la computadora
funcionen como se proponía.

La arquitectura de computadoras se interesa por la estructura y desempeño de los


diferentes módulos funcionales de la computadora y cómo interactúan para
atender las necesidades de procesamiento del usuario. La organización de las
computadoras estudia la manera en que se conectan los componentes de la
circuitería para formar un sistema computacional. El diseño de computadoras
analiza el desarrollo de la circuitería de computadoras, toman en consideración un
cierto conjunto de especificaciones.

2.2 Subsistemas de Arquitectura del Computador

Al más alto nivel, un computador consta del procesador, la memoria y los


componentes de E/S, incluyendo uno o más módulos de cada tipo. Estos
componentes se interconectan de manera que se pueda lograr la función principal
del computador, que es ejecutar un programa.

18
2.2.1 CPU

La parte de la computadora que ejecuta el grueso de las operaciones de


procesamiento se llama unidad de procesamiento central y se denomina CPU. La
CPU está formada por tres partes principales. El conjunto de registros almacena
datos intermedios que se usan durante la ejecución de las instrucciones. La
unidad aritmética lógica (ALU) lleva a cabo las micro-operaciones requeridas para
ejecutar las instrucciones. La unidad de control supervisa la transferencia de
información entre los registros e instruye a la ALU sobre cuál operación ejecutar.

De la misma manera, el CPU está formado por distintos registros que permiten el
almacenamiento de instrucciones durante la ejecución para así poder referenciar
espacios en memoria, llevar el conteo de instrucciones y demás. En la siguiente
figura se visualizan varios de los registros que se encuentran dentro de un CPU:

19
2.2.1.1 Registros

Un procesador incluye un conjunto de registros que proporcionan un tipo de


memoria que es más rápida y de menor capacidad que la memoria principal. Los
registros del procesador sirven para dos funciones:
 Registros visibles para el usuario. Permiten al programador en
lenguaje máquina o en ensamblador minimizar las referencias a
memoria principal optimizando el uso de registros. Para lenguajes de
alto nivel, un compilador que realice optimización intentará tomar
decisiones inteligentes sobre qué variables se asignan a registros y
cuáles a posiciones de memoria principal. Algunos lenguajes de alto
nivel, tales como C, permiten al programador sugerir al compilador qué
variables deberían almacenarse en registros.
 Registros de control y estado. Usados por el procesador para
controlar su operación y por rutinas privilegiadas del sistema operativo
para controlar la ejecución de programas.
Registros visibles para el usuario
A un registro visible para el usuario se puede acceder por medio del lenguaje de
máquina ejecutado por el procesador que está generalmente disponible para todos
los programas, incluyendo tanto programas de aplicación como programas de
sistema. Los tipos de registros que están normalmente disponibles son registros
de datos, de dirección y de códigos de condición.
El programador puede utilizar los registros de datos para diversas funciones. En
algunos casos, son, en esencia, de propósito general y pueden usarse con
cualquier instrucción de máquina que realice operaciones sobre datos. Sin
embargo, frecuentemente, hay restricciones. Por ejemplo, puede haber registros
dedicados a operaciones de coma flotante y otros a operaciones con enteros.
Los registros de dirección contienen direcciones de memoria principal de datos e
instrucciones, o una parte de la dirección que se utiliza en el cálculo de la
dirección efectiva o completa.

20
Estos registros pueden ser en sí mismos de propósito general, o pueden estar
dedicados a una forma, o modo, particular de direccionamiento de memoria. A
continuación, se incluyen algunos ejemplos:
 Registro índice. El direccionamiento indexado es un modo común de
direccionamiento que implica sumar un índice a un valor de base para
obtener una dirección efectiva.
 Puntero de segmento. Con direccionamiento segmentado, la memoria se
divide en segmentos, que son bloques de palabras1 de longitud variable.
Una referencia de memoria consta de una referencia a un determinado
segmento y un desplazamiento dentro del segmento
 Puntero de pila. Si hay direccionamiento de pila visible para el usuario, hay
un registro dedicado que apunta a la cima de la pila. Esto permite el uso de
instrucciones que no contienen campo de dirección, tales como las que
permiten apilar (push) y extraer (pop).

Registros de control y estado


Se emplean varios registros del procesador para controlar el funcionamiento del
mismo. En la mayoría de las máquinas, muchos de ellos no son visibles para el
usuario. A algunos de ellos se puede acceder mediante instrucciones de máquina
ejecutadas en lo que se denomina modo de control o de sistema operativo.
Por supuesto, diferentes máquinas tendrán distintas organizaciones de registros y
utilizarán diferente terminología. A continuación, se proporcionará una lista
razonablemente completa de tipos de registros, con una breve descripción de
cada uno de ellos. Además de los registros RDIRM, RDAM,
RDIE/S y RDAE/S mencionados anteriormente, los siguientes son esenciales para
la ejecución de instrucciones:
 Contador de programa (Program Counter, PC). Contiene la dirección de
la próxima instrucción que se leerá de la memoria.
 Registro de instrucción (Instruction Register, IR). Contiene la última
instrucción leída.

21
Todos los diseños de procesador incluyen también un registro, o conjunto de
registros, conocido usualmente como la palabra de estado del programa (Program
Status Word, PSW), que contiene información de estado. La PSW contiene
normalmente códigos de condición, además de otra información de estado, tales
como un bit para habilitar/inhabilitar las interrupciones y un bit de modo
usuario/supervisor.
2.2.1.2 Datos

Los datos son números y otra información en código binario sobre los que se
realizan operaciones para conseguir los resultados computacionales requeridos.

Los tipos de datos que se encuentran en los registros de las computadoras


digitales pueden clasificarse en algunas de las siguientes categorías: 1) números
que se utilizan en cálculos aritméticos; 2) letras del alfabeto que se utilizan en el
procesamiento de datos, y 3) otros símbolos discretos que se utilizan con
propósitos específicos. Todos los tipos de datos, excepto los números binarios, se
representan en los registros de la computadora en forma de código binario. Esto
es porque los registros están formados de flip-flops y los flip-flops son dispositivos
de dos estados que pueden almacenar solamente grupos de números 1 y 0.

2.2.1.3 Instrucciones

Una instrucción de una computadora es un código binario que especifica una


secuencia de micro-operaciones para la computadora. Los códigos de
instrucciones y los datos se almacenan en memoria. La computadora lee cada
instrucción de la memoria y la coloca en un registro de control. Entonces el control
interpreta el código binario de la instrucción y procede a ejecutarlo mediante una
secuencia de micro-operaciones. Cada computadora tiene un conjunto de
instrucciones único. La capacidad de almacenar y ejecutar instrucciones, el
concepto de programa almacenado, es la propiedad más importante de una
computadora de uso general.

Un código de instrucción es un grupo de bits que instruye a la computadora sobre


cómo ejecutar una operación específica. Por lo general, se divide en partes y cada

22
una tiene una interpretación propia. La parte más básica de un código de
instrucción es su parte de operación. El código de operación de una instrucción es
un grupo de bits que define operaciones como sumar, restar, multiplicar, desplazar
y complementar. El número de bits requeridos para el código de operación de una
instrucción depende de la cantidad total de operaciones disponibles en la
computadora.

Formato de Instrucción

La computadora básica tiene tres formatos de códigos de instrucción, según se


muestra en la figura 5-5. Cada formato tiene 16 bits. La parte del código de
operación de la instrucción contiene tres bits y el significado de los 13 bits
restantes depende del código de operación que se encuentren. Una instrucción de
referencia a memoria utiliza 12 bits para especificar una dirección y 1 bit para
especificar el modo de direccionamiento. Las instrucciones de referencia a
registros se reconocen mediante el código de operación 111 con un 0 en el bit de
la extrema izquierda (bit 15) de la instrucción. Una instrucción de referencia al
registro especifica una operación o una prueba del registro AC. No se necesita
operando memoria, por lo tanto los otros 12 bits se utilizan para especificar la
operación o prueba que se va a ejecutar. De igual forma, una instrucción de
entrada-salida no necesita una referencia a memoria y se reconoce por el código
de operación 111 con 1 en el bit de la extrema izquierda de la instrucción. Los 12
bits restantes se utilizan para especificar el tipo de operación de entrada-salida o
la prueba ejecutada.

2.2.2 Memoria

Una unidad de memoria es un conjunto de celdas de almacenamiento junto con


los circuitos asociados que se necesitan para meter y sacar información del
almacenamiento. La memoria almacena información binaria en grupos de bits que
se denominan palabras. Una palabra en la memoria es una entidad de bits que
introducen o sacan del almacenamiento como una unidad. Una palabra de
memoria es un grupo de números 1 y 0 que puede representar un número, un
código de instrucción, uno o más caracteres alfanuméricos o cualquier otra
23
información en código binario. La estructura interna de una unidad de memoria
está especificada por el número de palabras que contiene y la cantidad de bits en
cada palabra.

Memoria de Acceso Aleatorio

En la memoria de acceso aleatorio (RAM), las celdas de la memoria pueden


accesarse para la transferencia de información en cualquier posición aleatoria
deseada. Esto es, el proceso de ubicar una palabra en la memoria es igual y
requiere la misma cantidad de tiempo, sin importar la ubicación física de las celdas
en la memoria: de ahí el nombre de “acceso aleatorio”.

Memoria de sólo lectura

Como su nombre lo indica, una memoria de sólo lectura (ROM) es una unidad de
memoria que sólo ejecuta la operación de lectura; no tiene la posibilidad de
escritura. Esto implica que la información binaria almacenada en una ROM se
hace permanente durante la producción del hardware de la unidad y no puede
alterarse escribiendo diferentes palabras en ella. En tanto una RAM es un
dispositivo de propósito general cuyo contenido puede alterarse durante el
proceso computacional, una ROM está limitada a leer palabras que están
almacenadas de manera permanente dentro de la unidad.

2.2.3 Canales o Buses

Una estructura de bus consta de un conjunto de líneas comunes, una para cada
bit de un registro, mediante las cuales se transfiere información binaria una a la
vez. Unas señales de control determinan cuál registro selecciona el bus durante
cada transferencia de registro particular.

Una manera de construir un sistema de bus común es con multiplexores. Los


multiplexores seleccionan el registro fuente, cuya información binaria se coloca
después en el bus

24
2.2.4 Periféricos

Las entradas/salidas han sido el huérfano de la arquitectura de computadores.


Históricamente despreciadas por los entusiastas de la CPU, el prejuicio contra las
E/S se institucionaliza en las medidas de rendimiento más ampliamente utilizadas,
el tiempo de CPU. Si un computador tiene el mejor o el peor sistema de E/S en el
mundo no se puede medir por el tiempo de CPU, que por definición ignora las E/S.
El ciudadano de segunda clase que son las E/S es incluso aparente en la etiqueta
“periférico” aplicada a los dispositivos de E/S.

Esta actitud contradice al sentido común. Un computador sin dispositivos de E/S


es como un automóvil sin ruedas – no se puede ir muy lejos sin ellas–. Y aunque
el tiempo de CPU es interesante, el tiempo de respuesta es seguramente una
mejor medida de rendimiento.

Existen tres características que son útiles para organizar esta conglomeración
dispar de dispositivos de E/S:

- Comportamiento: entrada (leer una vez), salida (sólo escribir, no se puede


leer) o almacenamiento (puede ser releído y habitualmente reescrito)
- Compañero: o bien una persona o una máquina está en el extremo del
dispositivo de E/S, introduciendo datos en la entrada o leyendo datos en la
salida
- Frecuencia de datos: la frecuencia máxima a la cual se puede transferir
datos entre el dispositivo de E/S y la memoria principal o CPU.

Utilizando estas características, un teclado es un dispositivo de entrada, utilizado


por una persona, con una frecuencia máxima de datos aproximadamente 10 bytes
por segundo. La figura 9.11 muestra algunos dispositivos de E/S conectados a los
computadores.

25
Dispositivo Comportamiento Compañero Frecuencia de
Datos (KB/s)
Teclado Entrada Humano 0,01
Ratón Entrada Humano 0,02
Entrada de voz Entrada Humano 0,02
Scanner Entrada Humano 200,00
Salida de voz Salida Humano 0,60
Impresora de línea Salida Humano 1,00
Impresora láser Salida Humano 100,00
Pantalla gráfica Salida Humano 30000,00
(CPU a buffer de Salida Humano 200,00
encuadre
Red-terminal Entrada o Salida Máquina 0,05
Red-LAN Entrada o Salida Máquina 200,00
Disco óptico Almacenamiento Máquina 500,00
Figura 9.11 Ejemplo de dispositivos de E/S

2.3 Direccionamiento

Independientemente que una arquitectura sea registro-registro (también llamada


de carga/almacenamiento) o permite que cualquier operando sea una referencia a
memoria, debe definir cuántas direcciones de memoria son interpretadas y cómo
se especifican. Las medidas de direccionamiento presentadas a continuación son
generalmente independientes de la máquina.

Interpretación de las direcciones de memoria.

Las máquinas en ésta sección están direccionadas por bytes y proporcionan


acceso a bytes (8 bits), medias palabras (16 bits) y palabras (32 bits). La mayoría
de las máquinas también proporcionan accesos a dobles palabras (64 bits).

Existen dos convenios diferentes para clasificar los bytes de una palabra. El orden
de bytes, “Little Endian” (Pequeño Endian), coloca el byte cuya dirección es
“x….x00” en la posición menos significativa de la palabra. El orden de bytes “Big

26
Endian (Gran Endian” coloca el byte cuya dirección es “x….x00” en la posición
más significativa de la palabra. En el direccionamiento “Big Endian”, la dirección
de un dato es la dirección del byte más significativo; mientras que en el “Little
Endian”, es la del byte menos significativo. Cuando se opera con una máquina, el
orden de los bytes, con frecuencia, no es importante. Sin embargo, el orden de los
bytes es un problema cuando se intercambian datos entre máquinas con
diferentes ordenaciones.

Modos de direccionamiento

Ésta es la forma en la que las arquitecturas especifican la dirección de un objeto al


que accederán. En las máquinas GPR, un modo de direccionamiento puede
especificar una constante, un registro o una posición de memoria. Cuando se
utiliza una posición de memoria, la dirección real de memoria especificada por el
modo de direccionamiento se denomina dirección efectiva.

En la figura 3.11 se muestran todos los modos de direccionamiento de datos que


se utilizan comúnmente. Los inmediatos o literales se consideran habitualmente un
modo de direccionamiento de memoria (aun cuando el valor que acceden esté en
el flujo de instrucciones), aunque los registros están, con frecuencia, separados.

Los modos de direccionamiento tienen la posibilidad de reducir significativamente


el recuento de instrucciones; también se añaden a la complejidad de construir una
máquina. Por tanto, la utilización de varios modos de direccionamiento es bastante
importante para ayudar al arquitecto a escoger cual incluir. Aunque muchas
medidas de utilización de los modos de direccionamiento son dependientes de la
máquina, otras son prácticamente independientes de la arquitectura de la
máquina.

27
Modo de Ejemplo Significado Cuándo se usa
direccionamiento Instrucción
Registro Add R4, R3 R4<=R4+R3 Cuando un valor está en un
registro
Inmediato o literal Add R4, #3 R4<=R4+3 Para constantes.
Desplazamiento Add R4, 100(R1) R4<=R4+M[100=>R1] Acceso a variables locales
Registro Diferido o Add R4, (R1) R4<=R4+M[R1] Acceso utilizando un
Indirecto puntero o una dirección
calculada
Indexado Add R3, (R1+R2) R3<=R3+M[R1+R2] A veces útil en el
direccionamiento de arrays,
R1=base del array;
R2=cantidad de índices
Directo o Absoluto Add R1, (1001) R1<=R1+M[1001] A veces útil para acceder a
datos estáticos; la
constante que específica la
dirección puede necesitar
ser grande
Indirecto o diferido Add R1, @(R3) R1<=R1+M[M[R3]] Si R3 es la dirección de un
de memoria puntero p, entonces el
modo obtiene *p
Auto-incremento Add R1, (R2)+ R1<=R1+M[R2] Útil para recorridos de
R2<=R2+d arrays en un bucle. R2
apunta al principio del
array; cada referencia
incrementa el R2 en el
tamaño de un elemento, d.
Auto-decremento Add, R1, -(R2) R2<=R2-d El mismo uso que
R1<=R2+M[R2] autoincremento.
Autoincremento/decremento
también puede utilizarse
para realizar una pila
mediante introducir y sacar
(push y pop)
Escalado o Índice Add R1, R1<= Usado para acceder arrays
100(R2)[R3] R1M[100+R2+R3*d] por índice. Puede aplicarse
a cualquier modo de
direccionamiento básico en
algunas máquinas
Figura 3.11 Selección de modos de direccionamiento con ejemplos,
significado y uso. ‘<=’ hace referencia a una asignación, M a un array que se
utiliza como nombre de la memoria, donde M[R1] hace referencia al contenido de
la posición de memoria cuya dirección es el contenido de R1.

28
2.4 Interrupciones

Prácticamente todos los computadores proporcionan un mecanismo por el cual


otros módulos (memoria y E/S) pueden interrumpir el secuenciamiento normal del
procesador. La Tabla 1.1 detalla los tipos más comunes de interrupciones.
Básicamente, las interrupciones constituyen una manera de mejorar la utilización
del procesador.
Por ejemplo, la mayoría de los dispositivos de E/S son mucho más lentos que el
procesador. Supóngase que el procesador está transfiriendo datos a una
impresora utilizando el esquema de ciclo de instrucción de la Figura 1.2. Después
de cada instrucción de escritura, el procesador debe parar y permanecer inactivo
hasta que la impresora la lleve a cabo. La longitud de esta pausa puede ser del
orden de muchos miles o incluso millones de ciclos de instrucción. Claramente, es
un enorme desperdicio de la capacidad del procesador.

Tabla 1.1. Clases de interrupciones.

De programa Generada por alguna condición que se produce como resultado de


la ejecución de una instrucción, tales como un desbordamiento aritmético, una
división por cero, un intento de ejecutar una instrucción de máquina ilegal, y las
referencias fuera del espacio de la memoria permitido para un usuario.
Por temporizador Generada por un temporizador del procesador. Permite al
sistema operativo realizar ciertas funciones de forma regular.
De E/S Generada por un controlador de E/S para señalar la conclusión normal de
una operación o para indicar diversas condiciones de error.
Por fallo del hardware Generada por un fallo, como un fallo en el suministro de
energía o un error de paridad en la memoria.

Gracias a las interrupciones, el procesador puede dedicarse a ejecutar otras


instrucciones mientras que la operación de E/S se está llevando a cabo.

29
Presentemos la siguiente situación, el programa de usuario alcanza un punto en el
que hace una llamada al sistema que consiste en una llamada de ESCRITURA. El
programa de E/S que se invoca en este caso consta sólo del código de
preparación y el mandato real de E/S. Después de que se ejecuten estas pocas
instrucciones, se devuelve el control al programa de usuario. Mientras tanto, el
dispositivo externo está ocupado aceptando datos de la memoria del computador
e imprimiéndolos. La operación de E/S se lleva a cabo de forma concurrente con
la ejecución de instrucciones en el programa de usuario.
Cuando el dispositivo externo está listo para ser atendido, es decir, cuando está
preparado para aceptar más datos del procesador, el módulo de E/S de este
dispositivo externo manda una señal de petición de interrupción al procesador. El
procesador responde suspendiendo la ejecución del programa actual, saltando a
la rutina de servicio específica de este dispositivo de E/S, conocida como
manejador de interrupción, y reanudando la ejecución original después de haber
atendido al dispositivo. Los códigos de condición (también llamados indicadores)
son bits cuyo valor lo asigna normalmente el hardware de procesador teniendo en
cuenta el resultado de las operaciones.

2.5 PSW (PCB)

Program Status Word (PSW) es un área de la memoria o registro que contiene


información sobre el estado de un programa utilizado por el sistema operativo.
Normalmente incluye un puntero (dirección) a la siguiente instrucción a ejecutarse.
El PSW contiene un campo de error y un código de condición.

La longitud del PSW depende de la arquitectura. En general, el PSW es utilizado


para controlar la ejecución secuencial de instrucciones e indicar el estado del
sistema en relación al programa en ejecución. Almacenando el PSW durante una
interrupción, el estado de la CPU puede ser preservado para una posterior
inspección. Cargando un nuevo PSW o una parte de un PSW, el estado de la CPU
puede ser inicializado o modificado.

30
PCB (Process Control Block) es un registro especial donde el sistema operativo
agrupa toda la información que necesita conocer respecto a un proceso particular.
Cada vez que se crea un proceso el sistema operativo crea el BCP
correspondiente para que sirva como descripción en tiempo de ejecución durante
toda la vida del proceso.

Cuando el proceso termina, su BCP es borrado y el registro puede ser utilizado


para otros procesos. Un proceso resulta conocido para el sistema operativo y por
tanto elegible para competir por los recursos del sistema sólo cuando existe un
BCP activo asociado a él. El bloque de control de proceso es una estructura de
datos con campos para registrar los diferentes aspectos de la ejecución del
proceso y de la utilización de recursos. La información almacenada en un BCP
incluye típicamente algunos o todos los campos siguientes:

 Identificador del proceso (Process Identificator -PID-, de sus siglas en


inglés).
 Estado del proceso. Por ej.: listo, en espera, bloqueado.
 Contador de programa: dirección de la próxima instrucción a ejecutar.
 Valores de registro de CPU. Se utilizan también en el cambio de contexto.
 Espacio de direcciones de memoria.
 Prioridad en caso de utilizarse dicho algoritmo para planificación de CPU.
 Lista de recursos asignados (incluyendo descriptores de archivos y sockets
abiertos).
 Estadísticas del proceso.
 Datos del propietario (owner).
 Permisos asignados.
 Signals pendientes de ser servidos. (Almacenados en un mapa de bits).

2.6 Manejo de Tiempos en Computadoras

La gestión del tiempo de los eventos que se llevan a cabo en el sistema es de


gran importancia para lograr el propósito del sistema operativo de administrar
eficientemente los recursos del computador. Una gran cantidad de eventos en el

31
computador son manejados por tiempo. Para llevar a cabo estos eventos, se hace
uso de relojes y temporizadores.

2.6.1 Relojes

Se refieren a dispositivos con memoria no volátil para registrar la hora del sistema.
Durante el proceso de arranque del sistema lo utiliza para establecer varios
registros o valores del sistema (hora del sistema, registro de tiempos de eventos
en logs)

2.6.2 Temporizadores (Timers)

Es la forma en la que se coordinan los eventos en el bus. Los buses utilizan


temporización síncrona o asíncrona. Con temporización síncrona, la presencia de
un evento en el bus está determinada por un reloj. El bus tiene una línea de reloj
en la que se transmite una secuencia de intervalos regulares con duración de uno
a cero. La temporización asíncrona en presencia de un evento en el bus es
consecuencia de que se produzca un evento previo. La temporización es de fácil
implementación, pero es menos flexible que la temporización asíncrona.

32
UNIDAD III: Administración de Memoria

En esta unidad se tocarán los temas relacionados a la memoria y su


administración. Primeramente se establecerá una jerarquía de la memoria
dependiendo de su velocidad, y coste por bit. Luego se establecerá la definición
de los tipos de asignación de memoria, así como conceptos de fragmentación
externa e interna. Posteriormente, se presentarán diferencias entre los diferentes
métodos de gestión de memoria, cuáles son sus ventajas y desventajas mediante
un cuadro comparativo. Una vez ya descritas estas diferencias, existe la
necesidad de hablar del concepto de relocalización, tabla de página, page fault y
demás para, finalmente, poder abordar el tema correspondiente a los algoritmos
de reemplazo de páginas.

33
3.1 Administración de Memoria

El administrador de Memoria se refiere a los distintos métodos y operaciones que


se encargan de obtener la máxima utilidad de la memoria, organizando los
procesos y programas que se ejecutan de manera tal que se aproveche de la
mejor manera posible el espacio disponible.

3.2 La Jerarquía de Memoria

Las restricciones de diseño en la memoria de un computador se pueden resumir


en tres preguntas: ¿cuál es su capacidad? ¿Cuál es su velocidad? ¿Cuál es su
coste?

La pregunta sobre cuánta debe ser su capacidad es algo que no tiene límite. Si se
dispone de una determinada capacidad, probablemente se desarrollarán
aplicaciones que la usarán. La cuestión acerca de la velocidad tiene, hasta cierto
tiempo, una respuesta más fácil. Para alcanzar un rendimiento máximo, la
memoria debe ser capaz de mantener el ritmo del procesador. Es decir, según el
procesador va ejecutando instrucciones, no debería haber pausas esperando que
estén disponibles las instrucciones o los operandos. Se debe considerar también
la última pregunta. Para un sistema práctico, el coste de la memoria debe ser
razonable en relación con los otros componentes.

Como se podría esperar, hay un compromiso entre las tres características


fundamentales de la memoria: a saber, coste, capacidad y tiempo de acceso. En
cualquier momento dado, se utilizan diversas tecnologías para implementar los
sistemas de memoria. En todo este espectro de tecnologías, se cumplen las
siguientes relaciones:

 Cuanto menor tiempo de acceso, mayor coste por bit.


 Cuanto mayor capacidad, menor coste por bit.

34
 Cuanto mayor capacidad, menor velocidad de acceso.
Queda claro el dilema al que se enfrenta el diseñador. A él le gustaría utilizar
tecnologías que proporcionen una memoria de gran capacidad, tanto porque se
necesita esa capacidad como porque su coste por bit es bajo. Sin embargo, para
cumplir con los requisitos de rendimiento, el diseñador necesita utilizar memorias
de capacidad relativamente baja con tiempos de acceso rápidos.

La solución a este dilema consiste en no basarse en un único componente de


memoria o en una sola tecnología, sino emplear una jerarquía de memoria. En la
Figura 1.14 se muestra una jerarquía típica. Según se desciende en la jerarquía,
ocurre lo siguiente:

A. Disminución del coste por bit.


B. Aumento de la capacidad.
C. Aumento del tiempo de acceso.
D. Disminución de la frecuencia de acceso a la memoria por parte del
procesador.

Figura 1.14. Jerarquía de Memoria


3.2.1 Memoria Principal

35
La memoria principal, está directamente conectada a la CPU de la computadora.
Debe estar presente para que la CPU efectúe cualquier función. La memoria
principal consta, pues, de la memoria primaria del sistema; contiene los programas
en ejecución y los datos con que operan. Se puede transferir información muy
rápidamente (típicamente en menos de 100 ciclos de reloj) entre un registro del
microprocesador y localizaciones del almacenamiento principal. En las
computadoras modernas se usan memorias de acceso aleatorio basadas en
electrónica del estado sólido, que está directamente conectada a la CPU a través
de buses de direcciones, datos y control.

3.2.2 Memoria Cache

El propósito de la memoria cache es proporcionar un tiempo de acceso a memoria


próximo al de las memorias más rápidas disponibles y, al mismo tiempo, ofrecer
un tamaño de memoria grande que tenga el precio de los tipos de memorias de
semiconductores menos costosas. El concepto se muestra en la Figura 1.16. Hay
una memoria principal relativamente grande y lenta junto con una memoria cache
más pequeña y rápida. La cache contiene una copia de una parte de la memoria
principal. Cuando el procesador intenta leer un byte de la memoria, se hace una
comprobación para determinar si el byte está en la cache. Si es así, se le entrega
el byte al procesador. En caso contrario, se lee e introduce dentro de la cache un
bloque de memoria principal, que consta de un cierto número fijo de bytes, y, a
continuación, se le entrega el byte pedido al procesador. Debido al fenómeno de la
proximidad de referencias, cuando se lee e introduce dentro de la cache un bloque
de datos para satisfacer una única referencia de memoria, es probable que
muchas de las referencias a memoria en el futuro próximo correspondan con otros
bytes del bloque.

36
3.2.3 Almacenamiento secundario

La memoria secundaria requiere que la computadora use sus canales


de entrada/salida para acceder a la información y se utiliza para almacenamiento a
largo plazo de información persistente. Sin embargo, la mayoría de los sistemas
operativos usan los dispositivos de almacenamiento secundario como área de
intercambio para incrementar artificialmente la cantidad aparente de memoria
principal en la computadora (a esta utilización del almacenamiento secundario se
le denomina memoria virtual). La memoria secundaria también se llama de
almacenamiento masivo. Un disco duro es un ejemplo de almacenamiento
secundario.

Habitualmente, la memoria secundaria o de almacenamiento masivo tiene mayor


capacidad que la memoria primaria, pero es mucho más lenta. En las
computadoras modernas, los discos duros suelen usarse como dispositivos de
almacenamiento masivo. El tiempo necesario para acceder a un byte de
información dado almacenado en un disco duro de platos magnéticos es de unas
milésimas de segundo (milisegundos). En cambio, el tiempo para acceder al
mismo tipo de información en una memoria de acceso aleatorio (RAM) se mide en
mil-millonésimas de segundo (nanosegundos).

3.2.4 Almacenamiento terciario

La memoria terciaria es un sistema en el que un robot industrial brazo robótico,


montará, conectará o desmontará (desconectará) un medio de almacenamiento
masivo fuera de línea según lo solicite el sistema operativo de la computadora. La
memoria terciaria se usa en el área del almacenamiento industrial, la computación
científica en grandes sistemas informáticos y en redes empresariales. Este tipo de
memoria es algo que los usuarios de computadoras personales normales nunca
ven de primera mano.

3.2.5 Almacenamiento fuera de línea

37
El almacenamiento fuera de línea: (off-line) es un sistema donde el medio de
almacenamiento puede ser extraído fácilmente del dispositivo de almacenamiento.
Estos medios de almacenamiento suelen usarse para transporte y archivo de
datos. En computadoras modernas son de uso habitual para este propósito
los disquetes, discos ópticos y las memorias flash, incluyendo las unidades USB.
También hay discos duros USB que se pueden conectar rápidamente. Los
dispositivos de almacenamiento fuera de línea usados en el pasado son cintas
magnéticas en muchos tamaños y formatos diferentes, y las baterías extraíbles
de discos Winchester.

3.2.6 Almacenamiento de red

El almacenamiento de red es cualquier tipo de almacenamiento de computadora


que incluye el hecho de acceder a la información a través de una red informática.
Discutiblemente, el almacenamiento de red permite centralizar el “control de
información” en una organización y reducir la duplicidad de la información. El
almacenamiento en red incluye:

 El almacenamiento asociado a red es una memoria secundaria o terciaria


que reside en una computadora a la que otra de éstas puede acceder a
través de una red de área local, una red de área extensa, una red privada
virtual o, en el caso de almacenamiento de archivos en línea, internet.

 Las redes de computadoras son computadoras que no contienen


dispositivos de almacenamiento secundario. En su lugar, los documentos y
otros datos son almacenados en un dispositivo de la red.

3.3 Asignación de Memoria

Asignación de Memoria Contigua: En este esquema de asignación contigua de


memoria, cada proceso está contenido en una única sección contigua de memoria.

Asignación de Memoria No Contigua: En este esquema de asignación, las


partes de un proceso están contenidas en secciones separadas de memoria, de
tal forma que no están de forma contigua.

3.4 Fragmentación

38
Fragmentación Externa: En la memoria del sistema la fragmentación se produce
cuando los procesos asignados han ocupado posiciones no contiguas de memoria
dejando demasiados bloques libres de pequeño tamaño, en los que no "caben"
nuevos procesos.

Fragmentación Interna: Es el fenómeno en el cual hay espacio interno


malgastado debido al hecho de que el bloque de datos cargado es menor que la
partición.

3.5 Técnicas de gestión de memoria.

Técnica Descripción Virtudes Defectos


Particionamiento La memoria principal se Sencilla de Uso ineficiente de la
Fijo divida en particiones implementar, poca memoria, debido a la
estáticas en tiempo de sobrecarga para el fragmentación interna;
generación del sistema. Un sistema operativo debe fijarse el número
proceso se puede cargar máximo de procesos
en una partición con igual o activos
superior tamaño.
Particionamiento Las particiciones se crean No existe Uso ineficiente del
Dinámico de forma dinámica, de tal fragmentación proceso, debido a la
forma que cada proceso se interna; uso más necesidad de
carga en una partición del eficiente de memoria compactación para
mismo tamaño que el principal evitar la
proceso fragmentación externa
Paginación La memoria principal se No existe Una pequeña
sencilla divide en marcos del fragmentación cantidad de
mismo tamaño. Cada externa fragmentación interna.
proceso de divide en
páginas del mismo tamaño
que los marcos. Un
proceso se carga a través
de la carga de todas sus
páginas en marcos
disponibles, no
necesariamente contiguos
Segmentación Cada proceso se divide en No existe Fragmentación

39
Sencilla segmentos. Un proceso se fragmentación externa.
carga cargando todos sus interna; mejora la
segmentos en particiones utilización de la
dinámicas no memoria y reduce la
necesariamente contiguas sobrecarga respecto
al particionamiento
dinámico.
Paginación con Exactamente igual que la No existe Sobrecarga por la
memoria virtual paginación sencilla, fragmentación gestión compleja de la
excepto que no es externa; mayor grado memoria
necesario cargar todas las de
páginas de un proceso. Las multiprogramación;
páginas no residente se gran espacio de
traen bajo demanda de direcciones virtuales
forma automática
Segmentación Exactamente igual que la No existe Sobrecarga por la
con memoria segmentación, excepto que fragmentación gestión compleja de la
virtual no es necesario cargar interna; mayor grado memoria
todos los segmentos de un de
proceso. Los segmentos no multiprogramación;
residentes se traen bajo gran espacio de
demanda de forma direcciones virtuales;
automática soporte a protección
y compartición

3.6 Relocalización

En los sistemas con memoria virtual, los programas durante su ejecución pueden
salir por un tiempo de la memoria y luego regresar, de modo que no pueden
colocarse en el lugar que ocupaban previamente. Por ello debe ser posible que
residan en diferentes partes de la memoria en diferentes momentos. Así, la
gestión de memoria en el sistema operativo debe ser capaz de trasladar los
programas en memoria y manejar referencias a la memoria y las direcciones en el
código del programa para que siempre apunten a la ubicación correcta. La unidad
de gestión de memoria virtual también debe hacer frente a la concurrencia.

40
3.7 Memoria Virtual

La memoria virtual combina la RAM del equipo con espacio temporal en el disco
duro. Cuando queda poca RAM, la memoria virtual mueve datos de la RAM a un
espacio llamado archivo de paginación. Al mover datos al archivo de paginación y
desde él, se libera RAM para que el equipo pueda completar la tarea.

3.8 Tabla de Páginas

La tabla de páginas muestra la ubicación del marco por cada página del proceso.
Dentro del programa, cada dirección lógica está formada por un número de página
y un desplazamiento dentro de la página. A continuación se muestra en esquema
de procesos con sus respectivas tablas de página:

3.9 Page Fault

Cuando un proceso requiere una página que no está en memoria se genera un


fallo de página. La gran mayoría de las dificultades de la paginación por demanda
se deben a cómo los fallos de página son tratados.

En primer lugar, para que los fallos de página puedan ser tratados correctamente
necesitamos un sistema que sea capaz de reiniciar una instrucción, de esta
manera pasará lo siguiente:

 Una instrucción necesita una página que no está en memoria.


 Se genera fallo de página (No se puede satisfacer la instrucción).
 Se carga a memoria la página requerida.
 Se reinicia la instrucción

41
3.10 Algoritmos de Reemplazo de Páginas

Si incrementamos la multiprogramación, estamos sobrecargando nuestra memoria


o sobreasignado, lo que puede eventualmente que nos quedemos falta de marcos
o frames disponibles para cargar las páginas. En estos casos, la solución más
común es la sustitución de páginas. En este sentido el procedimiento de
reemplazo es:

1. Encontrar la ubicación en disco de la página deseada.


1. Buscar un marco libre:
2. si hay un frame o marco libre, utilizarlo.
3. De lo contrario, utilizar un Algoritmo de Reemplazo de Página con el
fin de seleccionar un marco víctima.
4. Escribir la página víctima en disco; ajustar las tablas de marcos y
páginas.
2. Traer la página al nuevo frame libre. Actualizar la tabla de página.
3. Reiniciar el proceso de usuario.

Para implementar cualquier algoritmo que realice la elección del marco víctima (y
por supuesto de la página que será enviada a memoria secundaria) se tienen
ciertas consideraciones:

 Para referirnos a una página se habla de su número de página, por ejemplo


página 1, p1 o simplemente 1.
 Por otra parte, siempre que se haya referenciado a una página e
inmediatamente se referencie de nuevo, no hay fallo de página.
 Se debe conocer el número de frames disponibles. A mayor cantidad de
marcos, menos fallas de página.

42
3.10.1 Algoritmo FIFO: El algoritmo FIFO reemplaza las páginas de la forma que
el primero que entra es el primero que sale. Asocia a cada página el instante en el
que se trajo a la memoria, así cuando se tenga que reemplazar una página, se
elige la más antigua.

En la imagen vemos 19 páginas entrando en una memoria de tres frames. El


resultado obtenido fueron 15 fallos de página.

3.10.2 Algoritmo Óptimo: El Algoritmo Óptimo, también conocido como OPT se


originó luego del descubrimiento de la Anomalía de Belady en la búsqueda de un
algoritmo mucho más óptimo. El algoritmo elige la página de la memoria que vaya
a ser referenciada más tarde, las páginas se rotulan con el número de
instrucciones que se ejecutarán antes de que se haga la primera referencia a ella
y, cuando se presenta un fallo de página, se reemplaza la que más instrucciones
falten para referenciarla para así ir aplazando lo más que se pueda los fallos de
página. Por desgracia, este algoritmo es irrealizable, ya que no hay una forma de
predecir qué páginas referenciará un proceso en el futuro.

En la imagen vemos la cadena de referencias para una página y cómo se usa la


memoria (en este caso de 3 frames o marcos). Se comienza tal como el algoritmo
FIFO ingresando las páginas a la memoria; el primer caso de memoria llena
sucede cuando entra la página 1 y quiere entrar la página 2. La víctima debe ser

43
decidida de tal forma que la página no sea referenciada más o sea referenciada
mucho después. En este caso la página 5 no es referenciada más, por lo que es
reemplazada por la página 2. El algoritmo genera finalmente 7 fallos de página,
versus por ejemplo los 10 fallos que FIFO genera.

Como es un algoritmo que no se puede poner en práctica, se ejecuta en


simuladores en los cuales se demuestra que es un muy buen algoritmo que
reduce mucho las fallas y que se encuentra entre los algoritmos con mejor
eficiencia por lo que es el algoritmo utilizado para estudios comparativos.

3.10.3 Algoritmo LRU: La estrategia consiste en llevar a disco la página que ha


permanecido por más tiempo sin ser accesada. El fundamento de esta estrategia
es que estadísticamente se observa que mientras más tiempo permanece una
página sin ser accesada, menos probable es que se accese en el futuro inmediato.
Desventaja: El alto costo de implementación en cuanto a los recursos. Pese a ser
un buen algoritmo en teoría, su implementación no lo es tanto. Esta puede ser
llevada a cabo por una lista enlazada con todas las páginas ordenadas, pero al
momento de ser referenciada una página esta tiene que cambiar de lugar, lo cual
involucra un alto costo asociado. Otro mecanismo es llevar un contador por medio
de hardware, el cual es incrementado cada vez que la página es accedida.

De acuerdo con el string entregado, podemos apreciar que cuando se llega al


número 3 en el string, el numero al que reemplaza es el 8, ya que fue el último en

44
ser accedido, previo a él está el 2 y previo a él el 1, de esta manera se continua
completando el marco hasta el término del string++.

3.10.4 Algoritmo de Segunda Oportunidad: Este es un algoritmo que deriva del


algoritmo FIFO. El Algoritmo de Segunda Oportunidad evita deshacerse de una
página de uso frecuente, hace uso del bit R inspeccionándolo de tal forma que, si
es 0, la página es antigua y no utilizada, por lo que, en caso de fallo de página, es
reemplazada de manera inmediata. En caso de que dicho bit sea 1, es cambiado a
cero y se cambia al final de la lista de páginas como si hubiera llegado en ese
momento a la memoria. Luego continúa la búsqueda siguiendo lo que avanza en
la lista.

En la imagen vemos como se ejecuta el algoritmo, las páginas fueron


identificadas, a modo de este ejemplo, con letras de la A a la H según el orden de
llegada y mostradas en una lista enlazada. A es la primera página cargada y la
que con menos frecuencia se ocupa mientras que H es la página más reciente
cargada. Supongamos que ocurre un fallo de página. La página más antigua en
nuestro ejemplo es A, si éste tiene el bit R a cero, se saca de la memoria. Por el
contrario, si R vale 1, A se coloca al final de la lista, poniéndose a cero el bit R.
Dejando como búsqueda adecuada de página con B.

Lo principal de este algoritmo de segunda oportunidad es ir viendo las páginas


antiguas sin referencias, si es que todas tienen más de una referencia entonces se
aplica normalmente el algoritmo FIFO.

3.10.5 Algoritmo NRU: El algoritmo Not Recently Used (NRU), No utilizado


recientemente, Enhanced second-chance o Segunda oportunidad mejorado[1] es
uno de los esquemas que intentan aproximarse al algoritmo LRU. Específicamente
es una modificación del algoritmo de segunda oportunidad, el cual considera el bit

45
de referencia R y el bit de modificación M como un par ordenado (R, M)
respectivamente. Existen cuatro clases de páginas descritas por este par que se
mencionan a continuación.

 Clase 0 (0, 0) La página no ha sido ni usada ni modificada recientemente.


Ésta página es la mejor candidata a ser reemplazada.
 Clase 1 (0, 1) La página no ha sido recientemente usada pero sí fue
modificada. No es tan buena como la primera opción, pues la página
deberá ser escrita antes de ser reemplazada.
 Clase 2 (1, 0) La página fue recientemente usada y no modificada. El
argumento de este algoritmo es que ésta página probablemente vuelva a
ser usada.
 Clase 3 (1, 1) La página fue usada y modificada. Considerando las
descripciones anteriores se aprecia que la página podría volver a ser usada
y además escrita al disco.

Cuando una página se debe reemplazar, se usa la misma lógica que el algoritmo
de reloj, pero en vez de revisar si el bit de referencia de la página es un 1, se
examina la clase a la que pertenece la víctima. Dependiendo de la implementación
la página (aleatoria o la primera que se encuentre) con la clase más pequeña es
reemplazada. Para encontrarla es posible que se deba revisar la cola circular
varias veces antes de encontrar la víctima.

Una duda interesante que surge es cómo puede haber páginas modificadas pero
no usadas (clase 1). Esto sucede cuando páginas de clase 3, luego de una
interrupción de reloj el bit de referencia es puesto en 0 pero los cambios aún
deben ser escritos en disco por lo que el bit de modificación sigue en 1.

3.10.6 Algoritmo LFU: El algoritmo Least frequently used (LFU) o Menos


frecuentemente utilizado pide que la página con el menor contador sea
reemplazada. Esto se justifica en que una página usada con mucha frecuencia
tendrá un contador más grande. Un problema de este esquema es cuando una
página es usada intensamente durante la fase inicial de un proceso y luego no
46
vuelve a ser usada, lo cual genera un contador mucho mayor y la página
permanece en memoria sin poder ser sacada. Una solución a lo anterior es
realizar un corrimiento de 1 bit del contador a intervalos regulares de tiempo de tal
forma de nivelar los contadores de forma exponencial y así no habrá páginas
estancadas.

El ejemplo en la imagen muestra una cadena de bits de referencias. Las


invocaciones de las páginas figuran con sus respectivos frames y cada uno tiene
un contador que indica la cantidad de veces que se ha llamado a una página. Así,
páginas cuya frecuencia es la más baja son reemplazadas por otras, (En este
caso la página #3 de frecuencia 1 es reemplazada por la página #28). Finalmente
se observa el balance entre páginas traídas y páginas retiradas.

3.10.7 Aging: Este algoritmo desciende del NFU, mejorándolo al realizar un


corrimiento de 1 bit a la derecha antes de aumentar el contador de uso en 1 bit a
la izquierda en su forma binaria. Esto provoca que las páginas cuyas referencias
son más actuales tengan más importancia que aquellas que fueron referidas hace
tiempo, asegurando que páginas usadas recientemente pero no frecuentemente
tengan mayor prioridad frente a páginas usadas hace tiempo pero con mayor
referencia. Así la página con el menor contador es elegida para ser reemplazada.

47
En el ejemplo de la imagen se presentan dos páginas con sus bits de referencia y
contadores (en formato binario). La página 1 tiene los bits de referencia 1,1,1,0,0,0
que indican una alta frecuencia de uso pero estos no son actuales; la página 2
tiene bits 0,0,0,0,1,1 lo que indica poca frecuencia de uso pero muy actual.
Siguiendo el algoritmo, se toma el contador en binario y se efectúa un corrimiento
de 1 bit a la derecha y se le adjunta el bit de referencia a la izquierda, todo esto
por cada tick de reloj. Finalmente el contador de la página 1 es 0001110, versus el
de la página 2 que es 11000000, reflejando que la página 1 tiene menor
importancia que la página 2 pues esta última es mas reciente, por lo que la página
1 eventualmente debe ser reemplazada.

3.10.8 Algoritmo MFU: El algoritmo Most frequently used (MFU) o Más


frecuentemente utilizado, que al contrario del LFU está basado en el argumento de
que la página con el menor contador fue probablemente traída hace poco y aún no
ha sido usada, por lo que la página con el mayor contador será la «víctima» en
este caso.

48
El ejemplo en la imagen presenta los frames y contadores para una cadena de
referencias dada. En caso de que dos o más contadores fueran iguales, se
reemplaza la página que haya llegado primero. En el ejemplo ocurren 10
reemplazos de página considerando llenar frames vacíos y reemplazos efectivos
de página.

3.11 Overlays

En éste los programas y datos se organizan de tal forma que se puede asignar la
misma región de memoria a varios módulos, con un programa principal
responsable para intercambiar los módulos entre disco y memoria según las
necesidades.

3.12 Swapping

Los procesos pueden ser intercambiados temporalmente, sacándolos de la


memoria y almacenándolos en un almacén de respaldo y volviéndolos a llevar
luego a la memoria para continuar su ejecución. Por ejemplo, suponga que
estamos utilizando un entorno de multiprogramación con un entorno de
planificación de CPU basado en turnos. Cuando termine un quantum, el gestor de
memoria comienza a sacar de ésta el proceso que acaba de terminar y a cargar
en el espacio de memoria liberado por otro proceso. Mientras tanto, el planificador
de la CPU asignará un quantum a algún otro proceso que ya se encuentre en
memoria. Cada vez que un proceso termine su quantum asignado, se
intercambiará por otro proceso.

3.13 Carga Dinámica

Una rutina no se carga hasta que se la invoca; todas las rutinas se mantienen en
disco en un formato de carga reubicable. Según éste método, el programa
principal se carga en la memoria y se ejecuta. Cuando una rutina necesita llamar a
otra rutina, la rutina que realiza la invocación comprueba primero si la otra ya ha
sido cargada, si no es así, se invoca el cargado de montaje reubicable para que
cargue en memoria la rutina deseada y para que actualice las tablas de

49
direcciones del programa con el fin de reflejar éste cambio. Después, se pasa el
control a la rutina recién cargada

3.14 Enlace Dinámico

Un enlace dinámico es aquel en el cual una biblioteca de código es enlazada


cuando un determinado programa se ejecuta (en oposición a un enlace estático,
que se produce en tiempo de compilación). La ventaja de este tipo de enlace es
que el programa es más liviano, y que evita la duplicación de código (por ejemplo,
cuando dos programas requieren usar la misma biblioteca, se necesita sólo una
copia de ésta).

Las bibliotecas de enlace dinámico, o bibliotecas compartidas, suelen encontrarse


en directorios específicos del sistema operativo, de forma que, cada vez que un
programa necesite usar alguna, el sistema operativo conozca el lugar en el que se
encuentra, para así poder enlazarla. Esto ocasiona algunos problemas de
dependencias, principalmente entre diferentes versiones de una misma biblioteca.

50
UNIDAD IV: Planificación del CPU

En esta unidad se procederá a profundizar en el funcionamiento interno el


procesador, así como la manera en la cual realiza las operaciones de planificación
del mismo. Debido a la naturaleza de la planificación de procesos, también es
necesario definir aspectos relacionados al estado de los procesos. Esto se realiza
mediante un diagrama de transición de estados entre procesos. Luego se clarifica
el concepto del despachador de procesos, así como el modulo que guarda toda la
información relevante al proceso. Ésta actividad de guardar la información del
estado del proceso, se le denomina cambio de contexto, sobre la cual
profundizaremos en esta unidad. Por último, se plantean diferentes algoritmos de
planificación de un solo proceso y multiproceso, así como los conceptos de
overlay, swapping, carga dinámica y enlace dinámico.

51
1. CPU: es el hardware dentro de una computadora u otros dispositivos
programables, que interpreta las instrucciones de un programa informático
mediante la realización de las operaciones básicas aritméticas, lógicas y de
entrada/salida del sistema.

El recurso más importante en el sistema de computación es el procesador central.


Sin acceso al CPU los programas no pueden ejecutarse. La estrategia más simple
para asignar este recurso sería asignarlo a un trabajo de usuario hasta que
finalice. Esta estrategia es usada en muchos computadores. Sin embargo la
mayoría de los programas gastan más de la mitad de su tiempo esperando que
terminen operaciones de Entrada/Salida. Esto nos lleva a tratar de compartir el
tiempo del CPU entre varios usuarios, lo cual implica un mecanismo más complejo
que nos permita utilizar eficientemente el tiempo del procesador y explotar el
paralelismo existente con las operaciones de Entrada/Salida.

Gráfico del CPU y sus relaciones con los módulos de la computadora. Fuente:
Sistemas Operativos, William Stallings.

52
2. ¿Por qué hablamos de la Planificación del CPU?

En un sistema multiprogramado, hay múltiples procesos de modo concurrente en


la memoria principal. Los procesos pueden estar usando un procesador o pueden
estar esperando el suceso de algún evento, tal como la finalización de una
operación de E/S. El proceso o los procesadores se mantienen ocupados
ejecutando un proceso mientras el resto espera.

La clave de multiprogramación es la planificación. De hecho, la planificación afecta


en gran medida el grado de multiprogramación, permite establecer cuantos
procesos pueden estar siendo ejecutados en un momento determinado.

3. Transición entre Estados de Procesos

3.1 Estado de un proceso

Un proceso puede pasar varios estados, los estados más documentados


en la literatura son: listo, espera y ejecución.

 Estado listo: Se dice que un proceso se encuentra en estado listo, cuando


está en espera de un procesador para seguir progresando hacia su
finalización. Si hay varios procesos en estado listo, estos procesos están en
una cola de procesos listos.
 Estado Espera: El estado de espera (o bloqueado) más fácil de explicar se
produce cuando un proceso solicita ejecutar una operación de
entrada/salida. Durante la ejecución de esta operación por parte del
procesador de canal, el proceso no es atendido por el CPU, por tanto el
CPU pudiera quedar ocioso. En este caso el CPU puede ser asignado a
otro proceso. El proceso que ha iniciado la operación de entrada/salida no
podrá utilizar el CPU hasta que el procesador de canal complete la
operación. En este caso el proceso está en estado de espera o bloqueado.
 Estado Ejecución: Si hay instrucciones del proceso que están siendo
atendidas por el procesador, entonces el proceso está en estado de
ejecución.

53
Hay dos procesos más que son considerados en la literatura: los estados
terminado y nuevo.

 El estado terminado se asigna al proceso que recién finaliza su ejecución.


El sistema operativo recibe una señal de finalización de parte del proceso, y
entonces comienza a liberar los recursos asignados al proceso, y a eliminar
información del mismo de las diferentes colas del sistema. También elimina
la PCB asociada al proceso.
 El estado nuevo se da cuando el sistema recibe una solicitud de ejecución
para el programa. En este momento se asignan recursos al proceso, y se
considera al proceso como nuevo. Muy posiblemente habrá una transición
inmediata al estado listo.

Los procesos durante su permanencia en el sistema están en algunos de los


estados descritos anteriormente. Sólo un proceso puede estar en un CPU. Si hay
varios procesadores, puede haber más de un proceso en ejecución. Puede haber
varios procesos en estado de espera y en estado listo. Estos estarán en colas
para tal fin. El siguiente diagrama muestra la transición entre procesos, y las
razones de la transición.

Admitido
Nuevo

Listo Despachado Terminado

Finaliza Finaliza
quantum
Ejecución
Finaliza
I/O
Operación I/O

Espera

54
4. ¿Qué es el planificador?

Cuando la CPU queda inactiva, el sistema operativo debe seleccionar uno de los
procesos que se encuentran en la cola de procesos preparados para ejecución. El
planificador a corto plazo (o planificador de la CPU) lleva a cabo este proceso. El
planificador elige uno de los procesos que están en memoria preparados para
ejecutarse y asigna la CPU a dicho proceso.

5. Dispatcher

Es el módulo que proporciona el control de la CPU a los procesos seleccionados


por el planificador a corto plazo. Esta función implica lo siguiente:

- Cambio de contexto.
- Cambio al modo usuario.
- Salto a la posición correcta dentro del programa de usuario para reiniciar
dicho programa.

El despachador debe ser lo más rápido posible, ya que se invoca en cada


conmutación de proceso. El tiempo que tarda el despachador en detener un
proceso e iniciar la ejecución de otro se conoce como latencia de despacho.

6 PSW (PCB)

Program Status Word (PSW) es un área de la memoria o registro que contiene


información sobre el estado de un programa utilizado por el sistema operativo.
Normalmente incluye un puntero (dirección) a la siguiente instrucción a ejecutarse.
El PSW contiene un campo de error y un código de condición.

La longitud del PSW depende de la arquitectura. En general, el PSW es utilizado


para controlar la ejecución secuencial de instrucciones e indicar el estado del
sistema en relación al programa en ejecución. Almacenando el PSW durante una
interrupción, el estado de la CPU puede ser preservado para una posterior
inspección. Cargando un nuevo PSW o una parte de un PSW, el estado de la CPU
puede ser inicializado o modificado.

55
PCB (Process Control Block) es un registro especial donde el sistema operativo
agrupa toda la información que necesita conocer respecto a un proceso particular.
Cada vez que se crea un proceso el sistema operativo crea el BCP
correspondiente para que sirva como descripción en tiempo de ejecución durante
toda la vida del proceso.

Cuando el proceso termina, su BCP es borrado y el registro puede ser utilizado


para otros procesos. Un proceso resulta conocido para el sistema operativo y por
tanto elegible para competir por los recursos del sistema sólo cuando existe un
BCP activo asociado a él. El bloque de control de proceso es una estructura de
datos con campos para registrar los diferentes aspectos de la ejecución del
proceso y de la utilización de recursos. La información almacenada en un BCP
incluye típicamente algunos o todos los campos siguientes:

 Identificador del proceso (Process Identificator -PID-, de sus siglas en


inglés).
 Estado del proceso. Por ej.: listo, en espera, bloqueado.
 Contador de programa: dirección de la próxima instrucción a ejecutar.
 Valores de registro de CPU. Se utilizan también en el cambio de contexto.
 Espacio de direcciones de memoria.
 Prioridad en caso de utilizarse dicho algoritmo para planificación de CPU.
 Lista de recursos asignados (incluyendo descriptores de archivos y sockets
abiertos).
 Estadísticas del proceso.
 Datos del propietario (owner).
 Permisos asignados.
 Signals pendientes de ser servidos. (Almacenados en un mapa de bits).

56
7. Cambio de Contexto

Un cambio de contexto consiste en la ejecución de una rutina perteneciente al


núcleo del sistema operativo multitarea de una computadora, cuyo propósito es
parar la ejecución de un hilo (o proceso o Threads) para dar paso a la ejecución
de otro distinto.

7.1 ¿Cómo funciona el Cambio de Contexto?

Para hacer realidad la ejecución concurrente en primer lugar es necesario que el


programa en ejecución se detenga voluntariamente. Puesto que esto no va a
ocurrir nunca, es imprescindible la intervención del hardware. Gracias a las
interrupciones generadas por el propio ordenador, es posible expulsar el programa
en ejecución para dar paso al sistema operativo.

Cuando esto ocurre, el sistema operativo ejecuta inmediatamente la rutina de


cambio de contexto. Esta rutina realiza las siguientes operaciones en el orden
indicado:

1. Salvar el estado del programa que se estaba ejecutando. El estado,


también denominado contexto, consiste en los valores de todos los
registros del microprocesador. Se copian en la memoria principal.
2. Seleccionar otro programa para ejecutar. Entre todos los programas que
estén preparados para ejecutarse, la rutina selecciona uno de ellos
siguiendo algún algoritmo equitativo.
3. Restaurar el estado del programa seleccionado. Para ello, se toma el
estado previamente copiado en la memoria principal y se vuelca en los
registros del microprocesador.
4. Ejecutar el programa seleccionado. La rutina termina su ejecución saltando
a la instrucción que estaba pendiente de ejecutar en el programa
seleccionado.

57
Este ciclo se repite bien cada vez que ocurre un evento de entrada/salida, bien
cuando vence un temporizador programado en el hardware. Dicho temporizador
hace saltar una interrupción cada 150 milisegundos aproximadamente (según
sistema operativo).

7.2 Implicaciones de que el cambio de contexto sea lento

En situaciones donde el cambio de contexto sea lento, el intercambio de procesos


entre el CPU y la memoria principal o disco también será lento. De tal forma que,
el CPU mismo pasará un tiempo de manera ociosa sin llevar a cabo ninguna
actividad.

8. Planificación Apropiativa

Un proceso ejecutando en un determinado momento puede ser interrumpido y


pasado al estado de listo por el sistema operativo. La decisión de expulsar puede
ser tomada cuando llega un nuevo proceso, cuando llega una interrupción que
pasa un proceso de bloqueado a estado de listo, o periódicamente, basándose en
las interrupciones del reloj.

9. Planificación no Apropiativa:

En este caso, una vez que el proceso está en el estado Ejecutando, continúa
ejecutando hasta que (a) termina o (b) se bloquea para esperar E/S o para solicitar
algún servicio al sistema operativo.

10. Algoritmos de Planificación de un solo proceso

10. 1 First Come, First Served (FCFS)

Según Silberschatz en su libro ‘Fundamentos de SO 7ma ed.’ Este es el algoritmo


de planificación de CPU más simple sus siglas significan First-come First-served;
primero en llegar primero en ser servido. Con este esquema se asigna primero la
CPU al proceso que primero lo solicite. La implementación de la política FCFS se
gestiona fácilmente con una cola FIFO.

58
Cuando un proceso entra en la cola de procesos preparados, su PCB se coloca al
final de la cola. Cuando CPU queda libre, se asigna al proceso que este al
principio de la cola y ese proceso que pasa a ejecutarse se elimina de la cola. El
código del algoritmo de planificación FCFS es simple de escribir y fácil de
comprender.

Sus características son: 

o No apropiativa. 
o Es justa, aunque los procesos largos hacen esperar mucho a los cortos. 
o Predecible. 
o El tiempo medio de servicio es muy variable en función del número de
procesos y su duración.

Ejemplo:

Suponga que el siguiente conjunto de procesos llega en el instante 0, estando la


duración de la ráfaga de CPU especificada en milisegundos:

Proceso Tiempo de ráfaga


P1 24
P2 3
P3 3
Si los procesos llegan en el orden P1, P2, P3 y se sirven según el orden FCFS,
obtendremos como resultado el siguiente diagrama de Gantt:

P1 P2 P3
0 24 27 30

10.2 Shortest-Job-First (SJF)

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

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

El SJF es probablemente optimal pues da el mínimo tiempo promedio de espera.


El problema está en conocer la duración del próximo requerimiento de CPU para
cada proceso. Esta duración puede predecirse suponiendo que el próximo ciclo
puede ser similar a los anteriores.

Este algoritmo puede ser preemptive o no. Cuando un nuevo proceso llega a la
cola de procesos listos mientras otro se está ejecutando, el nuevo proceso puede
tener el ciclo de duración de CPU más corto que lo que falta por ejecutar del
proceso actual. En el caso de un esquema preemptive, el CPU será asignado al
proceso que acaba de llegar a la cola. Este algoritmo se conoce como Shortest
Remaining Time First (SRTF).

Ejemplo:

Considere los cuatro procesos siguientes, estando especificada la duración de la


ráfaga de CPU en milisegundos:

Proceso Tiempo de llegada Tiempo de ráfaga


P1 0 8
P2 1 4
P3 2 9
P4 3 5
Si los procesos llegan a la cola de procesos preparados en los instantes que se
muestran y necesitan los tiempos ráfaga indicados, entonces la planificación SJF
apropiativa es la que se muestra en el siguiente diagrama de Gantt:

P1 P2 P4 P1 P3
0 1 5 10 17 26

60
10.3 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).

Este algoritmo puede ser preemptive y nonpreemptive. En el caso de preemptive,


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.

Ejemplo:

Considere el siguiente conjunto de procesos y suponga que llegan en el instante 0


en este orden: P1, P2,…P5 estando la duración de las ráfagas de CPU especificada
en milisegundos:

Proceso Tiempo de ráfaga Prioridad


P1 10 3
P2 1 1

61
P3 2 4
P4 1 5
P5 5 2
Usando la planificación por prioridades, vamos a planificar los procesos de
acuerdo con el siguiente diagrama de Gantt:

P2 P5 P1 P3 P5
0 1 5 16 18 19

10.4 Round Robín

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.

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

62
cada proceso tiene su propio procesador corriendo a 1/n la velocidad del
procesador real.

Ejemplo:

Considere el siguiente conjunto de procesos que llegan en el instante 0, estando


especificada la duración de ráfagas de CPU en milisegundos:

Proceso Tiempo de ráfaga


P1 24
P2 3
P3 3

Si usamos un quantum de tiempo de 4 milisegundos, entonces el proceso P1


obtiene los 4 primeros milisegundos. Dado que necesita otros milisegundos, es
desalojado después del primer quantum de tiempo, y la CPU se concede al
siguiente proceso de la cola, el proceso P2. Puesto que el proceso P2 no necesita
4 milisegundos, termina antes de que caduque su quantum de tiempo. Entonces la
CPU se proporciona al siguiente proceso, el proceso P3. Una vez que cada
proceso ha recibido 1 quantum de tiempo, la CPU es devuelta al proceso P1 para
un quantum de tiempo adicional. La planificación por turnos resultante es:

P1 P2 P3 P1 P1 P1 P1 P1
0 4 7 10 14 18 22 26 30

10.5 Planificación mediante colas multinivel

Un algoritmo de planificación mediante colas multinivel divida la cola de procesos


preparados en varias colas distintas. Los procesos se asignan permanentemente a
una cola, generalmente en función de alguna propiedad del proceso, como por
ejemplo el tamaño de memoria, la propiedad del proceso o el tipo de proceso.
Cada cola tiene su propio algoritmo de planificación.

63
11. Starvation: es un problema relacionado con los sistemas multitarea, donde a
un proceso o un hilo de ejecución se le deniega siempre el acceso a un recurso
compartido. Sin este recurso, la tarea a ejecutar no puede ser nunca finalizada.

12. Algoritmos de Planificación de Múltiples Procesos

Existen una gran variedad de algoritmos de planificación multiprocesador, sin


embargo, ésta no está dentro del alcanza de la guía. No obstante, se mencionan
tres de ellos:

12.1 Planificación en pandilla. Un conjunto de hilos relacionados que se planifica


para ejecutar sobre un conjunto de procesadores al mismo tiempo, en una relación
uno-a-uno.

12.3 Asignación de procesador dedicado. Esto es lo opuesto al enfoque de


compartición de carga y proporciona una planificación implícita definida por la
asignación de hilos a procesadores. Cada proceso ocupa un número de
procesadores igual al número de hilos en el programa, durante toda la ejecución
del programa. Cuando el programa termina, los procesadores regresan al parque
general para la posible asignación a otro programa.

12.4 Planificación dinámica. El número de hilos de un proceso puede cambiar


durante el curso de su ejecución.

64
UNIDAD V: Administración de Dispositivos

Esta unidad se concentra principalmente en los dispositivos de entrada y salida,


así como la definición de los canales que los permite interactuar entre ellos. Por
una parte, se definirá el concepto de unidad de control, el cual se encarga
principalmente de controlar los elementos asociados al dispositivo. Por otro lado,
está también el controlador de tráfico de E/S el cual supervisa el estado de cada
dispositivo. De la misma manera se establece la definición de spooling, método
utilizado para la mejor gestión de las operaciones de E/S. Finalmente, se definen
aspectos como lo son los dispositivos virtuales y el buffering.

65
Dispositivos de Entrada y Salida

Por una parte, los dispositivos de entrada son aquellos que traducen datos,
señales y programas que los seres humanos pueden comprender, a formatos que
la computadora pueda procesar; es decir, interpreta la información y permite la
comunicación entre las personas y las computadoras. Por otro lado, los de salida
son instrumentos que interpretan y permiten la comunicación entre los seres
humanos y las computadoras. Estos dispositivos convierten los resultados que
produce el procesador y que se encuentran en código de máquina en una forma
comprensible de ser empleada por las personas. Los dispositivos de entrada y
salida son aquellos que son capaces de llevar a cabo ambos tipos de operaciones.

Los dispositivos externos dedicados a la E/S en un computador se pueden


agrupar, a grandes rasgos, en tres categorías:

- Legibles para el usuario. Adecuados para la comunicación con el usuario


del computador. Algunos ejemplos son las impresoras y terminales de
visualización gráfica, que constan de pantalla, teclado y, posiblemente,
otros dispositivos como un ratón.
- Legibles para la máquina. Adecuados para la comunicación con
equipamiento electrónico. Algunos ejemplos son las unidades de discos y
de cintas, los sensores, los controladores y los activadores.
- Comunicación. Adecuados para la comunicación con dispositivo remotos.
Algunos ejemplos son los controladores de una línea digital y los módems.

Canales

Son un conjunto de hilos junto con un protocolo rígidamente definido que


especifica el conjunto de mensajes que pueden enviarse a través de esos hilos.
En términos electrónicos, los mensajes se transmiten mediante patrones de
tensiones eléctricas aplicadas a los hilos, con unos requisitos de temporización
bien definidos.

66
Unidad de Control

Es una colección de componentes electrónicos que permite controlar un puerto, un


bus, o un dispositivo. Un ejemplo simple de controladora de dispositivo sería la
controladora de un puerto serie: se trata de un único chip (o una parte de un chip)
dentro de la controladora que controla las señales que se transmiten a través de
los hilos de un puerto serie. Por contraste, una controladora de bus SCSI no es tan
simple; como el protocolo SCSI es muy complejo, la controladora de bus SCSI se
suele implementar mediante una tarjeta de circuitos separada.

Controlador de Tráfico de E/S

El controlador de tráfico de E/S supervisa el estado de cada dispositivo, unidad de


control y canal. Es una tarea que se vuelve más complicada a medida que
aumenta el número de unidades en el subsistema de E/S y a medida que se
incrementa el número de rutas entre estas unidades. El controlador de tráfico tiene
tres tareas importantes a efectuar: 1) debe determinar si hay por lo menos una
ruta disponible; 2) en caso de haber más de una ruta disponible, debe determinar
cuál escoger; y 3) si todas las rutas están ocupadas, debe determinar cuándo
habrá una disponible.

Asignación de Dispositivos a los Procesos

Los dispositivos se asignan de acuerdo a las necesidades de los procesos,


normalmente expresadas como peticiones de E/S a los dispositivos.

- Dispositivos dedicados: un dispositivo dedicado es aquel que se asigna a


un proceso durante todo el tiempo que permanezca ejecutándose,
independientemente de si lo utiliza constantemente o sólo durante
determinados períodos. Este tipo de asignación puede ser muy ineficiente si
el proceso que lo tiene dedicado no lo utiliza constantemente, habiendo
períodos de inactividad del dispositivo que podrían ser aprovechados por
otros procesos.

67
- Dispositivos compartidos: los se discos suelen compartir por todos los
procesos para almacenar información en ellos de forma simultánea. Esta es
la estrategia adecuada para adminsitrar los dispositivos de almacenamiento
de acceso directo, permitiendo su uso avarios procesos de forma
concurrente.
Aunque este tipo de asignación es muy flexible, si se desea alcanzar la
mayor eficacia posible, puede ser uy difícil llevarlo a la práctica, debiendo
establecer una gestión de la cola de peticiones de entrada/salida sobre el
dispositivo, por ejemplo:
- Ordenando la cola según la prioridad de los procesos.
- Atendiendo las peticiones según la ley del “mínimo esfuerzo” para
conseguir la mayor eficacia posible.

Spooling

Es el uso de memoria secundaria como un buffer de almacenamiento para reducir


los retardos de procesamiento cuando se transfieren datos entre equipos
periféricos y los procesadores de un computador.

Un sistema de spooling consta de un proceso de entrada E, un proceso usuario P,


y un proceso de salida S, conectados por dos buffers residentes en un disco. Los
procesos intercambian datos en bloques de igual tamaño. Estos bloques se
almacenan el disco utilizando un límite flotante entre los buffers de entrada y de
salida, dependiendo de la velocidad de los procesos.

El spooling, en esencia, utiliza el disco como un inmenso búfer para leer lo más
anticipadamente posible en los dispositivos de salida y para almacenar los
archivos de salida hasta que los dispositivos de salida estén en disposición de
aceptarlos.

El spooling también se utiliza para el procesamiento de datos en sitios remotos. La


CPU envía los datos a través de determinadas rutas e comunicaciones a una
impresora remota (o acepta un trabajo de entrada completo de un lector de
tarjetas remoto). El procesamiento remoto se realiza a su propia velocidad, sin

68
intervención de la CPU. La CPU sólo necesita que se le notifique cuando se ha
completado el procesamiento, para poder enviar el siguiente lote de datos.

El spooling solapa la E/S de un trabajo con los cálculos de otros trabajos. Incluso
en un sistema simple, el gestor de spooling puede estar leyendo la entrada de un
trabajo mientras imprime la salida de un trabajo diferente. Durante este tiempo,
pueden tambiér estar ejecutándose otros trabajos, o bien esos trabajos pueen
estar leyendo sus “tarjetas” del disco e “imprimiendo” su línea de salida en el
disco.

El spooling tiene un efecto beneficioso sobre el rendimiento del sistema. El único


coste asociado es el espacio de disco y unas pocas tablas, y a cambio se pueden
solapar los cálculos de un trabajo con las operaciones de E/S de otros trabajos.
Por tanto, el spooling puede mantener trabajando tanto a la CPU como a los
dispositivos de E/S a una tasa mucho más alta. El spooling conduce de manera
natural al concepto de multiprogramación, que es la base de todos los sistemas
operativos modernos.

Dispositivos Virtuales

Son aquellos dispositivos que son gestionados por medio de Spooling. Por
ejemplo, en caso de que se tenga una impresora que debería dedicarse a un único
proceso, éste se puede transformar en un dispositivo compartido cuando en
realidad no lo es. El spooler tiene asignada la impresora mientras que el resto de
procesos pueden realizar peticiones simultáneas sobre ella, simulando que el
dispositivo está compartido.

Buffering.

Un búfer es un área de memoria que almacena datos mientras se están


transfiriendo entre dos dispositivos o entre un dispositivo y una aplicación. El
almacenamiento en búfer se realiza por tres razones. Una razón es realizar una
adaptación de velocidades entre el productor y el consumidor de un flujo de datos.

69
Un segundo uso del almacenamiento en búfer consiste en realizar la adaptación
entre dispositivos que tengan diferentes tamaños de transferencia de datos.

UNIDAD VI: Administración de Información

En esta unidad, se hablarán todos los aspectos relacionados a la administración


de información dentro de la computadora. Primeramente se define el concepto de
archivo y los sistemas de archivos, seguido del manejo de datos y directorios.
Luego, se establece la estructura de los directorios y el concepto de archivos
simbólicos.

Debido a que se está hablando principalmente sobre archivos, es necesaria la


definición de aspectos relacionados a la verificación de control de acceso lo cual
podrá restringir el acceso a los archivos por parte de los usuarios. Y por último, se
tiene la organización de archivos, los métodos de acceso a éstos y las estrategias
de asignación de los mismos.

70
Archivo

Un archivo es una colección de información relacionada, con un nombre, que se


graba en almacenamiento secundario. Desde la perspectiva del usuario, un
archivo es la unidad más pequeña de almacenamiento secundario lógico; en otras
palabras, no pueden escribirse datos en el almacenamiento secundario a menos
que estos se encuentren dentro de un archivo. Comúnmente, los archivos
representan programas (tanto en versión fuente como en versión objeto) y datos.

Sistemas de Archivos

Los sistemas de archivos organizan y distribuyen los datos en áreas accesibles del
disco duro, para poder trabajar con la información almacenada sin ningún tipo de
problema. Esto es así porque el sistema operativo debe saber en todo momento
donde se encuentra cada archivo. Sus principales funciones son la asignación de
espacio a los archivos, la administración del espacio libre y del acceso a los datos
resguardados. Estructuran la información guardada en un dispositivo de
almacenamiento de datos o unidad de almacenamiento (normalmente un disco
duro de una computadora), que luego será representada ya sea textual o
gráficamente utilizando un gestor de archivos.

Manejo de Datos

Cuando nos referimos al manejo de datos, hablamos del encargado de almacenar


y recuperar los datos específicamente. Los sistemas modernos para el manejo de
datos aíslan por completo al usuario de los complejos procesos que implican el
almacenamiento físico de la información.

En sí, el manejo de los datos se realiza mediante la gestión de E/S,


específicamente en los siguientes tres niveles:

71
• Gestión de directorios. En este nivel, los nombres simbólicos de los ficheros
se convierten en identificadores que o bien hacen referencia directamente
al fichero o indirectamente a través de un descriptor de fichero o una tabla
de índices. Este nivel también se ocupa de las operaciones de usuario que
afectan al directorio de ficheros, tales como añadir, borrar y reorganizar.
• Sistema de ficheros. Este nivel trata con la estructura lógica de los ficheros
y con las operaciones que pueden especificar los usuarios, como abrir,
cerrar, leer y escribir. Los derechos de acceso se gestionan también en
este nivel.
• Organización física. De la misma manera que las direcciones de memoria
virtual deben convertirse en direcciones físicas de memoria principal
teniendo en cuenta la estructura de segmentación y paginación, las
referencias lógicas a ficheros y registros se deben convertir en direcciones
físicas del almacenamiento secundario, teniendo en cuenta la estructura de
pistas

Directorios

El directorio puede considerarse como una tabla de símbolos que traduce los
nombres de archivo a sus correspondientes entradas de directorio. Si adoptamos
esta esta visión, es fácil comprender que el propio directorio puede organizarse de
muchas formas. El directorio contiene información sobre los ficheros, incluyendo
atributos, ubicación y propiedad. Gran parte de esta información, especialmente la
que concierne a almacenamiento, la gestiona el sistema operativo. El directorio a
su vez es un fichero, accesible por varias rutinas de gestión de ficheros.

Operaciones a realizar con el directorio

- Búsqueda de un archivo: tenemos que poder explorar la estructura de


directorio para encontrar la entrada correspondiente a un archivo concreto.
Puesto que los archivos tienen nombre simbólicos y los nombres similares
pueden indicar que existe una relación entre archivos, también queremos

72
poder encontrar todos los archivos cuyos nombres se correspondan con un
patrón concreto.
- Crear un archivo: es necesario poder crear nuevos archivos y añadirlos al
directorio.
- Borrar un archivo: cuando un archivo ya no es necesario, queremos poder
eliminarlo del directorio.
- Listar un directorio: tenemos que poder enumerar los archivos contenidos
en un directorio y el contenido de la entrada de directorio correspondiente a
cada uno de los archivos de la lista
- Renombrar un archivo: puesto que el nombre de un archivo representa su
contenido para los usuarios, debemos poder cambiar el nombre cuando el
contenido o uso del archivo varíen.
- Recorrer el sistema de archivos: puede que queramos acceder a todos
los directorios y a todos los archivos contenidos dentro de una estructura de
directorios. Para conseguir una mayor fiabilidad, resulta conveniente
guardar el contenido y la estructura de todo el sistema de archivos a
intervalos regulares.

Estructura de Directorios

- Directorio de un único nivel: todos los archivos están contenidos en el


mismo directorio, que resulta fácil de mantener y de comprender. Sin
embargo, un directorio de un único nivel tiene limitaciones significativas
cuando el número de archivos se incrementa o cuando el sistema tiene más
de un usuario.
- Directorio de dos niveles: en la estructura de directorio de dos niveles,
cada usuario tiene su propio directorio de archivos de usuario (UFD, user
file directory). Cada uno de los UFD tiene una estructura similar, pero sólo
incluye los archivos de un único usuario. Cuando un trabajo de un usuario
se inicia o cuando un usuario se conecta al sistema, se explora el directorio
maestro de archivos (MFD, master file directory) del sistema. El MFD está

73
indexado por el nombre de usuario o por el número de cuenta y cada una
de sus entradas apunta al UFD de dicho usuario.
- Directorios con estructura de árbol: consiste en ampliar la estructura de
directorios para que sea un árbol de altura arbitraria. Esto permite a los
usuarios crear sus propios subdirectorios y organizar sus archivos
correspondientemente. Los árboles son la estructura de directorio más
común. Cada árbol tiene un directorio raíz y todos los archivos del sistema
tienen un nombre de ruta distintivo.
- Directorios en un grafo acíclico: en este tipo de directorios cada
directorio o archivo compartido existirá en el sistema de archivos en dos (o
más) lugares simultáneamente.

Archivos Simbólicos

Es un archivo especial que contiene un nombre de camino. Así estos pueden


apuntar a ficheros en sistemas de ficheros diferentes (posiblemente montados por
NFS desde máquinas diferentes, unidades extraíbles), y no tienen por qué apuntar
a ficheros que existan realmente. Un archivo simbólico permite dar a un fichero el
nombre de otro, pero no enlaza el fichero con un nodo, es decir, en realidad lo que
hacemos es enlazar directamente al nombre del fichero. Los archivos simbólicos
son ampliamente usados para las librerías compartidos, este no es más que una
referencia (enlace) a una carpeta (directorio) o fichero que está situado en un lugar
físico distinto.

Verificación de Control de Acceso

El sistema de ficheros debería proporcionar una herramienta flexible para permitir


la compartición de ficheros extensiva entre los usuarios. El sistema de ficheros
debería proporcionar varias opciones de tal forma que el acceso a un fichero
particular se pueda controlar. Típicamente, a los usuarios o grupos de usuarios se
les concede ciertos derechos de acceso a un fichero. Se ha utilizado un amplio
rango de derechos de acceso. La siguiente lista es representativa de los derechos
de acceso que se asignan a un usuario particular para un determinado fichero:

74
• Ninguno. El usuario no puede incluso conocer la existencia del fichero, y
por tanto, tampoco puede acceder a él. Para forzar esta restricción, el
usuario no tiene permiso de lectura del directorio en el cual se incluye este
fichero.
• Conocimiento. El usuario puede determinar si el fichero existe y quién es
su propietario. El usuario entonces es capaz de solicitar al propietario
derechos de acceso adicionales.
• Ejecución. El usuario puede cargar y ejecutar un programa pero no
copiarlo. Los programas propietarios utilizan normalmente estas
restricciones.
• Lectura. El usuario puede leer el fichero para cualquier propósito,
incluyendo copia y ejecución. Algunos sistemas son capaces de forzar una
distinción entre ver y copiar. En el primer caso, el usuario puede ver el
contenido del fichero, pero no puede realizar una copia.
• Adición. El usuario puede añadir datos al fichero, frecuentemente sólo al
final, pero no puede modificar o borrar cualquiera de los contenidos del
fichero. Este derecho es útil para recolectar datos de varias fuentes.
• Actualización. El usuario puede modificar, borrar o añadir datos al fichero.
Esto normalmente incluye escribir el fichero al inicio, reescribirlo completa o
parcialmente y borrar todos o una porción de los datos. Algunos sistemas
diferencian entre distintos grados de actualización.
• Cambio de protección. El usuario puede cambiar los derechos de acceso
otorgados a otros usuarios. Normalmente, sólo el propietario del fichero
goza de este derecho. En algunos sistemas, el propietario puede extender
este derecho a otros. Para prevenir del abuso de este mecanismo, el
propietario del fichero normalmente puede especificar qué derechos podría
cambiar un usuario con este tipo de permiso.
• Borrado. El usuario puede borrar el fichero del sistema de ficheros.

A un usuario se le considera propietario de un determinado fichero, normalmente a


la persona que inicialmente creó un fichero. El propietario tiene todos los derechos

75
de acceso listados previamente y puede conceder permisos a otros usuarios. Se
pueden proporcionar diferentes accesos a distintas clases de usuarios:

• Usuario específico. Usuarios individuales que se designan por el


identificador del usuario.
• Grupos de usuarios. Un conjunto de usuarios que no se definen
individualmente. El sistema debe tener alguna forma de gestionar la
membresía de los grupos de usuarios.
• Todos. Todos los usuarios que tienen acceso a este sistema. Dichos
ficheros se consideran ficheros públicos.

Organización de Archivos

La Pila:

La forma menos complicada de organización de ficheros se puede denominar pila.


Los datos se almacenan en el orden en el que llegan. Cada registro está formado
por un conjunto de datos. El propósito de la pila es simplemente acumular la masa
de datos y guardarlos. Los registros podrían tener diferentes campos o similares
campos en diferentes órdenes. Por tanto, cada campo debe ser autodescriptivo,
incluyendo el nombre del campo y el valor. La longitud de cada campo debe ser
implícitamente indicada por delimitadores, explícitamente incluida como un
subcampo o conocida por defecto para cada tipo de campo.

Dado que no hay estructura en este tipo de fichero, el acceso a los registros se
hace mediante búsqueda exhaustiva. Es decir, si se desea encontrar un registro
que contiene un campo particular con un valor particular, es necesario examinar
cada registro en la pila hasta encontrar el registro deseado o terminar de recorrer
todo el fichero. Si se desea encontrar todos los registros que contienen un campo
particular o contienen dicho campo con un valor particular, entonces se debe
recorrer el fichero entero.

El Fichero Secuencial

76
La forma más común de estructura de fichero es el fichero secuencial. En este tipo
de ficheros, se utiliza un formato fijo para los registros. Todos los registros son de
igual tamaño y están compuestos por el mismo número de campos de longitud fija
en un orden específico. Debido a que la longitud y la posición de cada campo son
conocidas, sólo se necesita almacenar los valores de los campos; el nombre y
longitud de cada campo son atributos de la estructura del fichero.

El fichero secuencial indexado


Una técnica popular para eliminar las desventajas del fichero secuencial es utilizar
los ficheros secuenciales indexados. El fichero secuencial indexado mantiene las
características clave del fichero secuencial: los registros se organizan en
secuencia, basándose en un campo clave. Dos características se añaden: un
índice al fichero que da soporte al acceso aleatorio y un fichero de
desbordamiento. El índice proporciona una capacidad de búsqueda para alcanzar
rápidamente la vecindad de un registro deseado. El fichero de desbordamiento es
similar al fichero registro, utilizado con un fichero secuencial, pero se integra de tal
forma que un registro en el fichero de desbordamiento se localiza mediante un
puntero desde su registro predecesor.
En la estructura secuencial indexada más sencilla, se utiliza un único nivel de
indexación. El índice en este caso es un fichero secuencial simple. Cada registro
del fichero índice está formado por dos campos: un campo clave, que es el mismo
que el campo clave del fichero principal y un puntero al fichero principal. Para
encontrar un campo específico, se busca el índice que contenga el mayor valor
clave que sea igual o preceda al valor de clave deseado. La búsqueda continúa en
el fichero principal en la ubicación indicada por el puntero.

El fichero indexado:

El fichero indexado elimina una de las limitaciones del fichero secuencial: el


procesamiento efectivo se limita a las búsquedas que se basan en un único campo
del fichero. Cuando es necesario buscar por algún otro atributo que no sea el
campo clave, ambas formas de ficheros secuenciales son inadecuadas. En
algunas aplicaciones, esta flexibilidad es deseable.

77
Para lograr esta flexibilidad, se necesita una estructura que emplea múltiples
índices, uno por cada tipo de campo que puede estar sujeto a una búsqueda. En
el fichero indexado general, se abandonan los conceptos de secuencialidad y
clave única. Los registros se acceden sólo a través de sus índices.

El resultado es que no hay restricción en la colocación de los registros siempre


que al menos un puntero en un índice se refiera a dicho registro. Además, se
pueden emplear registros de longitud variable.
El fichero de acceso directo o hash:

El fichero de acceso directo, o hash, explota la capacidad encontrada en los


discos para acceder directamente a cualquier bloque de una dirección conocida. Al
igual que los ficheros secuenciales y secuenciales indexados, se requiere una
clave para cada registro. Sin embargo, en este tipo de ficheros no existe el
concepto de ordenación secuencial.

Criterios para escoger una Organización de Archivos

Para escoger una organización de archivo, son importantes varios criterios:

• Tiempo de acceso corto.


• Facilidad de actualización.
• Economía de almacenamiento.
• Mantenimiento sencillo.
• Fiabilidad.

Métodos de Acceso

- Acceso secuencial: el método de acceso más simple es el acceso


secuencial. La información del archivo se procesa por orden, un registro
después de otro. Este método de acceso es, como mucho, el más común;
por ejemplo, los editores y compiladores suelen acceder a los archivos de
esta forma.
- Acceso directo: un archivo está compuesto de registros lógicos de longitud
fija que permiten a los programas leer y escribir registros rápidamente, sin

78
ningún orden concreto. El método de acceso directo se basa en un modelo
de archivos que se corresponde con los dispositivos de disco, ya que los
discos permiten el acceso aleatorio a cualquier bloque de un archivo.

Estrategias de Allocation

Asignación Contigua: se asigna un único conjunto contiguo de bloques en


tiempo de creación de los ficheros. Por tanto, hay una estrategia de preasignación
que utiliza porciones de tamaño variable. La tabla de asignación de ficheros
necesita sólo una entrada para cada fichero, mostrando el bloque inicial y la
longitud del fichero.

Asignación Encadenada: típicamente, la asignación se realiza a nivel de bloques


individuales. Cada bloque contiene un puntero al siguiente bloque de la cadena.
De nuevo, la tabla de asignación de ficheros necesita sólo una entrada para cada
fichero, mostrando el bloque inicial y la longitud del fichero. Aunque la
preasignación es posible, es más común asignar bloques cuando se necesita.

Asignación Indexada: resuelve muchos de los problemas de la asignación


contigua y encadenada. En este caso, la tabla de asignación de ficheros contiene
un índice separado de un nivel por cada fichero; el índice tiene una entrada por
cada porción asignada al fichero. Típicamente, los índices de fichero no se
almacenan físicamente como parte de la tabla de asignación de ficheros. Por el
contrario, el índice de ficheros para un fichero se guarda en un bloque separado y
la entrada para fichero en la tabla de asignación de ficheros apunta a dicho
bloque. La asignación puede realizarse mediante bloques te tamaño fijo o
porciones de tamaño variable.

79

S-ar putea să vă placă și