• No se han encontrado resultados

2 Procesos e Hilos

N/A
N/A
Protected

Academic year: 2021

Share "2 Procesos e Hilos"

Copied!
71
0
0

Texto completo

(1)

Sistemas

Sistemas

Operativos

Operativos

PROCESOS E HILOS PROCESOS E HILOS

(2)

Definición de Proceso

Definición de Proceso

Proceso para un Sistema Operativ

Proceso para un Sistema Operativo no es o no es más que un Programa enmás que un Programa en

ejecución.

ejecución.

En cualquier sistema de multiprogramación un CPU conmuta de un

En cualquier sistema de multiprogramación un CPU conmuta de un

proceso a otro con rapidez, ejecutando cada uno durante décimas o

proceso a otro con rapidez, ejecutando cada uno durante décimas o

centésimas de milisegundos.

centésimas de milisegundos.

Un CPU solo puede trabajar con

Un CPU solo puede trabajar con un proceso, pero en un segundo trabajaun proceso, pero en un segundo trabaja

con varios de

(3)

Definición de Proceso

Definición de Proceso

Proceso para un Sistema Operativ

Proceso para un Sistema Operativo no es o no es más que un Programa enmás que un Programa en

ejecución.

ejecución.

En cualquier sistema de multiprogramación un CPU conmuta de un

En cualquier sistema de multiprogramación un CPU conmuta de un

proceso a otro con rapidez, ejecutando cada uno durante décimas o

proceso a otro con rapidez, ejecutando cada uno durante décimas o

centésimas de milisegundos.

centésimas de milisegundos.

Un CPU solo puede trabajar con

Un CPU solo puede trabajar con un proceso, pero en un segundo trabajaun proceso, pero en un segundo trabaja

con varios de

(4)

El modelo del Proceso

El modelo del Proceso

Multiprogr

Multiprogramación de amación de 4 programas.4 programas.

Cada uno se ejecuta por separado.

Cada uno se ejecuta por separado.

Solo hay un programa activo a la vez.

(5)

El modelo del Proceso

Todo el Software de la computadora, incluyendo el Sistema Operativo, se organiza en procesos secuenciales.

Cada proceso tiene su propia CPU virtual, es decir, es atendido exclusivamente durante una fracción de

milisegundos.

La conmutación de un proceso a otro se conoce como multiprogramación.

(6)

Creación de un Proceso

Hay 4 eventos que provocan la creación de procesos: 1. El arranque del sistema.

2. La ejecución, desde un proceso, de una llamada al sistema para creación de procesos.

3. Una petición de usuario para crear un proceso. 4. El inicio de un trabajo por lotes.

(7)

Creación de un Proceso

Procesos en primer plano: Procesos que están en ejecución e interactúan con los usuarios (humanos) y realizan trabajos para ellos.

Procesos en segundo plano: Procesos que no están

asociados con usuarios específicos sino con una función específica.

◦ Ejemplo: Proceso que recibe mensajes de correo electrónico, está

inactivo hasta que recibe un mensaje.

(8)

Creación de un Proceso

En sistemas interactivos un proceso se origina cuando el usuario escribe un comando o haciendo doble clic en un icono.

En mainframes los procesos se crean al iniciarse un trabajo por lotes en el sistema.

En UNIX la llamada fork crea un clon exacto del proceso que hizo la llamada, los dos procesos (padre e hijo) tienen la

misma imagen de memoria.

(9)

Terminación de Procesos

Un proceso inicia, se ejecuta, realiza el trabajo asignado y termina en general debido a las siguientes condiciones:

1. Salida normal (voluntaria). 2. Salida por error (voluntaria). 3. Error fatal (involuntaria).

4. Eliminado por otro proceso (involuntaria).

La mayoría de los procesos terminan debido a que han concluido su trabajo.

(10)

Terminación de Procesos

En UNIX un proceso indica que ha terminado con la llamada

Exit mientras que en Windows se usa Exitprocess.

Para terminar un proceso voluntariamente en UNIX se

utiliza la llamada kill y en Windows la función de Win32 es

TerminateProcess.

El proceso que termina a otro proceso debe tener los permisos necesarios para el caso.

En algunos sistemas al terminar un proceso se eliminan los que creó, no en UNIX o Windows.

(11)

Jerarquía de Procesos

