Está en la página 1de 45

lOMoARcPSD|5957588

Sistemas Operativos Teor°a Anxo

Sistemas Operativos (Universidad Politécnica de Madrid)

StuDocu no está patrocinado ni avalado por ningún colegio o universidad.


Descargado por Andreas Deris (malmsteen@123mail.cl)
lOMoARcPSD|5957588

Sistemas Operativos.

Tema 1: Introducción a los Sistemas Operativos.


1. ¿Qué es un sistema operativo?
Conjunto de programas que sirven de interfaz entre usuario y hardware. Oculta el hardware y
administra todos los dispositivos conectados al equipo, creando una interfaz más sencilla de
usar a los usuarios.

Es un gestor de recursos que permite el acceso ordenado y controlado a recursos, la


multiplexacion en tiempo y espacio; y es eficiente y justo entre peticiones conflictivas.
(Diferentes usuarios utilizan el mismo recurso compartiéndolo en el tiempo).

Es un programa de control, ya que controla la ejecución de los programas para evitar errores o
uso impropio del hardware.

2. Objetivos
Principal: Facilitar al usuario el uso del Sistema Informático y gestionar los recursos del mismo.

Secundarios:

 Interfaz amigable.
 Eficiencia de los recursos disponibles.
 Fiabilidad, evitar errores.
 Mantenible y capaz de evolucionar ante nuevas versiones.

3. Arranque de un ordenador.
1. Ejecución del POST para inicializar dispositivos.
2. Carga en memoria el MBR del dispositivo de arranque.
3. Ceder control al boot manager.
4. Arranque del SO.

4. Componentes del Sistema Operativo.


 Núcleo (kernel): Controla la ejecución de los programas y el acceso a los recursos
hardware, proporciona los servicios que ofrece el sistema y está permanentemente en
memoria.
 Programas del sistema: Herramientas básicas para utilizar el ordenador. Los usuarios
interaccionan con los programas del sistema y utilizan aplicaciones, que son externas
al sistema operativo. Estas aplicaciones interaccionan con el núcleo, con otros
programas del sistema y con otras aplicaciones.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

4.1. Programas del sistema:


Programas proporcionados por el fabricante que facilitan las tareas comunes al usuario. Desde
el punto de vista del núcleo son un programa como otro cualquiera.

Entre ellos distinguimos los de interfaz con el usuario (escritorio y ventanas) y los de utilidades
(manejo de ficheros etc.).

Hay 2 tipos de interfaces:

 CLI: Mediante comandos y mandatos tanto internos como externos (nombre de un


programa)
 GUI: Amigables mediante escritorio y manejado por ratón, teclado etc.

5. Concepto de proceso.
Un proceso se trata de un programa en ejecución con un contexto que gestiona el núcleo, este
contexto consta de:

 CPU: asignada por el núcleo y compartida con otros procesos.


 Memoria: código, datos y pila. Exclusiva para cada proceso, aunque parte se puede
compartir.
 Ficheros: Ficheros abiertos
 Comunicación con otros procesos: Sockets, tuberías…
 Otra E/S: terminal, CD, cintas…
 Varios: identificador, credenciales, estadísticas…

La información de control sobre el proceso se almacena en un PCB.

Cuando un proceso se suspende ha de reiniciarse en el mismo estado en el que se paró. Lo que


implica que se debe guardar todos los datos de cada proceso, este almacenamiento se hace en
la tabla de procesos, una tabla especifica del SO.

Un proceso puede dar lugar a la creación de otros, que serán sus procesos hijos. Cada proceso
está identificado mediante un identificador de usuario (UID) que es compartido entre los
procesos padres e hijos. Por otra parte, los procesos también pueden ser miembros de grupos,
los cuales también tienen un identificador de grupo (GID).

Por ultimo dentro de los procesos hay un tipo especial, el superusuario, que tiene privilegios y
podría violar muchos de las reglas de protección.

6. Multiprogramación.
Técnica que permite mantener varios procesos en memoria y repartir la CPU y otros recursos
entre ellos, de forma que todos avancen “simultáneamente”. Cada proceso cree que tiene la
máquina para él solo, pero en realidad la está compartiendo. Esta técnica maximiza el
aprovechamiento de los recursos, ya que mientras un proceso esta ocioso(esperando a E/S o
básicamente realizando cualquier tarea que no tenga que ver con la CPU), algún otro proceso
puede usar la CPU u otros recursos.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Obliga a que el sistema operativo realice una planificación de recursos de como asignar los
tiempos de uso de la CPU, que zona de memoria se asigna a cada proceso o cómo se organiza
el acceso a los E/S. Esto crea problemas de concurrencia, es decir, que dos procesos quieran
modificar el mismo fichero al mismo tiempo, pero también posibilita el trabajo cooperativo
entre procesos.

7. Funcionamiento de una CPU.


1. Lee la instrucción que indica el contador de programa.
2. Decodifica la instrucción.
3. Obtiene los operandos.
4. Ejecuta la instrucción.
5. Escribe los resultados en un registro o en memoria.
6. Incrementar el contador de programa.
7. Ver si hay interrupciones.

8. Conmutación de tareas.
Para conmutar la CPU de un proceso a otro:

1. Se guarda el valor actual de los registros de la CPU en el PCB del proceso saliente.
2. Se cargan los registros de la CPU con el valor almacenado en el PCB del proceso que
entra en la CPU.
3. La conmutación de tareas solo puede producirse si el núcleo del SO obtiene el control
del procesador, y solo lo puede obtener mediante llamada al sistema, interrupción
hardware, temporizador o excepción.

Debido a esto se dice que un sistema operativo es (event driven) dirigido por eventos, ya que
el SO se activa únicamente cuando se produce un evento.

9. Modos de funcionamiento de la CPU.


Como comentamos previamente existen 2 modos de funcionamiento básicos:

 Modo Supervisor o kernel o Superusuario (núcleo)


 Modo Usuario (procesos de usuario)

Para pasar a modo supervisor se tiene que hacer mediante interrupciones tanto software
(Llamadas al sistema), como hardware (dispositivos de E/S) o con excepciones (Situaciones
inesperadas), al terminar las interrupciones se vuelve al modo anterior.

Las instrucciones privilegiadas solo se pueden ejecutar en modo supervisor y estas pueden
comprometer la seguridad del sistema, y son:

 Entrada y salida
 Cambios en los registros de control
 Cambio de vectores de interrupción
 Control: des/activación de memoria virtual, modo protegido…

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

10. Protección.
La protección evita que unos procesos o usuarios puedan dañar otros procesos, usuarios o al
propio sistema operativo. Es imprescindible contar con el hardware apropiado para
implementar mecanismos de protección eficaces. Esta protección es necesaria en CPU,
memoria, E/S…

10.1. Protección de la CPU.


La CPU se protege para que un proceso no la acapare para sí mismo. Esta protección se hace
mediante un temporizador que genere periódicamente interrupciones, y activan el núcleo para
que este decida si retornar la CPU al mismo proceso o a uno diferente.

10.2. Protección de la memoria.


La memoria se protege para que no se sobrescriba memoria perteneciente al SO o a otros
procesos por parte de otro proceso que esté actuando en ese momento. De manera sencilla se
puede realizar poniendo un registro base y uno límite para el acceso a memoria. Por parte del
hardware la MMU calcula la dirección de memoria física a la que pretende acceder una
instrucción y valida el acceso.

Las modificaciones del valor del registro base y límite se realizan en modo supervisor.

En ciertas máquinas se utiliza una técnica conocida como memoria virtual, en la que el SO
mantiene una parte del espacio de direcciones en la memoria principal y otra parte en disco, y
transfiere fragmentos de memoria entre ambos según los necesite.

11. Llamadas al sistema.


La interfaz entre el SO y los programas de usuario está definida por el conjunto de llamadas al
sistema. Estas llamadas al sistema permiten solicitar servicios y comunicarse con el SO, como
solicitudes de acceso a E/S o comunicación entre procesos.

En general los programas no efectúan las llamadas al sistema directamente, ya que estas
normalmente son en lenguaje ensamblador, sino que ejecutan una función de biblioteca
definida en algún lenguaje de programación que realice esta llamada al sistema.

Dentro de las llamadas al sistema existe una clasificación según a que se dirige esta llamada:

 Procesos.
 Memoria.
 Manejo de ficheros.
 Manejo de dispositivos.
 Red.

