Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Apuntes de Clase

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 16

24 de marzo de 2020

Datos:
300 tarjetas por minuto
1.000.000 clientes (representados 1 por tarjeta)
5 ciclos por instrucción.
1 instruccion por lectura.

¿Cuánto tiempo lleva leer las 1.000.000 tarjetas?

(1000000T / 5 T/seg) = 200.000 segundos = 3333 min = 55 horas en leer todas las tarjetas.

Mismo ejemplo con el CPU de nuestras maquinas:

Mi CPU = 2,5 GHz


suponemos 1000 instrucciones por tarjeta

(1.000.000 Tarj x 1.000 instrucciones)/2.500.000.000 Hz = 0,4 segundos en leer todas las tarjetas.

¿Qué pasa? Nos sobra mucho tiempo entre procesar entrada y salida y procesar una instrucción.
¿Cuál es la conclusión? La gran ineficiencia en el pasado, cuando se usaban tarjetas, era que el
procesador estaba mas tiempo esperando instrucciones, que ejecutándolas.

Ppt de introducción:

• Procesamiento en lotes:
o Automatización
o El dispositivo tiene la capacidad de acceder a la memoria del equipo
o SPOOL:

26 de marzo de 2020

Seguro saque apuntes por cuadernola y saque imágenes

Si un programa quiere leer algo, le da instrucciones al SO para leerlo, el SO utiliza el programa de canal
para darle instrucciones a DMA. El disco tiene un procesador de canal, acá es donde se le dice al dma
que leer y donde depositar la devolución.

31 de marzo de 2020

Visualizando el fondo de pantalla, pregunta que estamos viendo:

Abre el administrador de tareas: tarea exploradora de archivos: al finalizar no se ve el escritorio. Para


reiniciar: cmd y ejecutar explorer (“gtx” dentro del admin de tareas).

Pregunta ¿que estamos viendo? Estamos viendo la interfaz del programa “explorador de archivos”.
Después pregunta que es lo que vemos como “barra de tareas”, alguien: “es la última capa del sistema
operativo que te permite interactuar con todo el sistema”. (el sistema esta definido en capas)

Sistema operativo monolítico

Los programas solicitan cosas al SO, el SO responde y funcionan. Difícil de comprobar si tiene errores,
una falla hace que se caiga todo el sistema

Sistema en estratos o capas (Windows actual)

- Cada capa establece una interfaz para que la capa superior inmediata le haga solicitudes

Ley de grosck: si duplico la plata entonces el procesador se multiplica : $x2 = cpu2.

- Tengo un SO versión 3.2 , y queremos cambiar a la 3.3 entonces ¿qué o cómo hacemos?
o Backup de v3.2
o Instalar la versión nueva
o Ajustar todos los parámetros para que la configuración sea exactamente igual a versión
anterior
o Llamar a los usuarios para que prueben la nueva versión
o Cuando esta todo bien, se hace todo de nuevo para aplicar luego en producción
¿Que se le ocurrió a IBM en los 70 aproximadamente? Crearon las maquinas virtuales,
entonces los procesos de esta nueva VM, pero no hay discos ni los dispositivos, estos
están en el host.
o Que pasa cuando ejecuto una acción en mi VM por ejemplo de leer el disco, el único que
puede leer discos es el host, porque tiene privilegio o algo así, entonces la VM no puede
hacer eso, esto provoca una excepción, entonces el SO del host se va a dar cuenta que
es la VM la que quiere leer en disco y va y le hace el favor, ejecuta la entrada y salida a
pedido indirecto de la vm y le devuelve el dato donde el programa de canal decía que
tenia que recibir la respuesta, entonces el so del host va y le dice a la excepción que esta
todo bien. La vm no se entera que paso toda esa excepción.

La conclusión es que, lo que preciso hacer es, crear una maquina virtual con los ambientes de
producción en la versión 3.2, y creo otra maquina virtual con la versión 3.3 y hago la prueba ahí.

