Apuntes de Clase
Apuntes de Clase
Apuntes de Clase
Datos:
300 tarjetas por minuto
1.000.000 clientes (representados 1 por tarjeta)
5 ciclos por instrucción.
1 instruccion por lectura.
(1000000T / 5 T/seg) = 200.000 segundos = 3333 min = 55 horas en leer todas las tarjetas.
(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
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
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)
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
- Cada capa establece una interfaz para que la capa superior inmediata le haga solicitudes
- 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
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).
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.
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:
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:
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
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.
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.
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.
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:
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.
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.
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.
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.
28 de Abr. de 20
¿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.
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.
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:
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.
Algoritmo de Peterson:
Es el que funciona.
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.