12. Virtualización.
La idea es proporcionar un recurso idealizado (virtual) usando recursos reales (físicos). Con la
gestión adecuada de un único recurso pueden proporcionarse numerosos recursos virtuales. El
ejemplo más claro es una máquina virtual.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

13. Tipos de SO.


 Por capacidad de multiprogramación:
o Monotarea (DOS)
o Multitarea (Windows, OS X…)
 Por distinción entre usuarios:
o Monousuario (DOS)
o Multiusuario (Windows, OS X…)
 Por el tiempo de respuesta
o Tiempo Compartido (Windows, OS X)
o Lotes (z/OS)
o Tiempo Real (QNX)
 Por la arquitectura de la CPU
o Monoprocesador (DOS)
o Multiprocesador (Unix, Windows)
 Por el tamaño del camino de datos
o 16 bits
o 32 bits
o 64 bits
 Por el uso que se le da
o Mainframe(z/OS)
o Supercomputadores (Unix)
o Servidores (Unix)
o Personales (Windows)
o Tiempo real (QNX)
o Empotrados (Android)

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Tema 2: Gestión del procesador.

2.1. Conceptos de proceso y de PCB


Concepto de proceso.
Un proceso es una abstracción de un programa en ejecución, proporcionan la capacidad de
operar en pseudoconcurrencia incluso cuando hay únicamente una CPU disponible.

Un proceso está compuesto por su código, datos y la pila, además de un contexto de proceso
asociado dinámicamente (prioridad, registros de CPU, protección, ficheros abiertos…).

Información del proceso.


La información de cada proceso se guarda siempre en memoria del núcleo, en el PCB (process
control block), el cual contiene:

 ID del proceso, parentesco…


 Estado actual (preparado, en ejecución, bloqueado)
 Información para la planificación (prioridad…)
 Contador de programa
 Registros de la CPU
 Información para la gestión de memoria
 Información del estado de la E/S o evento por el que se espera
 Información estadística
 Recursos asignados

Ciclos de ráfagas de CPU-E/S


Durante un proceso se alterna el uso de CPU y E/S.

Los procesos interactivos son intensivos en E/S, con un gran número de ráfagas de CPU muy
cortas y pocas largas.

Los procesos de cálculo no interactivos son intensivos en CPU, con un gran número de ráfagas
de CPU largas.

Concepto de multitarea con una CPU


En concepto un proceso tiene su propia CPU virtual, pero en la realidad la CPU conmuta entre
varios procesos, para una mayor comprensión podemos pensar en que en realidad se ejecutan
en paralelo. Este tipo ejecución se llama multitarea, multiprogramación o multiproceso.

Cuando no hay multitarea, el procesador no puede ser utilizado con otro proceso mientras el
proceso en ejecución espera a que se complete una operación de E/S.

Cuando si se implementa la multitarea se mantienen en memoria varios procesos y solo uno


de ellos está en ejecución. Cuando tiene que esperar por la E/S se le expulsa de la CPU y
alguno de los que estaban en memoria comienza a usar la CPU, pero no siempre se le expulsa
por uso de E/S, también puede ser por otras causas, por ejemplo por tiempo consumido. Así
como la espera tampoco es siempre debido al uso de E/S.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Ejemplos de aplicaciones multiproceso.


Un programa de cálculo trocea el problema y crea un proceso trabajador por CPU. El
trabajador realiza su tarea y comunica los resultados al proceso principal para que se integren.

Servidor Web:
Un grupo de procesos trabajadores, cada trabajador acepta una conexión y atiende al cliente
hasta que cierra la conexión. El controlador gestiona los trabajadores existentes.

Ventajas de la multitarea:
 Aprovecha los tiempos de espera de los procesos.
 Aumenta el uso de la CPU
 Permite el servicio de varios usuarios de forma ágil.
 Permite ejecutar aplicaciones multiproceso, lo que permite aumentar su rendimiento
en sistemas multiprocesador, separar responsabilidades…
 Para ser efectivos los procesos no deben hacer espera activa.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

2.2. Estados de los procesos.


Diagrama
Estados básicos:

 Ejecución: ejecutándose en el procesador.


 Bloqueado: esperando a que suceda un evento (ej. Una E/S).
 Preparado: listo para usar el procesador

Estados suspendidos: Válido para estados preparado y bloqueado, se libera memoria al tener
el proceso en disco.

Cambio de contexto.
El cambio de contexto se trata de una operación por la que se guarda el estado del proceso
actualmente en CPU para que otro pase a ejecutarse en la CPU y poder reanudar la ejecución
donde se quedó. Este cambio se usa para implementar la multiprogramación y para atender a
interrupciones.

Lo que se guarda de estos procesos es el valor de los registros de la CPU, y son guardados en
memoria, que puede ser tanto en el PCB o en la pila del proceso.

Este cambio de contexto puede ser voluntario, en la que el proceso realiza alguna operación
que lo bloquea, o involuntario, en la que el proceso es expulsado.

Cambio de contexto: coste.


 Costes inmediatos(aprox 1-5 us), incluyen:
 Cambiar de modo usuario/supervisor
 Guardar y cargar los registros de la CPU
 Ejecutar el código de conmutación
 Vaciar la TLB usada para memoria virtual.
 Costes diferidos(aprox 0-1000 us): Rellenar la TLB y las memorias caché.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Cambios de contexto: casos.


Menos pesados (pseudocambio de contexto):

1. Cuando un proceso realiza una llamada al sistema no bloqueante y el núcleo decide


mantener el proceso.(Involuntario)
2. Cuando se produce una interrupción hardware y el núcleo decide mantener al
proceso.(Involuntario)

Más pesados:

3. Cuando salta el temporizador y el núcleo cambia de proceso.(Involuntario)


4. Cuando un proceso invoca a una llamada al sistema bloqueante y el núcleo cambia de
proceso.(Voluntario)

2.3. Hilos.
En una aplicación multiproceso clásica los cambios de contexto entre diferentes procesos son
costosos, ya que cada proceso tiene su zona de memoria. Si pensáramos en compartir recursos
entre procesos distintos es más difícil debido a que tienen zonas de memoria separadas y para
compartir tendrían que usar solo las zonas de memoria compartidas.

Surge el concepto de hilo, que se trata de poder tener diferentes secuencias de ejecución
dentro de un mismo proceso, una segunda causa por la que los hilos son útiles es que la
creación de los mismos es mucho más rápida que la creación de un proceso completo. Una
tercera es que no producen un aumento de la velocidad de procesamiento y que en los
sistemas con CPUs múltiples sí que se puede llegar a la ejecución completamente en paralelo.

Un hilo comparte con los demás el espacio de memoria, las variables globales, los ficheros
abiertos y las herramientas de sincronización y comunicación entre procesos. Mientras que
cada hilo tiene para si un contador de programa, unos registros, una pila y un estado.

Ventajas del multihilo.


 Los hilos comparten información rápida y fácilmente mediante variables globales y
memoria dinámica.
 La creación, destrucción y cambio de contexto de los hilos es más rápida que la de los
procesos.

Inconvenientes del multihilo.


 No hay protección de la memoria. Un hilo puede usar de forma inapropiada la zona de
memoria de otros hilos del mismo proceso.
 Aumenta la necesidad de aplicar mecanismos de sincronización/concurrencia entre
hilos. En particular, todas las bibliotecas que se usen deben estar preparadas para hilos
(thread-safe) o bien las llamadas a la biblioteca han de protegerse con un cerrojo
global.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Estado de un proceso multihilo.


Los mismos que el proceso clásico, pero un proceso completo su estado resulta de la
combinación de los estados de sus hilos:

 1 hilo en ejecución, 1 o más preparados o bloqueados  Proceso en ejecución.


 0 hilo en ejecución y 1 o más preparados  Proceso preparado
 Todos los hilos bloqueados  Proceso bloqueado

2.4. Planificación del procesador.


El objetivo de la multiprogramación es tener en todo momento un proceso en ejecución, para
maximizar el rendimiento de la CPU. Cuando hay varios procesos para ejecutarse, el SO debe
decidir a cual asigna la CPU en función de un algoritmo determinado.

La parte del SO que decide a quien se le asigna la CPU es el planificador a corto plazo y el
algoritmo usado se llama algoritmo de planificación. La planificación también decide que
trabajos entran al sistema (largo plazo) o que procesos deben esperar en disco (medio plazo).

Los dispositivos en los que la multiprogramación es más necesaria son los servidores de red. Ya
que tiene que decidir si ejecutar un proceso de medición de las estadísticas diarias o uno que
atiende las peticiones de los usuarios por ejemplo.

Planificador a largo plazo.