Pregunta, ¿no se pierde rendimiento cuando la vm quiere acceder a componentes que son del
host ? si, hay

Servicios del sistema operativo

Principales componentes para implementar las funcionalidades: administración de; procesos, memoria
principal, archivos, sistema de entradas y salidas, almacenamiento secundario, comunicaciones. Sistema
de protección, interfaz con el usuario o interprete de comandos (terminal, shell).

Con esto se ha terminado la introducción de sistemas operativos


Procesos
¿que es un proceso? Un archivo que termina en .exe es un ejecutable.

Compliar un programa: ¿cual es el resultado? Es algo que en tiempo de ejecución esta mirando todas las
líneas del programa y decidiendo que tiene que hacer, normalmente llamar librerias y métodos que
tratan sobre objetos.

- Interpretar: es en tiempo real.


- Compilar: es leer el código, es estático. Son los que terminan en .exe además se usan las
librerias que andan por ahi terminadas en .dll

La dif de un programa que esta ejecutando y uno que no se ejecuta,

La diferencia entre el programa y el proceso es que el programa no tiene vida, esta esperando que se
cargue en la memoria y se le otorguen los recursos necesarios para ejecutar como ser memoria, le
demos un contexto de ejecución, compuesto por registros de procesador, el stackpointer el program
counter y demás cosas que precisa para ejecutar. El proceso se carga en la memoria de la maquina y
tiene todo lo necesario para poder ejecutar el programa.

Del sistema operativo vamos a necesitar la capacidad para crear estos procesos, para poder otorgarle al
procesador .. y capacidad para resolver conflictos cuando dos procesos necesitan acceder a lo mismo o
hacer lo mismo como imprimir y que no salga uno arriba del otro.

Tres componentes:

- Planificador de procesos: establece quien se va a ejecutar en que momento, en que orden se


hará
- Sincronización: cuando comparten o compiten recursos como disco, dispositivos etc, quien
escribe o graba en cada uno de ellos. Para esto hay dispositivos que se pueden compartir y otros
que no se pueden compartir. Por ejemplo, ¿puedo compartir una pantalla? Si, pero la impresora
no se puede compartir. Por ejemplo el disco esta siendo usado
- Comunicación entre procesos: hay dos tipos inter-procesos que se da a través de memoria
compartida; por ejemplo cuando realizo una búsqueda o algo y pongo un pipe, y el otro tipo es
comunicación indirecta, mainbox o algo así,
Modo de un proceso
Pueden ser de usuario o del sistema operativo, el modo usuario es lo que normalmente ejecutamos
nosotros, los del sistema operativo ejecutan como modo privilegiado o algo así,
Componentes de un proceso
Un proceso es algo mas que su código ejecutable:
- Código de programa (tambien conocido como texto)
- Estado, compuesto por el program counter y registros como contexto, y una sesión de datos
Forma de escribir programa: tradicionalmente era una columna sola de código, ahora se usa una
estructura separada en diferentes modulos, modular digamos, mucho mas eficiente.
La diferencia del modelo tradiciona con el que se usa ahora, es que el que se usa ahora precisa registros
stacks tantos como hilos tenga.
6 procesadores pueden ejecutar 12 hilos a la vez.

Concepto de reentrancia
Supongo S.O. de 32 bits. ¿Cuánta memoria puedo tener con 32 byts? De 0 a (232 – 1 ) o sea máximo
4GB. Esto quiere decir que si tengo una instrucción x ( x = load R1, MEM. cargar el registro 1 de la
memoria) esto tiene que estar en algún lugar de la memoria que tengo acotada a 4 gb. No puedo ir a
otro lugar que no sea dentro de esa posición de la memoria.
Normalmente tengo al SO en alguna posición baja de la memoria (cero por ejemplo) porque quiero que
sea lo primero que se cargue. Entonces cual seria el programa mas grande que podemos escribir? Aquel
que sea de 4gb menos lo que ocupa el sistema operativo. El que ocupa desde el lugar x hasta 4gb,
siendo la x donde termina el sistema operativo y siendo x mayor a cero porque en cero comienza el
sistema operativo. ¿Qué pasa si tengo más procesos corriendo? Puedo partir la memoria, y por lo tanto
la capacidad de mi programa desde x a 4gb queda limitado a la cantidad de programas que haya,
cuantos más procesos hayan ejecutándose, menos memoria tendré.
¿Entonces como ponemos múltiples procesos y que además utilicemos los 4 gb? La forma seria dividir
en columnas. Para que cada proceso pueda tener para si los cuatro gb:

C = código, D = datos. 4gb por cada proceso, es mayor a la memoria real.


Arrancamos acá la clase que viene. Es como hace el SO para ingresar a datos que no son reales.
02 de Abril de 2020
La memoria que utiliza un programa, ¿es contigua? No tiene por que serlo.
[ DATOS ]
[ STACK ]
[ CODIGO ] → esta porción del programa es readonly
¿Hay algo que separe estas tres partes? Imaginemos un while mal escrito que no termina nunca, la
pregunta es, ¿el código se puede escribir? No, porque si el programa fuera escribible, cualquier virus se
podría meter y modificarlo y escribir cosas que no fue lo que se había pensado. Entonces la respuesta,
es que la parte del código es readonly y esta separado de la parte anterior.
¿Datos y stack están separados? Algunos sistemas no contorlan estas áreas, sino que uno crece en un
sentido (stack hacia arriba y datos hacia abajo) y cuando se tocan salta error stack-over-flow, otros
sistemas operativos si separan estas dos áreas.

Concepto de Reentrancia.

P = procesos.
En el stack se guardan los contextos y puedo cambiar de un proceso a otro como si cada proceso tuviera
las 4 gigas para funcionar.
Concepto de “paginas”. Función en el SO de forma tal que los 512 MB , se repartan en todos los
programas y todos tengan un poquito. “fallo de página” : no encuentro eso acá, entre las paginas,
entonces el ssoo se lo tiene que dar. Nunca habíamos ido a esas posiciones de memoria, entonces no lo
tenía y por eso dio el fallo.
Memoria real y memoria virtual (no existe). En cada posición de la memoria real tu ajustas las posiciones
para que los desplazamientos coincidan con los desplazamientos que habrían en la memoria virtual, si
estamos accediendo a un lugar que nunca existió porque mi programa nunca accedió, entonces se lo
creo con un ajuste, un mapeo de página. (esto lo vamos a ver bien con el otro profesor, la idea es
entender por que tenemos memoria virtual, la real siempre es mas escasa que la virtual, de esta forma
yo permito que ucualquier programa tenga disponible los 4gb de memoria menos lo que ocupa el
sistema operativo. Sino , de otra manera, estoy limitado a lo que me queda de memoria.

Lo importante, como conclusión: Los programas son de solo lectura, para poder ser compartidos, y
están ubicados en memoria compartida para que puedan ser accedidos por todos los procesos. Y
después cada proceso puede tener su contexto porque van cargando sus contextos sus stack sus
programa counter etc. la ejecución de cada programa es diferente porque cada uno tiene su propio
contexto.

14 de Abril de 2020

Repaso (ppt administración de procesos):

Concepto de reentrancia: la idea es terminar de entenderlo mas adelante. En cada proceso, puedo
utilizar el mismo programa de lectura, y como es la misma versin para cada uno y cada proceso tiene su
stack, su program counter, sus datos y su contexto, me permite hacer esto. Los sistemas modernos
aplican reentrancia.

Concepto de hilos: son procesos que tienen mas de un hilo por cada proceso.

De esta manera, los tres hilos comparten


los datos y genera practicidad, pueden
sincronizarse, o compartir algo es mas
fácil. Es menos costoso.

Concepto bloque de control de proceso: el administrador de tareas nos muestra la lista de procesos con
la información de cada uno de los bloques. Que tiene? El numero de identificación PID, el estado actual
del proceso, el contexto, informacion para planificación, información de la memoria, cuanta memoria
usa cuantos recursos e informacion de los dispositivos de entrada/salida etc

Crear un proceso
Que es el dobleclic? Que es trackear? Que es el usb?

Tenemos el dispositivo mouse, lo que hace es que nos va a enviar una serie de bits y en algún momento
manda interrupciones “atende lo que te mande”.
Se utilizan dos bits para decir si es + o – y en que posición si es x o y. Además, necesito un bit mas para
los botónes, entonces llegan los 00101010 y se traduce como +1
x +1y +1x +1x +1x -1y y un botón. Entonces cuando llega esta instrucción, lo que hace es borrar la
imagen del mouse y dibujarla un lugar mas a la x. así hasta que en un momento deja de moverse y llega
a un lugar donde hace clic. El doble clic son dos clic seguidos, medidos con una diferencia x de intervalos
de tiempo, como mido esto? Con un timer, con que velocidad según la configuración del mouse, si
pongo la flechita cerca del “lento” entonces el timer espera más tiempo al segundo clic, si lo pongo en
rápido, el timer llega a cero mas rápido y el intervalo de tiempo para hacer el segundo clic es menor. Al
hacer clic en el icono, interpreta las propiedades y ve que programa tiene que ejecutar.

Operaciones sobre procesos


Normalmente los procesos pueden crear procesos hijos. Algunos requieren que el padre exista. La idea
de suspender los procesos es que liberen recursos. Tambien puede ocurrir es que un proceso se
reanude, esto suele ser una forma en ela que el sistema operativo regula los recursos para no tener una
crisis de recursos y que los procesos que están funcioanndo puedan continuar.

Diagrama de transición de estados


Antes de que el proceso exista hay una intención de que exista, alguen le esta pidiendo al SSOO que
entre el proceso. Esto se llama “admitir” el proceso. Puede tener alguna regla que permita o niegue que
el proceso comience como por ejemplo, en Windows normalmente no hay condiciones pero puede
pasar que en algún omento te diga esto no o esto si, (ejecutar como administrador por ejemplo) una vez
que esta admitido, el proceso esta listo, tiene la memoria los datos todo, lo que pasa de “listo” a
“ejecutar” el proceso se llama “despachar” es lo que toma un proceso listo de una cola, y lo pone a
ejecutar. Hay un mecanismo para elegir cual se va a ejecutar, a este mecanismo se le llama
“planificacion de cpu/ o de procesador/ o de corto plazo”. Después puede pasar una o dos cosas; que es
lo que hace el programa normalmente? Tiene instrucciones y requiere algún dato, normalmente hay
una solicitud o de entrada o de salida, o imprime o graba o muestra algo lo que sea, o sea cuando
termina la E/S ahi puede continuar. Resumiendo seria: Instrucciones + E/S + instrucciones + Fin. El
programa esepra hasta que termina el proceso E/S, también espera que el cpu termine de ejecutar las
instrucciones. Y así hasta que llegue a fin. Resumen:

esto es lo normal hasta que el


programa ejecuta la interrupción para
terminar. Es la forma de indicar que
termino, libera la memoria del
programa, los datos, elimina el
bloque de procesos y termina.

Flechita opcional: suponemos que


tenemos un defecto en el programa y
consume procesador, suponemos que
tiene un loop. Entonces pasaría que
no terminaría nunca, pero entonces el
opcional tiene un timer, donde esta bien te dejo ejecutar pero no para siempre, si tenes algún loop
entonces el timer este va a llegar a cero y lo va a finalizar. Si el timer termina, retiro el programa que se
esta ejecutando, lo pongo en listo y sigo con otro proceso. Siempre se salva el contexto aunque lo
mande a listo.

Procesos suspendidos liberan memoria, incluyendo lo suspendido:

Concepto de un proceso con múltiples hilos – no saque apuntes. Ver ppt.

Ejercicios de sincronización de procesos

Implementación en java: una vez que tengamos una clase hilo (thread) incluimos el método run (). Esta
es la forma mas fácil de crear un hilo.

Una vez creado un hilo, tenemos los métodos: start (inicia la ejecución del run), sleep (bloquea el hilo
por el tiempo especificado), isAlive (testea si el hilo esta vivo, es decir, ejecuto start y aun no termino de
ejecutar), wait (me quedo esperando por que alguien me notifique, hermano del método notify, podría
tener un parámetro para indicar el máximo de espera) etc.

Tratar de hacer el “hola mundo” y una respuesta con “hola hilo xxxx” .
16 de abril de 2020

Un proceso cooperativo es aquel que puede afectar o ser afectado por otros procesos ejecutando en el
sistema. Esto seria yo hago una cosa vos haces otra y cuando todos terminemos nos juntamos. Motivos:
compartir información, aumentar la velocidad de computo, es decir, dividir en
subprocesos que se ejecuten en paralelo, modularidad seria construir un sistema combinando
diferentes componentes a la hora de ejecutar, y por conveniencia que seria la necesidad de ejecutar
varias tareas al mismo tiempo.

Un proceso competitivo, en este caso se tienen que organizar para no pisarse entre ellos. En estos casos
se requiere un orden.

Cosas que se pueden compartir: memoria, objetos, disco, ram, red


Cosas que no se pueden compartir: teclado, mouse, impresora

Para los que no puedo compartir, necesito mecanismos que los protejan.

Problemas de sincronización-cooperación

Esto se puede dar o justificar porque los procesos consumidor y productor vayan a velocidades distintas.

El problema podría ser querer leer lago que todavía no existe, o querer consumir y producir lo mismo .
esos serian los problemas que habría que controlar.
Problemas de competencias

En el ejemplo, ¿qué pasa si dos personas sacan plata al mismo tiempo? Código:

Si se ejecutan exactamente en el mismo


momento en ambos cajeros, entonces si
uno no espera a que el otro termine, el
saldo va a dar 0 cuando debería ser -
10.000.

El saldo es un dato en común, deberían


esperar a que termine un proceso para
poder trabajar el otro.

Por lo tanto, hay que proteger los datos


compartidos.

Primero hay que definir qué cosas van a ser compartidas, en este caso el saldo y después hay que
definir, que pasa, si cuando entra el segundo proceso, tiene que quedar en espera hasta que el proceso
uno termine o sino lo otro que se puede hacer es que cuando se inicia el proceso 2, mate al proceso 1.

La opción 1 método pesimista, donde el proceso 2 espera a que el proceso 1 termine de usar ese valor,
se llama “pesimista”. Se pone en wait hasta que el proceso 1 avisa que termino. Se llama pesimista
porque paro por las dudas, por si el proceso 1 cambia a la variable que yo ya tome, y por lo tanto para
evitar un posible problema, espero.

La opción 2 método optimista, donde el proceso 2 mata al proceso 1, se llama optimista. Los dos
procesos se van ejecutando, los dos obtienen el saldo 10.000, trabajan, pero cuando el proceso 2 va a
actualizar el saldo, ya se da cuenta que el proceso 1 lo cambio, y ahora el saldo es 0, entonces lo que
pasa es que el proceso 2 se “suicida” y comienza de nuevo, pero con saldo 0. Esto sería fundamentado
dado que el proceso 1 es mas viejo y por lo tanto avanzo mas que el proceso 2, por eso es por lo que se
sacrifica el mas joven. En este caso sería el 2. Se llama método optimista porque continuo esperando
que no vaya a suceder ningún conflicto, y si sucede o me sacrifico yo o el otro proceso.

Estado inicial → → → Estado final

Acá los datos son [Ejecución de mi programa] Si el programa es correcto al


consistentes, los demás finalizar también quedara en
programas dejaron los datos un estado consistente.
luego de trabajar con ellos.

El objetivo, es que dado cualquier ejecución concurrente de procesos, tome el estado de mi sistema que
esta consistente y al finalizar lo deje en otro estado consistente también. Esto es lo que se quería
mostrar hoy con el banco que la ejecución de mas de un proceso debería dejar los datos de manera
consistente.

En el metodo pesimista, el proceso segundo se tranca hasta que el primero termine. Compiten por el
saldo bueno el proceso 2 debe esperar a que finalice el proceso1 porque yo ocurrí más tarde en el
tiempo. Cuando termina, entonces ahí efectivamente leo el saldo con el valor que salió del proceso 1.

Hay tres formas de hacer esto:

1. Sincronización de procesos:
2. Señalización entre procesos: es un esquema de señales que depende del sistema operativo,
entonces defino la señal “saldo” a nivel de ssoo, y el primero que pide para usarla, marca la
señal y cuando termina aviso y el sistema operativo agarra al siguiente de la lista
3. Comunicación entre procesos: que mi programa quede esperando un mensaje que diga que
puedo seguir, entonces en este caso el proceso 1 debería avisarle al proceso 2 que ya puede
seguir. Clásico ejemplo del walkie-tokie. Los procesos se comunican entre si con funciones
send() y reciv(). Cuando hace el reciv se queda esperando

Propiedades:

• La parte del código que tiene que utilizar un proceso a la vez se define con la exclusión mutua
seria como cuidar esa parte del código que es una sección critica.
• Si no hay ningún hilo I ningún proceso utilizando la sección critica del programa, entonces no
debería detenerme. La espera en este caso para preguntar si puedo entrar, es finita. Esto se
programa de forma tal que si nadie lo esta usando tengo que poder entrar.
• Si alguien ya esta usando el proceso, el tiempo de espera para poder usar la parte del código
que es crítica, debe ser finito. No debo esperar para siempre.
Supongo que tenemos un solo procesador, puedo asumir que como lo uso yo no lo usa mas? No, una
interrupción por cualquier cosa como por ejemplo alguien movió el mouse, entonces el proceso se va y
entra otro. Tener un único procesador no es garantía, sin importar la velocidad del cpu. Es decir, la
existencia de interrupciones no me va a garantizar la exclusión mutua.

Hay exlusion mutua?

Parece que si pero no hay.

¿Cual es la única forma para


cambiar de un proceso a otro?
Con una interrupción. La única
forma de que me saquen para
darle la mano al otro proceso,
es con una interrupción. No
hay otra manera de salir del
procesador a no ser que me
interrumpan.

Entonces este programa no tiene exclusión mutua.

Que pasa si el programa ejecuta la interrupción JUSTO ENTRE EL WHILE y LA ASIGNACION. Así los dos
procesos continuarían con L = 0. Entonces si justo pasa eso, ese día los dos procesos corren
simultáneamente porque obtuvieron L = 0 como en el caso del banco.

Esto es un problema de concurrencia.

28 de Abr. de 20

Repaso de clase pasada: siguiendo el ejemplo del banco.

Problemas de sincronización – cooperación.

exclusión mutua y sección critica.

¿Pueden entrar dos procesos al mismo tiempo en el ejemplo del banco? La respuesta es si, porque si
justo entra un proceso entre el while y la asignación de L == 1.

Esto se debe porque el while , en realidad es un conjunto de instrucciones de maquina bastante mas
largas que un único renglón, y se puede dar que el segundo proceso intente interrumpir en varios
lugarles.

Progreso: seria que si alguien esta en el código que no es critico, entonces no se evite que alguien entre.
espera limitada: seria que, hice mal la selección del código crítico.

Ejemplo, ppt con segundo acercamiento y proceso 1 y proceso 2.

Este código no cumple la propiedad de : progreso. Quero entrar en la parte critica y no hay nadie
usándola pero no me deja entrar.

En este caso, ¿pueden entrar dos a la misma vez? Respuesta: no, porque el turno tiene un valor solo, no
puede tener dos valores. En este caso no.

Supongo que tengo una maquina con dos procesadores (cpu1 y cpu2) conectados a un buss. Por otro
lado tengo la memoria. L va a estar en algún lugar de la memoria. Entonces cuando uno de los
procesadores va a buscar a L, cuando ambos intentan hacer Load R2,L. o sea lo van a buscar. Pero el bus
lo puede tener un procesador a la vez, no pueden ser los dos al mismo tiempo, por lo tanto acceder a la
memoria lo puede hacer un único procesador a la vez. El bus hace eso, acceso al buss solo 1. (¿Dónde
esta la trampa?) Los procesadores para acelerar la ejecución suelen tener un cache incluido en los
procesadores (de pocos megas) para ir trayendo posiciones de memoria con antelación o guardando
valores que uso para no tener que ir nuevamente a la memoria. O sea que el valor de L lo mas probable
es que este en los dos cache, entonces los dos podrían tener el mismo valor de L en el cache, o diferente
al que esta en la memoria también. ¡Esto no puede ocurrir! Una vez que alguien intenta modificar el
valor de algo en la memoria, si los procesadores tienen eso guardado en el cache entonces se va a
flagear como invalido, y no van a poder ser usados.

Así que 1 procesador a la vez puede recuperar el valor de L.

Espera activa (primer acercamiento):

No puedo tener soluciones, que la forma de


averiguar si puedo entrar es cnosumiendo
procesador, porque nadie va a cambiar la
condición si estoy usando el procesador. Algo así.
Tengo que tener una solución en la cual el proceso
se bloquee o espere por que ocurra una
interrupción.
Sección critica: un solo proceso por vez puede modificar variables compartidas en su sección critica. Se
requiere una lógica arbitraria desarrollada por el programador:

- Se tiene que considerar que varios procesos pueden requerir el servicio


- Se debe evitar que ningún proceso gane el control
- Se debe considerar que un solo proceso puede…

Una critica al primer acercamiento: es que el momento en el que pregunto , y el momento en el que
tranco el acceso al código critico, no son mismos instantes. En el otro caso (el segundo acercamiento), es
al revés, no te dejo entrar si el otro no puso la L en 1. Este caso es al revés completamente, por las
dudas no dejo entrar a nadie, era aquello de alternancia.

Tercer acercamiento:

¿Qué pasa si ejecutan los dos al mismo


tiempo?

No entra ninguno, porque quedan los


dos en true y no cambian mas.

La idea es que tengo 1 proceso y 2


hilos. Tengo una variable global que
quiere entrar con dos hilos.

Le hago start a los dos hilos. Los dos ponen en true, los dos en paralelo, dicen que su posición en el
vector quiero entrar es true, si el otro esta en true me quedo esperando, y como salgo de ahí? Queda
infinito, esto se llama deadlock o abrazo mortal. Es cuando uno espera por el otro y el otro por el otro,
entonces la condición para salir no se da nunca.

Este tampoco funciona.

Algoritmo de Peterson:

Es el que funciona.

Como hay un and, si se dan las dos


condiciones hago el cambio.
Supongamos función Test and Set Lock

Si venia en F o V, sale igual, pero la variable sc siempre queda en TRUE. Entonces siempre devuelve
verdadero, una vez que se ejecuta queda en loop. La primera vez pasa porque viene en falso pero la
segunda va a estar siempre en true.

Semáforos:

Pide al sistema operativo, prendete apágate. Con un par de llamadas permite prender las luces. Además
de los semáforos hay una lista de procesos esperando por el semáforo, de forma de que no haya que
esperar de forma activa, se pasa a una lista de prcesos bloqueados esperando por el semáforo, no se
dejan ejecutando sino que se sacan del procesador y se mandan a la lista de procesos bloqueados,
esperando a que el semáforo se ponga en verde, cuando pasa eso, va y toma un proceso de la lista y lo
toma (con algún criterio) elige uno y lo libera y lo pone en la cola de procesos listos.

30 de Abril de 2020

Los métodos synchronized son métodos que bloquean un objeto para un hilo en particular, entonces el
sistema pone a los demás hilos que quieren acceder al mismo método con el mismo objeto, en espera.
Acá lo que pasa es que el método entero es como si fuera código critico.

También podría gustarte