En algunos sistemas un proceso crea a otros procesos, el proceso hijo a su vez puede crear más, esto forma una  jerarquía de procesos.

En UNIX un proceso init lee un archivo que lee las

terminales que hay, luego se usa fork para crear un procesos por terminal. Todos los procesos forman un árbol con init en la raíz.

Windows no tiene jerarquías, un proceso recibe un token

(12)

Estados de un Proceso

Un proceso puede pasar por 3 estados:

1. En ejecución (está usando la CPU en ese instante).

2. Listo (ejecutable, se detuvo temporalmente, deja que se ejecute otro proceso).

3. Bloqueado (no puede ejecutarse sino hasta que ocurra cierto evento externo).

(13)

Implementación de Procesos

El Sistema Operativo mantiene una tabla de procesos, con un registro por proceso o bloques de control de procesos. Cada registro contiene información del proceso:

◦ Contador de programa. ◦ Apuntador de pila.

◦ Asignación de memoria.

◦ Estados de sus archivos abiertos. ◦ Información de contabilidad.

(14)

Implementación de Procesos

Contenido de la tabla de procesos:

(15)

Implementación de Procesos

Existe un vector de interrupciones que utiliza el S.O. para saber de los procesos y controlarlos. Ejemplo de un proceso en ejecución:

(16)

Modelación de la

Multiprogramación

Un proceso típico no ocupa la CPU todo el tiempo, por lo que pueden ejecutarse otros procesos mientras se usa la memoria.

Con n procesos en memoria a la vez, la probabilidad de que todos los n procesos estén esperando la E/S (en cuyo caso la CPU estará inactiva) es pn. Entonces, el uso de la CPU se

obtiene mediante la fórmula:

(17)

Modelación de la

Multiprogramación

(18)

Modelación de la

Multiprogramación

Ejemplo:

◦ Una computadora tiene 512 Mb de memoria, el S.O. ocupa 128 Mb y

cada programa de usuario 128 Mb.

◦ Puede haber 3 programas de usuario a la vez.

◦ Con un promedio de 80% de espera de E/S, la utilización del CPU es

de 1  – 0.83 o de 49%.

◦ Si al sistema se el agregan 512 Mb más de memoria, en lugar de

tener multiprogramación de 3 puede aumentar a multiprogramación de 7 con un uso de CPU de 79%.

◦ En resumen, aumentar 512 Mb incrementa el rendimiento 30%. ◦ Con 512 Mb más aumenta de 79% a 91%, solo 12%.

(19)

Hilos

En los S.O. tradicionales cada proceso tiene un espacio de direcciones y un solo hilo de control.

En ocasiones es conveniente tener varios hilos de control en el mismo espacio de direcciones que se ejecutan casi en

paralelo porque comparten direcciones. Un hilo es un proceso.

(20)

Uso de Hilos

La razón de tener hilos es porque en muchas aplicaciones se desarrollan varias actividades a la vez que pueden

bloquearse de vez en cuando.

Un hilo es más ligero que un proceso, son fáciles de crear y destruir, la creación es de 10 a 100 veces más rápida que la de un proceso.

Los hilos no producen aumento en el rendimiento cuando están ligados a la CPU.

(21)

Uso de Hilos

Un documento en un procesador de textos utiliza dos hilos, uno interactúa con el usuario mientras el otro le da formato a todo el documento.

Un tercer hilo respalda todo el documento mientras el usuario escribe.

(22)

Uso de Hilos

En un servidor Web, un hilo recibe las peticiones de trabajo en red y le envía la solicitud a otro hilo para que las procese, este a su vez despierta a un tercer hilo que revisa si la

solicitud puede satisfacerse desde la memoria caché del servidor.

(23)

Modelo clásico de Hilo

Un proceso es un hilo de ejecución.

El hilo tiene un contador de programa que lleva el registro de cuál instrucción se va a ejecutar, registro a sus variables de trabajo, historial de ejecución en una pila, los valores utilizados en cada procedimiento llamado.

Los hilos permiten llevar varias ejecuciones en el mismo entorno de proceso.

Los hilos tienen algunas propiedades de los procesos y a veces se llaman procesos ligeros.

(24)

Modelo clásico de Hilo

Multihilamiento (multithreading) es la ejecución de varios hilos en el mismo proceso.

Los hilos de un proceso pueden operar en espacios de direcciones distintos o compartir el mismo espacio de direcciones.

(25)