Es el que determina que trabajos se admiten al sistema y cuándo se crean sus procesos. Los
procesos interactivos no son retenidos por este planificador y pasan directamente a la cola de
preparados. Tiene en cuenta si un proceso es intensivo en E/S o en CPU para que haya un
equilibrio entre ambos tipos.

Este planificador no se ejecuta constantemente, ya que únicamente actúa cuando un trabajo


sale o entra uno nuevo.

Por ultimo este planificador es el que determina el grado de multiprogramación del sistema.

Planificador a medio plazo.


Los procesos que esperan en la cola de preparados o bloqueados pueden ser sacados de
memoria y almacenados en una zona de disco llamada área de intercambio o swap.

Existen 2 razones para llevar a un proceso que se encuentra en estado de espera (bloqueado o
preparado) a disco: para reducir el grado de multiprogramación real o porque no hay memoria
libre.

Planificador a corto plazo.


Selecciona un proceso de la cola de preparados para su ejecución. Se activa cada vez que
ocurre un evento o bien por temporizador, es decir muy frecuentemente. El encargado de dar
la CPU al proceso es el activador.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

2.5. Algoritmos de planificación a corto plazo.


Tipos de planificadores a corto plazo.

Expulsor
 Puede obligar a los procesos a abandonar la CPU aunque no hayan completado su
ráfaga de CPU.
 Se usa en sistemas donde los procesos importantes deben ejecutarse antes que los
menos importantes.
 También en los sistemas en tiempo compartido (con procesos interactivos) para
asegurar un buen tiempo de respuesta.
 La expulsión tiene un coste de tiempo (por el cambio de contexto) y de memoria(se
mantienen varios procesos en ella para que el cambio sea rápido).

No Expulsor
 Los procesos solo abandonan la CPU al finalizar su ráfaga de CPU.
 Los procesos con mucha E/S tienen que esperar más por culpa de los intensivos en
CPU.
 Si el proceso entra en un bucle sin fin deja colgado al sistema.
 El diseño es más simple que el expulsor.

Objetivos de la planificación.
 Imparcialidad: Todos los procesos deben ser tratados igual y ninguno debe sufrir
inanición.
 Eficiencia: Que el núcleo dedique poco tiempo (sobrecarga) a gestionar la
planificación.
 Minimizar el tiempo de respuesta para los procesos interactivos.
 Favorecer a los procesos importantes.
 Responder bien ante situaciones de uso intensivo de CPU.

FIFO/FCFS
En este estilo de planificación los procesos son atendidos según el orden en que llegaron a la
cola de preparados. Una vez que el proceso tiene la CPU se ejecuta hasta que complete su uso,
es No Expulsor. Realiza una planificación imparcial, aunque perjudica a procesos con mucha
E/S y a los importantes. Si un proceso entra en un bucle sin fin, el sistema se queda colgado.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

RR(Round Robin)
Es un FIFO con planificación expulsora, la CPU se asigna a un proceso durante un tiempo
definido llamado CUANTO o cuantum. Es también un planificador imparcial.

Cuando un proceso sale, si la ráfaga de CPU es mayor que el cuanto implica que ha sido
expulsado, mientras que si es menor implica que ha salido voluntariamente. De esta manera se
consigue una multiplexacion en el tiempo, adecuada para los sistemas de tiempo compartido.

Consideraciones sobre el cuanto:

 Fijo o variable.
 Igual para todos los procesos o distinto para ciertas categorías.
 Grande  RR parecido a FIFO, por lo que aumenta la eficiencia pero tiene menor
tiempo de respuesta.
 Pequeño  Disminuye la eficiencia debido a la sobrecarga del cambio de contexto
pero mejora el tiempo de respuesta ya que el sistema se hace más ágil.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Prioridad
Se asocia una prioridad a cada proceso, y se concede la CPU al proceso con prioridad más alta.
Estas prioridades pueden definirse de 2 formas:

 Internamente: Utilizan valores internos del sistema para definir la prioridad. (Límites
de tiempo y relación de uso de CPU-E/S)
 Externamente: Utilizan criterios externos al SO. (Tipo de usuario, Importancia de la
tarea y dinero pagado por el tiempo de CPU)

La prioridad puede ser de 2 formas:

 Estática:
 No cambia con el tiempo, se asigna al crear el proceso.
 Es fácil de implementar y tiene baja sobrecarga.
 No se adapta al entorno.
 El tiempo de respuesta puede ser más predecible.
 Puede dejar colgado al sistema si un proceso de muy alta prioridad entra en un
bucle sin fin.
 Dinámica:
 Se asigna una prioridad inicial al proceso, pero se puede recalcular/reajustar a
lo largo de su ejecución.
 Es más compleja de implementar y produce más sobrecarga (menos eficiente).
 Se adapta a cambios de entorno.

Así como previamente se diferenciaba entre expulsoras y no expulsoras ahora también:

 Planificación con prioridades no expulsora: Un proceso solo abandona la CPU al


finalizar su ráfaga de CPU, incluso aunque otros procesos más prioritarios pasen a
estar preparados.
 Planificación con prioridades expulsora: Si un proceso más prioritario pasa a estar
preparado, expulsa al proceso en ejecución. Si hay varios procesos de igual prioridad,
se reparte la CPU entre ellos usando Round-Robin o algún otro algoritmo similar.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Colas multinivel con realimentación.


Aplicable para sistemas que manejan procesos de diferentes tipos, por ejemplo procesos
interactivos, procesos intensivos en cálculo y procesos con necesidades de tiempo real.

La cola de preparados se divide en varias colas, y cada cola tiene una prioridad. Los procesos
van entrando a las colas según su prioridad y el planificador escoge el proceso de la cola de
mayor prioridad. Los procesos que llevan mucho tiempo preparados se suben a una cola más
prioritaria para evitar la inanición y en caso contrario, si un proceso agota su cuanto se le baja
de prioridad para que no monopolice la CPU. Los procesos que finalizan operaciones de E/S se
depositan en colas con prioridad alta para acelerar su vuelta a la ejecución.

Este algoritmo se define por:

 Número de colas
 Un criterio para determinar en qué cola entra un proceso de nueva creación.
 Un criterio para determinar cuándo ascender a un proceso a una cola de mayor
prioridad.
 Un criterio para determinar a qué cola vuelve un proceso que pasa de ejecución a
preparado
 Un criterio para determinar a qué cola vuelve un proceso que pasa de bloqueado a
preparado.

2.6. Gestión del procesador en UNIX.


Procesos.
Ciclo de vida de los procesos:

Cada proceso se identifica mediante un PID y estos a su vez se agrupan en: grupos de procesos
y sesiones.

Tipos de procesos.
Procesos del núcleo: Cuyo código está dentro del núcleo, se ejecutan en modo supervisor y
realizan tareas básicas del núcleo.

Procesos de usuario: Su código esta en ficheros ejecutables, se ejecutan en modo usuario y


abarcan tanto programas del sistema como aplicaciones.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Diagrama de estados.

Planificador 4BSD
Se trata de un planificador de colas multinivel con realimentación y dentro de las colas se usa
un Round-Robin con un cuanto de 10 a 100 ms.

Los hilos del núcleo de atención a interrupciones y el código de las llamadas al sistema se
ejecutan con la máxima prioridad.

Los procesos de usuario se ejecutan con prioridades dinámicas. Penaliza los procesos
intensivos en CPU y se permite la interacción del usuario mediante nice. Los procesos en
tiempo real y los ociosos utilizan prioridades estáticas.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Tema 3. Gestión de la memoria.

3.1. Generación del ejecutable y carga en memoria.


Aplicación: Conjunto de módulos en lenguaje de alto nivel, la generación del ejecutable se
hace en dos fases: Compilación y montaje.

 Compilación:
 Resuelve referencias dentro de cada módulo fuente.
 Genera módulo objeto.
 Montaje (o enlazado):
 Resuelve referencias entre módulos objeto.
 Resuelve referencias a símbolos de bibliotecas.
 Genera el ejecutable.

Formato del ejecutable.


 Nº mágico: tipo de ejecutable (S.O.)
 Datos: sólo variables globales, se almacenan en el ejecutable.
 Datos sin valor inicial: no se almacenan en el ejecutable.
 Variables locales y parámetros: dinámicas. Se almacenan en la pila. Se crean al invocar
la función y se destruyen al retornar, la dirección se calcula en tiempo de ejecución.
 Variables globales: estáticas. Se crean al iniciarse el programa y existen durante toda la
