Tema 1. Introducción.

Anuncio
Tema 1.
Introducción.
Sistema Operativo : Es un "programa" cargado al encender el computador,
que actúa como intermediario entre el usuario y el hardware de la máquina,
cuyo objetivo es proporcionar unas utilidades que permitan ejecutar diversos
procesos de manera cómoda y fácil.
Evolución de los S.O. :
1. - Biblioteca de Operaciones.
2. - Monitor Sencillo (uso de tarjetas en bloques).
3. - Proceso fuera de linea (conversión tarjeta a cinta en terminales remotos).
4. - Buffering (uso de buffers).
5. - Spooling (uso de colas).
6. - Multiprogramación.
7. - Sistemas de tiempo compartido (multiusuarios).
Tema 2.
Estructura del Sistema Operativo.
Funciones del Sistema Operativo:
1. - Administración de procesos.
2. - Administración de la memoria principal.
3. - Administración del almacenamiento secundario.
4. - Administración del sistema de E/S.
5. - Administración de archivos.
6. - Control de Redes.
7. - Sistema de Protección.
8. - Sistema interprete de mandatos (SHELL).
Servicios del Sistema Operativo:
- Al usuario ============> mediante programas del sistema
(que a su vez utilizan llamadas al sistema)
- Al programa o proceso ===> mediante llamadas al sistema
Programas del Sistema (se agrupan en 7 categorías):
1. - programas de aplicación.
2. - comunicación
3. - carga y ejecución de programas.
4. - apoyo a lenguajes de programación.
5. - modificación de archivos.
6. - manipulación de archivos.
7. - información de estado.
Llamadas al Sistema (se agrupan en 5 categorías):
1. - control de procesos.
2. - manipulación de archivos.
3. - manipulación de dispositivos.
4. - mantenimiento de la información.
5. - comunicaciones.
Estructura del Sistema Operativo:
- estructura sencilla (MS-Dos, Dr-Dos)
- enfoque por capas (Venus, 370, OS/2)
Maquina Virtual (pag. 77-81)
Diseño e implantación de un Sistema Operativo (pag. 81-85)
Tema 3.
Procesos.
Hay que tener muy claras las diferencias entre programa y proceso:
Un programa es una entidad pasiva compuesta únicamente por un código y
unos datos, es decir, tiene un listado fijo.
Un proceso es una entidad activa, es el "programa" en ejecución
Un proceso se compone de:
- Código del programa que ejecuta.
- Estado del proceso:
- sección de datos.
- pila
- contador de programa
- puntero de pila
- palabra de estado
- registros de uso general
- información del S.O.
Un proceso puede tener tres estados distintos:
- preparado: el proceso está listo para pasar a ejecutarse.
- en ejecución
- en espera: por alguna razón (operación de E/S, interrupción, etc.) el
proceso debe esperar a que se acabe una acción sin la cual no puede continuar
su ejecución.
Ejecución de procesos:
El S.O. inicia la ejecución de un proceso nuevo que está preparado. Cuando
este proceso no va a utilizar la CPU durante un tiempo (hay una llamada a E/S,
etc.) el S.O. lo pone en espera hasta que acaba esa operación. Mientras tanto
pasa a la CPU la ejecución de otro proceso que estuviera preparado y realiza
los mismos pasos: ejecuta hasta que este deja de usar la CPU, lo pone en
espera si es necesario y pasa a ejecutar otro.
Cuando la acción del proceso que está en espera termina (acaba la E/S, etc.)
el S.O. lo pone otra vez en estado de preparado, así hasta que termina con todo
el proceso.
En todos estos cambios de estado el S.O. debe guardar el "contexto" del
proceso, en el cual está toda la información necesaria para volver a ejecutarlo
donde se dejó. Esta información se guarda en el Bloque de Control de Procesos
(PCB), que tiene una dirección de memoria protegida que solo puede modificar
el S.O.
El S.O. deberá decidir que proceso de los que están en espera pasará a
ejecución cuando la CPU quede libre, esta decisión la hará a través de un
Planificador de Procesos.
Planificación de Procesos:
Existen dos planificadores que se encargan respectivamente de pasar trabajos
o procesos a la memoria principal y a la CPU.
El más importante es el Planificador de la CPU que se encarga de decidir
qué procesos de los que están preparados pasarán a ejecución cuando la CPU
se libere de algún otro proceso (cuando este pase a estar en espera). Esta
planificación puede ser apropiativa o no apropiativa, siendo la primera
aquella en la que unos procesos tienen prioridad sobre otros y cuando acaban de
estar en espera y pasan a preparado hacen que el S.O. les dé paso a la CPU
que abandona el proceso que tenía en ejecución, lo pone en preparado y pasa a
ejecutar el que tiene prioridad. Con el otro sistema la CPU ejecuta un proceso
hasta que lo termina o por alguna razón éste pasa a estar en espera.
Existen varios criterios por los cuales la CPU es capaz de cambiar de
proceso en ejecución:
- Utilización de la CPU: el S.O. pretende que la CPU este el menor tiempo
posible inactiva.
- Productividad.
- Tiempo de retorno: el proceso en ejecución tarda mucho en acabar una
acción, pudiendo encontrarse en un bucle muy largo.
- Tiempo de espera: se pretende que los procesos no estén demasiado tiempo
en espera.
- Tiempo de respuesta.
Algoritmos de planificación.
- FCFS (first come, first served).
- SJF (short job first).
- Planificación por prioridades.
- RR (round robin).
- Planificación de colas de multiples niveles.
- Planificación de colas de multiples niveles con realimentación.
Planificación de procesadores multiples.
Evaluación de algoritmos.
- Modelado determinista.
- Modelos de colas.
- Simulaciones.
Tema 4. Sicronización de Procesos.
Sección Crítica
Segmento de código en el cual el proceso puede estar modificando variables
comunes.
Una solución para el problema de la sección crítica debe cumplir los tre
requisitos siguientes:
- Exclusión mútua: Solo un proceso puede estar ejecutando su sección
crítica.
- Progreso.
- Espera limitada.
Semáforos
Herramienta de sincronización de procesos.
Permiten ejecutar un proceso que se detiene en espera de que otro (ejecutado
concurrentemente) le pase un dato o le de permiso.
Ejemplo: P2 necesita que la cola C esté libre para poder entrar.
La CPU ejecuta C2 hasta llegar al punto en que debe entrar, un semáforo
detiene su ejecución, y la pasa a otros procesos hasta que uno de ellos (P1) hace
que la cola se vacíe. Cuando P1 acabe su uso de la CPU y lo recupere P2 el
semáforo estará abierto y P2 podrá hacer su faena en la cola.
Al tratarse de una espera activa la CPU consume tiempo cada vez que libera
un proceso para comprobar el estado de todos los semáforos que tiene.
Implementación sin espera activa (pag. 155/56) : Se realiza un bloqueo de P2
y se pone en estado de espera, saliendo de la CPU. P2 seguirá en espera hasta
que llegue una señal de Despertar generada por otro proceso que tenga la CPU
en uso.
Si Semáforo.nombre >0 ---------->
Semáforo Abierto
Si Semáforo.nombre <=0 -------->
Semáforo Cerrado
Si llega señal(Semáforo.nombre) ---> Saca proceso de la
espera
Si llega espera(Semáforo.nombre)--> Añade proceso a la cola
y
lo bloquea.
En general | Semáforo.nombre | = nº de procesos en la cola del semáforo.
- Bloqueo mutuo
- Problemas de sincronización:
+ Problema del Productor-Consumidor.
+ Problema de los Lectores-Escritores.
+ Problema de los filósofos comensales.
Regiónes Críticas
Esta construcción lingüistica asegura que dentro de una región solo un
proceso puede acceder a una variable compartida.
Mientras se ejecuta el enunciado S ningún otro proceso puede tener acceso a
la variable v.
var v: shared T;
region v do S;
Para cada variable v el compilador genera un semáforo v-mutex con valor
inicial 1, cuyas operaciones quedan ocultas al programador.
Existe tambien la región crítica condicional que presenta la forma:
region v when B do S;
donde B es una expresión booleana. Cada vez que se entra en la región de la
sección crítica, se evalua la expresión booleana B. Si es cierta, se ejecuta el
enunciado S, y si es falsa, el proceso libera la exclusión mutua y se bloquea
hasta que B sea verdadera y ningun otro proceso se encuentre en la región
asociada con v.
Monitores
Otra construcción de alto nivel para la sincronización.
La sintaxis de un monitor es:
type nombre-monitor = monitor
(* Declaración de variables * )
...
(* Declaración de Operaciones *)
procedure entry P1 (...);
begin ... end;
procedure entry P2 (...);
begin ... end;
...
procedure entry Pn (...);
begin ... end;
begin
(* Asignación de variables iniciales *)
end.
(* Variables de sincronización *)
var x,y: condición;
fvar
Un procedimiento declarado dentro de un monitor solo puede tener acceso a
las variables declaradas localmente y a los pará,etrosformales. La construcción
monitor asegura que sólo un proceso a la vez puede estar activo en el monitor.
Las únicas operaciones que pueden invocarse para una variable condición
son espera y señal. La operación
x.espera;
significa que se suspende el proceso que invoca la operación hasta que otro
invoque
x.señal;
La operación x.señal reanuda exactamente un proceso suspendido; si no hay
ninguno, entonces la operación no tiene efecto, es decir, el estado de x es el
mismo que tendría si la operación nunca se hubiera ejecutado.
[ Leer pag. 173 ]
Descargar