Modelo clásico de Hilo

La CPU conmuta rápidamente entre un hilo y otro aparentando que se ejecutan en paralelo, esto es multihilamiento.

Los hilos que comparten el mismo espacio de memoria pueden escribir, leer o borrar la pila de otro hilo.

Por otra parte, si los hilos comparten la memoria pueden trabajar juntos para llevar a cabo una tarea.

(26)

Modelo clásico de Hilo

Los procesos no comparten áreas de memoria con otros procesos y son propiedad del usuario que los ejecutó. Un hilo también puede estar en ejecución, listo o

(27)

Modelo clásico de Hilo

Cada hilo tiene su propia pila que contiene un conjunto de valores para cada procedimiento llamado.

(28)

Uso de Hilos

Cuando hay multihilamiento (multithreading), un proceso empieza con un hilo que a su vez puede crear más hilos:

◦ thread_create crea hilos mediante la llamada a un procedimiento de

biblioteca.

◦ thread_exit termina un hilo.

◦ thread_join bloquea al hilo llamador hasta que el hilo en ejecución

haya terminado.

◦ thread_yield permite que un hilo entregue la CPU para dejar que otro

(29)

Hilos en POSIX

Estándar IEEE 1003.1c donde los hilos son conocidos como

Pthreads:

Cada hilo tiene un identificador, un conjunto de registros (incluyendo el contador de programa) y un conjunto de atributos.

(30)

Implementación de Hilos

Hay dos formas de implementar un paquete de hilos:

1. En espacio de usuario. 2. En el Kernel.

(31)

Hilos en espacio de usuario

Cada proceso necesita su propia tabla de hilos privada que lleva la cuenta de hilos por proceso.

La tabla de hilos contiene información de hilos listos o bloqueados.

El planificador de hilos permite controlarlos localmente, esto para algunas aplicaciones es ventaja porque no se requieren llamadas al kernel.

La desventaja es que un hilo puede bloquear la ejecución de otros y al sistema.

(32)

Hilos en Kernel

El kernel sabe de los hilos y los administra. No hay una tabla de hilos en cada proceso.

El kernel lleva la cuenta de todos los hilos del sistema, Para crear o destruir hilos se hace una llamada al kernel. El kernel según decida puede ejecutar hilos del mismo proceso o de un proceso distinto.

Los hilos a nivel de usuario ejecutan sus propios hilos hasta que el kernel quita la CPU.

(33)

Implementaciones Híbridas

Una forma de tener todas las ventajas es combinar hilos a nivel kernel y multiplexar con los hilos a nivel usuario.

El kernel planifica solo sus hilos, que a su vez pueden tener hilos de usuario que se ejecutan sin capacidad de

(34)

Activaciones del Planificador

Los hilos de kernel son mejores que los de usuario pero son más lentos.

El planificador imita las funciones de hilos kernel pero con el mejor rendimiento y flexibilidad de los hilos de usuario.

Con el planificador, cuando un hilo kernel se bloquea debido a E/S se notifica al proceso en ejecución , a esto se le

(35)

Activaciones del Planificador

Una vez notificado, el sistema en ejecución puede replanificar sus hilos.

Cuando el kernel detecta que el hilo original puede

ejecutarse de nuevo, realiza otra llamada para informar del evento.

El sistema en ejecución puede reiniciar el hilo bloqueado o colocarlo en la lista de hilos listos para ejecutarlo más

tarde.

Al ocurrir otra interrupción de hardware mientras un hilo de usuario se ejecuta, la CPU se interrumpe y pasa a modo

(36)

Hilos emergentes

Un proceso o hilo, que esta bloqueado, recibe un mensaje que desempaqueta y lo procesa.

Un hilo emergente ( pop-up thread ) es un hilo que se crea para manejar el mensaje entrante.

(37)

Hilos emergentes

Un hilo emergente se ejecuta en el kernel en lugar que en el espacio de usuario, puede acceder a las tablas del kernel y a los dispositivos de E/S.

Un hilo de kernel con errores puede hacer más daño que un hilo en espacio de usuario, por ejemplo, si se ejecuta por demasiado tiempo y no puede quitarse, los datos entrantes de un dispositivo se perderán.

(38)

Conversión a multihilamiento

Un proceso que contiene un solo hilo puede trabajar con más hilos, es decir, convertirse a multihilamiento.