ejecución. Tienen una dirección fija en memoria y en el ejecutable.

Mapa de memoria de un proceso


El mapa de memoria de un proceso está compuesto por un conjunto de regiones contiguas y
se crea a partir del fichero ejecutable. Cada sección del ejecutable da lugar a una región:

 Región de código: A partir de la sección de código. Lectura y ejecución.


 Región de datos: A partir de las secciones de datos con valor inicial y datos sin valor
inicial. Lectura y escritura.
 Región de pila: A partir de la sección de pila. Lectura y escritura. Crece hacia las
direcciones más bajas.

Durante la ejecución del proceso se pueden crear nuevas regiones y puede variar el tamaño de
las existentes por lo que el mapa puede tener huecos.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Traducción en tiempo de ejecución.


El programa se carga en memoria sin modificar, la CPU (MMU) implementa una función de
traducción. El núcleo se encarga de: Guardar en el PCB de cada proceso los parámetros de
traducción, especificar a la CPU qué parámetros aplicar para el proceso actual y reubicar, si es
necesario, el proceso en otra zona de memoria y modificar los parámetros de traducción.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

3.2. Cachés.
Principio de localidad de referencia.
Los programas de ordenador suelen acceder repetidamente a conjuntos de datos ( e
instrucciones) que están relacionados.

 Localidad espacial: Si se accede a una cierta posición, es muy probable que en el futuro
cercano se acceda a posiciones cercanas. Por ejemplo, recorrer una tabla
secuencialmente.
 Localidad temporal: Si se accede a una cierta posición, es muy probable que en el
futuro cercano se vuelva a acceder a esa misma posición. Por ejemplo, ejecutar un
bucle repetidamente.

Caché.
Aprovechando la localidad de referencias, se puede utilizar una memoria más rápida M1,
aunque más cara y de menor capacidad, para almacenar una copia del subconjunto de datos
referenciados repetidamente de otra memoria más lenta M2.

Tiempo de acceso medio: t=t1*tA + t2*(1-tA)

T1,t2 = tiempos de acceso de cada memoria.

tA = tasa de aciertos.
𝑐1∗𝑚1+𝑐2∗𝑚2
Coste por MB: 𝑐 = 𝑚1+𝑚2

c1, c2 = coste por MB de cada memoria.

m1, m2 = capacidad de cada memoria.

El caché solo es eficaz si la parte activa de los datos cabe en él.

Funcionamiento del caché.


Los datos se cargan en el cache a medida que se necesitan, por localidad espacial es
interesante cargar un bloque de datos consecutivo y no solo el dato necesario.

Si hay que cargar otro dato nuevo y la caché está llena se machaca otro dato, por localidad
temporal lo más interesante seria eliminar un dato que hace mucho que no se usa.

Cuando se escribe algo en la caché hay que actualizarlo también en la memoria inferior, si se
actualiza en ese momento se llama write-through, y si se actualiza más adelante write-back.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

3.3. Objetivos de la gestión de memoria.


 Reubicación: el programa debe poder cargarse en cualquier zona de memoria libre y
debe poder trasladarse a otra zona de memoria en tiempo de ejecución, lo cual
además es necesario para el planificador a medio plazo.
 Protección: el proceso no puede acceder a zonas de memoria que no le corresponden.
La traducción debe crear espacios disjuntos y es necesario que se validen todas las
direcciones que genera el programa. Esta validación la debe realizar el hardware del
procesador y el tratamiento hacerlo el SO.
 Mejora: que sea posible establecer protección diferenciada para las diferentes
regiones del proceso. Por ejemplo, el código se pude ejecutar pero no se
puede modificar, los datos constantes no se pueden modificar, los datos y la
pila no se pueden ejecutar…
 Crecimiento: la memoria asignada inicialmente debe poder ampliarse y reducirse
dinámicamente.
 Los datos pueden crecer y decrecer (memoria dinámica).
 La pila puede crecer para albergar las direcciones de retorno en llamadas a
funciones, sus parámetros, variables locales y decrecer cuando finaliza la
función.
 El código puede crecer y decrecer si se cargan o descargan módulos
adicionales en tiempo de ejecución.

Una solución fácil sería reservar memoria de más por si se necesita, pero
ineficiente, reservar lo necesario e ir reubicando el proceso cada vez que se
necesite más memoria sería más eficiente pero a la vez más costoso en tiempo de
ejecución.

 Compartición de memoria: Algunas aplicaciones necesitan compartir datos en


memoria entre varios procesos. Si el código es inmutable, podría compartirse entre
todos los procesos que ejecuten el mismo programa. Esta compartición se realiza
bajo control del núcleo, ya que algunas direcciones lógicas de 2 o más procesos se
corresponden con las mismas direcciones físicas. Esto lleva a un mecanismo de
comunicación entre procesos muy rápido compartiendo datos.
Muchos SO incluyen en el mapa de todos los procesos el propio núcleo, de esta
forma las llamadas al sistema son más rápidas y se comparten tablas de páginas.
 El mapa de memoria de un proceso no es homogéneo, es decir, se compone
de un conjunto de regiones con distintas características (Código, pila, datos
de solo lectura…).
 El mapa de memoria es dinámico, ya que hay regiones que cambian de
tamaño, se crean y destruyen regiones…

El gestor de memoria debe dar soporte a estas características y detectar accesos no


permitidos.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

 Proporcionar a los procesos espacios de direccionamiento muy grandes: Algunas


aplicaciones necesitan poder manejar espacios de direccionamiento incluso más
grandes que la RAM. Lo que lleva a que en cualquier momento la suma de todos los
espacios de direccionamiento sea mayor que la RAM, esto se resuelve con la técnica
de la memoria virtual.
 Memoria virtual: Permite que las aplicaciones puedan usar más memoria RAM de la
que está instalada. Del total del espacio de direccionamiento que necesita el
programa, en la memoria física solo hay cargadas el 10%, cuando el proceso quiere
acceder a una parte que no está cargada, el núcleo la carga del disco, asimismo
cuando una parte deja de usarse activamente el núcleo la lleva a disco para dejar
memoria física a otras partes activas u otros procesos. El núcleo con la ayuda de la
MMU es el que realiza todos estos cambios.

Este método es aplicable porque los procesos solo usan parte de su mapa en cierto
intervalo de tiempo, lo que se llama proximidad de referencias. Esto nos lleva a que
gracias a la memoria virtual permite aumentar el grado de multiprogramación real,
al poder tener más procesos en memoria, y permite la ejecución de programas cuyo
mapa no cabría en memoria principal.

3.4. Asignación de espacio contiguo.


Asignación de memoria.
Se trata de poder asignar a un proceso cualquier cantidad de memoria en las zonas de
memoria libre de la RAM para maximizar la flexibilidad y el nivel de multiprogramación. Para
ello necesitamos el soporte de la CPU y un seguimiento por parte del núcleo. Las soluciones
que se dan son la segmentación y la paginación.

Pero antes veremos asignación de memoria continua, por introducir diversos conceptos y
utilizarse en algunos casos.

Asignación contigua.
Se carga el mapa de proceso en una zona contigua de memoria principal. No existen regiones,
y solo requiere un registro base y un registro limite.

El núcleo mantiene información sobre: la tabla de zonas asignadas y zonas libres de la


memoria RAM y una copia del valor de los registros valla de cada proceso en su PCB. Como la
asignación se realiza contigua al cabo de cierto tiempo nos encontramos con una memoria
fragmentada con espacios libres pero discontinuos, los cuales son muy difíciles de utilizar.

Para solucionar el problema de la fragmentación se trata la compactación, pero se trata de un


proceso costoso y que tiene dos problemas principales: consume tiempo desplazar zonas de
memoria y es difícil seleccionar una estrategia de compactación óptima.

Políticas de asignación de espacio.


El objetivo es asignar espacios libres conjugando: buen aprovechamiento de memoria y
algoritmo eficiente. Unas posibles políticas son:

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

 Mejor ajuste (best-fit): Asignar el espacio libre con tamaño suficiente, se trata de
una política ineficiente ya que se generan espacios libres pequeños.
 Peor ajuste (worst-fit): Asignar el mayor espacio libre con tamaño suficiente, con
esta política se generan espacios libres más grandes.
 Primer ajuste (first-fit): Asignar el primer espacio libre con tamaño suficiente, con
esta política no pierdes tiempo en la búsqueda de espacios libres.

3.5. Asignación de espacio no contiguo: Paginación.


