aboutsummaryrefslogtreecommitdiff
path: root/iso/n2.lyx
diff options
context:
space:
mode:
Diffstat (limited to 'iso/n2.lyx')
-rw-r--r--iso/n2.lyx1232
1 files changed, 1232 insertions, 0 deletions
diff --git a/iso/n2.lyx b/iso/n2.lyx
new file mode 100644
index 0000000..4a252fc
--- /dev/null
+++ b/iso/n2.lyx
@@ -0,0 +1,1232 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+Normalmente hay bastantes más procesos que CPUs, por lo que hay que repartir
+ el uso de estas por parte de los procesos, buscando bien la eficiencia,
+ como en sistemas antiguos, o el poder ejecutar varios programas dando la
+ sensación de que todos se ejecutan a la vez, como ocurre actualmente.
+ El paralelismo y el pseudoparalelismo, que se dan normalmente a la vez,
+ permiten compartir recursos físicos y lógicos entre varios resultados y
+ acelerar los cálculos dividiéndolos entre varias CPUs, además de aportar
+ modularidad, al poder diseñar un sistema como un conjunto de procesos,
+ y comodidad, permitiendo a los usuarios hacer varias cosas a la vez.
+\end_layout
+
+\begin_layout Standard
+El cambio de un proceso a otro se llama
+\series bold
+cambio de proceso
+\series default
+ o de
+\series bold
+contexto
+\series default
+.
+ El
+\series bold
+planificador
+\series default
+ es el procedimiento que decide el siguiente proceso a ejecutar mediante
+ un
+\series bold
+algoritmo de planificación
+\series default
+, y modifica las estructuras necesarias para que el cambio de contexto sea
+ correcto.
+\end_layout
+
+\begin_layout Standard
+En UNIX, los procesos se organizan en un árbol de procesos y se crean con
+ la llamada al sistema
+\family typewriter
+fork()
+\family default
+, que crea una copia idéntica del proceso que hace la llamada y devuelve
+ al hijo el valor 0 y al padre el PID (
+\emph on
+process identifier
+\emph default
+) del proceso hijo.
+ El PID del propio proceso se obtiene con la llamada al sistema
+\family typewriter
+getpid
+\family default
+.
+ Las llamadas de la familia
+\family typewriter
+exec
+\family default
+, como
+\family typewriter
+execve
+\family default
+, hacen que un proceso sustituya su código y datos por los de otro programa,
+ que comienza la ejecución desde el principio, si bien se conservan los
+ ficheros abiertos (aunque se puede especificar el cierre de algunos descriptore
+s de ficheros en
+\family typewriter
+execve
+\family default
+), el PID y casi todas las propiedades.
+\end_layout
+
+\begin_layout Standard
+En Windows la jerarquía de procesos de UNIX desaparece al poder un proceso
+ cambiar de proceso padre, y los procesos se crean con
+\family typewriter
+CreateProcess
+\family default
+, que equivale a ejecutar un
+\family typewriter
+fork
+\family default
+ seguido de
+\family typewriter
+exec
+\family default
+ en el proceso hijo.
+\end_layout
+
+\begin_layout Standard
+La terminación voluntaria de un proceso se hace mediante la llamada al sistema
+
+\family typewriter
+exit
+\family default
+ en UNIX y
+\family typewriter
+ExitProcess
+\family default
+ en Windows.
+ La terminación involuntaria es producida por el sistema operativo si se
+ produce un error fatal (división por cero, acceso a una zona memoria incorrecta
+, etc.) o por otro proceso autorizado a ello con la llamada al sistema
+\family typewriter
+kill
+\family default
+ en UNIX o
+\family typewriter
+TerminateProcess
+\family default
+ en Windows.
+\end_layout
+
+\begin_layout Section
+Estados
+\end_layout
+
+\begin_layout Standard
+Un proceso puede estar en uno de varios estados:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Nuevo
+\series default
+: El proceso acaba de ser creado y todavía no tiene los recursos necesarios.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+En ejecución
+\series default
+: Utilizando la CPU.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Listo
+\series default
+ o
+\series bold
+listo suspendido
+\series default
+: Ejecutable pero detenido porque otro proceso está usando la CPU.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Bloqueado
+\series default
+ o
+\series bold
+bloqueado
+\series default
+
+\series bold
+suspendido
+\series default
+: A la espera de un evento externo.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Saliente
+\series default
+ (
+\emph on
+zombie
+\emph default
+): El proceso ha terminado su ejecución pero todavía no ha desaparecido
+ del todo.
+ Por ejemplo, en UNIX, cuando un proceso acaba debe esperar a que su padre
+ recoja su estado de salida mediante la llamada al sistema
+\family typewriter
+wait
+\family default
+ o
+\family typewriter
+waitpid
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+Un proceso suspendido no puede ejecutarse y suele guardarse en disco.
+ La
+\series bold
+suspensión
+\series default
+ y posterior
+\series bold
+reanudación
+\series default
+ de un proceso, por parte de otro(s), es útil:
+\end_layout
+
+\begin_layout Itemize
+Si el sistema está funcionando mal, mientras se corrige el problema.
+\end_layout
+
+\begin_layout Itemize
+Si se cree que los resultados del proceso son incorrectos, para comprobar
+ si lo son.
+\end_layout
+
+\begin_layout Itemize
+Si el sistema está muy cargado, para dar servicio a procesos de más prioridad.
+\end_layout
+
+\begin_layout Standard
+Cambios de estado:
+\end_layout
+
+\begin_layout Itemize
+De
+\begin_inset Quotes fld
+\end_inset
+
+Nuevo
+\begin_inset Quotes frd
+\end_inset
+
+ a
+\begin_inset Quotes fld
+\end_inset
+
+Listo
+\begin_inset Quotes frd
+\end_inset
+
+ cuando ya dispone de los recursos o a
+\begin_inset Quotes fld
+\end_inset
+
+Listo suspendido
+\begin_inset Quotes frd
+\end_inset
+
+ si no hay memoria disponible y el proceso no tiene prioridad suficiente
+ para expulsar a otro.
+\end_layout
+
+\begin_layout Itemize
+De
+\begin_inset Quotes fld
+\end_inset
+
+Listo
+\begin_inset Quotes frd
+\end_inset
+
+ a
+\begin_inset Quotes fld
+\end_inset
+
+En ejecución
+\begin_inset Quotes frd
+\end_inset
+
+ o viceversa, debido al planificador.
+\end_layout
+
+\begin_layout Itemize
+De
+\begin_inset Quotes fld
+\end_inset
+
+En ejecución
+\begin_inset Quotes frd
+\end_inset
+
+ a
+\begin_inset Quotes fld
+\end_inset
+
+Bloqueado
+\begin_inset Quotes frd
+\end_inset
+
+, si el proces, ueado suspendido
+\begin_inset Quotes frd
+\end_inset
+
+ a
+\begin_inset Quotes fld
+\end_inset
+
+Listo suspendido
+\begin_inset Quotes frd
+\end_inset
+
+, cuando ocurre el evento esperado.
+\end_layout
+
+\begin_layout Itemize
+De
+\begin_inset Quotes fld
+\end_inset
+
+Bloqueado
+\begin_inset Quotes frd
+\end_inset
+
+ a
+\begin_inset Quotes fld
+\end_inset
+
+Bloqueado suspendido
+\begin_inset Quotes frd
+\end_inset
+
+ o de
+\begin_inset Quotes fld
+\end_inset
+
+Listo
+\begin_inset Quotes frd
+\end_inset
+
+ a
+\begin_inset Quotes fld
+\end_inset
+
+Listo suspendido
+\begin_inset Quotes frd
+\end_inset
+
+, o viceversa.
+\end_layout
+
+\begin_layout Itemize
+De
+\begin_inset Quotes fld
+\end_inset
+
+En ejecución
+\begin_inset Quotes frd
+\end_inset
+
+ a
+\begin_inset Quotes fld
+\end_inset
+
+Saliente
+\begin_inset Quotes frd
+\end_inset
+
+ cuando termina.
+\end_layout
+
+\begin_layout Section
+Implementación
+\end_layout
+
+\begin_layout Standard
+El SO mantiene una
+\series bold
+tabla de procesos
+\series default
+ con una entrada,
+\series bold
+PCB
+\series default
+ (
+\emph on
+Process Control Block
+\emph default
+) o BCP para cada proceso, donde se guarda todo lo necesario para poder
+ continuar la ejecución tras perder la CPU y recuperarla luego, junto con
+ datos estadísticos, el estado del proceso, etc.
+ En concreto suelen guardarse:
+\end_layout
+
+\begin_layout Itemize
+Para
+\series bold
+administración de procesos
+\series default
+, PID, registros (incluyendo contador del programa, palabra de estado y
+ puntero de pila), estado del proceso, prioridad, parámetros de planificación,
+ PID del proceso padre, grupo de procesos, señales, hora de inicio, tiempo
+ usado de CPU.
+\end_layout
+
+\begin_layout Itemize
+Para
+\series bold
+administración de memoria
+\series default
+, apuntadores a los segmentos de texto, datos, memoria dinámica.
+\end_layout
+
+\begin_layout Itemize
+Para
+\series bold
+administración de ficheros
+\series default
+, directorio raíz, directorio actual, descriptores de fichero, identificadores
+ de usuario y grupo.
+\end_layout
+
+\begin_layout Standard
+Crear un proceso consiste en darle nombre (como el PID en UNIX), insertarlo
+ en la tabla de procesos, determinar su prioridad inicial y asignarle recursos
+ iniciales.
+ En el caso de UNIX,
+\family typewriter
+fork
+\family default
+ busca una entrada libre en la entrada de procesos y copia la información
+ del PCB del padre a esta, cambiando el PID; evita que uno sobrescriba la
+ memoria del otro
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+Según los apuntes se copian los segmentos de datos y de pila, y el de código
+ se comparte por ser de sólo lectura.
+ Realmente, desde hace mucho Linux implementa copia en escritura, consistente
+ en marcar las entradas de la tabla de página de ambos de forma que el núcleo
+ solo tenga que hacer la copia de una página cuando uno de los procesos
+ escriba en ella.
+\end_layout
+
+\end_inset
+
+; incrementa los contadores de los descriptores de ficheros del padre para
+ reflejar que estos también están abiertos en el hijo, y marca el proceso
+ hijo como
+\begin_inset Quotes fld
+\end_inset
+
+Listo
+\begin_inset Quotes frd
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+Los procesos en UNIX tienen dos modos: modo usuario, en que ejecutan un
+ programa normal, y modo núcleo, común a todos los procesos, en que ejecutan
+ código del SO al hacer una llamada al sistema.
+ En este último los procesos pueden bloquearse esperando a algún evento,
+ lo que hace que se le ceda la CPU a otro proceso hasta que el evento suceda,
+ momento en que el proceso continuará su ejecución en modo núcleo.
+ Otro enfoque es considerar el SO como una colección de procesos de sistema
+ distintos a los procesos de usuario, de modo que cada proceso ejecuta sólo
+ código de usuario, lo que ocurre en los sistemas cliente-servidor.
+\end_layout
+
+\begin_layout Standard
+En las llamadas al sistema, el hardware almacena en una pila el contador
+ de programa del proceso que se interrumpe, pasa a modo núcleo y almacena
+ un elemento del vector de interrupciones, que debe ser la dirección de
+ inicio de alguna rutina del SO, en el contador de programa.
+ Entonces, un procedimiento guarda el contexto del proceso activo en su
+ PCB (pudiendo actualizarse otra información como estado, contabilidad o
+ auditoría), elimina la información introducida en la pila por el hardware,
+ configura una pila en el núcleo para la llamada al sistema, comprueba que
+ esta es válida y llama a un procedimiento que procesa la llamada.
+ Tras esta, el primer procedimiento ejecuta el planificador si lo determina
+ necesario, teniendo en cuenta que, si el proceso se ha bloqueado en la
+ llamada, este ya ha sido invocado y no es necesario llamarlo de nuevo,
+ y finalmente ejecuta el
+\series bold
+despachador
+\series default
+, que restaura el contexto del proceso a ejecutar, entre otras cosas cambiando
+ a la pila de usuario e introduciendo en esta la dirección de su contador
+ de programa.
+\end_layout
+
+\begin_layout Section
+Hilos
+\end_layout
+
+\begin_layout Standard
+Un proceso tradicional es:
+\end_layout
+
+\begin_layout Itemize
+Unidad de propiedad de recursos, con un espacio de direcciones, variables
+ globales, ficheros abiertos, procesos hijos, alarmas, señales, semáforos,
+ información contable, etc.
+\end_layout
+
+\begin_layout Itemize
+Unidad de planificación y ejecución, con un contador de programa, una serie
+ de registros, una pila y un estado.
+\end_layout
+
+\begin_layout Standard
+Estas funciones son independientes, y los sistemas operativos modernos llaman
+
+\series bold
+hilos
+\series default
+ (
+\emph on
+threads
+\emph default
+),
+\series bold
+procesos ligeros
+\series default
+ (
+\emph on
+LightWeight Processes
+\emph default
+, LWP),
+\series bold
+hebras
+\series default
+ o
+\series bold
+subprocesos
+\series default
+ a las unidades de ejecución y procesos a las de propiedad de recursos,
+ de forma que un mismo proceso puede tener uno o varios hilos.
+ Cuando comienza la ejecución de un programa existe un único hilo, el
+\series bold
+hilo principal
+\series default
+, que puede crear otros.
+\end_layout
+
+\begin_layout Standard
+En Linux y otros muchos UNIX, un hilo puede crear otro mediante
+\family typewriter
+pthread_create
+\family default
+, que entre sus parámetros recibe un puntero a otra función que es donde
+ comienza la ejecución el hilo hijo.
+ Todo hilo tiene un TID (
+\emph on
+thread identifier
+\emph default
+), que se obtiene desde el propio hilo con la llamada al sistema
+\family typewriter
+gettid
+\family default
+.
+ Para facilitar la colabolación entre hilos, que pueden necesitar acceder
+ y modificar las mismas variables globales, existen métodos de sincronización
+ como
+\emph on
+mutex
+\emph default
+ (exclusión mutua) y semáforos.
+\end_layout
+
+\begin_layout Standard
+Ventajas de los hilos:
+\end_layout
+
+\begin_layout Itemize
+Al compartir espacio de direcciones, se pueden comunicar entre sí sin intervenci
+ón del núcleo, por lo que esta comunicación es más rápida.
+\end_layout
+
+\begin_layout Itemize
+Los hilos se pueden bloquear mientras termina una llamada al sistema, por
+ lo que si hay varios, la E/S puede solaparse con el cómputo.
+\end_layout
+
+\begin_layout Itemize
+Es mucho más rápido crear un hilo en un proceso existente que un nuevo proceso,
+ y el cambio de uno a otro es más rápido.
+\end_layout
+
+\begin_layout Itemize
+Se puede conseguir paralelismo real dentro de un mismo proceso.
+\end_layout
+
+\begin_layout Standard
+Los hilos pueden ser soportados directamente por el núcleo, como en Windows
+ y Linux, o ser implementados mediante una biblioteca a nivel de usuario,
+ como se hacía en Linux antes de que implementara hilos en el núcleo.
+\end_layout
+
+\begin_layout Standard
+La implementación en modo usuario tiene como ventajas que el programa se
+ puede usar en núcleos que no implementan hilos, los cambios de contexto
+ son mucho más rápidos al no tener que pasar por el núcleo y cada proceso
+ puede tener un algoritmo distinto de planificación.
+ Sin embargo, en este caso una llamada al sistema bloqueante, o un fallo
+ de página, bloquearía a todos los hilos del proceso, y no es posible obtener
+ paralelismo real dentro de un mismo proceso.
+\end_layout
+
+\begin_layout Standard
+En la implementación en modo núcleo, la creación, destrucción y sincronización
+ entre hilos es más costosa, pero esto se puede aliviar usando una biblioteca
+ de sincronización que sólo realice llamadas al sistema cuando sea estrictamente
+ necesarios, y manteniendo las estructuras de un hilo después de que termine
+ para poder usarlo posteriormente en vez de crear otro nuevo.
+ En cualquier caso todos los hilos deben pasar a estado suspendido al mismo
+ tiempo, pues la memoria de todo el proceso se mueve al disco.
+\end_layout
+
+\begin_layout Section
+Planificación
+\end_layout
+
+\begin_layout Standard
+Metas:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Equidad
+\series default
+: Dar a cada proceso una proporción adecuada de CPU.
+\end_layout
+
+\begin_layout Itemize
+Maximizar la
+\series bold
+eficacia
+\series default
+ de la CPU,
+\begin_inset Formula $E:=\frac{\text{Tiempo útil}}{\text{Tiempo total}}\cdot100$
+\end_inset
+
+, y el
+\series bold
+rendimiento
+\series default
+ o
+\series bold
+productividad
+\series default
+, el número de tareas procesadas por unidad de tiempo.
+\end_layout
+
+\begin_layout Itemize
+Minimizar el
+\series bold
+tiempo de espera
+\series default
+ (el que pasa un proceso en estado
+\begin_inset Quotes fld
+\end_inset
+
+Listo
+\begin_inset Quotes frd
+\end_inset
+
+), el de
+\series bold
+respuesta
+\series default
+ (el que pasa desde que se solicita la ejecución de una acción hasta que
+ se obtienen los primeros resultados, importante para usuarios interactivos)
+ y el de
+\series bold
+regreso
+\series default
+ o
+\series bold
+retorno
+\series default
+ (el que pasa desde que se entrega a un trabajo hasta que termina y se obtienen
+ sus resultados, importante para trabajos por lotes).
+\end_layout
+
+\begin_layout Standard
+Algunas de estas, como el tiempo de espera y la eficacia, son contradictorias.
+\end_layout
+
+\begin_layout Standard
+Una planificación es
+\series bold
+apropiativa
+\series default
+ si puede expulsar a procesos de la CPU para ejecutar otros sin necesidad
+ de que se bloqueen, y
+\series bold
+no apropiativa
+\series default
+ o
+\series bold
+de ejecución hasta terminar
+\series default
+ en caso contrario.
+ Para los procesos por lotes son convenientes tanto una planificación no
+ apropiativa como una apropiativa con periodos de CPU largos (pues los cambios
+ de proceso desperdician CPU), mientras que para procesos interactivos suele
+ ser necesaria una planificación apropiativa para cambiar la CPU rápidamente
+ de un proceso a otro.
+\end_layout
+
+\begin_layout Standard
+Los procesos alternan entre ráfagas de CPU y de E/S, comenzando y terminando
+ por una de CPU.
+ Decimos que un proceso es
+\series bold
+limitado por E/S
+\series default
+ si pasa la mayor parte de su tiempo en espera de E/S, y normalmente tendrá
+ muchas ráfagas de CPU aunque breves, y es
+\series bold
+limitado por CPU
+\series default
+ si usa la CPU la mayor parte del tiempo, y normalmente tendrá pocas ráfagas
+ de CPU aunque muy largas.
+\end_layout
+
+\begin_layout Standard
+Podemos representar un algoritmo de planificación mediante un
+\series bold
+diagrama de colas
+\series default
+, en el que cada rectángulo es una cola, los círculos son recursos que dan
+ servicio a las colas y las flechas indican el flujo de los procesos.
+ Un
+\series bold
+diagrama de Gantt
+\series default
+ representa el proceso en ejecución en cada momento mediante rectángulos
+ de longitud proporcional a la duración de la ráfaga de CPU.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename pegado3.png
+ width 80text%
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption Standard
+
+\begin_layout Plain Layout
+Diagrama de colas de planificación de procesos.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename pegado4.png
+ width 80text%
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption Standard
+
+\begin_layout Plain Layout
+Diagrama de Gantt.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Algoritmos no apropiativos:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+FCFS
+\series default
+ (
+\emph on
+First Coming, First Served
+\emph default
+,
+\begin_inset Quotes fld
+\end_inset
+
+primero en llegar, primero en ser servido
+\begin_inset Quotes frd
+\end_inset
+
+).
+ Es el más simple y se puede implementar con una cola FIFO.
+ El tiempo medio de respuesta puede ser bastante largo debido al
+\series bold
+efecto convoy
+\series default
+: Un proceso limitado por CPU ocupa la CPU mucho tiempo mientras el resto
+ terminan su E/S y entonces los dispositivos de E/S quedan inactivos hasta
+ que el proceso en ejecución pasa a realizar su E/S; entonces los procesos
+ limitados por E/S pasan a usar la CPU y terminan rápido por tener ráfagas
+ de CPU breves y la CPU queda inactiva hasta que el proceso limitado por
+ CPU continúa su ejecución, momento en que el ciclo se repite, resultando
+ en desaprovechamiento de recursos.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+SJF
+\series default
+ (
+\emph on
+Shortest Job First
+\emph default
+,
+\begin_inset Quotes fld
+\end_inset
+
+primero el trabajo más corto
+\begin_inset Quotes frd
+\end_inset
+
+).
+ Adecuado para procesos por lotes, donde los tiempos de ejecución aproximados
+ se suelen conocer de antemano, y de lo contrario se puede estimar mediante
+
+\series bold
+maduración
+\series default
+:
+\begin_inset Formula $E_{t}=aE_{t-1}+(1-a)T_{t-1}$
+\end_inset
+
+, donde
+\begin_inset Formula $E_{t}$
+\end_inset
+
+ es la estimación de tiempo actual,
+\begin_inset Formula $E_{t-1}$
+\end_inset
+
+ la estimación anterior para el mismo proceso,
+\begin_inset Formula $T_{t-1}$
+\end_inset
+
+ el tiempo que tardó realmente y
+\begin_inset Formula $a$
+\end_inset
+
+ un parámetro ajustable entre 0 y 1, pues un valor de
+\begin_inset Formula $a$
+\end_inset
+
+ pequeño hace que se olviden rápidamente los tiempos de ejecuciones anteriores
+ y un valor grande hace que se recuerden demasiado tiempo.
+ Si se dispone de todos los procesos de forma simultánea, este algoritmo
+ proporciona el mínimo tiempo medio de retorno.
+\end_layout
+
+\begin_layout Standard
+Algoritmos apropiativos:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+SRTF
+\series default
+ (
+\emph on
+Shortest Remaining Time First
+\emph default
+,
+\begin_inset Quotes fld
+\end_inset
+
+primero el que tenga el menor tiempo restante
+\begin_inset Quotes frd
+\end_inset
+
+).
+ Variante del SJF que permite quitar la CPU a un proceso para dársela a
+ otro con tiempo total de ráfaga de CPU menor al tiempo restante de CPU
+ de la ráfaga del proceso que se está ejecutando.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+\emph on
+Round Robin
+\series default
+\emph default
+ (
+\series bold
+RR
+\series default
+) o
+\series bold
+circular
+\series default
+.
+ Es de los más antiguos, sencillos, equitativos y de mayor uso.
+ Similar al FCFS pero con un
+\emph on
+quantum
+\emph default
+ de tiempo
+\begin_inset Formula $q$
+\end_inset
+
+ tal que, si un proceso consume un
+\emph on
+quantum
+\emph default
+, pasa al final de la cola de procesos listos para dar la CPU al siguiente
+ proceso.
+ De esta forma, si hay
+\begin_inset Formula $n$
+\end_inset
+
+ procesos, ninguno tiene tiempo de espera mayor a
+\begin_inset Formula $(n-1)q$
+\end_inset
+
+.
+ Si
+\begin_inset Formula $q$
+\end_inset
+
+ es pequeño se desperdicia tiempo de CPU en cambios de proceso, pero si
+ es grande, los últimos procesos tardan mucho en ser atendidos, resultando
+ en tiempos de respuesta muy pobres en procesos interactivos.
+\end_layout
+
+\begin_layout Standard
+Otras formas de planificación pueden hacerse apropiativas o no apropiativas:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Planificación por prioridad
+\series default
+.
+ Cada proceso tiene una prioridad, normalmente un número que es mayor a
+ mayor prioridad (en UNIX es al revés), de modo que la CPU se da al primer
+ proceso de la cola con la mayor prioridad.
+ La asignación de prioridad puede ser
+\series bold
+estática
+\series default
+, si no cambia durante la ejecución del proceso, o
+\series bold
+dinámica
+\series default
+ si depende de parámetros.
+ Un ejemplo de asignación dinámica para favorecer a los procesos limitados
+ por E/S, y que puedan ejecutarse pronto para enviar su siguiente solicitud
+ de E/S, es hacer que la prioridad sea inversamente proporcional a la fracción
+ del último
+\emph on
+quantum
+\emph default
+ usado por el proceso.
+ Este
+\emph on
+quantum
+\emph default
+ puede ser una referencia para medir el tiempo consumido o funcionar como
+ en la planificación
+\emph on
+round-robin
+\emph default
+.
+\begin_inset Newline newline
+\end_inset
+
+El
+\series bold
+bloqueo indefinido
+\series default
+ o
+\series bold
+inanición
+\series default
+ ocurre cuando los procesos de baja prioridad nunca llegan a ejecutarse.
+ Para evitarlo se puede disminuir cada cierto tiempo la prioridad del proceso
+ en ejecución, lo que tiene sentido si la planificación es apropiativa.
+ Esto sigue teniendo el problema de que pueden llegar continuamente procesos
+ de mayor cantidad que los que llevan tiempo esperando, por lo que una alternati
+va es aumentar cada cierto tiempo la prioridad de los procesos listos.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Planificación de múltiples colas con realimentación
+\series default
+.
+ Es la más general, pero también la más compleja.
+ Existen varias colas de procesos listos y un proceso va a una u otra según
+ si es interactivo o por lotes, de sistema o de usuario, su prioridad, la
+ cola que usó la última vez, el consumo de CPU, etc.
+ Debe haber una planificación dentro de cada cola, y una planificación entre
+ colas, que suele ser apropiativa por prioridad pero puede ser cualquiera,
+ como el reparto equitativo y que cada cola se administre de una forma.
+ Para evitar que el esquema sea inflexible, debe haber un criterio para
+ que los procesos cambien de cola (realimentación).
+\end_layout
+
+\begin_layout Standard
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename pegado5.png
+ width 80text%
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption Standard
+
+\begin_layout Plain Layout
+Planificación de múltiples colas.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Si no se dispone de suficiente memoria es necesario que algunos procesos
+ se mantengan en disco.
+ Para ello, los procesos en memoria los gestiona un
+\series bold
+planificador a corto plazo
+\series default
+ (PCP) mientras que un
+\series bold
+planificador a medio plazo
+\series default
+ (PMP) es llamado periódicamente y se encarga de la suspensión y reanudación
+ de procesos, teniendo en cuenta criterios como el tiempo desde el último
+ intercambio, el tiempo de CPU que ha consumido el proceso recientemente,
+ el tamaño del proceso (los pequeños no causan problemas) y la prioridad
+ de este.
+ También es posible añadir un
+\series bold
+planificador a largo plazo
+\series default
+ (PLP) que decida, de entre los procesos por lotes preparados, cuál ejecutar
+ después, eligiendo si este pasa directamente a memoria o a disco.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+\begin_inset Float figure
+wide false
+sideways false
+status open
+
+\begin_layout Plain Layout
+\align center
+\begin_inset Graphics
+ filename pegado6.png
+ width 80text%
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Caption Standard
+
+\begin_layout Plain Layout
+Planificación a corto, medio y largo plazo.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document