Hay variables locales que usa cada hilo, pero hay variables globales que utilizan varios.

(39)

Conversión a multihilamiento

Hay varias posibles soluciones para evitar conflictos con las variables globales.

Una solución es tener variables locales y otros elementos para cada hilo, el problema ahora es que los datos no pueden ser usados por otros hilos para trabajar en conjunto.

(40)

Conversión a multihilamiento

Una solución es poner un bit para marcar que las variables están en uso y bloquear a los hilos que tratan de utilizarlas. Otra solución es usar señales pero el problema es dirigir cada una al hilo correspondiente sobre todo cuando el kernel no sabe de la existencia de hilos de usuario.

Un problema adicional es la administración de las pilas por cada hilo, un proceso con varios hilos maneja varias pilas.

(41)

Comunicación entre Procesos

Dos procesos que solicitan imprimir un archivo lo registran en la fila o directorio de spooler  en la misma posición.

Al proceso A y al proceso B se les asigna el mismo lugar para imprimir.

Cuando el control regresa al proceso B, pone el nombre del archivo en el spooler .

Más adelante el proceso A hace lo mismo y coloca su

archivo a imprimir en la misma posición del spooler sobre el del proceso B.

(42)

Comunicación entre Procesos

El demonio de impresión imprime el archivo del

proceso A, el del proceso B se pierde.

El uso de datos compartidos y dependencias se conoce

(43)

Regiones críticas

Para solucionar problemas de condiciones de carrera se puede hacer exclusión mutua.

La memoria compartida por dos procesos se conoce como región o sección crítica.

Para que los procesos cooperen deben:

1. No puede haber dos procesos de manera simultánea dentro de regiones críticas.

2. No puede haber suposiciones sobre velocidades o número de CPUs.

3. Ningún proceso ejecutado fuera de la región crítica debe bloquear a otros procesos.

4. Ningún proceso debe esperar por siempre para entrar a la región crítica.

(44)

Regiones críticas

(45)

Exclusión con espera ocupada

Mientras un proceso está actualizando la memoria

compartida en su región crítica, ningún otro puede entrar y dar problemas:

◦ Deshabilitando interrupciones: En un sistema con un CPU un

proceso deshabilita todas las interrupciones al entrar a su región crítica y las habilitar al salir.

◦ Variables de candado: En el software se habilita un candado cuando

(46)

Exclusión con espera ocupada

◦ Alternancia estricta: Mediante programación se crea una variable

turno, con valor 0 el proceso entra a la región crítica, el valor cambia a 1. El evaluar el cambio en la variable se le conoce como espera

ocupada y al candado se le llama candado de giro.

◦ Solución de Peterson: Es una mezcla de candado y alternancia. Un

proceso solicita entrar a la región crítica y obtiene un turno. Al estar disponible se asigna la región y se pone el candado. Cuando el

proceso sale de la región, se quita el candado y se asigna al siguiente proceso en turno.

(47)

Dormir y despertar

La solución de Peterson es correcta pero se requiere de una espera ocupada.

Se desperdicia CPU al esperar turno y se complica cuando los procesos tienen prioridades.

Un proceso con prioridad que entra en la región crítica y no sale de ahí porque hay procesos en ejecución en el CPU,

detiene a los demás, esto se llama problema de inversión de prioridades.

(48)

Dormir y despertar

La solución es una llamada al sistema sleep que hace que un proceso sea bloqueado hasta que otro proceso lo

despierta con una llamada wakeup .

El problema del productor  –  consumidor o problema de

búfer limitado se produce cuando se comparte un búfer común de tamaño fijo.

Un proceso (productor) coloca información en el búfer y otro proceso (consumidor) la saca.

(49)

Dormir y despertar

El problema se hace mayor al haber m productores y n

consumidores.

Cuando un productor desea colocar un nuevo elemento en el búfer que está lleno, se pone a dormir (se desactiva) y se despierte hasta que un consumidor vacía el búfer.

Un consumidor que desea sacar algo del búfer que se

encuentra vacío se pone a dormir, cuando se llena el búfer se despierta.

(50)

Semáforos

Semáforos

Un semáforo funciona con el mismo principio de dormir y

Un semáforo funciona con el mismo principio de dormir y

despertar.

despertar.

En este caso, cuando el semáforo está en

En este caso, cuando el semáforo está en downdown un procesoun proceso

se pone a dor