La paginación se basa en la división del espacio de direcciones virtuales, se divide en unidades
de tamaño fijo llamadas páginas. Las unidades correspondientes en la memoria física se llaman
marcos de página. Las transferencias entre la RAM y el disco siempre son páginas completas.

Para identificar las páginas tenemos las direcciones lógicas: nº página y desplazamiento, y
existe una tabla de páginas que relaciona cada página con el marco que la contiene, existe una
tabla de páginas para cada proceso y es usada por la MMU para traducir direcciones lógicas a
físicas.

Paginación: Traducción de direcciones.

Contenido de la TP.
 Numero de marco asociado.
 Bit de validez (V)
 Página validada dentro del espacio de direccionamiento del proceso (no es un
hueco)
 Si se accede a pág. inválidaExcepción.
 Información de protección: EXS
 E=escribible, X=ejecutable, S=solo modo supervisor
 Si operación no permitida  Excepción
 Bit de página Presente (P)
 Usado en memoria virtual para indicar si página cargada en memoria
 Si se accede a página no presente Excepción

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

 Bit de página referenciada (Ref o R)


 MMU lo activa cuando se accede a esta página
 Bit de página modificada (Mod o M)
 MMU lo activa cuando se escribe en esta página

Fragmentación interna.
A cada proceso se le asigna un número entero de páginas, aunque la última de cada región no
la use al completo. El proceso puede desperdiciar parte del último marco de cada región.

Tamaño de página.
Condicionado por diversos factores contrapuestos:

 Potencia de 2 (arquitectura de memoria) y múltiplo.


 Mejor pequeño por:
 Menor fragmentación interna.
 Se ajusta mejor al conjunto de trabajo (páginas que usa el proceso en un
momento dado).
 Mejor grande por:
 Tablas más pequeñas.
 Mejor rendimiento en los accesos al área de intercambio (en el disco).
 Compromiso( entre 2K y 16K)

Gestión del núcleo.


El núcleo mantiene una TP por cada proceso, y mantiene la tabla de ocupación de marcos, con
el estado de cada marco. Del mismo modo mantiene una tabla de regiones por cada proceso
para asociar las páginas que corresponden a una región. Por lo que tenemos un mayor gasto
en tablas que con asignación contigua, pero es debido a una mayor funcionalidad.

Protección y memoria virtual.


Cada página tiene unas operaciones permitidas indicadas en la TP. El RLTP controla el acceso a
páginas que no existen. Las páginas pueden no estar en memoria si no se usan, se almacenan
en el área de intercambio y el bit de presencia indica si la página esta en memoria o no.

Translation Look-aside Buffer (TLB)


Cada acceso lógico requiere dos accesos a memoria principal, a la tabla de páginas y al propio
dato o instrucción al que se quiera acceder. Para solucionarlo se presenta el cache de
traducciones TLB, que se trata de una memoria asociativa con información sobre las últimas
páginas accedidas.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

3.6. Implementación de memoria virtual con paginación.


El objetivo es mantener en memoria la parte del proceso que está activa. Si esto no se cumple
se produce un fallo de página, que se trata del acceso a una página que no está en memoria. La
CPU provoca una excepción y el SO se encarga de transferir la página de disco a memoria.

Estrategias de paginación.
 Paginación por demanda: traer a memoria las paginas a medida que se necesitan.
 Prepaginación: Traer paginas por anticipado( aunque todavía no se hayan demandado)
 En fallo de página se traen, además, otras páginas que se prevé que necesitara
el proceso en el futuro cercano.
 Se monitorizan los procesos y se traen a memoria las páginas que
habitualmente usa.
 Beneficiosa dependiendo de si hay acierto en la predicción.

Tratamiento del fallo de página.


La MMU produce una excepción y se ejecuta la rutina del sistema operativo que procesa los
fallos de página.

Si no hay ningún marco libre:

 Selección de victima (algoritmo de reemplazo): página P en marco M. Marca P como


no presente y M como libre.
 Si P modificada (bit Mod de la P activo). Inicia escritura del marco donde está P en
disco.

Si hay marco libre, el M se ha liberado o lo había previamente:

 Carga la página al marco M.


 En la TP marcar la entrada de página presente, apuntando a M.
 Poner M como ocupado en lista de marcos libres si no lo estaba.

El fallo de página puede implicar dos operaciones en disco (liberar marco + cargar nueva
página)

Algoritmos de reemplazo.
El objetivo de estos algoritmos es minimizar la tasa de fallos de página. Cada algoritmo tiene
una versión local, criterio que se aplica a las paginas residentes del proceso, y otra global,
criterio que se aplica a las paginas residentes de todos los procesos.

Algoritmo óptimo.
La victima es la página en memoria que tardará más en volverse a usar, lo cual es imposible de
implementar porque necesita conocer el futuro para ser realizado. Este algoritmo tiene interés
para analizar otros procesos reales comparando su efectividad con la de este.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Algoritmo FIFO
La victima es la página que lleva más tiempo en memoria. Se trata de un algoritmo de fácil
implementación ya que se expulsa a la primera de la cola, pero no se trata de una buena
estrategia, ya que una página que lleva mucho tiempo residente puede seguir accediéndose
frecuentemente. Su criterio no se basa en el uso de la página.

Algoritmo LRU(Last Recently Used)


La víctima es la página en memoria menos usada recientemente. Por proximidad si una no se
ha utilizado recientemente es probable que no se use en un futuro próximo. La
implementación de esta es complicada, por lo que se suele implementar vía Hardware:

 En cada entra de TP hay un campo llamado contador con valor inicial 0.


 La MMU tiene un registro contador que se incrementa en 1 con cada acceso a
memoria.
 En cada acceso a memoria, la MMU copia el valor del registro contador al campo
contador de la entrada de la TP referenciada.
 Se reemplaza la página con el contador más bajo.

Algoritmo NRU (del reloj o 2ª oportunidad)


Se trata de un algoritmo FIFO + con el uso del bit de referencia Ref de página accedida. Si la
página elegida por FIFO no tiene activo Ref esta es expulsada, en cambio sí lo tiene activo (2ª
oportunidad) se desactiva Ref, se pone la página al final de la cola y se aplica el criterio a la
siguiente página.

Una alternativa a usar cola FIFO es tratar la tabla como una lista circular, con una referencia a
la página evaluada en el último reemplazo, se visualiza como un reloj donde la referencia a la
última página evaluada es la aguja del reloj.

Políticas de asignación de marcos a proceso.

Fija:
El número de marcos asignados al proceso (conjunto residente) es constante, pero puede
depender de las características del proceso. Esto lleva a un inconveniente, no se adapta a las
distintas fases del programa, pero es fácil de implementar. Solo tiene sentido su uso en
reemplazo local.

Dinámica:
El número de marcos varía dependiendo del comportamiento de los procesos. Si se usa con el
reemplazo local un proceso va aumentando o disminuyendo su conjunto dependiendo de su
comportamiento. Con la asignación dinámica los procesos se quitan páginas entre ellos.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Hiperpaginación (Trashing).
Se trata de una tasa excesiva de fallos de página de un proceso o en el mismo sistema. Con
asignación fija existe hiperpaginación si: |conjunto residente de Pi| < |conjunto de trabajo Pi|,
con asignación dinámica si: |nº de marcos del sistema|< Σ |conjuntos de trabajo de todos los
procesos|.

El grado de uso de la CPU cae drásticamente, ya que los procesos están casi siempre en colas
de dispositivo de paginación.

La solución a este problema es el control de carga:

 Disminuir el grado de multiprogramación en el sistema, impidiendo la entrada de


nuevos procesos  Planificador a largo plazo.
 Disminuir el grado de multiprogramación real: suspender 1 o más procesos liberando
sus páginas residentes  Planificador a medio plazo.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Tema 4. Concurrencia

4.1. Ejecución concurrente.


Se dice que dos procesos son concurrentes cuando su ejecución se simultanea en el tiempo. En
sistemas monoprocesador, la ejecución concurrente es aparente y se produce al intercalar
procesos en los cambios de contexto. En multiprocesador si que se puede dar la verdadera
ejecución concurrente al tener varias CPU.

Por ser un sistema multiprogramado, ya cabe la posibilidad de ejecución concurrente entre


procesos e hilos. Esta ejecución concurrente puede ser intencionada y deseada o no.

Para hablar de la concurrencia es muy importante el concepto de recurso compartido, que es


aquel recurso que puede ser utilizado concurrentemente por dos o mas procesos o hilos, que
puede ser una estructura de datos, un fichero o un periférico.

