CHAPTER 3. DATA COLLECTION AND ANALYSIS
3.1 Database System
3.1.1 Soil Database Management System (SDBMS)
El inconveniente que tiene utilizar uno de los 4 métodos que se definieron anteriormente es que baja la utilización de los dispositivos y reduce el throughput del sistema.
Un método adicional para evitar el deadlock es el de utilizar información adicional de cómo serán realizados los pedidos de los recursos. Por ejemplo, si el proceso P pedirá primero el drive de cinta y luego la impresora, y el proceso Q pedirá primero la impresora y luego el drive de cinta, con el conocimiento de cómo serán realizados los pedidos y las liberaciones de los recursos, se puede decidir si, ante un pedido, se hace que el proceso espere o no. Cada pedido requiere que el sistema considere los recursos que están actualmente disponibles, los recursos que están actualmente asignados a los procesos (y a cuales procesos), y los futuros pedidos y liberaciones de cada proceso, para decidir si el actual pedido puede ser satisfecho o debe esperar para evitar un posible deadlock.
El modelo más simple y más usado es el que requiere que cada proceso declare el número máximo de cada tipo de recurso que necesitara. Dando esta información, es posible construir un algoritmo que asegure que el sistema no entrara en deadlock, la idea es que asegura que nunca entrara en espera circular.
Estado seguro: se dice que el sistema esta seguro si puede asignar recursos a cada proceso en algún orden y aun evitar deadlock. Más formalmente, el sistema esta en estado seguro si existe una secuencia segura, es decir, si están los siguientes procesos <P1, P2, ..., Pn> para el estado de asignación actual, entonces el sistema esta en estado seguro en caso de que para cada proceso Pi, los recursos que pide pueden ser
satisfechos por los actuales recursos disponibles, más los recursos que son mantenidos por todo aquel proceso Pj, con j < i. En ésta situación, si los recursos que Pi necesita no están disponibles inmediatamente, entonces Pi puede esperar hasta que todo aquel Pj termine. Cuando todos ellos hayan finalizado, Pi puede obtener todos los recursos que necesita, completando así su tarea y liberando los recursos que uso. Cuando Pi termina, entonces Pi+1 puede obtener los recursos que necesita, y así. En caso de que tal secuencia no exista, entonces se dice que el sistema esta en un estado inseguro.
Habiendo ya dado el concepto de estado seguro, se pueden definir ahora los algoritmos para evitar deadlocks. La idea principal es tratar de que el sistema siempre permanezca en estado seguro. Inicialmente el sistema esta en estado seguro. Cuando un proceso pide un recurso que esta disponible, el sistema debe decidir si se le otorga el recurso inmediatamente o el proceso deba esperar. El pedido es concedido en caso de que tal asignación deje al sistema en un estado seguro.
Note que en este sistema, si un proceso pide un recurso que esta disponible, igualmente cabe la posibilidad de que deba esperar, por lo que la utilización de recursos puede ser más baja que si el sistema no tuviera tales algoritmos de prevención.
Algoritmo de grafo de asignación de recursos: En caso de tener un sistema de asignación de recursos con solo una instancia de cada tipo de recurso, entonces se puede aplicar otro método de asignación en lugar del método de grafo anteriormente descripto.
Además de los arcos de pedidos y asignaciones, ahora introducimos otro tipo de arco llamado arco de demanda, el cual si tenemos un arco de demanda entre el proceso Pi y el recurso Rj, entonces el proceso Pi puede pedir el recurso Rj en algún momento determinado del futuro. Estos arcos se parecen a los arcos de pedido en dirección, solo que son representados por líneas punteadas. Cuando el proceso Pi pide el recurso Rj, el arco de demanda se convierte en un arco de pedido. Similarmente, cuando un recurso Rj es liberado por Pi, el arco de asignación se convierte ahora en un arco de demanda. Notar que ahora la demanda de los recursos debe ser hecha a priori, es decir, antes de que un proceso comience debe hacer la demanda de todos los recursos que necesitara apareciendo en el grafo todos sus arcos de demanda.
Supongamos que el proceso Pi pide el recurso Rj. El pedido se puede conceder si convirtiendo el arco de pedido Pi → Rj a un arco de asignación Rj → Pi no resulta en la formación de un ciclo en el grafo. Note que el chequeo de si el sistema esta en estado seguro se hace por medio de un algoritmo de detección de ciclos en un grafo. Si no existen ciclos, la asignación del recurso dejara al sistema en estado seguro. De otra manera, el proceso Pi deberá esperar.
Algoritmo del Banquero: un algoritmo de asignación de recursos con grafo no es aplicable cuando existen varias instancias de un tipo de recurso. El siguiente algoritmo si es aplicable a tales sistemas pero es menos eficiente. Este algoritmo es conocido como algoritmo del banquero. Cuando un nuevo proceso entra al sistema, éste debe declarar el máximo número de instancias de cada tipo de recursos que necesitara. Este número no debe exceder al número total de recursos del sistema. Cuando un usuario pide un conjunto de recursos, el sistema debe analizar si al asignarle tales recursos el sistema sigue en estado seguro. Si es así, se le asignan los recursos, en caso contrario, el proceso debe esperar hasta que algún otro proceso libere los recursos que necesita.
Varias estructuras se necesitan para poder llevar a cabo dicho algoritmo. Si n es el número de procesos que tiene el sistema y m el número de tipos de recursos que tiene el sistema, entonces se necesitan las siguientes estructuras:
· Available: es un vector de largo m que indica el número de recursos disponibles de cada tipo. Si
available[j] = k, entonces hay k instancias del tipo de recurso Rj disponibles.
· Max: es una matriz de n * m que define la demanda máxima de cada recurso. Si max[i,j] = k, entonces Pi puede pedir a lo sumo k instancias del tipo de recurso Rj.
· Allocation: es una matriz de n * m que define el número de recursos de cada tipo asignados
actualmente a cada proceso. Si allocation[i,j] = k, entonces el proceso Pi tiene asignado actualmente k instancias del recurso de tipo Rj.
· Need: es una matriz de n * m que indica el número de recursos restantes de cada tipo necesitados para cada proceso. Si need[i,j] = k, entonces Pi puede necesitar k instancias más del tipo de recurso Rj para completar su tarea. Note que need[i,j] = max[i,j] – allocation[i,j]. Estas estructuras de datos varían con el tiempo en espacio y valor.
Para simplificar la notación, trataremos a cada fila de las matrices need y allocation como vectores y nos referiremos a ellos como allocationi y needi. Ante esto, el vector allocationi especifica los recursos
actualmente asignados al proceso Pi.
Algoritmo de seguridad: El algoritmo que descubre si el sistema esta o no en un estado seguro es el
siguiente:
1. Sea work y finish dos vectores de largo m y n respectivamente. Inicializar work := available y finish := false para cada elemento de finish.
2. Encontrar un i que cumpla éstas dos condiciones: · finish[i] = false;
· needi <= work
En caso de que tal i no exista ir al paso 4. 3. work := work + allocationi
finish[i] := true ir al paso 2
4. Si finish[i] = true para todos los i, entonces el sistema esta en estado seguro.
Algoritmo de asignación de recursos: Sea requesti el vector de pedidos del proceso Pi. Si requesti[j] = k,
entonces el proceso Pi quiere k instancias del tipo de recurso Rj. Cuando el proceso Pi hace el pedido de sus recursos, se deben tomar las siguientes acciones:
1. Si requesti <= needi, ir al paso 2. De otra forma, elevar una condición de error, ya que el proceso ha excedido su demanda máxima.
2. Si requesti <= available, ir al paso 3. De otra forma, Pi debe esperar ya que los recursos no están disponibles.
3. El sistema pretende asignarle los recursos pedidos por el proceso Pi, por lo que se deben llevar a cabo las siguientes modificaciones:
· available := available – requesti; · allocationi := allocationi + request; · needi := needi – requesti;
Si el resultado de la asignación de recursos resulta en un estado seguro, la transición es completada y al proceso Pi se le asignan los recursos. Sin embargo, si el nuevo estado no es seguro, entonces Pi debe esperar por requesti y se restaura el viejo estado de asignación de recursos.