se pone a dormir hasta que la operación se hayamir hasta que la operación se haya

completado o bloqueado.

completado o bloqueado.

El proceso dormido es despertado y

El proceso dormido es despertado y el semáforo se pone enel semáforo se pone en

up

up, los procesos en espera a ser , los procesos en espera a ser seleccionados tienenseleccionados tienen

semáforos en

(51)

Semáforos

Semáforos

productor-consumidor

consumidor

Los semáforos resuelven el problema de pérdidas de

Los semáforos resuelven el problema de pérdidas de

señales de despertar.

señales de despertar.

Par

Para que funcionen a que funcionen los semáforos se deben deshabilitarlos semáforos se deben deshabilitar

todas las interrupciones m

todas las interrupciones mientras se evalúan los semáforos.ientras se evalúan los semáforos.

Es posible usar

Es posible usar varios semáforos y lograr la sincronizaciónvarios semáforos y lograr la sincronización

para que no

para que no existeexisten procesos bloqueados para siempre.n procesos bloqueados para siempre.

En este caso el productor deja

En este caso el productor deja de ejecutarse con búfer llenode ejecutarse con búfer lleno

y el consumidor

(52)

Mútex

Mútex

Un múte

Un mútexx es una ves una variable que puede ariable que puede estar estar en dos esen dos estados:tados:

abierto (desbloqueado) o cerrado (bloqueado).

abierto (desbloqueado) o cerrado (bloqueado).

El código

El código mutex_lock mutex_lock se genera cuando un se genera cuando un proceso entra aproceso entra a

la región crítica,

la región crítica, mutex_unlock mutex_unlock cuando sale de esta.cuando sale de esta.

Cuando un hilo no puede entrar a la región y adquirir un

Cuando un hilo no puede entrar a la región y adquirir un

mutex_lock 

mutex_lock , llama a, llama a thread_yield thread_yield para entregpara entregar el ar el CPU aCPU a

otro hilo.

(53)

Mutex en Pthreads

Pthreads proporciona varias funciones para sincronizar hilos:

(54)

Mutex en Pthreads

Además de los mutexes, Pthreads ofrece otro mecanismo de sincronización con variables de condición:

(55)

Monitores

Para evitar la complicación del uso de semáforos y mútexes se creó el monitor.

Un monitor es una colección de procedimientos, variables y estructuras de datos que se agrupan en un tipo especial de módulo o paquete.

Los monitores sirven para hacer la exclusión mutua de hilos. Las variables de condición wait y signal permiten que un

(56)

Pasaje de mensajes

Este método de comunicación entre procesos utiliza send y

receive como llamadas al sistema.

El problema con los mensajes es que pueden perderse ocasionando que un proceso esté bloqueado esperando recibir uno.

Un proceso puede recibir mensajes sin datos o enviar mensajes que no sean recibidos.

Los mensajes tienen más desventajas que usar semáforos o monitores.

(57)

Pasaje de mensajes

En un sistema productor  –  consumidor, si el productor trabaja

más rápido que el consumidor todos los mensajes se enviarán al consumidor hasta que el productor sea bloqueado.

Por otra parte, si el consumidor trabaja más rápido que el productor, los mensajes estarán vacíos esperando que el productor los llene, el consumidor se bloquea.

El pasaje de mensajes se utiliza en sistemas de programación en paralelo como MPI (Message Passing Interface).

(58)

Barreras

Las barreras sincronizan grupos de procesos en lugar de solo dos procesos.

Ningún proceso puede continuar a la siguiente fase hasta que todos los procesos estén listos para hacerlo.

(59)

Planificación

Cuando una computadora tiene multiprogramación, varios procesos o hilos compiten por la CPU al mismo tiempo.

La parte del S.O. que decide que proceso pasa a la CPU es el planificador de procesos utilizando un algoritmo de

planificación.

Además de elegir el proceso correcto que se va a ejecutar, el planificador tiene que preocuparse por hacer uso

(60)

Comportamiento de un

Proceso

Los procesos alternan uso de la CPU con peticiones de E/S. Algunos procesos hacen más cálculos que otros y usan más tiempo a la CPU, otros procesos pasan más tiempo

(61)

Cuando planificar Procesos

Hay una variedad de situaciones que necesitan planificación.

Cuando se crea un nuevo proceso se debe decidir que se ejecute el proceso padre o el proceso hijo.