4.2. Problemática general de la concurrencia.


 Uso de recursos compartidos: Hay que coordinar el acceso a los recursos, en algunos
casos el sistema se encarga de la coordinación “transparentemente”, en otros los
procesos se han de coordinar entre si explícitamente. Por ejemplo: Dos procesos piden
memoria a la vez, o renombran el mismo el mismo fichero a la vez…
 Secuenciación de operaciones: Las diferentes tareas concurrentes han de respetar
posibles dependencias temporales entre ellas. Por ejemplo: Un proceso lee pistas de
audio y otro las va codificando a medida que se leen.

4.3. Interacción entre procesos concurrentes.


 Competencia: Los procesos no tienen conocimiento de los demás. Ejemplo: Varios
procesos usan la impresora a la vez.
 Cooperación por compartición: Los procesos tienen un conocimiento indirecto de los
otros. Ejemplo: Varios procesos usan el mismo fichero , unos para leer y otros para
escribir.
 Cooperación por comunicación: Los procesos tienen un conocimiento directo de los
otros. Ejemplo: Procesos que se comunican mediante mensajes.

4.4. Sección critica.


La sección critica se trata de una sección del código que accede a unos recursos compartidos y,
mientras los usa, otros procesos o hilos no deberían acceder a esos mismos recursos. Para
conseguirlo las secciones criticas deberán ejecutarse atómicamente, es decir a tal velocidad
que los procesos no ven los estados intermedios de la operación. Para que exista la mayor
concurrencia posible hay que identificar adecuadamente estas secciones y que estas sean
mínimas.

Para solucionar este problema se deben cumplir alguno de estos requisitos:

 Exclusión mutua: Si un proceso esta ejecutando código de la sección critica, ningún


otro proceso lo podrá hacer.
 Progresion: Un proceso permanece en la sección critica un tiempo finito.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

 Espera limitada: Cuando un proceso quiera entrar en una sección critica, se le


autorizara un tiempo finito.

La región critica se crea por Brich Hansen como una herramienta de programación para
resolver el problema de la sección critica, asi como las regiones criticas condicionales, que son
para poder esperar a que se cumpla una condición dentro de una región critica. Por ejemplo,
para sacar un elemento de la cola tiene que haber elementos, o para añadirlos debe haber
espacio.

4.5. Semáforos.
Se trata de un contador interno atomico, que ayuda a la ejecución concurrente y a solucionar
el tema de las secciones criticas, es decir es una manera de implementar regiones criticas.

Junto a los semáforos también existen en java los objetos atómicos, en los cuales todas las
operaciones son atomicas, pero antes de usarlas hay que valorar si realmente interesa el uso
de estas.

4.6. Monitores.
Se trata de una herramienta de sincronización que permite a los hilos:

 Ejecutar las operaciones sobre el monitor en exclusión mutua.


 Esperar de manera inactiva a que se cumpla una condición
 Avisar a los demás hilos de cuando se ha producido una condición.

4.7. Mutex o cerrojo.


Un mutex o cerrojo es una herramienta de sincronización que sirve para implementar regiones
criticas.

Tiene 2 operaciones atomicas:

 Lock() Intenta obtener el cerrojo. Si el cerrojo ya esta asignado el hilo se bloquea.


 Unlock() Libera el cerrojo. Si existen hilos bloqueados en el cerrojo, se desloquea a
uno.

Una variable de condición o cola de eventos, permite dejar bloqueado a un hilo a la espera de
que alguien lo despierte, se asocian a cerrojos para crear regiones criticas condicionales con
multiples colas de hilos bloqueados. Se puede despertar a los hilos de una cola( variable de
condición) sin despertar a los que esperan en otra cola, cuando se despierta a un hilo este
vuelve a la cola asociada al cerrojo, y cuando consigue bloquearlo ejecuta la instrucción que
evalua la condición.

4.8. Interbloqueo
Se trata de un bloqueo permanente de un conjunto de procesos que compiten por los recursos
del sistema o se comunican entre si. Problema dependiente de la velocidad de ejecución de los
procesos. Para que se produzca interbloqueo se deben dar:

 Exclusión mutua: Los procesos acceden a los recursos en exclusión mutua.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

 No apropiación: Un recurso solo puede ser liberado voluntariamente por el proceso


que lo tiene asignado.
 Retención y espera: Los procesos retienen los recursos que han conseguido hasta el
momento y esperan para conseguir otros que están siendo usados.
 Espera circular: Ha de existir una espera circular de dos o mas procesos, cada uno de
los cuales espera para captar un recurso que esta utilizando el siguiente proceso del
circulo.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Tema 5. Sistema de entrada y salida.


Lo básico en un ordenador lo constituye la CPU y la memoria, pero no servirá de nada sin
dispositivos de almacenamiento secundarios (discos) y terciario (cintas, CD-ROM, DVD…) y sin
dispositivos periféricos, que le permitan interactuar con el usuario. (Teclados, ratones,
micrófonos…). Todos estos se pueden agrupar en 3 grupos:

 Periféricos: Se llama así a los dispositivos que permiten la comunicación entre los
usuarios y el ordenador. Dentro de este grupo se incluyen todos los dispositivos que
sirven para proporcionar interfaz con el usuario, tanto para entrada (ratón, teclado…)
como para salida (impresoras, pantalla…)
 Dispositivos de almacenamiento: Se usan para proporcionar almacenamiento no
volátil de datos y memoria. Su función primordial es abastecer de datos y
almacenamiento a los programas que se ejecutan en la CPU. Según su capacidad e
inmediatez se pueden dividir en almacenamiento secundario (discos) y terciario
(cintas, CD, DVD…).
 Dispositivos de comunicaciones: Permiten conectar al ordenador con otros
ordenadores a través de una red. Los dos tipos de dispositivos más importantes de
esta clase son los MODEM y tarjetas de red.

Dentro de un dispositivo de E/S se distinguen 2 elementos:

 Periférico o dispositivo de E/S: Elemento electromecánico que proporciona la


funcionalidad final. (Monitor).
 Controlador de periférico (controller): Elemento electrónico unido a los buses del
sistema que sabe cómo manejar el dispositivo de E/S. Es el componente electrónico a
través del cual se conecta el dispositivo de E/S al sistema, que puede estar integrado
en la placa base.

5.1. Controlador de periférico.


Los controladores son muy variados, casi tanto como los dispositivos de E/S, muchos pueden
controlar múltiples dispositivos. Otros incluyen su propia CPU y memoria para controlar la E/S
por programa, y evitar así interrupciones continuas con la CPU del ordenador.

Existe un esfuerzo importante de estandarización de los dispositivos, lo que permite usar un


mismo controlador para dispositivos de distintos fabricantes.

El controlador es el componente más importante desde el punto de vista del núcleo, ya que
constituye la interfaz del dispositivo junto con el bus del ordenador y es el componente que se
ve desde la CPU. Su programación se lleva a cabo mediante una interfaz de muy bajo nivel que
proporciona acceso a una serie de registros del controlador. Las características del controlador
son muy importantes, ya que definen el aspecto del periférico para el núcleo, que pueden ser:
Dirección de E/S, unidad de transferencia de caracteres, bloques o paquetes; o una interacción
ordenador-controlador con E/S programada.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

5.2. Problemática de la E/S: velocidad.


Diferencia de velocidad entre la CPU y los dispositivos de E/S, ya que la CPU procesa
instrucciones a velocidades aproximadas de 1GHz y la memoria RAM tiene un tiempo de
acceso de nanosegundos.

La mayoría de los dispositivos de E/S tienen tiempos de acceso de milisegundos (hay


excepciones) y velocidades de transferencia muy inferiores a la memoria RAM. Esta diferencia
hace que los sistemas de E/S sean el cuello de botella más importante de los sistemas de
computación y que todos los SO dediquen un gran esfuerzo a optimizar todos los mecanismos
de E/S.

5.3. Problemática general de la E/S.


Los dispositivos de E/S son difíciles de manejar y cada uno tiene sus peculiaridades: Máquinas
de estados complejas, tamaño de la unidad básica de transferencia, representación de los
datos…

5.4. Sistema de E/S


Es la parte del núcleo que se ocupa de facilitar el manejo de los dispositivos de E/S ofreciendo
una visión lógica simplificada de los mismos que pueda ser usada por otros componentes del
núcleo (como el sistema de archivos) o incluso por el usuario. El núcleo debe controlar el
funcionamiento de todos los dispositivos de E/S para alcanzar los siguientes objetivos:

 Facilitar el manejo de los dispositivos periféricos. Para ello debe ofrecer una interfaz