Cuando un proceso termina se debe elegir a uno de los procesos listos.

Si un proceso depende de otro, el planificador a veces no tiene la información para tomar en cuenta la dependencia.

(62)

Cuando planificar Procesos

Al liberarse un dispositivo de E/S el proceso que lo ocupaba pasa a listo, el planificador debe decir si ejecuta este o si pasa a la CPU otro que estaba listo previamente.

El algoritmo de planificación selecciona un proceso y deja que se ejecute por un máximo tiempo fijo, si sigue en

ejecución el proceso se suspende y el planificador selecciona otro para ejecutarlo.

(63)

Algoritmos de Planificación

Hay 3 entornos que se deben planificar:

1. Procesamiento por lotes. 2. Interactivo.

3. De tiempo real.

En procesamiento por lotes (cálculo de una nómina) no existe alternancia y el proceso se deja hasta que

termina.

En entornos interactivos se limita el uso de la CPU para que de servicio a otros procesos.

(64)

Algoritmos de Planificación

En sistemas de tiempo real, los procesos trabajan para lograr un trabajo común, por lo que se bloquean

rápidamente.

En un buen algoritmo de planificación, debe existir equidad, la CPU debe dar servicio a todos los procesos.

Otra meta es mantener a la CPU y a los dispositivos de E/S siempre ocupados.

El rendimiento es el número de trabajos por hora que completa un sistema.

(65)

Algoritmos de Planificación

(66)

Planificación de sistema lotes

Primero en entrar, primero en ser atendido. El trabajo por lotes más corto va primero.

(67)

Planificación sistemas

interactivos

Procesos en turno circular (round robin), a cada proceso se le asigna un tiempo conocido como quántum.

Una vez que un proceso utiliza su quántum aunque no haya terminado, la CPU pasa al siguiente.

(68)

Planificación sistemas

interactivos

Planificación por prioridad.

Múltiples filas.

(69)

Planificación de sistemas

interactivos

Planificación garantizada según los usuarios conectados. Planificación por sorteo.

Planificación por partes equitativas, primero el usuario con menos procesos.

Depende de los objetivos del sistema interactivo, ya sea un tiempo de respuesta rápido o atender a mas usuarios, se usa un método de planificación adecuado.

(70)

Planificación de tiempo real

El tiempo real duro es aquel en que se asigna un tiempo absoluto por cumplir.

El tiempo real suave se puede fallar en ocasiones en cumplir con un tiempo límite.

Un sistema en tiempo real puede responder a eventos periódicos (que suceden a intervalos regulares) o no periódicos (que ocurren de forma impredecible).

Los algoritmos de planificación estáticos son fijados antes de que el sistema se ejecute y los dinámicos van cambiando durante la ejecución.

(71)

Política contra mecanismo

A menudo sucede que un proceso padre tiene muchos procesos hijo, como en una base de datos.

El padre no puede decidir que proceso hijo es más importante, el planificador no acepta propuestas de los procesos.

Se debe separar el mecanismo de planificación de la política de planificación.

El kernel puede planificar a los procesos, pero el padre controla a sus hijos en un proceso de usuario.

Referencias

Documento similar

Y en el caso específico del CEDH, valor orientativo mediado por la jurisprudencia del TEDH (6). El derecho a la inviolabilidad del domicilio que proclama el artículo 18.2 CE

Tome como referencia la figura A, en la que las normas locales permiten conectar el hilo de TOMA DE TIERRA desde el horno hasta el hilo de NEUTRO del circuito de conexión (hilos de

Respecto a las enfermedades profesionales, en virtud del RD 1299/2006, de 10 de noviembre, por el que se aprueba el cuadro de enfermedades profesionales en el sistema de

El alumno/a podrá realizar un trabajo sobre alguno de los contenidos que se detallan en el apartado de contenidos del presente programa. También podrá realizar un ensayo sobre el

Artículo 8. Las solicitudes de reconocimiento presentadas, en las que se aleguen créditos obtenidos en títulos universitarios oficiales de Graduado, para la convalidación de

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

El nuevo Decreto reforzaba el poder militar al asumir el Comandante General del Reino Tserclaes de Tilly todos los poderes –militar, político, económico y gubernativo–; ampliaba

Se puede afirmar que los hilos temáticos que recorren la literatura nacida de la inmigración en las distintas sociedades de acogida giran alrededor de unos