entre los dispositivos y el resto del sistema que sea sencilla y fácil de utilizar.
 Optimizar la E/S del sistema, proporcionando mecanismos de incremento de
prestaciones donde sea necesario.
 Proporcionar dispositivos virtuales que permitan conectar cualquier tipo de dispositivo
físico sin que sea necesario remodelar el sistema de E/S del núcleo.
 Permitir la conexión y desconexión de dispositivos nuevos de E/S, solventando de
forma automática su instalación usando mecanismos del tipo plug&play.

Dentro de la arquitectura del sistema de E/S tenemos:

 Software independiente del dispositivo: Lo forman los niveles superiores del núcleo. Su
función es ejecutar las funciones de E/S que son comunes a todos los dispositivos a
través de una interfaz uniforme. Realiza:
 Almacenamiento intermedio: usar buffers del núcleo para acomodar los
diferentes tamaños y velocidades de acceso.
 Gestión de dispositivos: nombrado, protección y control de acceso.
 Planificación de E/S: colas de peticiones para cada dispositivo. Se ordenan
según una política de planificación.
 Gestión de errores: errores transitorios y permanentes.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

 Manejador del dispositivo:

5.5. E/S Bloqueante y no bloqueante.


 Bloqueante: proceso bloqueado hasta que la E/S termina. Es fácil de usar y
comprender pero es insuficiente para algunos requisitos.
 No bloqueante: se encola la E/S y el proceso continúa. Interfaz de usuario más
compleja y realiza operaciones asíncronas: El proceso continúa ejecutándose en
paralelo con la realización de sus operaciones de E/S, el proceso utiliza algún
mecanismo del núcleo para comprobar el estado y la terminación de sus operaciones
de E/S.

5.6. Buffering.
Consiste en usar una zona de memoria como almacenamiento intermedio en una transferencia
de datos. Tiene como ventajas que permite adaptar velocidades entre productor y
consumidor, permite agrupar múltiples transferencias pequeñas en una grande, diferenciar
entre la zona de memoria usada para transferencias por el núcleo y por el proceso y permite
expulsar al proceso de memoria mientras se realiza la E/S, pues esta se hace sobre la zona de
memoria del núcleo.

Como caso particular del buffering tenemos el spooling en el que se usa el dispositivo como
almacenamiento intermedio porque el dispositivo es mucho más lento que el proceso o
porque el volumen de datos de cada transferencia puede ser muy elevado.

Los trabajos pendientes se encolan en el área de spool y cabe la posibilidad de aplicar


algoritmos de planificación para seleccionar cual será el siguiente que se procese.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

5.7. Discos.
Se trata de dispositivos básicos para llevar a cabo el almacenamiento masivo y no volátil de
datos. Además se usan como plataforma para el sistema de intercambio que usa el gestor de
memoria virtual.

Un disco duro es un dispositivo de gran capacidad compuesto por varias superficies con
material magnético y un bloque de cabezas de lectura/escritura. Las superficies del disco están
divididas en cilindros, con dos pistas por plato y un cierto número de sectores por pista.

Capacidad=cilindros*pistas*sectores*tamaño del sector.

Los componentes principales del tiempo de acceso en un disco duro:

 Búsqueda (mover la cabeza al cilindro). Típico 5-15ms


 Latencia rotacional (esperar a que el sector pase bajo la cabeza). Típico 2-8 ms.
 Lectura/escritura. Típico <<1 ms

En disco de estado sólido (SSD), el tiempo de acceso típico es inferior de 0,1 ms.

5.8. Planificación de disco eficiente.


Con la planificación se busca minimizar los desplazamientos de las cabezas de
lectura/escritura. Agrupar operaciones sobre sectores consecutivos.

FIFO.
Las peticiones se atienden según llegan.

Las cabezas se han movido por 640 cilindros.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Shortest Seek First (SSF)


Primero las peticiones que minimizan el movimiento de cabezas desde la posición actual, pero
puede causar inanición de ciertas peticiones. La idea principal es maximizar el ancho de banda
del disco.

Las cabezas se han movido por 236 cilindros.

Ascensor (SCAN)
El movimiento del brazo empieza siempre en un extremo del disco y continúa hasta el otro. Allí
cambia de sentido y se vuelve el otro extremo. Con esto se pretende evitar atrás y adelante, lo
que lleva a que se pueda retrasar mucho el servicio da algunas peticiones si no se insertan
adecuadamente.

Las cabezas se han movido por 236 cilindros.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Ascensor cíclico (CSCAN)


Se trata de una variación del ascensor, las cabezas se mueven de un lado al otro del disco y
luego vuelven al principio, mientras estas vuelven no se atiende a peticiones. Trata los cilindros
como una lista circular que enlaza el último cilindro con el primero.

El movimiento de las cabezas en este ejemplo es de 382, el número es engañoso, ya que el


salto de la última a la primera se hace en un solo movimiento.

5.9. Caché de disco.


El núcleo usa parte de la memoria principal como cache para los accesos a disco, sobre todo
los del sistema de ficheros. Hay dos políticas de escritura:

 Síncronas (write-through): menor rendimiento y mayor seguridad.


 Asíncronas (write-back): mayor rendimiento y menor seguridad.

5.10. Fiabilidad y tolerancia a fallos.


El sistema de E/S es uno de los componentes del sistema con mayores exigencias en cuanto a
fiabilidad, debido a que se usa para almacenar datos y programas de forma permanente.

Las principales técnicas usadas para proporcionar esta fiabilidad y tolerancia a fallos son:

 Códigos correctores de error, como los existentes en las cabeceras y colas de los
sectores.
 Redundancia, tanto en datos replicados como un código de paridad para detectar
errores y recuperarlos. Esta técnica se implementa mediante el uso de dispositivos
RAID ( Redundant Array of Inexpensive Disks).
 Redundancia hardware: conectar un disco a través de dos controladores.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Sistemas RAID.
Conjunto de discos físicos vistos por el sistema como una sola unidad lógica. Mejora la
capacidad de almacenamiento, las prestaciones (ancho de banda y tiempo de respuesta),
aumento de la disponibilidad del sistema.

JBOD (Concatenación)
Busca capacidad sacrificando la disponibilidad, y pueden usar discos de tamaños diferentes.

Raid 0 (Seccionado o Stripping)


Busca capacidad y rendimiento sacrificando la disponibilidad. Divide cada disco en bandas de
tamaño fijo, por lo que se pueden ejecutar en paralelo operaciones sobre bandas de diferentes
discos, del mismo modo se pueden usar en paralelo varios discos para una operación que
abarque más de una banda.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Raid 1 (Espejo o Mirror)


La escritura se realiza en ambos discos, por lo que es más lento, pero la lectura se hace del
primero que esté disponible por lo que es más rápido. En caso de fallo el sistema continúa
funcionando en modo degradado hasta que se restaura y se puede volver a re sincronizar el
espejo.

Raid 10 (Seleccionado+Espejo)
Combina el Raid 0 y 1, por lo que tolera el fallo de un disco pero sigue costando el doble.

Raid 5 (Paridad distribuida)


Tolera el fallo de un disco, pero el coste es reducido. Tiene prestaciones similares a Raid 0 pero
es peor en escrituras pequeñas.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Paridad.
La paridad más usual es la Xor.

Supongamos un Raid 5 con 4 discos para datos, 1 disco para paridad y uno de repuesto, donde
se han guardado estos datos.

Si el disco 3 falla por ejemplo, se puede recuperar su información a través del resto de los
discos y empezar a usar el disco de repuesto.

Paridad= 00101010 XOR 10001110 XOR 11110111 XOR 10110101 = 1110010

Disco reserva= 00101010 XOR 10001110 XOR 10110101 XOR 11100110 = 11110111

Otras consideraciones sobre las RAID son el uso de discos de reserva en configuraciones
redundantes para reducir el tiempo de funcionamiento degradado o el empleo de memorias
no volátiles respaldadas por batería en las controladoras para no perder escrituras en caso de
fallo de alimentación.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Tema 6. Sistema de ficheros

6.1. Introducción.
Un sistema de ficheros está formado por ficheros (archivos), directorios (carpetas), y sistemas
de ficheros y particiones (volúmenes). Estos se pueden dividir en locales (FAT, NTFS, HFS…) o
remotos (NFS, CIFS).

De forma lógica estos ficheros se ven como unidades, directorios o ficheros, pero en realidad
no son más que bloques de octetos ubicados en dispositivos de almacenamiento.

6.2. Sistemas de ficheros y particiones.


Un disco se estructura en el sector maestro (MBR), una tabla de particiones (MBR/GPT) y una o
más particiones. En cada partición puede haber un único sistema de ficheros o un área de
intercambio (swap). Un sistema de ficheros se estructura en:

 Programa de arranque (boot).


 Superbloque: información sobre la estructura del sistema de ficheros.
 Descriptores de ficheros.
 Bloques de datos: datos de ficheros y directorios.

Partición o volumen
Se trata de una porción de disco a la que se dota de una identidad propia y que puede ser
manipulada por el SO como una entidad lógica independiente, dentro de cada partición se
puede instalar un sistema de ficheros (formatear el disco). La tabla de particiones indica el
principio, el tamaño y el tipo de cada partición. Las particiones se pueden diferenciar entre:

 Activa o raíz: la que contiene el SO y permite arrancar.


 Swap, destinada al intercambio de páginas de la memoria virtual (no tiene sistema de
ficheros).
 Otras, extendidas: para sistemas de ficheros adicionales.

Montaje de sistemas de ficheros.


Permite disponer de un sistema de ficheros único para acceder a todos los discos y particiones
del sistema y oculta el nombre del dispositivo físico o partición. En Unix se usa un sistema de
ficheros inicial y los otros se montan a partir de directorios. Se obtiene un solo árbol jerárquico
de directorios. En Windows se usan unidades lógicas (C:, D:, E:, …) y también se pueden
montar las particiones o discos de forma jerárquica.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

6.3. Ficheros
Concepto.
Un fichero es un almacén de datos arbitrarios no volátil, identificado por un nombre y unos
atributos. Existen múltiples tipos de ficheros, que suelen diferenciarse por un número mágico
en la cabecera o por su extensión en el nombre. El SO no puede reconocer los tipos de ficheros
excepto los ejecutables, en Windows el explorador sabe lanzar la aplicación asociada según la
extensión del fichero.

El fichero tiene estos atributos diferenciados:

 Tipo de fichero: necesario en sistemas que proporcionan distintos formatos de


ficheros para saber que aplicación puede manejarlo.
 Tamaño del fichero: número de bytes en el fichero, máximo tamaño posible, etc.
 Protección: control de accesos y de las operaciones sobre el fichero.
 Información temporal: fecha de creación, de acceso, de modificación…
 Información de control: fichero oculto, de sistema, normal o directorio, comprimido,
cifrado…

El contenido del fichero se trata de una ristra de octetos, que se diferencia entre:

 Ficheros de texto plano: Contienen solo caracteres imprimibles de alguna manera, se


estructuran en líneas, separadas por caracteres de fin de línea, pueden usar etiquetas
para dar mayor estructura y son manipulables por programas y por el usuario
directamente.
 Ficheros binarios: Contienen cualquier valor de octetos. Su estructura interna puede
ser cualquiera, pero suelen constar de una cabecera, seguida de una secuencia de
registros de tamaño fijo, y es necesario un programa o biblioteca específica para
manipularlos.

Modos de acceso.
Son los métodos que ofrece el SO a las aplicaciones para acceder a los ficheros. Modos:

 Por posibilidad de modificar el contenido: Lectura, escritura (manteniendo o


eliminando el contenido leído) o lectura y escritura.
 Por forma de recorrer el contenido: Secuencial o directo.

Modo de acceso secuencial.


Al abrir el fichero, el puntero de la posición actual esta al principio del fichero. Cada operación
de lectura o escritura avanza el puntero por el número de octetos transferidos. Para acceder a
un registro determinado es necesario recorrer todos los anteriores.

El acceso secuencial tiene 2 operaciones: Leer o escribir el siguiente e ir al principio o al final.


Para leer el anterior hay que empezar desde el principio.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Modo de acceso directo (aleatorio)


Al abrir el fichero, el puntero de la posición actual esta al principio del fichero. Se puede mover
el puntero directamente a cualquier posición del fichero (fseek()). Cada operación de lectura o
escritura avanza el puntero por el número de octetos transferidos.

El acceso directo tiene 2 operaciones: Leer o escribir siguiente e ir a una posición definida. Este
tipo de acceso es utilizado en dispositivos de tipo disco y es imprescindible en bases de datos.

Asignación de espacio en disco.


Un usuario ve un fichero como una visión lógica, es decir, un conjunto de registros, mientras
que el SO lo ve como una visión física ligada a dispositivos, como un conjunto de bloques. Un
bloque es una unidad de transferencia entre el disco y memoria formado por 2n sectores
consecutivos, su principal ventaja es que reduce las transferencias de E/S frente a usar
sectores.

El tamaño del bloque es un parámetro, generalmente fijo, que se decide al crear el sistema de
ficheros (formateo). Esto produce una fragmentación interna ya que, por ejemplo, un fichero
de 1 byte ocupa 4KiB en un disco con bloques de 4KiB.

El descriptor del fichero tiene la información relacionada con el fichero y se apunta a él desde
los directorios.

En si la asignación determina cómo se almacena físicamente el fichero en el disco. Y existen


diversos métodos:

Asignación contigua.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Desfragmentando el disco:

Asignación enlazada.

En FAT(ms-dos) se usa una asignación enlazada, pero los enlaces no se almacenan en el bloque
sino en una tabla llamada FAT.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

FAT: Estructura del sistema de ficheros.

La tabla de asignación de ficheros (FAT) contiene todos los punteros a bloques, así como los
bloques libres y erróneos.

Ejemplo:

Ficheros A:3,1,9 B:8,5,13,19,11 C: 16,17,18.

Bloques libres: 2, 4, 6, 7, 10, 12, 20. Erróneos: 15

La FAT es lo suficientemente pequeña y compacta para que el núcleo la cargue completamente


en memoria al montar el sistema de ficheros, y eso la hace muy rápida de usar.

Asignación indexada.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

Gestión del espacio libre


Mecanismos para la gestión del espacio libre en memoria.

6.4. Directorios
El sistema de ficheros dispone de una estructura de directorios que le permite gestionar un
gran número de ficheros de manera eficiente. El directorio es propiamente dicho un fichero,
cuyo contenido es manejado por el SO. El directorio ofrece:

 Información sobre como localizar un fichero a partir de su nombre.


 Una organización jerárquica (estructura en forma de árbol) con directorios dentro de
directorios (subdirectorios).
 Acceso a múltiples dispositivos (incluso discos de otras máquinas) desde el mismo
árbol de directorios.

Implementaciones.
Para implementar el directorio hay dos alternativas:

 Almacenar el nombre y descriptor del fichero dentro del directorio.


 Almacenar solo el nombre y una indicación de donde está el descriptor del fichero
(que contiene el resto de la información).

FAT
En FAT cada entrada de directorio contiene un descriptor de fichero, un campo apunta al
primer bloque y el resto de los punteros a bloques que se obtienen de la FAT.

Descargado por Andreas Deris (malmsteen@123mail.cl)


lOMoARcPSD|5957588

La FAT32 tiene de especial que para permitir nombres largos y tener compatibilidad hacia atrás
se usa una entrada con el nombre en formato 8+3 y de 1 a 63 entradas extras con el resto del
nombre.

UFS

En la entrada del directorio se almacena el nombre y el nº de inodo que contiene el resto de la


información. Este sistema utiliza una caché en memoria principal para: Bloques de datos,
inodos de ficheros abiertos y traducción de nombres de fichero.

Hay que buscar un equilibrio entre cantidad de memoria dedicada a caché, rendimiento de
escrituras y pérdida de datos o corrupción en caso de caída abrupta.

Nombrado múltiple de ficheros.


Algunos SO permiten que un fichero pueda ser accedido desde diferentes directorios, también
es posible que el fichero tenga varios nombres, según desde donde es visto. Se utiliza una
variante de la estructura jerárquica llamada grafo acíclico. Para realizarlo usan 2 técnicas:
Enlace físico o puntero directo (hardlink) y enlace simbólico o puntero indirecto
(softlink/acceso directo).

Enlace físico.
En el directorio se almacena el mismo puntero a descriptor que otro fichero del directorio.

Por ejemplo: /home/marivi/claves y /home/Elvira/agenda apuntan al mismo al mismo fichero


físico.

Enlace simbólico.
Se usa un fichero especial cuyo contenido es el nombre de otro fichero al cual apunta. Si se
borra el fichero original, el enlace simbólico queda inútil (dangling).

Descargado por Andreas Deris (malmsteen@123mail.cl)

También podría gustarte